空调系统有限状态机的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
空调系统有限状态机的设计
摘要:空调系统状态机自动控制是以可编程逻辑为核心,配以各种传感器,电机驱动,状态机,变频器等实现自动控制,能确保空调末端温度供给,降低系统运行费用和时间,从而节约资源,它必将日趋成熟,在人类的生活中大显身手。一直以来,环保问题时世界关注的焦点,各种替代能源动力车的出现,为空调业提出来新的课题与挑战。现代家用也得发展成为人们生活的追求,空调已成为人们的必备品。
关键字:FPGA,空调系统状态机,自动控制。
一、设计分析:
1.课程设计目的:
本课程设计的目的是在掌握EDA实验开发的初步使用基础上,了解EDA技术,对空调系统进一步了解,掌握其状态机的工作原理,掌握用Verilog实现状态机的方法。通过本课程的设计,更好的巩固加深基础知识的理解,独立完成仿真过程,增强理论联系实际,提高电路分析能力,为日后的学习奠定基础。
2.课程设计要求:
试设计一个空调系统状态机,它两个输入端A和B分别与传感器相连(用两位拨码开关模拟),用于检测室内温度。如果室内温度正常,则A和B均为0。如果室内温度过高,则A为“1”,B为“0”。如果室内温度过低,则A为“0”,B为“1”。根据A和B的值来判断当前的状态,如太热,则在液晶上显示TOO-HOT,并将输出端COOL 置为“1”,并显示,表明现在开始制冷;如太冷,则在液晶上显示TOO-COLD,并将输出端HEAT置为“1”,并显示,表明现在开始加热;如适中,则在液晶上显示JUST-RIGHT,COOL和HEAT都为“0”。
要求一: 由传感器检测室内温度,并将采集来的数据传输到控制系统的预处理单元,在预处理单元将采集来的温度信号与设定值相比较,来判断当前的状态 (太热、太冷或适中),然后将处理结果传输到控制单元,最后由执行机构接受控制单元输出的控制信号,控制
室内空调。
要求二: 脉冲序列检测器广泛应用于现代数字通信系统中。随着通信技术的发展,对多路脉冲序列信号检测要求越来越高,本实验设计一个基于FPGA的多路脉冲序列检测器的设计方案,要求能对多路脉冲序列信号进行检测。设计完成后,经综合和仿真验证波形与代码作用是否一致。
二、软件设计模块程序
1.空调有限自动状态机的总体模块示意图,如图一所示:
输入输出描述如下:
输入: clk,接入系统时钟,作为系统时基,高电平有效。两位的环境采样信号,A为高温,B为低温。四位中间变量,just right=’00'为常温,too cold='01’为太低,too hot='10'为太热,stvar代表当前状态。A=0 并且B=0,则just right= stvar, A=0 并且B=1, 则too cold=stvar,A=1并且B=0,则too hot= stvar.
输出:heaT为加热操作标志,cooL为制冷操作标志,just right 状态无需任何操作,too cold状态时,stvar赋给cool制热,too hot 状态时,stvar 赋给heat制冷。
2.序列检测器总体模块示意图如图二所示:
输入: DIN 是存放8位序列的数值,CLK 为时钟脉冲,CLR 为清零端,中间信号D为标准逻辑矢量,用来存放预制数的每一位,中间信号Q为整型,范围是0到8。
输出: AB 为输出端,用来显示检测序列数的正确性,输出A 或B,A 表明此数与预制的密码相同,B表明不同。
3.程序简要说明
➢空调空调系统的有限状态自动机VHDL程序分析:
Type state_typeis(just_right,too_cold,too_hot);
Attribute sequential_encoding:string;
Attribute sequential_encodingof
state_type:typeis"000110";
signalstvar:state_type;
attribute state_vector:string;
attribute state_vector of style_b:architecture is "stvar";
定义state_type的属性sequential_encoding,定义stvar的属性state_vector,给just_right,too_cold,too_hot分别赋值“00 01 10”。
(2)wait until clk='1';
if(temp_low=’1’) then stvar -too_cold;
elsif(temp_high=’1’) then stvars =too_hot;
else stvar<=just_right;
end if;
case stvar is
when just_right=>heat<='0';cool<='0';
when too cold=>heat<='l';cool<='0';
when too_hot=>heat<='0';cool<='1';
end case;
当clk为上升沿时,先判断temp_low,temp_high的值,再断给stvar赋什么值,当temp_low=' 1’时,stvar<=too_cold,则输出heat<='l';cool<='0';当temp_high='l'时,stvar<=too_hot,则输
出heat<='0';coo1<=' 1';当temp_low='0',temp_high='0'时,stvar<=just_right,则输出heat<='0';cool<='0'、
➢序列检测器VHDL程序分析
d<=“11100101”
process(clk,clr)
begin
ifclr='1'thenq<=0;
elsifclk'eventandclk='1'then
If clr=’1' then q<=0;
elsif clk'event and clk='1' then
首先设置了一个8位待检测的预置数,之后定义一个进程,该进程语句是对信号clk, clr 敏感,这两个信号中只要有一个信号发生变化,都将启动该进程语句,在进程语句中,如果清除信号为高电平,那么q就置零,否则当来一个上升沿时钟脉冲,就进行序列检测。(2) case q is
When 0=>if din=d(7)then q<=1;else q<=0;end if;
when 1=>if din=d(6)then q<=2;else q<=0:end if;
When 2=>if din=d(5)then q<=3;else q<=O;end if;
When 3=>if din=d(4)then q<-4;else q< 0;end if;
when4=>if din=d(3) then q<=;else q<=0;end if;
When5=>if din=d(2) then q<=6;else q<=0;end if;