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

文章目录

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

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

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

    线性电压转换模块


    模块引脚定义和电位器说明如下:

    ①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++);
    }
    
    
    

    实验效果


    每按压一次薄膜压力传感器,按压次数加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薄膜压力传感器压力变化进行测量压力、压力检测。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 51和32单片机实现FSR薄膜压力传感器压力变化的读取

    发表评论