压力传感器资料
本传感器所附带的hx711程序,仅供参考。
纯属赠送,不提供指导!
用途与特点:适合学生实验,DIY电子设计,广泛用于小型电子计价秤、计重秤等。
传感器量程:10kg,20kg,40kg可选择,其外观、尺寸、参数都一样,只是量程不一样。
参考接线方法: 红线(传感器电源输入) 接E+ 白线(传感器电源地) 接E- 绿线(差分信号输出-) 接A- 黑线(差分信号输出+) 接A+ 特别注意:传感器属于精密部件,剧烈振动、自由落体、碰撞、过载、过压等等,都非常容易造成传感器永久损坏或者影响精度和线性,您如果对该部件没有一定的了解,请慎重购买。毕竟该部件比起电阻 电容 三极管等其它电子部件要脆弱的多。
参数说明:
参数表中,灵敏度:2.0mv/v 的含义是:假如供电电压是5.0v,当传感器满量程的时候,绿色、黑色线之间有2.0mv/v * 5.0v=10mv的差分电压输出。例如:传感器的量程是10kg,供电电压是5v,那么这个传感器在受力10kg的时候,绿色、黑色之间输出有2.0mv/v * 5.0v=10mv的压差。
工作原理:
电阻应变式压力传感器主要由弹性体、电阻应变片电缆线等组成,内部线路采用惠更斯电桥,当弹性体承受载荷产生变形时,电阻应变片(转换元件)受到拉伸或压缩应变片变形后,它的阻值将发生变化(增大或减小),从而使电桥失去平衡,产生相应的差动信号,供后续电路测量和处理。
当垂直正压力P作用于梁上时,梁产生形变,电阻应变片R1、R3受压弯拉伸,阻值增加。R2、R4受压缩,阻值减小。电桥失去平衡,产生不平衡电压U,电压U与作用在传感器上的正压力P成正比,从而将非电量转化为电量输出。
示意图如下:
hx711压力传感器的电路原理图:
单片机源程序如下:
- /**************************************************************
-
- 实现功能:电子称称重测试程序
- **************************************************************/
- #include <reg52.h>
- #include <intrins.h>
- #include <string.h>
- #include "lcd.h"
- #include "hx711.h"
- //定义量程系数
- #define RATIO 1349/1000 //1574/1000 //2114/1623
- //定义标识
- volatile bit FlagTest = 0; //定时测试标志,每0.25秒置位,测完清0
- //管脚定义
- sbit LedA = P2^2;
- sbit beep = P1^0;
- sbit alert = P1^1;
- //显示用变量
- int Counter;
- uchar idata str1[6] = "000000";
- int i, iTemp;
- //称重用变量
- unsigned long idata FullScale; //满量程AD值/1000
- unsigned long AdVal; //AD采样值
- unsigned long weight; //重量值,单位g
- uchar DotPos; //小数点标志及位置
- int bak_num=1;
- char code tb3[]="重量: kg";
- //整型转字符串的函数,转换范围0--65536
- void int2str(int x, char* str)
- {
- int i=1;
- int tmp=10;
- while(x/tmp!=0)
- {
- i++;
- tmp*=10;
- }
- tmp=x;
- str[i]='\0';
- while(i>1)
- {
- str[--i]='0'+(tmp%10);
- tmp/=10;
- }
- str[0]=tmp+'0';
- }
- //重新找回零点,每次测量前调用
- void To_Zero()
- {
- FullScale=ReadCount()/1000;
- }
- //显示重量,单位kg,两位整数,三位小数
- void Display_Weight()
- {
- unsigned int i,j;
-
- display_GB2312_string(3,60," ");
- //weight单位是g
- i = weight/1000; //得到整数部分
- j = weight - i*1000;//得到小数部分
- int2str(i,str1);
- if (i>=10)
- {
- display_GB2312_string(3,60,str1);
- }
- else
- {
- display_GB2312_string(3,68,str1);
- }
- display_GB2312_string(3,76,".");
- int2str(j,str1);
- if (j<10)
- {
- display_GB2312_string(3,84,"00");
- display_GB2312_string(3,100,str1);
- }
- else if (j<100)
- {
- display_GB2312_string(3,84,"0");
- display_GB2312_string(3,92,str1);
- }
- else
- {
- display_GB2312_string(3,84,str1);
- }
- }
- //数据初始化
- void Data_Init()
- {
- DotPos = 0;
- beep = 1;
- alert = 1;
- }
- //定时器0初始化
- void Timer0_Init()
- {
- ET0 = 1; //允许定时器0中断
- TMOD = 1; //定时器工作方式选择
- TL0 = 0x06;
- TH0 = 0xf8; //定时器赋予初值
- TR0 = 1; //启动定时器
- }
- //定时器0中断
- void Timer0_ISR (void) interrupt 1 using 0
- {
- TL0 = 0x06;
- TH0 = 0xf8; //定时器赋予初值
- //每0.25秒钟刷新重量
- Counter ++;
- if (Counter >=100)
- {
- FlagTest = 1;
- Counter = 0;
- }
- }
- //===============main program===================//
- void main(void)
- {
- Rom_CS=1;
- initial_lcd();
- EA = 0;
- Data_Init();
-
- Timer0_Init();
- //初始化完成,开中断
- EA = 1;
- //背光
- LedA = 1;
- clear_screen(); //clear all dots
- To_Zero();
- To_Zero();
- display_GB2312_string(3,1,tb3);
- while(1)
- {
- //每0.5秒称重一次
-
- //称重,得到重量值weight,单位为g
- AdVal=ReadCount();
- weight=FullScale-AdVal/1000;
- if (weight>0x8000) weight=0;
- weight=15000*weight/FullScale;//校准值
- weight=weight*RATIO;
- Display_Weight();
- //如果超量程,则报警
- if (weight >= 10000)
- {
- beep = 0;
- alert = 0;
- }
- //如果不超量程
- else
- {
- beep = 1;
- alert = 1;
- //显示重量值
- Display_Weight();
- FlagTest = 0;
- }
- delay(80);// 重量的亮度
-
- }
- }
复制代码
所有资料51hei提供下载:
压力传感器资料.zip
(413.81 KB, 下载次数: 429)
|