笔者在电子市场购买了一块3.6V450mAh的锂离子充电本文介绍一种以AT89C51单片机为核心的低成本温度控制实验系统。该系统采用温度传感器DS18820实现一线数字式测温,经过PID算法输出PWM波,再由PWM信号控制固态继电器,调节热阻丝发热功率,最终达到控制被控对象温度的目的,该系统还扩展了人机接口和串口通信,实现温度设定、控制及图像显示。
硬件设计
1.总体设计
系统结构框图如图1所示,以AT89C51单片机为控制核心,DS18820电池,外型尺寸完全符合原机的内部空间要求。按照正确的正负极性焊连到电路中即可完成电池的更换工作。实际使用效果极佳,连续播放时间超过了7个小时(图4)。测量被控温度,外围电路包括人机接口的按键与数码显示电路、温度读取与控制驱动电路以及与上位机串行通信电路。用户通过按键设定加热温度后,系统启动加热“热得快”烧水。当前水温经过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的控制信号,如图5所示,在固态继电器输出端接两个二端口插件,方便引线串入热得快插线中。由于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功能命令→发存储器操作命令→处理数据,DS18820操作程序流程如下图所示。
本文只有一个DSl8820挂在总线上,因此每次对总线进行读写日寸,可跳过读ROM指令,为提高测温精度,文中采用默认的12位数码转换,即0.0625度/位,程序如下:
#include<reg51. h>
sbit DQ=P1^O;
void Init_DS18820();
WriteOneChar(unsigned char dat);
char ReadOneChar();
void deIay(unsigned int i);
unsigned int ReadTemperature()
{
unsigned char a=0,c=O:
unsigned char b=O;
unsigned int t=O;
float tt=0;
Init_DS18820();
WriteOneChar(0xCC);
/*跳过读序号列号的操作*/
WriteOneChar(Ox44);
/*启动温度转换*/
Init_DS18820();
WriteOneChar(OxCC);
/*跳过读序号列号的操作*/
WriteOneCha r(0xBE);
/*读取温度寄存器等(共可读9个寄
存器)前两个就是温度*/
a=ReadOneChar();
/*Read the low byte of the tem-perature*/
b=ReadOneChar();
/*high*/
c=a;
a>>=4;
b<<=4;
t=aㄧb;
, c&=0x0F;
tt=c;
tt*=0.0625;
c=tt*1 0+0.5;
t=t*1 0+c;
return t;
/*温度转化,位了避免浮点数运算,
尽量用整形数据运算,这样可以减轻CPU负担*/
}
void Init_DS18820()
/*初始化函数*/
{
unsigned char x=0;
DQ=1;
/*DQ复位*/
delay(8);
/*稍做延时*/
DQ=0;
/单片机将DQ拉低*/