51和32单片机读取FSR薄膜压力传感器压力变化

文章目录

  • 简介
  • 线性电压转换模块
  • 51单片机读取DO
    • 接线方式
    • 51代码
    • 实验效果
  • 32单片机读取AO
    • 接线方式
    • 32代码
    • 实验效果
  • 总结

简介

51和32单片机读取FSR薄膜压力传感器压力变化_第1张图片

FSR薄膜压力传感器是可以将压力变化转换为电阻变化的一种传感器,单片机可以读取然后作为粗略测量压力(仅提供压力变化,不适合做绝对值的具体数值计算)、压力检测等应用,压力越大电阻越小。从外观上看可以分为两种类型:梳装和全面银,梳装顾名思义就是外观像梳子一样,全面银就是正反面都是一样的表面没有纹路。本文使用的是梳装FSR薄膜压力传感器。
不同的型号所测量的量程不同,在量程、尺寸上有多种可选,具体可参考下图,长短尾只是引脚线长度的区别,其他参数没有区别。本文用到的型号是RP-C18.3-ST、外径18mm短尾。最大能测量6kg。
51和32单片机读取FSR薄膜压力传感器压力变化_第2张图片

只用一个压力传感器还不能被单片机直接读取,还要结合线性电压转换模块输出模拟量/数字量。

线性电压转换模块

51和32单片机读取FSR薄膜压力传感器压力变化_第3张图片
模块引脚定义和电位器说明如下:
51和32单片机读取FSR薄膜压力传感器压力变化_第4张图片

①VCC 供电电压正极(5V)
②GND 供电电压负极
③DO 高电平信号输出
④AO 模拟电压信号输出(0-3.3V)
AO-RES 放大倍数调节电位器
DO-RES 比较阈值调节电位器

使用单片机读取AO引脚,可以做有无压力、压力趋势变化和粗略测量压力值的应用,AO-RES可以调节输出模拟电压值的范围增益灵敏度,AO引脚的都是通过这个AO_RES去调整输出精度。

使用单片机读取DO引脚,可以做是否有压力的应用,DO-RES可以调节DO输出的阈值,当压力大于调节阈值时,DO引脚输出高电平,DO_LED点亮。当压力小于设定的阀值时候,DO引脚输出低电平,DO_LED熄灭。

//下面4项内容需要根据实际型号和量程修正

//最小量程 根据具体型号对应手册获取,单位是g,这里以RP-18.3-ST型号为例,最小量程是20g
#define PRESS_MIN   20
//最大量程 根据具体型号对应手册获取,单位是g,这里以RP-18.3-ST型号为例,最大量程是6kg
#define PRESS_MAX   6000

//以下2个参数根据获取方法:
//理论上:
// 1.薄膜压力传感器不是精准的压力测试传感器,只适合粗略测量压力用,不能当压力计精确测量。
// 2. AO引脚输出的电压有效范围是0.1v到3.3v,而实际根据不同传感器范围会在这个范围内,并不一定是最大值3.3v,也可能低于3.3v,要实际万用表测量,
//  例程只是给出理论值,想要精确请自行万用表测量然后修正以下2个AO引脚电压输出的最大和最小值
//调节方法:
//薄膜压力传感器的AO引脚输出的增益范围是通过板载AO_RES电位器调节实现的,
//想要稍微精准点,需要自己给定具体已知力,然后调节AO_RES电位器到串口输出重量正好是自己给定力就可以了
#define VOLTAGE_MIN 100
#define VOLTAGE_MAX 3300

下面演示用51单片机读取DO做压力检测,使用32单片机读取AO做测量压力应用。

51单片机读取DO

接线方式

STC89C52 FSR
5V VCC
GND GND
P1.1 DO
STC89C52 LCD1602
P2.0-P2.7 DB0-DB7
P0.5 RS
P0.6 RW
P0.7 EN

51代码

#include "main.h"
#include "LCD1602.h"



//定义变量
unsigned char KEY_NUM = 0;   
int count = 0;
int state = 0;
	

