传感器课设.docx
- 文档编号:8928451
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:27
- 大小:111.29KB
传感器课设.docx
《传感器课设.docx》由会员分享,可在线阅读,更多相关《传感器课设.docx(27页珍藏版)》请在冰点文库上搜索。
传感器课设
专业方向课程设计
课题:
数字电子秤设计
班级
学生姓名学号
指导教师张青春
淮阴工学院电子与电气工程学院
2014年06月
数字电子秤设计
1.系统方案设计
1.1概述
本课程设计的电子秤以单片机为主要部件,利用全桥测量原理,通过对电路输出电压和标准重量的线性关系,建立具体的数学模型,将电压量纲(V)改为重量纲(g)即成为一台原始电子秤(量程0~1.999kg)。
其中测量电路中最主要的元器件就是电阻应变式传感器。
电阻应变式传感器是传感器中应用最多的一种,本设计采用全桥测量电路,使系统产生的误差更小,输出的数据更精确。
而三运放大电路的作用就是把传感器输出的微弱的模拟信号进行一定倍数的放大,以满足A/D转换器对输入信号电平的要求。
双积分型A/D转换器ICL7107的作用是把模拟信号转变成数字信号,进行模数转换,然后把数字信号输送到显示电路中去,最后由显示电路显示出测量结果。
1.2检测原理
本设计由以下四部分组成:
电阻应变传感器、信号放大系统、模数转换系统、显示器。
其原理图如下所示。
测量过程是把被测物体的重量通过传感器将重量信号转化为电压信号输出,放大系统把来自传感且微弱信号放大,放大后的电压信号经过模数转换把模拟量转换成数字量,数字量通过数字显示器显示重量。
传感器的测量电路我们选用全桥测量电路,应变电阻作为桥臂电阻接在电桥电路中。
无压力时,电桥平衡,输出电压为零;有压力时,电桥的桥臂电阻值发生变化,电桥失去平衡,有相应电压输出。
三运放大电路是把传感器的微弱信号放大,以满足模数转换的要求,为保证测量的准确,放大器应该尽量做到高阻输入低阻输出,因此一般选用运算系统组成放大电路。
1.3系统方案框图
电路方框图如下:
图1.电路方框图
2.系统硬件设计
2.2.1传感器的选择及特性
电阻应变式传感器是将被测量的力,通过它产生的金属弹性变形转换成电阻变化的元件。
由电阻应变片和测量线路两部分组成。
常用的电阻应变片有两种:
电阻丝应变片和半导体应变片,本设计中采用的是电阻丝应变片,为获得高电阻值,电阻丝排成网状,并贴在绝缘的基片上,电阻丝两端引出导线,线栅上面粘有覆盖层,起保护作用。
电阻应变片也会有误差,产生的因素很多,所以测量时我们一定要注意,其中温度的影响最重要,环境温度影响电阻值变化的原因主要是:
A.电阻丝温度系数引起的。
B.电阻丝与被测元件材料的线膨胀系数的不同引起的。
对于因温度变化对桥接零点和输出,灵敏度的影响,即使采用同一批应变片,也会因应变片之间稍有温度特性之差而引起误差,所以对要求精度较高的传感器,必须进行温度补偿,解决的方法是在被粘贴的基片上采用适当温度系数的自动补偿片,并从外部对它加以适当的补偿。
非线性误差是传感器特性中最重要的一点。
产生非线性误差的原因很多,一般来说主要是由结构设计决定,通过线性补偿,也可得到改善。
滞后和蠕变是关于应变片及粘合剂的误差。
由于粘合剂为高分子材料,其特性随温度变化较大,所以称重传感器必须在规定的温度范围内使用。
图2.应变式传感器安装示意图
全桥测量电路中,将受力性质相同的两应变片接入电桥对边,当应变片初始阻值:
R1=R2=R3=R4,其变化值ΔR1=ΔR2=ΔR3=ΔR4时,其桥路输出电压Uout=KEε。
其输出灵敏度比半桥又提高了一倍,非线性误差和温度误差均得到改善。
2.2测量电路
2.2.1电阻应变式传感器的测量电路
常规的电阻应变片K值很小,约为2,机械应变度约为0.000001—0.001,所以,电阻应变片的电阻变化范围为0.0005—0.1欧姆。
所以测量电路应当能精确测量出很小的电阻变化,在电阻应变传感器中做常用的是桥式测量电路。
桥式测量电路有四个电阻,其中任何一个都可以是电阻应变片电阻,电桥的一个对角线接入工作电压U,另一个对角线为输出电压Uo。
其特点是:
当四个桥臂电阻达到相应的关系时,电桥输出为零,或则就有电压输出,可利用灵敏检流计来测量,所以电桥能够精确地测量微小的电阻变化。
测量电路是电子秤设计电路中是一个重要的环节,我们在制作的过程中应尽量选择好元件,调整好测量的范围的精确度,以避免减小测量数据的误差。
Rw1
图3.全桥测量电桥图
它由电阻应变片电阻R1、R2、R3、R4组成测量电桥,R1=R2=R3=R4=350Ω,加热丝阻值为50Ω左右,测量电桥的电源由稳压电源Uin供给。
将差动放大器调零,合上电源开关,调节电桥平衡电位RW1,使数显表显示0.000V。
将10只标准砝码(全部置于传感器的托盘上,调节电位器RW3(增益即满量程调节)使数显表显示为0.199V(2V档测量)或-0.199V。
拿去托盘上的所有砝码,调节电位器RW4(零位调节)使数显表显示为0.000V。
重复2、3步骤的标定过程,一直到精确为止,把电压量纲V改为重量纲g,就可以称重。
成为一台原始的电子秤。
2.2.2三运放大电路
本次课程设计中,需要一个放大电路,我们将采用三运放大电路,主要的元件就是三运放大器。
在许多需要用A/D转换和数字采集的单片机系统中,多数情况下,传感器输出的模拟信号都很微弱,必须通过一个模拟放大器对其进行一定倍数的放大,才能满足A/D转换器对输入信号电平的要求,在此情况下,就必须选择一种符合要求的放大器。
放大电路可采用四运放集成电路LM324中的三个运放组成的仪表用放大器电路。
LM324引脚图:
图4.三运放大电路结构图
2.3信号采集电路
2.31位半数字表头芯片ICL7107
双积分型A/D转换器ICL7107是一种间接A/D转换器。
它通过对输入模拟电压和参考电压分别进行两次积分,将输入电压平均值变换成与之成正比的时间间隔,然后利用脉冲时间间隔,进而得出相应的数字性输出。
图5位半数字表头芯片ICL7107应用
2.3.2(1/2)位双积分型A/D转换器ICL7107功能与特点
①ICL7107是31/2位双积分型A/D转换器,属于CMoS大规模集成电路,它的最大显示值为士1999,最小分辨率为100uV,转换精度为0.05士1个字。
②能直接驱动共阳极LED数码管,不需要另加驱动器件,使整机线路简化,采用士5V两组电源供电,并将第21脚的GND接第30脚的IN。
③在芯片内部从V+与COM之间有一个稳定性很高的2.8V基准电源,通过电阻分压器可获得所需的基准电压VREF。
④能通过内部的模拟开关实现自动调零和自动极性显示功能。
⑤输入阻抗高,对输入信号无衰减作用。
⑥整机组装方便,无需外加有源器件,配上电阻、电容和LED共阳极数码管,就能构成一只直流数字电压表头。
⑦噪音低,温漂小,具有良好的可靠性,寿命长。
⑧芯片本身功耗小于15mw(不包括LED)。
⑨不设有一专门的小数点驱动信号。
使用时可将LED共阳极数数码管公共阳极接V+.
⑩可以方便的进行功能检查。
2.4.2原理框图
它的原理性框图如图2所示,它包括积分器、比较器、计数器,控制逻辑和时钟信号源。
积分器是A/D转换器的心脏,在一个测量周期内,积分器先后对输入信号电压和基准电压进行两次积分。
比较器将积分器的输出信号与零电平进行比较,比较的结果作为数字电路的控制信一号。
时钟信号源的标准周期Tc作为测量时间间隔的标准时间。
它是由内部的两个反向器以及外部的RC组成的。
图6.ICL7107原理框图
2.4.3ICL7107引脚功能及主要电气参数
引脚图:
V+和V-分别为电源的正极和负极,
au-gu,aT-gT,aH-gH:
分别为个位、十位、百位笔画的驱动信号,依次接个位、十位、百位LED显示器的相应笔画电极。
Bck:
千位笔画驱动信号。
接千位LEO显示器的相应的笔画电极。
PM:
液晶显示器背面公共电极的驱动端,简称背电极。
Oscl-OSc3:
时钟振荡器的引出端,外接阻容或石英晶体组成的振荡器。
第38脚至第40脚电容量的选择是根据下列公式来决定:
Fosl=0.45/RC
COM:
模拟信号公共端,简称“模拟地”,使用时一般与输入信号的负端以及基准电压的负极相连。
TEST:
测试端,该端经过500欧姆电阻接至逻辑电路的公共地,故也称“逻辑地”或“数字地”。
VREF+VREF-:
基准电压正负端。
CREF:
外接基准电容端。
INT:
27是一个积分电容器,必须选择温度系数小不致使积分器的输入电压产生漂移现象的元件
IN+和IN-:
模拟量输入端,分别接输入信号的正端和负端。
AZ:
积分器和比较器的反向输入端,接自动调零电容CAz。
如果应用在200mV满刻度的场合是使用0.47μF,而2V满刻度是0.047μF。
BUF:
缓冲放大器输出端,接积分电阻Rint。
其输出级的无功电流(idlingcurrent)是100μA,而缓冲器与积分器能够供给20μA的驱动电流,从此脚接一个Rint至积分电容器,其值在满刻度200mV时选用47K,而2V满刻度则使用470K。
2.4.4ICL7107应用说明:
1.注意芯片:
27,28,29引脚的元件数值,0.22uF,470K,0.047uF阻容网络,并且把36脚基准调整到1.000V就可以使用在±1.999V量程了。
这三个元件属于芯片工作的积分网络,不能使用磁片电容。
芯片的33和34脚接的104电容也不能使用磁片电容。
2注意接地引脚:
芯片的电源地是21脚,模拟地是32脚,信号地是30脚,基准地是35脚,
3.负电压产生电路:
我们常用一只NPN三极管,两只电阻,一个电感来进行信号放大,把芯片38脚的振荡信号串接一个20K-56K的电阻连接到三极管“B”极,在三极管“C”极串接一个电阻(为了保护)和一个电感(提高交流放大倍数),在正常工作时,三极管的“C”极电压为2.4V-2.8V为最好。
这样,在三极管的“C”极有放大的交流信号,把这个信号通过2只4u7电容和2支1N4148二极管,构成倍压整流电路,可以得到负电压供给ICL7107的26脚使用。
这个电压,最好是在-3.2V到-4.2V之间。
4.如果上面的所有连接和电压数值都是正常的,也没有“短路”或者“开路”故障,那么,电路就应该可以正常工作了。
利用一个电位器和指针万用表的电阻X1档,我们可以分别调整出0.500V,1.000V,1.900V三种电压来,把它们依次输入到ICL7107的第31脚,数码管应该对应分别显示0.500,1.000,1.900的数值,允许有2-3个字的误差。
如果差别太大,可以微调一下36脚的电压。
。
2.5LED显示电路设计
2.5.1LED显示器结构与原理
MAN6710引脚:
选用MAN6710显示。
LED显示块是由发光二极管显示字段的显示器件。
在单片机应用系统中通常使用的是七段LED。
这种显示块有共阴极与共阳极两种。
共阴极LED显示块的发光二极管阴极共地。
当某个发光二极管的阳极为高电平时,发光二极管点亮;共阳极LED显示块的发光二极管阳极并接。
2.5.2LED显示器与显示方式
在单片机应用系统中使用LED显示块构成N位LED显示器。
N位LED显示器有N根位选线和8*N根段选线。
根据显示方式不同,位选线与段选线的连接方法不同。
段选线控制字符选择,位选线控制显示位的亮,暗。
LED显示器有静态显示与动态显示两种方式。
我们使用的为动态显示LED动态显示方式。
在多位LED显示时,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8位I/O口控制,而共阴极点或共阳极点分别由响应的I/O口线控制。
2.4、总体工作电路原理图
3系统软件设计
程序代码
#include
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineBUSY0x80//常量定义
#defineDATAPORTP0
sbitADCS=P3^5;
sbitADDI=P3^7;
sbitADDO=P3^7;
sbitADCLK=P3^6;
sbitLCM_RS=P2^0;
sbitLCM_RW=P2^1;
sbitLCM_EN=P2^2;
uintx1,y1,z1=0,w1,temp1;
ucharad_data,k,n,m,e,num,s;//采样值存储
sbitbeep=P3^0;
charpress_data;//标度变换存储单元
unsignedcharad_alarm;//报警值存储单元
unsignedcharpress_ge=0;//显示值百位
unsignedcharpress_shifen=0;//显示值十位
unsignedcharpress_baifen=0;//显示值个位
unsignedcharpress_qianfen=0;//显示值十分位
ucharcodestr0[]={"Weight:
.Kg"};
voiddelay(uint);
voidlcd_wait(void);
voiddelay_LCM(uint);//LCD延时子程序
voidinitLCM(void);//LCD初始化子程序
voidlcd_wait(void);//LCD检测忙子程序
voidWriteCommandLCM(ucharWCLCM,ucharBusyC);//写指令到ICM子函数
voidWriteDataLCM(ucharWDLCM);//写数据到LCM子函数
voidDisplayOneChar(ucharX,ucharY,ucharDData);//显示指定坐标的一个字符子函数
voidDisplayListChar(ucharX,ucharY,ucharcode*DData);//显示指定坐标的一串字符子函数
voidweishu(uintm);
voidweishu1(uintm);
voiddisplay(void);
ucharAdc0832(unsignedcharchannel);
voidalarm(void);
voiddata_pro(void);
/**********mainfuncation************/
voidmain(void)
{
delay(500);//系统延时500ms启动
//ad_data=0;//采样值存储单元初始化为0
initLCM();
WriteCommandLCM(0x01,1);//清显示屏
DisplayListChar(0,0,str0);
while
(1)
{
ad_data=Adc0832(0);//采样值存储单元初始化为0
alarm();
data_pro();
display();
if(k=='')
{
WriteCommandLCM(0x80+0x40,1);
WriteCommandLCM(0x01,1);
z1=0;
s=0;//防止清零时指针后移动
}
}
}
/*********延时K*1ms,12.000mhz**********/
voiddelay(uintk)
{
uinti,j;
for(i=0;i for(j=0;j<100;j++); } /**********写指令到ICM子函数************/ voidWriteCommandLCM(ucharWCLCM,ucharBusyC) { if(BusyC) lcd_wait(); DATAPORT=WCLCM; LCM_RS=0;//选中指令寄存器 LCM_RW=0; LCM_RW=0;//写模式 LCM_EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); LCM_EN=0; } /**********写数据到LCM子函数************/ voidWriteDataLCM(ucharWDLCM) { lcd_wait();//检测忙信号 DATAPORT=WDLCM; LCM_RS=1;//选中数据寄存器 LCM_RW=0;//写模式 LCM_EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); LCM_EN=0; } /***********lcm内部等待函数*************/ voidlcd_wait(void) { DATAPORT=0xff;//读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色 LCM_EN=1; LCM_RS=0; LCM_RW=0; LCM_RW=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); while(DATAPORT&BUSY) {LCM_EN=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); LCM_EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } LCM_EN=0; } /**********LCM初始化子函数***********/ voidinitLCM() { LCM_EN=0; DATAPORT=0; delay(15); WriteCommandLCM(0x38,0);//三次显示模式设置,不检测忙信号 delay(5); WriteCommandLCM(0x38,0); delay(5); WriteCommandLCM(0x38,0); delay(5); WriteCommandLCM(0x38,1);//8bit数据传送,2行显示,5*7字型,检测忙信号 WriteCommandLCM(0x08,1);//关闭显示,检测忙信号 WriteCommandLCM(0x01,1);//清屏,检测忙信号 WriteCommandLCM(0x06,1);//显示光标右移设置,检测忙信号 WriteCommandLCM(0x0c,1);//显示屏打开,光标不显示,不闪烁,检测忙信号 TMOD=0x11; EA=1; ET1=1; TR1=1; k=0; x1=0; y1=0; z1=0; } /****显示指定坐标的一个字符子函数****/ voidDisplayOneChar(ucharX,ucharY,ucharDData) { Y&=0x01; X&=0x0f; if(Y) X|=0x40;//若y为1(显示第二行),地址码+0X40 X|=0x80;//指令码为地址码+0X80 WriteCommandLCM(X,1); WriteDataLCM(DData); } /*******显示指定坐标的一串字符子函数*****/ voidDisplayListChar(ucharX,ucharY,ucharcode*DData) { ucharListLength=0; Y&=0x01; X&=0x0f; while(X<16) { DisplayOneChar(X,Y,DData[ListLength]); ListLength++; X++; } } /*****************系统显示子函数*****************/ voiddisplay(void) { WriteCommandLCM(0x0c,1);//显示屏打开,光标不显示,不闪烁,检测忙信号 DisplayListChar(0,0,str0); //DisplayListChar(0,1,str2); DisplayOneChar(8,0,press_ge+0x30); DisplayOneChar(10,0,press_shifen+0x30); DisplayOneChar(11,0,press_baifen+0x30); DisplayOneChar(12,0,press_qianfen+0x30); delay(1000);//稳定显示 } /************ 读ADC0832函数 ************/ //采集并返回 ucharAdc0832(unsignedcharchannel)//AD转换,返回结果 { uchari=0; ucharj; uintdat=0; ucharndat=0; if(channel==0)channel=2; if(channel==1)channel=3; ADDI=1; _nop_(); _nop_(); ADCS=0;//拉低CS端 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 _nop_(); _nop_(); ADCLK=0;//拉低CLK端,形成下降沿1 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 ADDI=channel&0x1; _nop_(); _nop_(); ADCLK=0;//拉低CLK端,形成下降沿2 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 ADDI=(channel>>1)&0x1; _nop_(); _nop_(); ADCLK=0;//拉低CLK端,形成下降沿3 ADDI=1;//控制命令结束 _nop_(); _nop_(); dat=0; for(i=0;i<8;i++) { dat|=ADDO;//收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); dat<<=1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 传感器