三、电阻式传感器接口电路的设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验三电阻式传感器的仿真与接口电路设计首先介绍一款应变片传感器YZC-1B称重传感器。它的主要参数见下表。额定载荷:3,5,8,10,15,20,25,30,35,40,45kg绝缘电阻:≥5000MΩ工作温度范围:-40~+80℃灵敏度:2.0±0.002mv/v安全过载:150%F.S综合误差:±0.02%F.S极限过载:200%F.S蠕变:±0.02%F.S推荐激励电压:10~12V(DC)零点平衡:±1%F.S最大激励电压:15V零点温度影响:±0.02%F.S/10℃密封等级:IP67输出温度影响:±0.02%F.S/10℃材质:铝合金输入电阻:405±5Ω电缆:线长:0.3~3m;直径:¢4mm输出电阻:350±3Ω输入+:红;输入-:黑;输出+:绿;输出-:白这种传感器主要的应用领域是电子计价秤、计重秤等小台面电子秤。它的外观是这样的。这个实验里首先对这样一款传感器进行仿真,然后设计一个接口电路,使其具有测量压力(重量)的功能。电阻应变片的工作原理基于电阻应变效应,即在导体产生机械变形时,它的电阻值相应发生变化。应变片是由金属导体或半导体制成的电阻体,其阻值随着压力的变化而变化。对于金属导体,导体变化率△R/R的表达式为:△R/R≈(1+2μ)ε式中μ为材料的泊松系数;ε为应变量。通常把单位应变所引起电阻值相对变化称作电阻丝的灵敏系数。对于金属导体,其表达式为:K0=△R/R=(1+2μ)所以△R/R=K0ε。在外力作用下,应变片产生变化,同时应变片电阻也发生相应变化。当测得阻值变化为ΔR时,可得到应变值ε,根据应力与应变关系,得到应力值为:σ=Eε式中:σ为应力;ε为应变量(为轴向应变);E为材料的弹性模量(kg/mm2)。又知,重力G与应力σ的关系为G=㎎=σs。式中:G为重力;S为应变片截面积。根据以上各式可得到:ΔR/R=K0mg/ES。由此便得出应变片电阻值变化与物体质量的关系,即ΔR=RK0mg/ES。根据应变片的材料,取K0=2,E=16300kg∕mm2,s=100mm2,R=350Ω,g=9.8m∕s,ΔR=[(2×9.8×348)∕(16300×100)]m。最终确定电阻变化与质量的对应关系为:ΔR=4.185×10-3m下面用multisim10建立一个包含有传感器和放大电路在内的电路原理图,来进行输入输出的仿真。原理图如下。在这个电路里采用了恒流源对传感器电桥的激励。适用四个350Ω的电阻来代替传感器上的四个应变片。当没有外界压力的时候,传感器四个应变片不产生应变而保持原来的阻值,因此电桥平衡,输出为0。当传感器感知压力的时候,对角线的电阻阻值将发生相应的变化,因此破坏了电桥臂的平衡,有电压输出。但输出电压值很小。于是在后面连接了两级放大电路。电路中有四个滑动变阻器分别是R13,R5,R10,R12。其中R13和R5用于电路的调零,R10和R12用于调整电路的放大倍数。首先将放大电路两端接地调零。假定传感器在重物的压力下发生了应变,按照前面计算的关系ΔR=4.185×10-3m,在受到30kg的重物的压力时,它的ΔR应为0.125Ω。于是调整电桥上的电阻的阻值为350.125Ω,350.125Ω,349.875Ω,349.875Ω。此时,为了使输出电压与输入的重量成对应关系,可调整滑动变阻器R10和R12使输入30kg时输出3V。然后观测各表的显示并记录下来。可见,此时恒流源输出6.779mA电流,电桥输出874.434μV的电压,放大输出后的电压是2.999V。当传感器受到20kg的重物压力时,相应的电阻变化ΔR时0.084Ω。相应的输出是1.937V。这样再进行10kg、40kg、50kg情况下的仿真。记录在表格里。重量(kg)1020304050ΔR(Ω)0.0420.0840.1250.1670.209电桥输出μV284.737571.183847.43411321417放大后输出V0.8361.9372.9994.0935.187仿真结果并不理想。接下来讲输出的电压经过A/D转换输入单片机并仿真。在proteuse中建立原理图。图中的恒流源、传感器电桥、放大电路已在前文出现,接下来是A/D转换、单片机处理和液晶显示。A/D转换采用ADC0809(仿真中用ADC0808),单片机采用89C51。在Keil4中编写代码编译并生成.hex文件(代码在附录2中)。双击图中的AT89C51加载.hex文件,查看仿真结果。在液晶屏幕上显示出了电压(或者说物体的重量)。单片机▶A/D转换电路▶◀放大器输出下图是这次实验的完整电路。接下来是由protel99SE再绘制原理图,形成PCB版图,并焊电路板。附录1:元器件一览表名称数量名称数量附录2://--------------include.h-----------------#ifndef__INCLUDES_H__#define__INCLUDES_H__#includeREGX51.H#includeSMC1602.h#includeDATransform.h#endif//--------------main.c--------------------#includeincludes.h#defineTIME0H0x3C#defineTIME0L0xB0//全局变量unsignedcharuc_Clock=0;//定时器0中断计数bitb_DATransform=0;//LCD上显示电压voidvShowNum(unsignedintuiNumber){unsignedcharucaNumber[3],ucCount;if(uiNumber999)uiNumber=999;ucaNumber[0]=uiNumber/100;//把计算数字的每个位存入数组。ucaNumber[1]=(uiNumber-100*(int)ucaNumber[0])/10;ucaNumber[2]=uiNumber-100*(int)ucaNumber[0]-10*ucaNumber[1];for(ucCount=0;ucCount3;ucCount++){vShowOneChar(ucaNumber[ucCount]+48);//从首位到末位逐一输出。//if(ucCount==0)//vShowOneChar('.');}}voiddelay(unsignedchara){unsignedchari;while(a--)for(i=100;i0;i--);}voidmain(){//charkey_pre=0,key_cur=0;charweight;//设置定时器0TMOD=0x01;//定时器0,模式1。TH0=TIME0H;TL0=TIME0L;TR0=1;//启动定时器。ET0=1;//开定时器中断。EA=1;//开总中断vdInitialize();vWriteCMD(0x00);vShowChar();while(1){vWriteCMD(0xC0);vShowChar(xiexieDUlaoshi);while(b_DATransform!=1);b_DATransform=0;while((weight=uiADTransform())==0);vWriteCMD(0x88);//vShowNum();vShowNum(weight);vShowChar(kg);vWriteCMD(0xC0);delay(250);delay(250);delay(250);delay(250);vdCleanLCD();}}//定时器0中断函数voidTime0()interrupt1{if(uc_Clock==0){uc_Clock=5;b_DATransform=1;}elseuc_Clock--;TH0=TIME0H;//恢复定时器0。TL0=TIME0L;}//-------------DATransform.h-------------#ifndef__DATRANSFORM_H__#define__DATRANSFORM_H__unsignedintuiADTransform();#endif//-------------SMC1602.h-----------------#ifndef__SMC1602_H__#define__SMC1602_H__#includeREGX51.H//LCD设置函数#definevdInitialize()vWriteCMD(0x01);vWriteCMD(0x38);vWriteCMD(0x0C);vWriteCMD(0x0F);//初始化#definevdCleanLCD()vWriteCMD(0x01);//清屏//#definevdSetShowMode()vWriteCMD(0x38);//显示模式设置:8位2行5x7点阵//#definevdSetInput()vWriteCMD(0x0C);//文字不动,光标自动右移//vWriteCMD(0x0F);//显示器开、光标开、闪烁开//端口设置宏定义#defineLCDRSP3_5//寄存器选择信号://0--数据寄存器;//1--指令寄存器。#defineLCDRWP3_6//读写信号://1--读LCD;//0--写LCD。#defineLCDEP3_7//片选信号,当输入下降沿信号时,//执行指令或传送数据。#defineLCDPORTP0//LCD数据接口。//写数据命令函数voidvDelay();//延时函数。voidvWriteCMD(unsignedcharucCommand);//把1个命令写入LCD。voidvWriteData(unsignedcharucData);//把1个数据写入LCD。voidvShowOneChar(unsignedcharucChar);voidvShowChar(unsignedcharucaChar[]);#endif//-----------------DATransform.c---------------------//AD转换函数#includeREGX51.H#defineSTARTP3_4//ATART,ALE接口。0-1-0:启动AD转换。#defineEOCP3_3//转换完毕由0变1.#defineOUTPORTP2//AD转换函数,返回转换结果。//转换结果是3位数,小数点在百位与十位之间。unsignedintuiADTransform(){unsignedintuiResult;START=1;//启动AD转换。START=0;while(EOC==0);//等待转换结束。uiResult=OUTPORT;//出入转换结果。uiResult=(100*uiResult)/51;//处理运算结果。returnuiResult;}//------------------------SMC1602.c(SMC1602驱动程序)-------------------#includeSMC1602.h//把1个命令写入LCDvoidvWriteCMD(unsignedcharucCommand){vDelay();//先延时。LCDE=1;//然后把LCD改为写入命令状态。LCDRS=0;LCDRW=0;LCDPORT=ucCommand;//再输出命令。LCDE=0;//最后执行命令。}//把1个数据写入LCDvoidvWriteData(unsignedcharucData){vDelay();//先延时。LCDE=1;//然后把LCD改为写入数据状态。LCDRS=1;LCDRW=0;LCDPORT=ucData;//再输出数据。LCDE=0;//最后显示数据。}voidvShowOneChar(unsignedcharucChar){switch(ucChar){case'':vWriteData(0x20);break;case'

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功