开始系统初始化Flag_TempSap=1是温度采集否温度设置是Flag_TempSet=1否是否Flag_TempCtr=1是温度控制Flag_TimeSet=1否报警、停止恒温控制是定时时间设置Flag_HWTime=1否当前温度、定时时间显示
图5-1 主程序流程图
当按下了启动/停止键后,系统进入加热状态,每次的循环,系统除了执行键扫描、显示程序外,还会执行温度采集、温度控制以及定时程序。系统会根据采集到的实际温度值,再与设定温度值,上次偏差值一起进行PID计算,计算出加热时间,通过加热时间的大小来控制继电器的通断。定时程序则会计算出剩余的定时时间,并在定时时间到时,通知系统发出蜂鸣声。
若是在加热状态下,按下了启动/停止键,系统将进入停止状态,程序跳到系统初始化处,重新初始化,同时蜂鸣、加热都会停止,重新回到设定状态。 5.3 子程序的设计
5.3.1 系统初始化模块的设计
单片机在运行之前要对其进行端口配置,工作模式的选择,以及定时器、中断等的设置,就是对其初始化,同时初始化程序也要对系统中的一些全局变量进行初始化,以便系统重新初始化时,变量变回初始值。系统初始化程序流程图如图5-2
27
基于单片机的电加热恒温箱控制器设计
所示。
开始初始化全局变量设定PID参数I/O端口配置定时器设置返回 图5-2 系统初始化程序流程图
5.3.2 显示模块的设计
显示方式为动态显示,动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮的方式称为位扫描。动态方式显示时各数码管分时轮流选通,要使其稳定显示必须采用动态扫描方式,即在每一时刻只选通一位数码管,并送出相应的段码,在另一时刻选通另外一位数码管,并送出相应的码段。
虽然这些字符是在不同的时刻分别显示,但是由于人眼存在视觉暂留效应,只要每位显示间隔足够短就可以给人以数码管同时显示的感觉。
数码管为共阳极接法,显示数据的字型码如表5-1所示。
表5-1 共阳极接法字型表
显示数字 h g f e d c b a 端口输出 0 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 1 0 0 0 1 0 1 1 1 0 1 0 1 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0XC0 0XF9 0XA4 0XB0 0X99 0X92 0X82 0XF8 0X80 0X90 28
在程序中要显示数字0~9,只要从表中查出对应的端口输出数据,再把该数字送到P1口输出就显示了。
显示模块功能由函数DisplayLed( )实现,数码管的更新采用P2.0、P2.1、P2.2和P2.3控制,分别对应着数码管的DS1,DS2,DS3,DS4,每个时刻指令某一位为0,在显示完后要对该位进行复位。其显示程序流程图如图5-3。
开始计算十位上数字计算个位上数字数码管低位个位数字延时Shiwei>0是数码管高位显示十位数字否延时结束
图5-3显示程序流程图
由于数码管的数据位同时接到P2口,所以选通某一个数码管后一定要禁止显示。在选通下一位数码管时P2口上的电平发生变化,如果不禁止上一位则发生两位同时显示当前P2端口数据的情况。在选通一个数码管,并把数据送给P2口后,要经过一段时间延时后,才能禁止其显示。因为,人眼睛视神经的反应速度是有限的,如果不加延时,人眼可能还没感知到数码管显示就已经关掉了。 5.3.3温度采集模块的设计
一般在使用Pt100采集方案中,都会对放大器采集来的模拟信号AV进行温度采集,即进行A/D转换。
单片机读取ADC0809转换后的数据可以有中断和查询两种方式,ADC0809开
29
基于单片机的电加热恒温箱控制器设计
始转换后EOC引脚为低电平,当EOC重新变成高电平时表示转换结束,此时可以申请中断或者由程序查询该位并读取结果。
温度采集包括三方面内容: A/D转换、数字滤波和A/D值向实际温度值的转换。其温度采集程序流程图如图5-4所示。
结束查表得到温度值是否采到10次是否ADC0809_EOC=1?是读取AD值设置并启动开始否滤波算法图5-4温度采集程序流程图
A. A/D转换
每隔1s执行一次温度采样操作,每次采样执行10次A/D转换,转换时,通过查询EOC引脚电平变化,来判断转换是否结束,转换完成,将结果读出,并将转换后的A/D值存入数组。
B. 数字滤波
由于干扰和实际噪声的存在,在采样过程当中会出现采样信号与实际信号存在偏差的现象,甚至会出现信号的高低波动,为了减小这方面原因造成的测量误差,在实际采样时采样10个点,然后再除去其中偏差较大的两个点,即一个最大值和一个最小值,再对剩余的8个点取平均值,即实现了数字滤波,这样得到的A/D转换结果比较接近实际值。
C. A/D值向实际温度值转换
30
在对采样值进行滤波操作之后,还要将A/D值转换为实际温度,常用的两种方法为查表法和公式法:查表法比较麻烦,而且精度也不高,适应于线性化较差的NTC传感器。公式法比较简单,只需要确定比例系数K和基准偏差B即可,适合于线性化较好的传感器,温度的C语言实现过程为:fT = ADC_data * K - B,利用这个公式换算成温度值。
Pt100在0~100℃内几乎是线性的,但是本系统的测温范围最高为250℃,且又由于ADC0809转换精度的原因,电阻的非线性造成的误差超出了要求,所以公式法无法实现A/D值到温度值的转换,本设计采用的是查表法。
5.3.4键扫描模块的设计
键盘与单片机的接口有查询方式和中断方式,查询方式比较简单、可靠性比较高,但是效率低;而中断方式则效率比较高、系统资源占用较少、同时可以保证实时性的要求。本软件由于按键较少,在效率上和系统资源占用上与中断方式差别不大,所以采用查询方式比较简单。
有键按下时,P3相应口的电平会被拉低,只要程序循环得读P3口的电平,就可以判断哪个键被按下。由于按键抖动现象的存在,按键一次按下或释放会被错误的认为是多次操作,这显然是不允许的,为了消除这种情况,程序采用软件去抖动,即在每次检测到有按键按下时,执行一个10ms左右的延时程序后,再执行键按下后的操作。
键扫描模块流程图如图5-5所示。
复位或停止后,系统处于设定状态,其功能是监测键盘输入,接收温度设定,定时和启动键等。每一个键都具有第二功能,根据系统的状态,按键实现不同的功能。复位或停止后,时间/温度选择键处于时间设定状态,此时按下+1/+min键或+10/+h是设置时间,若按下时间/温度选择键,系统将工作于温度设定状态,此时再按下+1/+min或+10/+h则是设置温度。设定温度或时间时,程序会根据情况,使温度和时间设定值设定在要求的范围之内。
时间/温度选择键还可以在系统加热状态下对显示时间还是显示温度进行选择。加热/停止键在每次按下后,会改变系统状态标志,主程序会根据这个标志使系统工作在相应的状态下。
31