基于8051单片机的地温空调控制系统.docx
- 文档编号:7825235
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:15
- 大小:156.53KB
基于8051单片机的地温空调控制系统.docx
《基于8051单片机的地温空调控制系统.docx》由会员分享,可在线阅读,更多相关《基于8051单片机的地温空调控制系统.docx(15页珍藏版)》请在冰豆网上搜索。
基于8051单片机的地温空调控制系统
基于8051单片机的地温空调控制系统
DSP原理及应用课程作业
信息工程学院
***班
***
**********
基于8051单片机的地温空调控制系统
***班*************
摘要:
本文简述了地温空调控制器的基本原理,并使用STC89C52RC单片机,配合各外部功能模块搭建了一个简单的地温空调控制系统。
文章给出了控制器的硬件结构框图,简述了各个模块的功能和硬件实现。
然后文章通过主程序的流图,分析了控制系统的运行过程,并详细说明了关键部分PID温度自动控制的原理和代码。
本文最后有选择性的给出了测温部分和存储部分的电路图和子程序。
关键词:
8051单片机地温空调控制器DS18B20AT24C02
一、引言
地温空调是一种新型的绿色无污染空调系统,它通过提取地温能源,实现夏季制冷、冬季供热。
地温空调采用水源热泵技术,把土壤或地下水中的能量收集起来,经过能量转换,制冷时提供出口温度为7℃~12℃冷水,供热时提供出口温度为45℃~50℃热水。
夏季使室温控制在25℃以下,冬季使室温控制在16℃~25℃。
用地温供暖和制冷,可大大减少煤、石油、煤气和电的消耗;地温资源的高效、节能、安全、环保的特点,使其具有较好的可利用性;同时,地温供暖装置无压力、无燃烧、无爆炸危险,且占地面积小,自动控制灵活方便,又能提供生活用热水。
因此,地温空调有着很好的应用前景。
虽然地温空调使用的水源热泵与普通空调采用的压缩机原理不大相同,但作为其核心的控制器部分却完成相似的功能。
空调控制器担负着使整个系统正常运行的任务,主要包括作为人机接口的红外遥控和温度显示、对温度的测量、通过控制热泵的工作实现对温度的自动控制,以及实现对系统各部分的过载保护等等。
8051是。
。
。
简介这里没写从书上弄一段51的简介。
。
。
。
。
51单片机由于以上优点,在对实时性要求不高的控制领域应用非常广泛,这里我们将用它作为空调控制器的核心。
文中简单说明了地温空调控制器的基本原理,利用STC89C52RC单片机和各外部功能模块搭建了一个简单的地温空调控制器。
在第二部分中,文章给出了控制器的硬件结构框图,简述了各个模块的功能和硬件实现。
第三部分中给出了主程序的流图,分析了控制系统的运行过程,并详细说明了关键部分PID温度自动控制的原理和代码。
文章的第四和第五部分有选择性的给出了测温部分和存储部分的电路图和子程序。
二、控制系统总体设计
本文中采用中国宏晶公司生产的STC89C52RC芯片作为控制器的核心。
STC89C52RC是宏晶科技推出的一块51单片机,除了兼容传统8051的所有功能外,它还拥有更高的工作频率和扩展的256字节RAM与8K的FLASH存储器。
同时,STC89C52RC还拥有成本低廉、资料丰富等优势。
2.1硬件原理框图
图1给出了控制器硬件原理框图,各部分将在本文2.2节中进行分别说明。
图1.控制器硬件原理框图
2.2各功能模块说明
作为空调的控制器,首先要实现的功能就是对温度的自动控制。
因此,控制器需要获得当前的室内温度情况,以控制热泵机组的功率,来使室内温度朝着设定值变化。
这里,室内温度的获得是采用DS18B20单总线数字温度计。
这是一块模块化的温度测量探头,将它和作为控制器的单片机相连接,即可通过数据总线由单片机程序获得温度探头所在位置的温度信息。
另外,作为空调的用户接口部分,控制器需要进行用户遥控指令的接收和温度值的显示。
空调等家电的遥控一般使用红外遥控器。
这里,我们使用HS0038红外接收探头接受红外遥控信息,并通过另外的一块单片机对红外指令编码进行解码,通过中断和数据总线将解码后的指令传给主控单片机。
同时,我们使用BC7281来实现数码管的温度显示和空调主机上按键的控制。
BC7281是128段LED显示及64键键盘控制芯片,相比于单片机程序控制LED和扫描按键的方式,使用BC7281能节省大量的单片机I/O端口并且提升程序效率。
空调的扫风是由步进电机进行带动。
作为控制器,需要对步进电机的运转进行控制来控制扫风模式。
这里,我们采用集成驱动芯片ULN2003来控制步进电机。
空调开机时,我们希望它能自动载入上次关机时的参数设定,例如目标温度、扫风模式等等。
这就需要我们在关机之前将参数保存到掉电不丢失数据的ROM存储器中。
这里,我们采用IIC总线的EEPROM:
24C02串行存储器来实现参数的保存。
最后,为了便于实现系统的调试与维护,我们希望控制器能与计算机相互通信。
STC89C52单片机上集成了RS-232串口通信功能,但是,单片机的工作电压为5V,计算机的串口电压为
12V。
为了实现与计算机的串口通信,我们使用MAX232多通道串口收发IC。
2.3单片机I/O接口分配
51单片机有4个8位I/O接口,其中P0口是数据、低位地址复用接口。
1.温度探头DS18B20:
该型号的温度探头是单总线,只用1根信号线即可传输温度数据与控制信号。
这里我们将单片机的P3.5口分配给它使用。
2.EEPROM存储器AT24C02:
该串行存储器使用IIC总线接口。
因为51单片机没有从硬件上支持IIC总线,我们需用2个I/O口实现程序模拟的IIC总线。
这里我们将P1.0和P1.1分配给它使用。
3.LED数码管显示和按键控制芯片BC7281:
BC7281通过3跟信号线与控制器相连进行串行通信,其中1根是控制器提供的串行通信时钟信号,1根为串行数据线,另外1根是输入控制器的按键中断信号。
因此,我们将单片机的P1.2和P1.3作为时钟和数据接口,将P3.3(INT1)连接BC7281的中断信号。
4.步进电机驱动ULN2003:
单片机要通过I/O口输出的具有时序的方波作为步进电机的控制信号,这里我们将P1.4、P1.5、P1.6、P1.7共4个I/O接口用作步进电机控制。
5.红外遥控接收模块的连接:
红外解码模块通过另外一块单片机来进行,当受到新的指令时,单片机2解码过后用一根信号线连接主控制器的P3.2(INT0),控制器响应中断后通过数据总线P0口传递数据。
各模块对I/O的占用情况如下表所示:
功能模块
I/O接口
DS18B20
P3.5
AT24C02
P1.0P1.1
BC7281
P1.2P1.3P3.3(INT1)
ULN2003
P1.4P1.5P1.6P1.7
红外接收
P3.2(INT0)
2.4系统供电电路
系统能否稳定的运行工作,电源将起到非常大的作用。
在本文中电源电路由交流变压器、桥式整流电路、滤波电容与集成线性稳压电源7805和7812组成,为单片机电路提供5V直流电源,为电机驱动模块提供12V直流电源。
三、主程序设计
3.1主程序框图
图2(下页图)显示了控制系统主程序的流图:
3.2主程序工作流程分析
开机后,控制器首先对各部分进行初始化,等待一些慢速模块(例如BC7281)进入正常工作状态。
同时,控制器要对各部分进行检测,判断各部分,尤其是热泵、机械部分是否能正常工作。
然后,主控单片机打开遥控接收和按键中断,从EEPROM存储器读入上次关机前保存的参数值,进入正常的工作主循环。
空调工作的各参数,例如目标温度、扫风模式等,都采用全局变量来存放,以便程序的各个部分都能访问。
在一次主循环中,程序首先判断工作参数是否发生变化。
这要通过每周期末尾存放上一周期的参数值来实现。
例如,如果程序发现用户设定的目标温度发生了变化,就先将改变后的值存入EEPROM,一遍下次开机时读取;然后再将改变后的值用LED数码管显示出来;接下来再返回程序主循环。
接着,程序读取室内温度探头的值,用它和用户目标温度这两个值进行PID控制算法,得到对空调热泵的控制量,即工作功率的提高或下降。
然后通过热泵控制模块的接口用控制量来控制热泵的运行,实现温度的自动调节。
在每个循环中,程序都要控制扫风的步进电机作出相应动作,以实现按照用户指定方式扫风的目的。
在循环的最后,程序要保存着周期的各参数值,用于下周期开始的是否有参数改变的判断。
图2.主程序框图
当用户用遥控器传达指令后,负责红外解码的单片机从红外探头上取得信息,解码后向主控制器请求中断,中断服务程序中主控制器从数据口P0取得用户参数,存入相应的全局变量并退出中断。
在主循环的下一个周期将对这个改变作出反应。
3.3温度的PID控制
空调系统温度的控制算法常采用PID控制,其基本原理是:
对温度的控制量(即热泵机组的功率大小)与当前温度与目标温度的差值d成正比,即当前温度与目标温度偏差越大,就使热泵进行越高负荷的工作来尽快消除这个差值,PID中的字母P(proportional:
比例)即代表这个意思;同时,控制量还与差值的微分成比例,即室内温度与目标温度间的差值逐渐减小时,就减弱热泵的工作,使温度不至于越过目标温度向相反方向变化,而当差值增大时,就加强热泵工作来尽快消除这个趋势,这就是PID中的D(derivative:
微分);字母I(integral:
积分)表示控制量与温度偏差d的积分成比例,这能使控制量的变化趋向连续平滑,而不至于使热泵的功耗发生大的突变而导致部件损坏。
在PID控制中,最重要的是P、I、D三个系数,这三个系数的选择要使温度的调节达到最优状态。
即:
温度能够由当前值较快的达到目标值;控制量能较迅速的相应温度的变化;控制量的变化过程要平滑稳定。
通常,这些系数的选择是通过计算机(通常是MATLAB)对控制过程进行仿真,改变参数观察仿真结果,以得到最优的参数组合。
下面给出了PID温度控制求控制量的算法代码:
#defineCYCLE5//保存5个周期的误差数据作积分累加使用
floatPIDcontroll(floatTnow,Tgoal)//PID算法求温度控制量,输入参数:
当前温度和目标温度
{
staticfloatdOld[CYCLE]={0};//存储CYCLE个周期的偏差
staticfloatTold,TgoalOld;//存储上个周期的温度值与目标值
floatkp,kd,ki;//三个PID参数
kp=1;kd=3.28;ki=1.6;//这三个参数值通常通过MATLAB仿真来寻找最优值
inti;
//当温度或目标温度改变很大时,将误差归零,开始新的控制过程
if(fabs(Told-Tnow)>3||fabs(TgoalOld-Tgoal)>3)
{
for(i=1;i dOld[i]=0; } floatd=Tnow-Tgoal;//当前的温度偏差 floataveraged=0; for(i=0;i averaged+=dOld[i]; averaged=(averaged+d)/(CYCLE+1);//平均偏差即相当于积分 floatControllValue=kp*d+kd*(d-dOld[CYCLE-1])+ki*averaged;//PID控制公式 Told=Tnow;//保存参数值供下周期使用 TgoalOld=Tgoal; for(i=0;i dOld[i]=dOld[i+1]; dOld[CYCLE-1]=d; return(ControllValue); } 四、测温电路部分的实现 4.1硬件原理图 4.2测温部分子程序代码 sbitDataPortDS1820=P3^5;//18B20测温总线 floatGetTemprature()//子程序从温度探头获得温度 { intT,i,j; floattemp; while(RstDS1820());//等待DS18B20空闲 WriteDS1820(0xCC);//SkipROM WriteDS1820(0x44);//温度转化 DelayMs(800); while(RstDS1820());//等待空闲 WriteDS1820(0xCC);//SkipROM WriteDS1820(0xBE);//从暂存存贮器读命令 i=ReadDS1820();//低字节 j=ReadDS1820();//高字节 T=i+j*256; temp=T*0.0625; return(temp); } voidDelay_us(unsignedcharnUs)//微秒级延时<65535us { while(nUs! =0) { nUs--; } } /*======================================================== 18B20驱动: 判断总线有无18B20 ==========================================================*/ bitRstDS1820(void)//返回0-有设备连接1-无设备连接 { unsignedchari; bitRstFlag; RstFlag=1; DataPortDS1820=0; Delay_us(100);//480us DataPortDS1820=1; Delay_us(3);//15us-60us for(i=0;i<45;i++)//60us-240us { //Delay_us (1); if(DataPortDS1820==0) { RstFlag=0; } } Delay_us(40);//240us returnRstFlag; } /*========================================================= 18B20驱动: 向18B20写指令 ===========================================================*/ voidWriteDS1820(unsignedcharch) { unsignedchari; DataPortDS1820=1; Delay_us (1); for(i=0;i<8;i++) { EA=0; DataPortDS1820=0; DataPortDS1820=0; //Delay_us (2); DataPortDS1820=ch&0x1; EA=1; Delay_us(10); DataPortDS1820=1; ch=ch>>1; Delay_us (1); } } /*===================================================== 18B20驱动: 从18B20读数据 ======================================================*/ unsignedcharReadDS1820(void) { unsignedchari,ch; ch=0; DataPortDS1820=1; Delay_us (1); for(i=0;i<8;i++) { EA=0; DataPortDS1820=0; DataPortDS1820=0; DataPortDS1820=0; DataPortDS1820=0; DataPortDS1820=1; DataPortDS1820=1; //Delay_us (1); ch=ch>>1; if(DataPortDS1820==1) { ch=ch+0x80; } EA=1; Delay_us(10); } returnch; } 五、EEPEOM参数存储部分的实现 5.1硬件原理 5.2子程序代码 #defineSCL24P1_0//24C02SCL端 #defineSDA24P1_1//24C02SDA端 #defineWriteDeviceAddress0xa0//24c02写命令字 #defineReadDviceAddress0xa1//24c02读命令字 /************************************************************ IIC总线协议的软件实现IIC驱动程序 /*************************************************************/ voidStart(){ SDA24=1; SCL24=1; SDA24=0; SCL24=0; } voidStop(){ SCL24=0; SDA24=0; SCL24=1; SDA24=1; } voidAck(){ SDA24=0; SCL24=1; SCL24=0; SDA24=1; } voidNoAck(){ SDA24=1; SCL24=1; SCL24=0; } bitTestAck(){ bitErrorBit; SDA24=1; SCL24=1; ErrorBit=SDA24; SCL24=0; return(ErrorBit); } voidWrite8Bit(ucharinput) { uchartemp; for(temp=8;temp! =0;temp--) { SDA24=(bit)(input&0x80); SCL24=1; SCL24=0; input=input<<1; } } ucharRead8Bit() { uchartemp,rbyte=0; for(temp=8;temp! =0;temp--) { SCL24=1; rbyte=rbyte<<1; rbyte=rbyte|((uchar)(SDA24)); SCL24=0; } return(rbyte); } /************************************************************************ 24C02驱动子程序向存储器写数据 输入参数依次为: 数据头指针写入的存储器地址写入字节数 /***********************************************************************/ voidWrite24c02(uchar*Wdata,ucharRomAddress,ucharnumber) { Start(); Write8Bit(WriteDeviceAddress); TestAck(); Write8Bit(RomAddress); TestAck(); for(;number! =0;number--) { Write8Bit(*Wdata); TestAck(); Wdata++; } Stop(); DelayMs(10); } /***************************************************************************/ 24C02驱动子程序从存储器读数据 输入参数依次为: 数据缓冲区头指针存储器地址读出字节数 /***************************************************************************/ voidRead24c02(uchar*RamAddress,ucharRomAddress,ucharbytes) { //unsignedchartemp,rbyte; Start(); Write8Bit(WriteDeviceAddress); TestAck(); Write8Bit(RomAddress); TestAck(); Start(); Write8Bit(ReadDviceAddress); TestAck(); while(bytes! =1){ *RamAddress=Read8Bit(); Ack(); RamAddress++; bytes--;} *RamAddress=Read8Bit(); NoAck(); Stop(); } 八、结束语 ****
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 8051 单片机 地温 空调 控制系统