基于单片机的电子温度计设计
图4-1 系统程序流程图
4.2 温度信号的处理
对于本系统来讲,温度信号的处理部分可谓是核心部分,这些处理都依赖于温度采集和
处理程序来实现。首先单片机从A/D获取载有温度信息的信号,还原出电压值,通过事先做好的数学公式计算出PT100的电阻值,然后通过查表得出当前温度,并转换成1602液晶能显示的数据。
电压信号采集的时候常常会出现信号有干扰的情况,这会使采集到的数据出现很大的误
差,设计充分考虑干扰对系统的影响,采用了软件滤波,进行三十次信号采集,排序后去掉前后各五次数据后求平均值,得出一个相对稳定的数据。对于温度信息的选取,本系统由于是用八位单片机控制,不适合通过数学计算求出温度值,也由于铂电阻测温时会有一定的非
15
基于单片机的电子温度计设计
线性误差,所以在这里我们把电阻在各个温度下的阻值制成表格,系统通过查表来确定当前温度。
4.3 显示程序设计与分析
按键程序是通过查询按键接口的电平变化来确定是否有按键按下,由于系统采用独立按键,所以程序较简单。显示程序是把准备好的时间与温度数据传送给1602显示。操作要遵循1602使用手册。
下面是显示模块的主要程序:
void enable(uchar del) { //P0 = Convert(del); P0=del; RS = 0; RW = 0; E = 0; delay(); E = 1; delay(); }
void write(uchar del) {
// P0 = Convert(del); P0=del; RS = 1; RW = 0; E = 0; delay(); E = 1; delay(); }
void L1602_char(uchar hang,uchar lie,char sign) { uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0;
16
基于单片机的电子温度计设计
a = a + lie - 1; enable(a); write(sign); }
void L1602_string(uchar hang,uchar lie,uchar *p) { uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie - 1; enable(a); while(1) { if(*p == '\\0') break; write(*p); p++; } }
17
基于单片机的电子温度计设计
5 设计的总体调试
5.1硬件的调试
首先应该对系统的各个模块进行分开调试,确认无误后才能进行总体连接,然后总体调试在调试过程中碰到的问题要细心找原因,逐步解决。 (1)电源电路的调试
通过连接后,电源电路基本实现其功能,经测定电压在电流变化不大的情况下,保持稳定,电源正电压在5.4V,负电压在4.98V,满足系统要求。 (2)信号调理电路的调试
在制作的过程中,信号调理电路的制作与调试是花费时间最多的部分,也是最重要的部分。为了获取信号的稳定,电桥部分的电阻选取是很重要的。电桥电阻的选取首先要使电阻配对既电桥上臂的电阻尽可能相同,由于电阻制造工艺与技术的缘故,标度相同的电阻常常会有不同程度的误差,找出相同的两只不是很容易,经过多次挑选,最后终于选取出两个电阻值很接近的电阻,用万用表测量均为3.26k。为了使电桥在测温范围内输出合适的电压,与铂电阻对称的那只桥臂电阻的选取也很重要,经过反复选取测量,最后确定使用一只81.6欧姆电阻与一只15.1欧姆串联取得96.8欧姆。通过电阻箱代替PT100测得在测量输出低压在110摄氏度时输出电压为65.7mv,基本满足要求。
信号放大电路是通过放大器连接电阻的阻值来取得想要的放大倍数,电阻的选取同样花费很长时间,电阻选取好后,通过连接,在不同输入电压的情况下发现放大倍数不是很稳定,具有一定浮动具体如下表:
表5-1 差动放大器调试表
温度(℃) 5 10 15 25 35 45 55
输入电压(mv) 7.5 10.3 13.2 18.8 24.4 29.9 35.5 输出电压(mv) 250 347 447 660 873 1073 1285 放大倍数 33.33 33.68 33.86 35.10 35.77 35.88 36.19
18
基于单片机的电子温度计设计
经过测试发现在30摄氏度以上放大倍数基本在36左右,而在0-30范围内放大倍数基本在34倍左右,所以程序设计时候考虑了这一点。
各个硬件模块制作好后需要将硬件系统连接在一起,硬件系统的调试就是要测试各个模块是否相互影响,是否能协同工作,从而将各个模块整合成一个整体。
首先将各个模块逐步进行连接,每连接一个部分,都需要测量是否有短路情况,来接好后整体测量是否有短路有开路的问题,检查的时候一定要仔细认真,若没有此些情况就可以进行通电试验。通电后利用万用表测试各个模块的电源电压、工作电压等参数是否与独立不连接时相同,并通过电阻箱代替铂电阻测试放大电路是否正常工作。
调试过程中由于检查不仔细,出现了短路情况,由于及时发现,才避免灾难性的后果。调试过程中显示电路1602模块没有背光,也不显示,经过测量后发现此1602液晶与以前所用过的型号不同,对电压的参数要求也不同,经过更换分压电阻等手段,显示电路才调试正常。
5.2 软件的调试
软件系统和硬件系统类似,首先通过单片机开发板对各个模块的软件进行测试,测试通过后在进行联合调试。
在调试过程中,DS1302模块程序不能实现功能,后经过排查,是由于对时钟停止控制位的误操作导致时钟停止,经修正后软件正常运行。
在确认所有软件模块都能实现的情况下,就要进行软件的联合调试,让各个模块软件有机的组合起来,软件的联合调试要通过编写环境对软件组合在一起的一些语法错误等进行排除,然后通过keil进行软件仿真,观察各个寄存器在工作的时候是否正常。 5.3软件和硬件的整体调试
硬件的的调试已经在硬件的制作过程中逐步完成,硬件基本满足要求。软件也没有语法等错误,软件仿真能实现。但一个控制器系统如果软硬件不能有效的整合在一起,也是不能实现设计功能,所以最后的软硬件联合调试是调试工作的关键所在。硬件的一些不完善的地方也需要软件来完善。这也是调试过程中最难得部分。具体过程如下:
首先将各个模块程序写入控制器内,从表面观察,参数测量等各个方面来检测模块软件在硬件环境下是否工作正常,如果不正常,首先从检查硬件有无错误,软硬件是否对应。逐步检查。如果各模块都工作正常,再把系统总体的程序写入,调整。
19