《智能仪器》课程设计说明书-智能温度测量仪表方案设计.doc_第1页
《智能仪器》课程设计说明书-智能温度测量仪表方案设计.doc_第2页
《智能仪器》课程设计说明书-智能温度测量仪表方案设计.doc_第3页
《智能仪器》课程设计说明书-智能温度测量仪表方案设计.doc_第4页
《智能仪器》课程设计说明书-智能温度测量仪表方案设计.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

武汉理工大学华夏学院智能仪器课程设计说明书前言2第一章 智能温度测量仪表方案设计与论证31.1 功能与要求31.2 方案的论证与比较41.3方案的确定51.3.1 数据采集通道的理论计算51.3.2 温度值粗测理论推导61.3.3 根据t1确定差分部分的理论推导7第二章 智能温度测量仪表的硬件设计72.1 系统硬件框图72.2系统的输入通道设计82.3单片机最小系统82.4人机接口电路92.5串口电路92.6 执行电路10第三章 软件设计103.1下位机软件的设计103.1.1 下位机主程序设计113.1.2 ch451中断子程序设计113.1.3 数字滤波函数和adc0809读函数设计123.1.4 快速测量温度粗值函数设计133.2上位机软件设计13第四章 智能温度测量系统的安装与调试144.1 硬件调试144.2 软件调试154.3整机调试过程15第五章 设计体会与小结16参考文献17附录18前言随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术, 本文主要介绍了一个基于at89c51单片机的测温系统,描述了利用温度传感器pt100测温系统的过程,对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现温度采集和显示,灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。第一章 智能温度测量仪表方案设计与论证1.1 功能与要求功能基于单片机的温度测控系统分为上位机和下位机两部分。其中上位机应可通过虚拟仪器的前置面板界面显示温度数据,若温度超过设定温度,在显示屏上进行报警提示。而下位机则是可以利用单片机对温度传感器采集到的温度数据及时采样,并在数码管上显示,用矩阵键盘来控制和设定温度值,并将采集到的温度数据通过串口传到上位pc机。要求:.学生自行设计硬件电路并焊接电路板.编写上位机虚拟仪器和下位机程序.实现温度测控并进行系统功能测试1.2 方案的论证与比较方案一:通过运放构成1毫安恒流源,将pt100加在恒流源上,其输出接入仪用放大器,然后经a/d转换,将数据送入单片机。单片机 ad转换仪用放大器由运放构成1ma电流源图1 方案1的系统方框图本方案的优点是有较大的较稳定的电压输出,输出电压的范围相对较大且线性度好但缺点是每次输出的电压中有无用电压,且在温度小于300时,其无用电压约占50%,从而导致放大倍数不高,测量精度偏低。方案二:利用1k的电阻与pt100构成电桥采集电路,将采集信号经过仪用放大器放大后在由固定的差分放大电路进行二级放大,然后将放大信号经过a/d转换,最后传给单片机。pt100电桥采集电路仪用放大器固定差分放大器a/d转换单片机图2 方案二的系统框图 本方案的优点是有较大的电压输出范围,温度低于100度时,测量精度可达到1度。但缺点是温度较高时,线性度不好,测量精度达不到1度,且不能自动换挡。方案三:由pt100和10k电阻组成电桥采集电路,将采集信号传送给仪用放大器放大,然后将放大的信号经过差分电路进行二级放大,由于放大倍数的因素需对二级放大加入补偿,然后进行a/d转换,最后将数字量传送给单片机。pt100组成电桥(10k)仪用放大器ina114差分电路a/d转换adc0809cd4051da5615 单片机 89c51图3 方案三的系统框图 在软件上,通过改变仪用放大器的倍数,从而实现自动换挡,即可以测量较大范围内的电信号。当初步测量出被测信号后,就可也综合考虑,选择出合适的仪用放大器的放大倍数和差分电路所需的da输出电压。这样就可以实现精确测量。本方案的优点是有较好的线性电压输出,可自动选择量程,有较高的测量精度,测量范围较大。但缺点是抗干扰能力相对较弱,需要加必要的抗干扰设计,否则干扰太强同样达不到设计要求的精度。1.3方案的确定综合比较以上各种方案的性能后,决定采用方案三。1.3.1 数据采集通道的理论计算温度传感器:为温度,为比例系数,为常系数(在精确测量时,和的值会根据分段情况有所变化),为电阻变化值。 (1)电桥输入输出关系:为电桥输出电压,为电桥输入电压,为由于电桥不平衡而出现的常偏差系数,为10k欧姆电阻。 (2)仪用放大器输入输出关系:比例系数,输出电压。 (3)差分放大输入输出关系:比例系数,为da输出电压,输出电压。 =(-) (4)da输入输出关系:为da的参考电压,为da输入的数字量。 =2/1024 (5) 表1 各参数值(为测量值或设计值,均为国际单位)ba258202.595.2100002.10.00250.01502020201020ad输入输出关系:数字量输出: =51 (6)则由(1)(2)(3)(4)(5)(6)得: t = + - +a (7)1.3.2 温度值粗测理论推导由于每次测量时不知道温度大概值,于是有必要先粗测出温度值,根据(7)让 - +a = 0 (8) 表2 (参数取值及对应值 )25850201015730126 从而 t 1= (9)表3 (参数取值及对应值 )2585020100.07570.39060.97661.9532 1.3.3 根据t1确定差分部分的理论推导要确保精度达到0.1度,则有约为0.04时能被ad辨认出来,于是 /(4r)5* (9)则40000;取=258, =20。由(1)(2)(3)得=0.0129*t1 +0.6450 (0.645与b有很大关系)又实测出最大约为4.6v,测出希望有一定的输出14.2v之间,则由(4) (5) 得3.145*t1+98.7393.145*t1+144 (10)第二章 智能温度测量仪表的硬件设计2.1 系统硬件框图本设计选用pt100作为温度传感器,采用三线制接法,与10k电阻构成电桥,将输出电压依次送入仪用放大器,一阶低通滤波器,差动放大器,一阶低通滤波器,adc0809转换,最后将转换后的数字信号经单片机进行数字滤波,得到温度值。同时可以通过矩阵键盘进行控制,通过led进行显示。系统硬件方框图如图3所示。pt100组成电桥(10k)仪用放大器ina114lpf、差分电路a/d转换adc0809cd4051da5615单片机 89c51max232上位机ch451(4*4)键盘4位led图3系统硬件框图2.2系统的输入通道设计本系统输入通道作用是将温度转换为电压信号,再转换为数字信号传给单片机。其组成包括:电桥仪用放大器、程控差分放大器,a/d转换及低通滤波器。具体电路如图4所示。 图4 系统输出通道电路图2.3单片机最小系统本部分的作用是处理数据,控制各器件。组成包括89c52单片机,时钟电路,复位电路。其具体电路如图5所示。图5 单片机最小系统电路图2.4人机接口电路本电路的作用是实现温度显示,温度设定。组成模块有4位集成数码显示,4*4键盘等。具体电路如图6所示。图6 人机接口电路图 2.5 串口电路本电路的作用是实现单片机与上位机的通讯。其组成包括:max232,串口通讯接口等。具体电路如图7所示。图7 串口通讯电路2.6 执行电路本部分的作用是通过三极管推动继电器工作。组成包括:三极管,继电器,发光二极管等,具体电路如图8所示。图8 执行电路第三章 软件设计3.1下位机软件的设计3.1.1 下位机主程序设计 系统的软件设计可以分为几个部分,首先是各个模块的底层驱动程序编写,然后是系统的联机调试,编写上层系统程序。本系统软件程序主要包括:模数转换adc0809的底层驱动模块,数模转换tlc5615的底层驱动模块,人机交互ch451的底层驱动模块(包含键盘扫描和数码管显示),串口通信max232的底层驱动等。系统的软件流程如图9。图9 主程序流程图3.1.2 ch451中断子程序设计选用高速线串行接口(可节省i/o口),其操作命令均为位, 其中高位为标识码, 低位为参数,其会自动扫描,这就可以省去单片机的大量工作。ch451中断子程序流程如图10。图10 ch451中断子程序流程图3.1.3 数字滤波函数和adc0809读函数设计多次采样,然后将采样值按顺序排列,再将中间值作为最终输出,这样通过运用中值滤波可以去掉偶然因素引起的波动或采样不稳定(这里adc0809的时钟约1.3m,超过其设计最大值,极有可能并不稳定),通过求平均值,消除脉冲性干扰,得到相对平滑的波形。程序流程如图11。adc0809为8位并口输出,8通道,逐次逼近,8位模数变换器。程序流程如图12。开始对数据按大小排序读取n个平均数据输出中间值图11 数字滤波函数流程图 图12 adc0809读函数流程图3.1.4 快速测量温度粗值函数设计 由于刚开始测量时不知道被测温度的大概值,于是这里设计了自动换挡测量出温度的粗值,从而可以计算出差分电压部分所需要的被减电压,从而通过tlc5615输出,进而实现精确测量。快速测量温度粗值函数程序流程如图13。图13 快速测量温度粗值函数流程图3.2 上位机软件设计 通过max232实现串口通讯,下位机将数据发送到到上位机。上位机可以利用其相对强大的数据处理能力将数据进一步处理,让后输出显示,也可以实现远程控制。本出只是将数据上传,让后以波形,数字和温度计形式显示出来。此处运用labview软件实现,其程序图如图14。前置面板如图15。 图14 上位机程序图 图15 上位机前置面板第四章 智能温度测量系统的安装与调试4.1 硬件调试将硬件设计好后,通过软件将采集部分的模拟电路进行调试,让其输出入一定的模拟量测,在测量其输出,看是否与理论值相当。再加一定的干扰,在侧其出处是否稳定。经过这样必要的软件仿真后,在焊接实际器件,由于没有印刷电路板,则得花费较多时间焊接,并检查是否虚焊,短路等。排除一些列问题后,在进行输入输出测试。看与理论值有多大的误差,是否可用。测试顺序依次是:电桥,仪用放大器,差动放大器。4.2 软件调试先编写好adc0809的驱动程序,在其输入端接上标准电压,对其进行a转换,让其输出以8位二进制代码形式,通过8个发光二极管显示,看起是否有输出,输出值是否准确。这样将其调通。再编写tlc5615的驱动程序,通过万用表测量其输出,看其是否有输出,其输出值是否与程序中的设定值相当。这样将其调通。最后写ch451的驱动程序,按照pdf芯片资料,编写程序,在检查无误后,看起是否可以控制数码管,键盘是否有限。此芯片的操作比较难,不容易检查控制上的问题,我主要是通过,在程序中加延时,加死循环,然后观察其现象,用万用表测量其电压,看是否正常。这样将其调通。所有驱动完成后在编主程序,按照需要调用相应函数,协调其中的变量关系等。最终实现完全调通。4.3 整机调试过程将所有的硬件组装起来,下载软件,启动智能温度测量系统,在已知温度下测量,看其输出是否正常,绘制出输入输出关系图,并与标准温度变化曲线进行比较,进而根据标准温度变化的图计算出修正参数,然后修改源程序中由原来理论值得到的参数。再次启动系统看是否满足要求,如不行,则再次修正。如此往复几遍后方才满足要求。第五章 设计体会与小结达到设计要求,且在一定范围内其精度可以达到0.1摄氏度。很累!但是学到了知识,也得到了快乐!设计时要查阅相关书籍 ,一本本的摊开在桌上,看芯片资料,就一个ch451的资料就有15页,它不像小说一目十行几分钟就可以读完,要用这种器件就必须一丝不苟的了解其功能,一点错误就可能导致数据出不来,然后设计部分电路图,再将所有模块连接起来。设计时还算轻松,初次完全自主进行系统设还是有许多问题都没考虑到,如理论值,理论状态,往往与实际有一定的差距,这些差异如何决绝是以前从来没考虑过的。有些心里想的虽然头头是道,但实际上存在许多问题。就连一个简单的电阻都会有问题,理论上要多大就有多大,而实际上首先是只有固定的电阻,且还有一定的误差。如果用电位器,其大小是可以调节,但是它所温度和电磁干扰影响较大。在做电桥时由于以上两种电阻的缺点,输入电源又不稳定,以及输出的电压又小(毫伏级),使得输出电压相对噪音很大.比较难以处理。在用不同电阻打结电路,接不同电源,发现以上问题后,最终解决方案是采用固定电阻,对电源加以滤波,再加屏蔽。由于选择的是10k电阻,相对误差有10%,即绝对值有1000,而pt100才一两百欧姆,这就不能随便接,而要具体测量数个电阻阻值后,从中选出能和pt100构成对称电桥,即使这样最后还是有约2mv的电压误差,而它看似小,实际上却可以代表30读摄氏度。如不考虑,必将导致最后设计上的失败。其实刚开始时,心里是没有多大把握能做出个什么东西的,毕竟从来就没进行过系统设计,但是觉得总会有这一天的,不可能什么事只有到会了才去做。设计过程比较长,人也一直觉得比较累,但是它就像一次跋涉,每次穿过了荆棘,登上一座山坡,总会有的美景可以欣赏,人的视野也更开阔,往脚下一看,会觉得没想到能爬上来;同时也增加信心,敢于向更高的山峰进军。参考文献1.单片微型计数机与接口技术(第2版) 李群芳,张士军,黄 建 编著,电子工业出版社,20052 微机原理试验指导书 武汉理工大学华夏学院 20063 传感与检测技术 戴卓 主编, 武汉理工大学出版社 20034 测控电路 张国雄 主编 机械工业出版社 20085 labview8.20程序设计从入门到精通 陈锡辉,张银鸿 编著 清华大学出版社 2007附录源程序#define ch451_reset 0x0201 /复位#define ch451_leftmov 0x0300 /设置移动方式-作移#define ch451_leftcyc 0x0301 /设置移动方式-左循#define ch451_rightmov 0x0302 /设置移动方式-右移#define ch451_rightcyc 0x0303 /设置移动方式-右循#define ch451_sysoff 0x0400 /关显示、键盘、看门狗#define ch451_syson1 0x0401 /开显示#define ch451_syson2 0x0403 /开显示、键盘#define ch451_syson3 0x0407 /开显示、键盘、看门狗功能#define ch451_dsp 0x0500 /设置默认显示方式#define ch451_bcd 0x0580 /设置bcd译码方式#define ch451_twinkle 0x0600 /设置闪烁控制#define ch451_dig0 0x0800 /数码管位0显示#define ch451_dig1 0x0900 /数码管位1显示 #define ch451_dig2 0x0a00 /数码管位2显示#define ch451_dig3 0x0b00 /数码管位3显示#define ch451_dig4 0x0c00 /数码管位4显示#define ch451_dig5 0x0d00 /数码管位5显示#define ch451_dig6 0x0e00 /数码管位6显示#define ch451_dig7 0x0f00 /数码管位7显示#define ch451_pot 0x1a00#include #include /如果使用键盘中断请定义#define use_key 1#define uchar unsigned char/*/须主程序定义的参数/*sbit relay=p20;sbit ch451_dclk=p21; /串行数据时钟上升延激活sbit ch451_din=p22; / 串行数据输出,接ch451的数据输入sbit ch451_load=p23;sbit ch451_dout=p33; /int1,键盘中断和键值数据输入,接ch451的数据输?sbit ad0809_ale=p24;sbit ad0809_eoc=p25;sbit ad0809_st=p26;sbit ad0809_oe=p27;sbit din5615=p13; sbit sclk5615=p14;sbit cs5615=p15;sbit a4051=p10;sbit b4051=p11;sbit c4051=p12;sbit abc=p17;unsigned char ch451_key=0;/ 存放键盘中断中读取的键值unsigned int dav=5;unsigned int tfast;bit setb=0;bit chuan=0;unsigned int ad0809_data=0;unsigned char ad0809_flag=70;unsigned char ad0809_i=0;unsigned char flag=0;unsigned char cai=39;/采样次数unsigned char getev39=19,1,2,3,5,4,18,17,16,15,14,13,12,11,10,9,8,7,6;/unsigned char showtemp3=0,8,0;/用于存储设定的温度数据 高位在前unsigned char gettemp4;/存储采样到的温度/*/* /延时程序void delay(unsigned char m)unsigned char i,j,k; for(i=0;im;i+) for(k=0;k20;k+);/*void da5615(unsigned int a) unsigned char i; a=6;/让00 0000 (1111 1000 11)变为1111 1000 1100 0000 cs5615=1; sclk5615=1; sclk5615=0; cs5615=0; for(i=0;i12;i+) din5615=a&0x8000; sclk5615=0;a=1;sclk5615=1; sclk5615=0; cs5615=1; /*/*/*/*函数名称:uart_init功能: uart初始化函数参数:无返回值:无*/void tdata_pc(unsigned char dat) /uart_init(); ti=0;es=1; es=0;sbuf=dat; void uart_init()tmod=0x20;th1=0xef;tl1=0xef;/2400tr1=1; pcon=pcon|0x80;ren=1;sm0=0;sm1=1;ea=1;es=1;/*函数名称:uart_send功能: 发送数据参数:dat(待发送数据)返回值:无*/ /定义一无符号整型变量存储12字节的命令字。void ch451_write(unsigned int command) unsigned char i;#ifdef use_key ex1=0; /禁止键盘中断 #endif ch451_load=0; /命令开始 for(i=0;i=1; ch451_dclk=1; /上升沿有效 ch451_load=1; /加载数据 #ifdef use_key ex1=1; #endif/*/*/初始化子程序void ch451_init() p1=0x60;ch451_din=0; ch451_dclk=1; /先低后高,选择4线输入 ch451_din=1; ch451_load=1; ch451_dout=1; #ifdef use_key it1=0; /设置下降沿触发 ie1=0; /清中断标志 px1=1; /设置低优先级 ex1=1; /开中断 #endif/*/*/输入命令子程序,mcu从451读一字节/*/void set_temp(void) /设定保温点 unsigned char i; ch451_write(ch451_dig0|showtemp0);/显示原来设定温度 ch451_write(ch451_dig1|showtemp1); ch451_write(ch451_dig2|showtemp2); /设定温度 ch451_write(ch451_twinkle|1); /闪烁 ex1=1; /允许键盘中断 while(flag=0); ex1=0; /禁止键盘中断 flag=0; showtemp0=ch451_key; /保存数据 ch451_write(ch451_dig0|showtemp0); /显示键值 ch451_write(ch451_twinkle); /停止闪烁 ch451_write(ch451_twinkle|2); ex1=1; /允许键盘中断 while(flag=0); ex1=0; /禁止键盘中断 flag=0; showtemp1=ch451_key; ch451_write(ch451_dig1|showtemp1); ch451_write(ch451_twinkle); ch451_write(ch451_twinkle|4); ex1=1; /允许键盘中断 while(flag=0); ex1=0; /禁止键盘中断 flag=0; showtemp2=ch451_key; ch451_write(ch451_dig2|showtemp2); ch451_write(ch451_twinkle); /*/*/输入命令子程序,mcu从451读一字节unsigned char ch451_read() unsigned char i; unsigned char keycode1,keycode;/定义命令字,和数据存储器/ea=0; / ex1=0; /关中段 keycode1=0x07; /输入读451命令字 ch451_load=0; for(i=0;i=1; /往右移一位 ch451_dclk=1; /产生时钟上升沿锁通知ch451输入位数据 ch451_load=1;/产生加载上升沿通知ch451处理命令数? keycode=0; /清除keycode keycode1=0; ch451_dclk=0; /产生时钟下升沿通知ch451输出下一位 ch451_dclk=1; for(i=0;i3;i+) /输出行数 有四行 第一行0keycode1=1;keycode1|=ch451_dout;ch451_dclk=0;ch451_dclk=1;for(i=0;i3;i+) / 输出列数 四列 第一列为0keycode=1;keycode|=ch451_dout;ch451_dclk=0;ch451_dclk=1; keycode=keycode1*4+keycode;/计算键值(换算成编号) return(keycode); /#/*/键盘中断 读取键值并且转换为二进制代码 void ch451_inter() interrupt 2 using 1 unsigned char i; unsigned char keycode1,keycode;/定义命令字,和数据存储器 ea=0; keycode1=0x07; /输入读451命令字 ch451_load=0; for(i=0;i=1; /往右移一位 ch451_dclk=1; /产生时钟上升沿锁通知ch451输入位数据 ch451_load=1;/产生加载上升沿通知ch451处理命令数? keycode=0; /清除keycode keycode1=0; ch451_dclk=0; /产生时钟下升沿通知ch451输出下一位 ch451_dclk=1; for(i=0;i3;i+) /输出行数 有四行 第一行0keycode1=1;keycode1|=ch451_dout;ch451_dclk=0;ch451_dclk=1;for(i=0;i3;i+) / 输出列数 四列 第一列为0keycode=1;keycode|=ch451_dout;ch451_dclk=0;ch451_dclk=1; ch451_key=keycode1*4+keycode;/计算键值(换算成编号) if(ch451_key=10) setb=1; else if(ch451_key=11)/b多采样5次 cai=cai+3; ch451_write(ch451_dig0|cai/100); ch451_write(ch451_dig1|cai/10); ch451_write(ch451_dig2|cai%10); delay(250); delay(200); else if(ch451_key=12)/c少采样5次 cai=cai-5; ch451_write(ch451_dig0|cai/100); ch451_write(ch451_dig1|cai/10); ch451_write(ch451_dig2|cai%10); delay(250); delay(200); flag=1; /标记 ie1=0; /清中断标志 ea=1;/# unsigned char read_0809(unsigned char channel) unsigned int a=0,b; unsigned char getdata=0,getdata22=0,out=0,j=0; ad0809_st=0; p0=channel; /选择采集通道 ad0809_ale=0; /存入通道地址 ad0809_ale=1; ad0809_ale=0; ad0809_oe=0; ad0809_st=1; ad0809_st=0; /ad开始 while(jcai) /采样cai次 delay(1); if(ad0809_eoc=1) ad0809_oe=1; p0=0xff; /读数据前置1 getdata=p0; ad0809_oe=0; ad0809_st=1; ad0809_st=0;/开始下一次转换 a=a+getdata; j+; ou

温馨提示

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

评论

0/150

提交评论