文章目录
简介
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熄灭。
c
//下面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代码
c
#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代码
c
#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薄膜压力传感器压力变化进行测量压力、压力检测。