本文介绍一种以AT89C51单片机为核心的低成本温度控制实验系统。该系统采用温度传感器DS18820实现一线数字式测温,经过PID算法输出PWM波,再由PWM信号控制固态继电器,调节热阻丝发热功率,最终达到控制被控对象温度的目的,该系统还扩展了人机接口和串口通信,实现温度设定、控制及图像显示。
硬件设计
1.总体设计
系统结构框图如下图所示,以AT89C51单片机为控制核心,DS18820测量被控温度,外围电路包括人机接口的按键与数码显示电路、温度读取与控制驱动电路以及与上位机串行通信电路。
用户通过按键设定加热温度后,系统启动加热“热得快”烧水。当前水温经过DS18820测量送给单片机,单片机经PID校正后输出PWM信号,然后通过固态继电器驱动热得快加热,最终使水温保持在设定值上,误差不超过O.1℃。
单片机系统通过串口与上位PC机实现通讯,上位机实现温度、温度曲线显示以及PID参数的设定,用户通过上位机可以清晰地看到设定的PID参数所产生的控制作用,如系统的微调、时间等参数。
2.温度测试模块
系统选用美国DALLAS公司生产的单总线DS18820数字式温度传感器作为温度模块,引脚图如下图所示。
DS18820具有体积小、经济、使用方便灵活、测试精度高、性价比高、CRC校验功能等特点,温度测量范围为-55+125℃,可编程为9位~12位A/D转换精度,测温分辨率达0.0625℃,被测温度采用带符号位扩展的16位数字方式串行输出。其工作电源即可在远端引入,也可采用寄生电源方式产生,多个DS18820可以并联到3根或2根线上,CPU只需一根端口线即可与多个DS18820通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
文中的DS18820三引脚分别接公共电源+5V、电源地和单片机P1.O引脚,具体电路如下图所示,由于DS18820为1-WIRE器件,只需在其信号线上加一个上拉电阻到+5V电源即可。
同时,每一个DS18820均有唯一系列号,即允许在不同地方放置温度灵敏器件,通过SearchRom指令选择不同的DS18820芯片,实现温度的多点监测,如HVAC环境控制、建筑物、设备或机械内温度检测、过程温度监视和控制等。
3键盘及显示电路模块本系统采用PT6961驱动控制电路同时驱动键盘与数码管。PT6961为带有键盘扫描接口的LED驱动控制专用电路,内部集成MCU数字接口、数据锁存器、LED高压驱动、键盘扫描等电路。主要应用于VCR、VCD、DVD及家庭影院等产品的显示屏驱动、多种显示模式(11段×7位~14段×4位)、键扫描(10×3bit)电路、灰度调节电路(占空比8级可调),与单片机实现串行数据传输,节省了单片机引脚。PT6961可以自己驱动显示和键盘模块电路,可实现串行数据传输,同日寸对时序要求较高。
单片机的P0.6引脚与PT6961的时钟线相连,控制时序;P0.7引脚与PT6961的片选端相连,选通芯片,P0.4、PO.5引脚与PT6961的DOUT、DIN端相连,进行数据和指令的串行传输,具体的传输数据仍由单片机编程控制。PT6961在cLOCk端产生下降沿时,读取DIN口的数据,在clock端产生上升沿时,在DOUT口产生按键寄存器值可供单片机读取。硬件连接电路如下图所示,
该芯片可以同时驱动(8~14)段×(4~7)位数码管和3×10个按键,本文选用驱动6个数码管和1×6个按键。
4.执行模块
系统采用固态继电器(SSR)控制热得快电源,固态继电器是一种四端器件,两个输人端,两个输出端,输入端接控制信号,输出端与负载、电源串联,SSR实际是一个受控电力电子开关。
单片机经PID算法,从P1.5口输出PWM波,经ULN2003反相驱动后,作为SSR的控制信号,如下图所示,
在固态继电器输出端接两个二端口插件,方便引线串入热得快插线中。由于SSR与热得快接口是整个系统和电路板唯一一块强电部分,为将其对弱电部分的干扰降到最低,弱电电路线远离该部分电路,且不共地,接线端子的脚间距应大于SSR的脚间距。
5.串行通信模块
本系统采用串口实现单片机与上位计算机的连接,单片机向上位机传送温度值,上位机显示该值,并画出温度变化曲线图,反应温度的变化情况,同时上位机可以调整PID参数,使系统适用于不同的对象。串行通信连接如下图所示,
其中5个电容均取O.1μF的典型值,串口DB9的5端为公共端接地端,2、3端则分别连接信号的接收端和发送端,该电路完成TTL电平与RS232电平转换,DB9接口通过交叉串口线连接到PC机上,完成硬件的串行通信。
软件设计
为加强程序的可读性、可移植性和便于调试,系统软件设计采用模块化思想,程序运行时,通过主程序调用各子程序模块。本文主程序流程如下图所示,软件设计主要讲述DS18820信号处理子程序和串口通信子程序。
1.DS18820信号处理子程序DSl8820为1-wire制器件,采用一根信号线即可与单片机进行串行通信,简化了硬件电路,但是,在软件设计中须进行复杂的时序控制。DS1820单线通信功能为分日寸完成,有严格的时隙概念,系统对DS1820的各种操作必须按协议进行。
操作协议为:初始化DS1820(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据,DS1 8820操作程序流程如下图所示。
本文只有一个DSl8820挂在总线上,因此每次对总线进行读写日寸,可跳过读ROM指令,为提高测温精度,文中采用默认的12位数码转换,即0.0625度/位,程序如下:
2,串行通信程序设计
单片机通过引脚RXD(P3.O,串行数据接收端)和引脚TXD(P3.1,串行数据发送端)与外界通讯,SBUF为串行口缓冲寄存器,包括发送寄存器和接收寄存器,具有相同名字和地址空间,但不会出现冲突,因为其中一个只能被CPU读出数据,另一个只能被CPU写入数据。
单片机的串行口的四种工作方式中,方式0和2的波特率是固定的,方式1和3的波特率是可变的,由定时器T1的溢出率控制,方式2为自动重装入初值的8位定时器/计数器模式,作为本文的波特率发生器。
上位机编程中,本文采用最常用的通信控件MSComm,实现可视化界面。
MSComm控件的常用属性有:Comm-Port设置并返回通讯端口号:Settings以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位;PortOpen设置并返回通讯端口的状态,也可以打开和关闭端口;Input从接收缓冲区返回和删除字符;Output向传输缓冲区写一个字符串。
串口初始化程序如下: