空调控制系统

  • 格式:doc
  • 大小:271.70 KB
  • 文档页数:24

1

设计要求:

设计一空调房间温度控制系统[1],该系统能准确测量房间温度,并根据设定温度进行有效控制。空调设计变频空调制冷(热)量与压缩机转速有关,通过控制压缩机转速频率来控制所需热量。空调模型相当于一个积分环节与一个惯性环节的串联。房间模型主要考虑室内外温度干扰与散热片热量共同作用于具有初始温度房间,经空气导热延迟,简化为具有一阶惯性环节。

设房间热惯性时间常数YT=450,空气导热延迟τ=35,选择合适的控制算法进行控制。 2

1 课程设计的目的与意义

通过该课程的学习使我们对计算机控制系统有一个全面的了解、掌握常规控制算法的使用方法、掌握简单微型计算机应用系统软硬的设计方法,进一步锻炼同学们在微型计算机应用方面的实际工作能力。

课程设计是一项综合性的专业实践活动,目的是让学生将所学的基础理论和专业知识运用到具体的工程实践中,以培养学生综合运用知识能力、实际动手能力和工程实践能力,计算机科学在自动化控制应用上得到了飞速发展,因此,学习这方面的知识必须紧密联系实际,掌握这方面的知识更要强调解决实际问题的能力。我们要着重学会面对一个实际问题,如何去自己的收集资料,如何自己去学习新的知识,如何自己去制定解决问题的方案并通过实践不断地提高分析和解决问题的能力。 3

2 设计任务

2.1 设计内容

设计一空调房间温度控制系统,该系统能准确测量房间温度,并根据设定温度进行有效控制。空调设计变频空调制冷(热)量与压缩机转速有关,通过控制压缩机转速频率来控制所需热量。空调模型相当于一个积分环节与一个惯性环节的串联。房间模型主要考虑室内外温度干扰与散热片热量共同作用于具有初始温度房间,经空气导热延迟,简化为具有一阶惯性环节[2]。

2.2 计划设计进程

一、总体方案设计

二、控制系统的建模和数字控制器设计

三、硬件的设计和实现

1、选择计算机字长(选用 51内核的单片机)

2、设计支持计算机工作的外围电路(EPROM、RAM、I/O端口、键盘、显示接口电路等);

3、设计输入信号接口电路;

4、设计信号输出控制电路;

5、其它相关电路的设计或方案(电源、通信等)。

四、软件设计

1、分配系统资源,编写系统初始化和主程序模块框图;

2、编写A/D转换和位置检测子程序框图;

3、编写控制程序和D/A转换控制子程序模块框图;

4、其它程序模块(显示与键盘等处理程序)框图。

五、编写课程设计说明书,绘制完整的系统电路图(A3幅面)。 4

3 设计方案

空调控制系统可以划分为七大部分:系统控制部分、室内温度采集部分、键盘控制部分、温度显示部分、压缩机控制部分、四通阈控制部分、风机控制部分。各模块电路的框图如图所示。

图1 各模块电路的框图 5

4 空调模型

4.1 模型分析

(1)空调模型相当于一个积分环节与一个惯性环节的串联。房间模型主要考虑室内外温度干扰与散热片热量共同作用于具有初始温度房间,经空气导热延迟,简化为具有一阶惯性环节。

(2)由任务书给定条件:房间热惯性时间常数为450,空气导热延迟τ=35,通过分析,我们选择PID控制算法进行控制。

4.2 MATLAB仿真

图2 MATLAB仿真

4.3 仿真结果

图3 MATLAB仿真结果 6

5 硬件设计

5.1硬件系统框图

根据任务书可知,该系统需要人机界面(按键输入LCD1602显示),AD采样,以及单片机控制部分等模块,并且可以得到以下硬件系统框图

图4 硬件系统框图

5.2 各部分的硬件设计

1温度传感器选择[3]

根据任务要求我们选择了AT590作为温度传感器。AD590电流输出型两端温度传感器是美国模拟器件公司生产的单片集成两端感温电流源。它的主要特性如下:

(1)流过器件的电流(mA)等于器件所处环境的热力学温度(开尔文)度数,即:mA/K式中:流过器件(AD590)的电流,单位为mA;T—热力学温度,单位为K。

2、AD590的测温范围为-55℃~+150℃。

3、AD590的电源电压范围为4V~30V。电源电压可在4V~6V范围变化,电流 变化1mA,相当于温度变化1K。AD590可以承受44V正向电压和20V反向电压,因而器件反接也不会被损坏。

4、精度高。AD590共有I、J、K、L、M五档,其中M档精度最高,在-55℃~+150℃范围内,非线性误差为±0.3℃。

其规格如下: 7

温度每增加1℃,它会增加1μA输出电流。

可量测范围-55℃至150℃。

供应电压范围+4V至30V。

AD590的接脚图及零件符号如下图所示:

AD590的输出电流值说明如下:

其输出电流是以绝对温度零度(-273℃)为基准,每增加1℃,它会增加1μA输出电流,因此在室温25℃时,其输出电流Io=(273+25)=298μA。

Vo的值为Io乘上10K,以室温25℃而言,输出值为2.98V(10K×298μA)。

量测Vo时,不可分出任何电流,否则测量值会不准。

电路分析:

AD590的输出电流I=(273+T)μA(T为摄氏温度),因此电压V为(273+T)μA ×10K=

(2.73+T/100)V。为了将电压量测出来又需使输出电流I不分流出来,我们使用电压追随器其输出电压V2等于输入电压V。

由于一般电源供应较多零件之后,电源是带杂讯的,因此我们使用齐纳二极体作为稳压零件,再利用可变电阻分压,其输出电压V1需调整至2.73V。接下来我们使用差动放大器其输出Vo为(100K/10K)×(V2-V1)=T/10V。如果现在为摄氏28度,输出电压为2.8V。

(2)AD转换器的选择

因为温度变化范围是-50--50度,理论上AD位数只要7位(128级)就够了,

所以系统采用了经典的ADC0809(8位AD)作为AD采样芯片。

温度的计算公式:V=5*Rt/(R+R1+Rt)。

ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。

a.ADC0809的内部逻辑结构 8

图5 ADC0809内部原理

由图5可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

b 引脚结构(如图)

IN0-IN7:8条模拟量输入通道

图6 ADC0809引脚图 9

ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;地址输入和控制线:4条。

ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁 存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。通道选择表如表1所示。

C B A 选择的通道

0 0 0 IN0

0 0 1 IN1

0 1 0 IN2

0 1 1 IN3

1 0 0 IN4

1 0 1 IN5

1 1 0 IN6

1 1 1 IN7

表 1

数字量输出及控制线:11条

ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。D7-D0为数字量输出线。

CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,VREF(+),VREF(-)为参考电压输入。

c.ADC0809应用说明

① ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。 10

②初始化时,使ST和OE信号全为低电平。

③送要转换的哪一通道的地址到A,B,C端口上。

④在ST端给出一个至少有100ns宽的正脉冲信号。

⑤是否转换完毕,我们根据EOC信号来判断。

⑥当EOC变为高电平时,给OE为高电平,转换的数据就输出给单片机了。

(3)按键输入

因为按键数目不多,所以系统直接采用非编码方式,直接连接单片机I/O口。

图7 按键电路

(4)显示部分

系统采用LCD1602,P0和P3.0-P3.2作为输出口,控制LCD显示器,如图8。

图8 LCD1602

(5)输出控制 11

设计使用LCD1602显示当前设定温度和实际测量温度,用两个LED指示当前空调状态(加热或制冷),51单片机的低电平驱动能力较强,LED可以直接连接单片机的I/O口;单片机输出PWM 波经驱动电路从而控制压缩机的转速。

(6)系统硬件设计图 12

图9 硬件原理图 13

6 软件设计

6.1 工作模式分析

由系统要求可以列出表2

工作

模式 设定

温度 实际

温度 压缩机

制冷 25.0度

小于25.0度 工作

制热 25.0度 小于25.0度 工作

保持 25.0度 小于25.0度 不

工作

表 2

根据上表,我们列出一系列子程序,再根据当前状况选择相应的子程序。例如控制部分子程序如下:

void output(int temp1,int temp2)

{

unsigned char table[3];

table[2]=temp1%10; table[1]=(temp1/10)%10; table[0]=(temp1/100)%10;

DisplayString(0,1,"Current T:"); //显示当前测量温度

DisplayOneChar(10,1,table[0]+0x30);

DisplayOneChar(11,1,table[1]+0x30);

DisplayOneChar(8,1,'.');

DisplayOneChar(12,1,table[2]+0x30);

DisplayOneChar(13,1,'C');

table[2]=temp2%10; table[1]=(temp2/10)%10; table[0]=(temp2/100)%10;