//****************************************************
//主函数
//****************************************************
void main()
{
	Init_LCD1602();
	LCD1602_write_com(0x80);
	LCD1602_write_word("welcome to use!");
	while(1)
	{
    	scanSensor();
		if(KEY_NUM == 1)
		{
			KEY_NUM = 0;
			LCD1602_write_com(0x80+0x40);
			LCD1602_write_word("count =");
			LCD1602_write_data(count%10000/1000+0x30);
			LCD1602_write_data(count%1000/100+0x30);
			LCD1602_write_data(count%100/10+0x30);
			LCD1602_write_data(count%10+0x30);

			count++;
			
			if(state == 2)
			  state = 0;
		}

	}
}

void scanSensor()
{
//	SENSOR = 1;
	if(SENSOR == 1)
	{
		Delay_ms(10);
		if(SENSOR == 1) 
		{
		  while(SENSOR == 1);
		  KEY_NUM = 1;
		} 
	}
}


//****************************************************
//MS延时函数
//****************************************************
void Delay_ms(unsigned int n)
{
	unsigned int  i,j;
	for(i=0;i<n;i++)
		for(j=0;j<123;j++);
}


实验效果

51和32单片机读取FSR薄膜压力传感器压力变化_第5张图片
每按压一次薄膜压力传感器,按压次数加1,显示在LCD屏幕上。

32单片机读取AO

接线方式

STM32 FSR
5V VCC
GND GND
PA1 AO
STM32 USB转TTL
3.3V VCC
GND GND
TXD RXD
RXD TXD

32代码

#include "stm32f10x.h"
#include "delay.h"
#include "FSR.h"
#include "usart.h"
#include "adc.h"

//下面4项内容需要根据实际型号和量程修正

//最小量程 根据具体型号对应手册获取,单位是g,这里以RP-18.3-ST型号为例,最小量程是20g
#define PRESS_MIN	20
//最大量程 根据具体型号对应手册获取,单位是g,这里以RP-18.3-ST型号为例,最大量程是6kg
#define PRESS_MAX	6000

//以下2个参数根据获取方法:
//理论上:
// 1.薄膜压力传感器不是精准的压力测试传感器,只适合粗略测量压力用,不能当压力计精确测量。
// 2. AO引脚输出的电压有效范围是0.1v到3.3v,而实际根据不同传感器范围会在这个范围内,并不一定是最大值3.3v,也可能低于3.3v,要实际万用表测量,
// 	例程只是给出理论值,想要精确请自行万用表测量然后修正以下2个AO引脚电压输出的最大和最小值
//调节方法:
//薄膜压力传感器的AO引脚输出的增益范围是通过板载AO_RES电位器调节实现的,
//想要稍微精准点,需要自己给定具体已知力,然后调节AO_RES电位器到串口输出重量正好是自己给定力就可以了
#define VOLTAGE_MIN 150
#define VOLTAGE_MAX 3300

u8 state = 0;
u16 val = 0;
u16 value_AD = 0;

long PRESS_AO = 0;
int VOLTAGE_AO = 0;

long map(long x, long in_min, long in_max, long out_min, long out_max);

int main(void)
{		
	delay_init();	
	NVIC_Configuration(); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	uart_init(9600);	 //串口初始化为9600
	Adc_Init();

	delay_ms(1000);

	printf("Test start\r\n");
	while(1)
	{
		value_AD = Get_Adc_Average(1,10);	//10次平均值
		VOLTAGE_AO = map(value_AD, 0, 4095, 0, 3300);
		if(VOLTAGE_AO < VOLTAGE_MIN)
		{
			PRESS_AO = 0;
		}
		else if(VOLTAGE_AO > VOLTAGE_MAX)
		{
			PRESS_AO = PRESS_MAX;
		}
		else
		{
			PRESS_AO = map(VOLTAGE_AO, VOLTAGE_MIN, VOLTAGE_MAX, PRESS_MIN, PRESS_MAX);
		}
		printf("AD值 = %d,电压 = %d mv,压力 = %ld g\r\n",value_AD,VOLTAGE_AO,PRESS_AO);	
						
		delay_ms(500);
	}

}


long map(long x, long in_min, long in_max, long out_min, long out_max) {
 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}


实验效果


按压薄膜压力传感器,在串口助手可以读取到AD值、电压值、压力值等参数。使用的是外径18mm短尾的型号,压力值最大显示为6000g。

总结

本文介绍了通过两种单片机,即STC89C52单片机和STM32F103单片机,来读取FSR薄膜压力传感器压力变化进行测量压力、压力检测。

你可能感兴趣的:(单片机,嵌入式硬件)