Proteus实现电子秤仿真与称重检测显示
- 测量原理(或设计方案)
- 原理图
- 代码
测量原理(或设计方案)
数字电子秤总体框图如图所示:
- 金属箔式应变片工作原理
电阻丝在外力作用下发生机械变形时,其电阻值发生变化,这就是电阻应变效应,描述
电阻应变效应的关系式
金属箔式应变片就是通过光刻、腐蚀等工艺制成的应变敏感元件。如图所示,将四个金属箔应变片(R1、R2、R3、R4)分别贴在双杆式悬臂梁弹性体的上下两侧,弹性体受到压力发生形变,应变片随悬臂梁形变被拉伸或被压缩
- 测量电路
通过应变片转换悬臂梁被测部位受力状态变化,可将应变片串联或并联组成电桥。如
图所示,全桥测量电路中,将受力性质相同的两只应变片接到电桥的对边,不同的接入邻边,当应变片初始阻值相等,变化量也相等时,其桥路输出
测量电路的功能是把电阻应变片的电阻变化转变为电压输出。因为惠斯登电桥具有很多优点,如可以抑制温度变化的影响,可以抑制侧向力干扰,可以比较方便的解决称重传感器的补偿问题等,所以惠斯登电桥在称重传感器中得到了广泛的应用。因为全桥式等臂电桥的灵敏度最高,各臂参数一致,各种干扰的影响容易相互抵销,所以称重传感器均采用全桥式等臂电桥。
3.信号放大电路
电子秤的信号放大电路采用三运放差分放大电路,其典型结构如图所示。它主要由两级差分放大器电路构成。其中,运放 A1,A2 为同相差分输入方式,同相输入可以大幅度提高电路的输入阻抗,减小电路对微弱输入信号的衰减;差分输入可以使电路只对差模信号放大,而对共模输入信号只起跟随作用,使得送到后级的差模信号与共模信号的幅值之比(即共模抑制比 CMRR)得到提高。这样在以运放 A3 为核心部件组成的差分放大电路中,在CMRR 要求不变情况下,可明显降低对电阻 R3 和 R4,Rf 和 R5 的精度匹配要求,从而使三运放差分放大电路比简单的差分放大电路具有更好的共模抑制能力。在 R1=R2,R3=R4,Rf=R5 的条件下,图 2-4 电路的增益为:G=(1+2R1/Rg)Rf/R3。由公式可见,电路增益的调节可以通过改变 Rg 阻值实现。
图中,A1、A2、A3 可选择 OP07 集成运算放大器,A1,A2 同相输入端接全桥测量电
路的输出端
4.A/D 转换电路
TLC2543 是美国 TI 公司生产的多通道、低价格的 11 通道 12 位串行 A/D 转换器,具有输入通道多、性价比高、易于和单片机接口的特点,可广泛应用于各种数据采集系统。TLC2543 与外围电路的连线简单,三个控制输入端为 CS(片选)、输入/输出时钟(I/O CLOCK)以及串行数据输入端(DATA INPUT)。片内的 14 通道多路器可以选择 11 个输入中的任何一个或 3 个内部自测试电压中的一个,采样-保持是自动的,转换结束,EOC 输出变高。
TLC2543 的引脚排列如图所示。引脚功能说明如下:
AIN0~AIN10:模拟输入端,由内部多路器选择。对 4.1MHz 的 I/O CLOCK,驱动源阻抗必须小于或等于 50Ω;CS:片选端,CS 由高到低变化将复位内部计数器,并控制和使能 DATA OUT、DATA INPUT 和 I/O CLOCK。CS 由低到高的变化将在一个设置时间内禁止
DATA INPUT 和 I/O CLOCK;(低电平有效,不用时置 1,用时保持为 0) DATA INPUT:串行数据输入端,串行数据以 MSB 为前导并在 I/O CLOCK 的前 4 个上升沿移入 4 位地址,用来选择下一个要转换的模拟输入信号或测试电压,之后 I/O CLOCK将余下的几位依次输入;
DATA OUT:A/D 转换结果三态输出端,在 CS 为高时,该引脚处于高阻状态;当 CS
为低时,该引脚由前一次转换结果的 MSB 值置成相应的逻辑电平(10 位);
EOC:转换结束端。在最后的 I/O CLOCK 下降沿之后,EOC 由高电平变为低电平并保
持到转换完成及数据准备传输;
VCC、GND:电源正端、地;
REF+、REF-:正、负基准电压端。通常 REF+接 VCC(+5V), REF-接 GND。最
大输入电压范围取决于两端电压差;
I/O CLOCK:时钟输入/输出端。
原理图
两个数码管一个是用于对称重重量的显示,另外一个是对A/D转换结果的显示,可以在代码中加入对其显示,以方便我们调节放大电路中电阻阻值控制放大倍数
代码
/* 电子秤 要求:测量范围0~1KG,测量精度0.001KG */ #include<reg51.h>
#define uint unsigned int
#define uchar unsigned char sbit SDO=P1^0;
sbit SDI=P1^1;
sbit CS=P1^2;
sbit CLK=P1^3;
sbit wei1=P2^0;
sbit wei2=P2^1;
sbit wei3=P2^2;
sbit wei4=P2^3;
sbit wei21=P2^4;
sbit wei22=P2^5;
sbit wei23=P2^6;
sbit wei24=P2^7;uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //共阳极数码管0-9的段码uint read2543(uchar con_word);
void delay(uchar n);void main()
{uint ad0,ad1;uchar ge;uchar shi;uchar bai;uchar qian; while(1){ad0=read2543(0x00);//读入AD转换数据//显示函数待补充;ad1=ad0;qian= ad1/1000; //控制位数显示bai=(ad1%1000)/100;shi=(ad1%100)/10;ge=ad1%10;P2 = 0x10;P3 =table[qian]+0x80;//小数点显示delay(5);P2 = 0x20;P3 =table[bai];delay(5);P2 = 0x40;P3 =table[shi];delay(5);P2 = 0x80;P3 =table[ge];delay(5);}
}//向TLC2543写命令及读转换后的数据
uint read2543(uchar con_word)
{uint ad=0,i;CLK=0; //时钟首先置低CS=0; //片选为0,芯片工作for(i=0;i<12;i++) {if(SDO) //首先读TLC2543的一位数据ad=ad|0x01;SDI=(bit)(con_word&0x80); //向TLC2543写一位数据CLK=1; //时钟上升沿,TLC2543输出使能delay(3);CLK=0; //时钟下降沿,TLC2543输入使能delay(3);con_word<<=1;ad<<=1;}CS=1;ad>>=1;return(ad);
}//延时程序
void delay(uchar n)
{ uchar i,j;for(i=0;i<n;i++)for(j=0;j<125;j++);
}