二线制模拟温度采集系统电子设计报告.docx_第1页
二线制模拟温度采集系统电子设计报告.docx_第2页
二线制模拟温度采集系统电子设计报告.docx_第3页
二线制模拟温度采集系统电子设计报告.docx_第4页
二线制模拟温度采集系统电子设计报告.docx_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

b题 二线制模拟温度采集系统 王希之家【摘 要】本系统以stc80c51单片机为控制系统,利用电阻箱代替温敏元件进行测量。电阻箱变动范围10002000欧,代表0-100摄氏度。将阻值范围为10002000的可调输入电阻送往二线式电流变换器,经过v/i变换后变换器输出电流为420ma,通过大于1m的传输线将该电流送往电流接收部分转换为电压,然后双积分电路以及单片机内部定时器进行采集,并通过单片机控制显示相应温度。而且本系统可以任意设定报警温度。【关键词】单片机;二线式电流变换器;双积分ad。一 总体方案设计1.总体设计系统主要由二线式电流变送器和温度采集及显示两大部分组成。其中,二线式电流变送器由调理电路、二线式v/i变换电路构成,温度采集及显示部分由iv转换、双积分ad电路、stc89c51单片机控制系统、数码管显示以及报警系统构成。此外,电源电路提供系统所需电源。调节系统输入端可调电阻,输入10002000电阻值送往二线式电流变送器,其中电流变送器由调理电路和二线式v/i变换电路构成,调理电路根据输入电阻值产生对应电压值(0.21v),并将电压值送入二线式v/i变换电路,二线式v/i变换电路将电压值转换为对应电流值(420ma)。在温度采集及显示部分首先通过iv转换变成电压信号,然后进入双积分电路,不同电压的积分时间不同,从而通过单片机控制显示温度电源电路(+12v、+5v、-2v)电流接收与双积分ad采集stc89c1单片机12v温度采集及显示部分二线式电流变送器12vv调理电路二线式v/i变换电路0.21v可调电阻4-20ma温度显示2.方案论证与比较2.1二线式电流变送器电路方案方案一:集成电路构成二线式电流变送器。二线式电流变送器的电路设计可选择现成的集成电路,如xtr115/116/105等,其精度和稳定性比自制的好,自身功耗也更低,意味着能留更多电流给调理电路,调理部分更容易设计。但该方案的成本高于自制的,且无法完成发挥部分。方案二:使用恒流源作用于待测电阻得到对应的电压信号再进行处理变换 方案三:通过恒压源作用于电阻桥,产生对应的电压信号再经由仪放调理至合适的电压范围,在变换为电流传输 方案论证:上述方案中,采用方案一成本高,且只能实现题目的基本要求,方案二和方案三能实现题目的基本和发挥部分要求,且方案三较为简单,故本系统选择方案三。2.2电流接收电路方案一:使用专用电流接收芯片 此方案能实现精度要求,但是成本较高,且无法完成发挥部分。方案二:使电阻采集电流信号转化为电压信号,经仪用放大器对电压信号进行采集此方案能实现发挥部分,但成本较高。方案三:搭建使用电流-电压转换器,该电路较为简单,且搭建出来电路的性能也可以满足题目要求,而且成本较低。方案论证:鉴于要完成题目发挥部分,且成本要低,故本系统选择方案三。2.3iv转换电路选择 iv转换电路有两种,一种为输出0到5v,其目的是为了避免ad芯片资源的浪费,该电路较复杂,而我们用的是单片机内部定时器,所以我们选择电路较简单的iv转换,及直接取样放大,转换为1到5v。二 理论分析与计算1.电桥电路电阻大小的选择:若电桥电阻太小,则在1k到2k变化过程中,线性度很差,所以电桥电阻选择100k的大电阻,减少因电阻箱阻值的改变导致的非线性关系。2.积分电路时间常数的确定:由于iv转换后的最大电压为5v,且第一次积分时间为20ms,使第一次积分结束后的电压为-5v,由uo=-ui/(rc)*t可得时间常数为0.02s,于是取c=0.1uf,r=200k。三 硬件电路设计1. 电流变送器用lm317做2.5v的稳压源,输出电流约有2ma,采用电桥电路对电阻大小进行采集,然后使用高输入阻抗的仪放对信号进行放大,由于需要远距离传送,所以将电压信号经高输出阻抗的vi变换电路变成电流信号,进行远距离传送。由于电桥电路的影响,非线性度不是很好,可以调到当电阻为1000时输出4ma,当电阻为2000是输出20ma,但当电阻为1500时输出12.3ma,达不到非限度的发挥要求,所以通过改变放大倍数将电阻为1000时的输出电流降低,降至3.93ma,电阻为2000时的电流降至19.94ma,这样电阻为1500时输出为12.06ma,这样就能满足非线性度小于1%的要求。2. iv转换电路 电流信号不方便双积分电路进行采集,所以使用电阻取样,将电流信号转换成电压信号,然后将信号放大成1到5v,进入双积分电路。 3. 双积分电路先对信号电压进行20ms的积分,通过过零比较器输出为+5v电压给单片机,然后对标准电压2v进行积分直至产生负跳变,单片机利用内部定时器,确定该时间长度,该时间长度与输入电压成正比,从而确定接入电阻的大小。由于经比较器后输出电压有负电压,直接进入单片机会烧坏单片机,所以在之后加一个npn型三极管,当为避免负电压直接进入单片机。四软件系统设计程序代码请参看附录。五系统测试与数据分析1.二线式电流变送器输入电阻与输出电流测试 测试方法:调节变送器的输入可变电阻值,设定输入电阻值范围为10002000,用电压表测量实际输出电流,记录变送器的输入电阻值对应的输出电流值;测试仪器为数字电压表。如表2所示。表2 二线式电流变送器输入电阻与输出输出电流测试数据设定输入电阻/实测输出电流/ma1234510003.9373.9453.9393.9283.945150012.06512.0451208712.05912.076200020.02520.05820.07820.01820.0672iv转换电路测试测试方法:调节变送器的输入可变电阻值,设定输入电阻值范围为10002000,用电压表测量实际输出电压,记录变送器的输入电阻值对应的输出电流值;测试仪器为数字万用表。设定输入电阻/实测输出电流/v12345100011.020.981.020.9615003.043.073.033.063.0320005.085.085.045.075.043.双积分电路测试由于积分电路的时间常数为20ms,所以选择所以选择频率为25hz,峰峰值为5v的方波进行测试,测试结果为积分电路后输出三角波,过零比较器后输出方波。4. 温度显示这项要求没有做到,未能正确显示出温度。六 结论(感想)电子设计之路 艰辛但是快乐从三月份初到现在已经整整一个多月了,三个人一路磕磕碰碰,废寝,忘食,不顾一切,终于风雨过后见到绚烂的彩虹。题目是难的,可再难我们也会用智慧,用努力去把它解决掉。搞电子设计是寂寞的,可我们能在静中求动,寂中求乐。设计之路是长远而艰苦的,每天与电阻聊天,与程序对话,与形形色色的芯片谈心,那是一种寂寞的释放,那更是一种对电子设计的热爱,因为热爱,所以付出。 附录:程序原代码:/*一、关于本程序的i/o口接法的相关说明:1.用p0控制数码管的段选,p7到p4的前四个口控制数码管的位选;p3和p2控制数码管切换指示灯,当i/o口给低电平的时候,指示灯点亮2.用p20-p25分别控制对应于十,百,个,小数位的循环加按键(四个);切换按键(一个);蜂鸣器开关键(一个);3.p30,p31控制继电器接通积分信号电压、积分参考电压和积分电容放电。4.用p37来作为蜂鸣器响铃信号的输出端5.用p26来控制蜂鸣器开光指示灯(蜂鸣指示灯的显示,单片机给低电平的时候让指示灯点亮)二、1.输入电压范围是15v,参考电压是-2v 2.第一次积分时间是50000us*/#include#define uint unsigned int#define uchar unsigned char#define ys_t 38#define ys 2uchar code table110=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;/带小数点的数字编码uchar code table210=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/不带小数点的数字编码uint t2=0;/t2是用来读取定时器1里面计算出来的第2次积分时间的变量uint bw1=0,sw1=0,gw1=0,xs1=0,bw2=0,sw2=0;gw2=0,xs2=0;uint qh=0;uint ul,n;uint beepkg=0;uint warn_sz=0;sbit key0=p20;sbit key1=p21;sbit key2=p22;sbit key3=p23;sbit key4=p24;sbit key5=p25;sbit fmzs=p26;/蜂鸣指示灯的显示控制sbit beep=p37;/蜂鸣器响铃控制sbit wzd=p32;/定义外部中断引脚,检测它的是否初始为低电位sbit xh_or_ck=p30;sbit fd=p31;sbit sc=p33;void c()/参考电压控制函数fd=1;xh_or_ck=1; void j()/积分信号电压控制函数 fd=1; xh_or_ck=0;void f()/电容放电控制函数 fd=0;void delay(uint x)/延时uint i,j;for(i=0;ix;i+)for(j=0;j0;i-); void count()/对采集的时间进行计算,以量化采集到的温度bw1=t2/40000;sw1=t2%40000/4000;gw1=t2%4000/400;xs1=t2%400/40;if(bw1=1)sw1=0;gw1=0;xs1=0;t2=40000;if(t2%40)=20)xs1+;if(xs1=10)gw1+;xs1=0;if(gw1=10)sw1+;gw1=0;if(sw1=10)bw1+;sw1=0;void indepen()/独立按键,控制报警温度的设定;记得填充延时函数的值 if(!key0) delay_t(ys_t); if(!key0) delay_t(60); +bw2; if(bw21) bw2=0; if(!key1) delay_t(ys_t);if(!key1)delay_t(60);+sw2;if(sw29)sw2=0; if(!key2) delay_t(ys_t);if(!key2) delay_t(60);+gw2;if(gw29)gw2=0; if(!key3) delay_t(ys_t);if(!key3)delay_t(60);+xs2;if(xs29)xs2=0; if(bw2=1) sw2=0;gw2=0;xs2=0; warn_sz=40000*bw2+4000*sw2+400*gw2+40*xs2;void display()/数码管温度显示 p1=0x77; p0=table2bw1; delay(ys); p1=0xb7; p0=table2sw1; delay(ys); p1=0xd7; p0=table1gw1;/个位的显示,有小数点 delay(ys); p1=0xe7; p0=table2xs1; delay(ys); void warn()/数码管报警温度显示 p1=0x7b; p0=table2bw2; delay(ys); p1=0xbb; p0=table2sw2; delay(ys); p1=0xdb; p0=table1gw2;/个位的显示,带小数点 delay(ys); p1=0xeb; p0=table2xs2; delay(ys);void display()/数码管温度显示 p1=0x77; p0=table2bw1; delay(ys); p1=0xb7; p0=table2sw1; delay(ys); p1=0xd7; p0=table1gw1;/个位的显示,有小数点 delay(ys); p1=0xe7; p0=table2xs1; delay(ys); void warn()/数码管报警温度显示 p1=0x7b; p0=table2bw2; delay(ys); p1=0xbb; p0=table2sw2; delay(ys); p1=0xdb; p0=table1gw2;/个位的显示,带小数点 delay(ys); p1=0xeb; p0=table2xs2; delay(ys);void disfm()/正常显示时候的蜂鸣响铃控制程序 while(t2=warn_sz)&beepkg)/蜂鸣器响铃循环 display(); beep=1;if(!key5)delay_t(38);if(!key5)beep=0;delay_t(60);beepkg=0;fmzs=1; void warnfm() while(t2=warn_sz)&beepkg)warn(); beep=1;if(!key5)delay_t(38);if(!key5)beep=0;delay_t(60);beepkg=0;fmzs=1; void exter0() interrupt 0/外部中断,控制定时器1关闭,读取计的时间,再给定时器1赋初值tr0=0;delay_t(10);if(wzd=0)delay_t(2); t2=th0*256+tl0-10000; th0=0xbe;/再次给定时器0装入初始值 tl0=0xe0;ex0=0;f();delay_t(30);void exter1() interrupt 1/定时器0中断程序 tr0=0;/关闭定时器0 th0=0x00; tl0=0x00; c();/把参考电压接入 tr0=1;/开启定时器0 ex0=1;/开启外部中断 et0=0;void main()beep=0;tmod=0x01;/使定时器0工作在1方式下th0=0xbe; /给定时器0赋初值tl0=0xe0;et0=1;/开启定时器1中断it0=1;ea=1;/开启总中断f();/给积分电容放电delay_t(25);j();/把积分电压接入tr0=1;/开启定时器0while(1)/设定一个大死循环count();display();if(!key4)delay_t(48);if(!key4)delay_t(100);qh=1;if(!key5)delay_t(38);if(!key5)delay_t(60);fmzs=0;beepkg=1; disfm(); while(qh)indepen();warn();if(!key4)delay_t(48);if(!key4)delay_t(100);qh=0;if(!key5)delay_t(38);if(!key5)delay_t(60);fmzs=0;beepkg=1;warnfm(); 我的程序#include#define uint unsigned int#define uchar unsigned char#define ys 2uchar code table110=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;/带小数点的数字编码uchar code table210=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/不带小数点的数字编码uint t2=0;/t2是用来读取定时器1里面计算出来的第2次积分时间的变量uint o,p,q,m;uint bw1=0,sw1=0,gw1=0;sbit beep=p37;/蜂鸣器响铃控制sbit wzd=p32;/定义外部中断引脚,检测它的是否初始为低电位sbit xh_or_ck=p30;sbit fd=p36; void c()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论