Verilog HDL家用空调温度控制器设计

合集下载

空调温度自动控制器最终版

空调温度自动控制器最终版

空调温度控制器课程设计报告目录引言 (1)第一章设计目的 (1)第二章设计任务与要求 (2)第三章方案设计与论证 (2)1 方案一 (2)2 方案二 (2)3 方案比较 (3)4 方案详细介绍 (3)第四章电路工作原理及说明 (4)1 温度信号采集模块工作原理 (4)2温度信号处理与控制模块工作原理 (4)1 LM324运算放大器功能介绍 (4)2 LM324功能测试及信号处理 (5)4 CD4011 芯片功能介绍 (7)3 电机控制模块工作原理 (8)第五章电路性能指标的测试 (9)1 温度信号采集模块性能测试 (9)2 双限比较器输出信号性能测试 (9)第六章结论与体会 (10)结论 (10)体会 (11)展望 (11)第八章参考文献 (12)附录Ⅰ元器件清单 (12)附录Ⅱ整体电路原理图 (1)引言十九世纪末、二十世纪初,电子技术开始逐渐发展起来,并成为一项新兴技术。

它在二十世纪发展最为迅速,应用最为广泛,并且成为了近代科学技术发展的一个重要标志。

第一代电子产品以电子管为核心。

四十年代末世界上诞生了第一只半导体三极管,它以小巧、轻便、省电、寿命长等特点,很快地被各国应用起来,在很大范围内取代了电子管。

五十年代末期,世界上出现了第一块集成电路,它把许多晶体管等电子元件集成在一块硅芯片上,使电子产品向更小型化发展。

集成电路从小规模集成电路迅速发展到大规模集成电路和超大规模集成电路,从而使电子产品向着高效能低消耗、高精度、高稳定、智能化的方向发展。

随着科学技术的迅猛发展,电子控制电路在日常生活中有了更为广泛的应用,各种报警专用集成电路、语音/音效集成电路、传感器的不断推出,一些新颖实用的报警器、警示器电路已广泛应用于家庭生活、工农业生产、交通、机动车、通信和防盗、防灾等领域。

目前空调机已经广泛地应用于生产、生活中。

而此类家电越来越趋于轻巧型。

微型单片机系统以其体积小、性能价格比高,指令丰富、提供多种外围接口部件、控制灵活等优点,广泛应用于各种家电产品和工业控制系统中,在温度控制领域的应用也十分广泛。

基于FPGA的温控系统的设计

基于FPGA的温控系统的设计

综合电子系统设计报告实验名称:基于FPGA的温控系统的设计班级:电子1202学号:姓名:__指导教师:前言基于FPGA与温度传感器DS18B20设计实现了单回路水箱温度PID 控制系统。

软件主要包括PID控制算法及PWM波产生模块、DS18B20驱动模块、数码管显示驱动模块等3个模块。

仿真结果验证了设计的正确性。

实验结果说明,系统输出温度到达微小超调的稳定控制要求,表达了该设计方法的有效性和实用性。

基于微处理器的温度控制系统改变了传统模拟温度控制系统参数整定不灵活的问题。

但是常规微处理器无法防止在恶劣环境下程序跑飞的问题。

利用FPGA实现温度控制系统的设计,不仅可以提高系统的运算速度、减小系统的体积,还可以增强系统的可靠性,具有较强的应用前景。

本设计首先针对Altera公司的CycloneII系列FPGA芯片,基于QUARTUSII软件,采用verilogHDL编程设计了主要包括PID控制算法及PWM波产生模块、DS18B20驱动模块、数码管显示驱动模块等功能模块程序。

然后用Modelsim软件仿真验证了各模块的正确性。

最后以水箱为被控对象,以目前市场上性价比拟高的FPGA芯片EP2C8Q208C8为核心器件,结合温度传感器DS18B20、键盘、数码管以及固态继电器等器件设计实现了单回路水温PID控制系统。

在控制温度为30~90℃的实验条件下,误差小于1℃,系统输出温度到达微小超调的稳定控制要求。

关键词:FPGA DS18B20 PID PWM波一、方案设计1、方案设计比拟温度传感器模块设计方案一:采用热敏电阻pt100。

这种电阻输出的是模拟量,所以硬件构造较复杂,需要用到桥式电路将采集到的温度转化为电压输出,而且为了实现AD转化,还要加放大电路。

另外,这种测温系统难以实现多点测温,也要用到复杂的算法,一定程度上也增加了软件实现的难度。

方案二:采用单总线数字温度传感器DS18B20测量温度,直接输出数字信号。

家用空调温度控制器的控制程序设计 课程设计

家用空调温度控制器的控制程序设计 课程设计

《微机原理及接口技术》课程设计说明书课题:家用空调温度控制器的控制程序设计专业:班级:1201姓名:学号:指导老师:王亚林2015年1月8 日目录第1章、设计任务与目标............................................................................. 错误!未定义书签。

1.1设计课题:....................................................................................... 错误!未定义书签。

1.2设计目的:....................................................................................... 错误!未定义书签。

1.3设计任务:....................................................................................... 错误!未定义书签。

1.4基本设计要求:............................................................................................................. 错误!未定义书签。

第2章、总体设计规划与方案论证 (6)2.1设计环节及进程安排 (6)2.2方案论证 (6)第3章、总体软件设计说明及总流程图 (10)3.1总体软件设计说明 (10)3.2总流程图 (11)第4章、系统资源分配说明 (13)4.1系统资源分配 (13)4.1.1系统内部单元分配表 (13)4.1.2硬件资源分配 (15)4.2数据定义说明 (16)4.2.1部分数据定义说明 (16)第5章、局部程序设计说明 (17)5.1总初始化以及自检5.2主流程5.2.1 按键音模块 (17)5.2 .2 单按键消抖模块 (17)5.2.3 PB按键功能模块 (18)5.2.4. 基本界面拆字模块 (19)5.2.5 4*4矩阵键盘模块 (19)5.2.6 模式显示模块 (20)5.2.7 显示更新模块 (21)5.2.8 室内温度AD转换模块 (21)5.2.9 4*4矩阵键盘扫描子程序 (21)5.2.10 整点报时模块 (23)5.2.11 空调进程判断及显示模块 (23)5.2.12 三分钟压缩机保护模块 (23)5.2.13 风向摆动模块 (24)5.2.14 驱动控制模块 (24)5.2.15 定时开关机模块 (25)第6章、系统功能与用户操作使用说明 (26)6.1操作显示部分 (26)6.2系统功能 (26)6.3用户操作使用说明 (27)第7章、课程设计总结 (27)第8章、附录:源程序清单 (30)第1章设计任务与目标1.1设计课题:家用空调温度控制器的控制程序设计1.2设计目的:通过小型微机应用产品控制程序的设计与调试过程,运用《微机原理及接口技术》课程所学的基本知识,进而得到理解、巩固和提高,学习掌握分析与解决实际问题的方法与手段,提高设计、编程与调试的实际动手能力,作为工程技术工作的一次基本训练。

基于VHDL的智能空调控制器设计

基于VHDL的智能空调控制器设计

数字系统设计与硬件描述语言期末考试作业基于VHDL的智能空调控制器设计一、选题设计描述1.功能介绍随着科技的发展,家用电器越来越智能化,空调控制器也不例外。

根据平日学习和日常经验,我本次设计的智能空调控制器具备以下功能:1)工作时间设定:半小时、一小时、一个半小时、两小时。

2)工作模式设定:强风、弱风、自然风、睡眠模式。

3)工作温度设定:用户可自由设置温度,控制器将室温与设置温度作比较。

当室温低于设置温度时,空调温度升高;当室温高于设置温度时,空调温度下降;当室温等于设置温度时,温度不再变化。

开关打开时,显示温度为设置温度;开关关闭时,显示温度为室温。

2.算法简介1)时间设置模块:半小时即三十分钟,我用一个三十进制计数器实现,每经过30个时钟脉冲产生一个定时脉冲,同时个位和十位清零;一小时即六十分钟,我用一个六十进制计数器实现,每经过60个时钟脉冲产生一个定时脉冲,同时个位和十位清零;以此类推。

2)模式选择模块:我用“00”、“01”、“10”、“11”分别代表“强风”、“弱风”、“自然风”、“睡眠模式”四种模式,通过一个4选1数据选择器实现。

3)温度设置模块:室温与设置温度的比较通过IF语句实现,温度的增减用计数器实现。

4)开关模块:我选择了一个三输入开关控制器,相当于一个三输入或门和另一个非门相与。

三个输入即上述“时间设置模块”、“模式选择模块”、“温度设置模块”,当任一模块开始工作且禁止端为低电平时,开关就打开,空调就开始工作。

5)显示模块:上述模块都需要数码管来显示,我用两个BCD-七段译码器分别显示个位和十位,从而看出时间和温度的变化。

二、程序源代码及说明1)顶层代码,仿真结果见图1、图2LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY air_conditioning ISPORT(a,b,c,d,clk,CLR,s1,s2,switch1,EN1,EN2,off :IN STD_LOGIC;SETDECADE, SETUNIT, ROOMDECADE, ROOMUNIT: IN STD_LOGIC_VECTOR(3 DOWNTO 0);z,engine :BUFFER STD_LOGIC;shi,ge,temp_shi,temp_ge :OUT STD_LOGIC_VECTOR(6 DOWNTO0));END ENTITY;ARCHITECTURE connect OF air_conditioning ISCOMPONENT mux41PORT(s1,s2 : IN STD_LOGIC;a,b,c,d : IN STD_LOGIC;z : OUT STD_LOGIC);END COMPONENT mux41;COMPONENT thirtyPORT(CLK,CLR ,EN: IN STD_LOGIC;UNIT,DECADE : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --个位和十位TIMING : OUT STD_LOGIC); --定时脉冲END COMPONENT thirty;COMPONENT sixtyPORT(CLK,CLR,EN : IN STD_LOGIC;UNIT,DECADE : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --个位和十位TIMING : OUT STD_LOGIC); --定时脉冲END COMPONENT sixty;COMPONENT tempPORT(CLK,SWITCH: IN STD_LOGIC; --CLK时钟SWITCH使能端SETDECADE, SETUNIT, ROOMDECADE, ROOMUNIT: INSTD_LOGIC_VECTOR(3 DOWNTO 0); --SETDECADE设置温度的十位SETUNIT设置温度的个位ROOMDECADE室温的十位ROOMUNIT室温的个位OUTDECADE, OUTUNIT: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); --OUTDECADE输出温度的十位OUTUNIT输出温度的个位END COMPONENT temp;COMPONENT switchPORT(s1,s2,s3,off: IN STD_LOGIC;engine: OUT STD_LOGIC);END COMPONENT switch;COMPONENT decoderPORT(inp: IN STD_LOGIC_VECTOR(3 DOWNTO 0);outp: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END COMPONENT decoder;SIGNAL T30,T60: STD_LOGIC;SIGNAL D0,D1,D2,D3,U0,U1,U2,U3:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS(EN1,EN2)V ARIABLE S : STD_LOGIC_VECTOR(1 DOWNTO 0);--存储的一个变量BEGINS := EN1 & EN2;CASE S ISWHEN "10" => D0<=D1;U0<=U1; --设定为30WHEN "01" => D0<=D2;U0<=U2; --设定为60WHEN OTHERS => NULL;END CASE;END PROCESS;U10: mux41 PORT MAP(s1=>s1,s2=>s2,a=>a,b=>b,c=>c,d=>d,z=>z);U20: thirty PORTMAP(CLK=>CLK,CLR=>CLR,en=>en1,TIMING=>T30,DECADE=>D1,UNIT=>U1);U30: sixty PORTMAP(CLK=>CLK,CLR=>CLR,en=>en2,TIMING=>T60,DECADE=>D2,UNIT=>U2);U40: temp PORTMAP(CLK=>CLK,SWITCH=>switch1,SETDECADE=>SETDECADE,SETUNIT=>SETUNIT,ROOMDECADE=>ROOMDECADE,ROOMUNIT=>ROOMDECADE,OUTDECADE=>D3,OUTUNIT=>U3);U50: switch PORT MAP(s1=>Z,s2=>(T30 ORT60),s3=>SWITCH1,off=>off);U60: decoder PORT MAP(inp=>D0,outp=>shi); --时间十位U70: decoder PORT MAP(inp=>U0,outp=>ge); --时间各位U80: decoder PORT MAP(inp=>D3,outp=>temp_shi);--温度十位U90: decoder PORT MAP(inp=>U3,outp=>temp_ge); --温度各位END ARCHITECTURE;实验原理图如下:2)时间设置模块i.三十进制计数器,仿真结果见图3LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY thirty ISPORT(CLK,CLR,en : IN STD_LOGIC;UNIT,DECADE : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --个位和十位TIMING : OUT STD_LOGIC); --定时脉冲END ENTITY thirty;ARCHITECTURE activ OF thirty ISSIGNAL add : STD_LOGIC; --进位BEGINPROCESS (CLK,CLR)V ARIABLE UN : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF CLR = '1' THEN UN:="0000"; --CLR有清零的作用ELSIF CLK' EVENT AND CLK='1' AND EN='1' --CLK发生跳变且跳变后为高电平THEN IF UN="1001" THEN UN:="0000"; add<='1'; --个位加到9后返回0并产生进位ELSE UN:=UN+1; add<='0';END IF;END IF;UNIT<= UN;END PROCESS;PROCESS (CLK,CLR,add)V ARIABLE DEC : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF CLR = '1' THEN DEC:="0000";ELSIF CLK' EVENT AND CLK='1' AND EN='1'THEN IF add='1' --进位是1THEN IF DEC="0010" THEN DEC:="0000"; --十位加到“0010”时,经过了30个时间脉冲,之后返回“0000”,同时产生一个定时脉冲TIMING<='1';ELSE DEC:=DEC+1; TIMING<='0';END IF;END IF;END IF;DECADE<= DEC;END PROCESS;END activ;ii.六十进制计数器,仿真结果见图4LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY sixty ISPORT(CLK,CLR, EN: IN STD_LOGIC;UNIT,DECADE : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --个位和十位TIMING : OUT STD_LOGIC); --定时脉冲END ENTITY sixty;ARCHITECTURE activ OF sixty ISSIGNAL add : STD_LOGIC; --进位BEGINPROCESS (CLK,CLR)V ARIABLE UN : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF CLR = '1' THEN UN:="0000"; --CLR有清零的作用ELSIF CLK' EVENT AND CLK='1' AND EN='1'--CLK发生跳变且跳变后为高电平THEN IF UN="1001" THEN UN:="0000"; add<='1'; --个位加到9后返回0并产生进位ELSE UN:=UN+1; add<='0';END IF;END IF;UNIT<= UN;END PROCESS;PROCESS (CLK,CLR,add)V ARIABLE DEC : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF CLR = '1' THEN DEC:="0000";ELSIF CLK' EVENT AND CLK='1' AND EN='1'THEN IF add='1' --进位是1THEN IF DEC="0101" THEN DEC:="0000"; --十位加到“0101”时,经过了60个时间脉冲,之后返回“0000”,同时产生一个定时脉冲TIMING<='1';ELSE DEC:=DEC+1; TIMING<='0';END IF;END IF;END IF;DECADE<= DEC;END PROCESS;END activ;3)模式选择模块,4选1数据选择器,仿真结果见图5LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux41 ISPORT(s1,s2 : IN STD_LOGIC; --选择端口a,b,c,d : IN STD_LOGIC; --数据端口z : OUT STD_LOGIC);END ENTITY mux41;ARCHITECTURE activ OF mux41 ISSIGNAL s : STD_LOGIC_VECTOR (1 DOWNTO 0);BEGINs <= s1&s2; --将两个标准逻辑位型变成一个标准逻辑位矢量型PROCESS (s,a,b,c,d)BEGINCASE s ISWHEN "00" => z<= a ;WHEN "01" => z<= b ;WHEN "10" => z<= c ;WHEN "11" => z<= d ;WHEN OTHERS => z<= 'X' ;END CASE ;END PROCESS ;END activ ;4)温度设置模块,包含比较和计数两种功能,仿真结果见图6LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY temp ISPORT(CLK,SWITCH: IN STD_LOGIC; --CLK时钟SWITCH使能端SETDECADE, SETUNIT, ROOMDECADE, ROOMUNIT: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --SETDECADE设置温度的十位SETUNIT设置温度的个位ROOMDECADE室温的十位ROOMUNIT室温的个位OUTDECADE, OUTUNIT: OUT STD_LOGIC_VECTOR(3 DOWNTO0)); --OUTDECADE输出温度的十位OUTUNIT输出温度的个位END ENTITY temp;ARCHITECTURE behav OF temp ISSIGNAL HD,HU : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK,SWITCH,SETDECADE,SETUNIT,ROOMDECADE,ROO MUNIT,HD,HU)BEGINIF SWITCH='0' THEN HD<= ROOMDECADE; HU<= ROOMUNIT;--当使能端关闭时将室温赋给信号端ELSIF CLK'EVENT AND CLK='1' THEN --CLK发生跳变且跳变后为高电平IF HD&HU<SETDECADE&SETUNIT THEN --室温低于设置温度,温度上升IF HU<"1001" THEN HU<= HU+1;ELSE HU<="0000"; HD<=HD+1;END IF;ELSIF HD&HU>SETDECADE&SETUNIT THEN --室温高于设置温度,温度下降IF HU>"0000" THEN HU<= HU-1;ELSE HU<="1001"; HD<=HD-1;END IF;ELSE HD<=SETDECADE; HU<=SETUNIT; --室温与设置温度相同,保持温度显示不变END IF;END IF;OUTDECADE<=HD; OUTUNIT<=HU; --输出温度END PROCESS;END behav;5)开关模块,三输入开关控制器,仿真结果见图7LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY switch ISPORT(s1,s2,s3,off: IN STD_LOGIC;engine: OUT STD_LOGIC);END ENTITY switch;ARCHITECTURE activ OF switch ISBEGINPROCESS(s1,s2,s3,off)BEGINIF off='1' THEN engine<='0'; --禁止端位于高电平时,电动机不工作ELSIF s1='1' or s2='1' or s3='1' THEN engine<='1'; --禁止端位于低电平,三输入中有一个工作,电动机就打开END IF;END PROCESS;END activ;6)显示模块,七段译码器,仿真结果见图8LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY decoder ISPORT(inp: IN STD_LOGIC_VECTOR(3 DOWNTO 0);outp: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END ENTITY decoder;ARCHITECTURE screen OF decoder ISBEGINPROCESS(inp)BEGINCASE inp IS --将四位二进制数通过七段译码器显示出来WHEN"0000" => outp<="1111110";WHEN"0001" => outp<="0110000";WHEN"0010" => outp<="1101101";WHEN"0011" => outp<="1111001";WHEN"0100" => outp<="0110011";WHEN"0101" => outp<="1011011";WHEN"0110" => outp<="1011111";WHEN"0111" => outp<="1110000";WHEN"1000" => outp<="1111111";WHEN"1001" => outp<="1111011";WHEN OTHERS => outp<="0000000";END CASE;END PROCESS;END screen;三、仿真结果及分析图1 总体仿真结果(上)图2 总体仿真结果(下)图3 三十进制计数器由仿真波形可见,当CLR置于高电平时,计数清零;当CLR置于低电平时,每经过一个时钟脉冲,个位加一,每经过10个时钟脉冲,十位加一,每经过30个时钟脉冲产生一个定时脉冲,同时个位和十位同时归零。

空调系统状态机自动控制系统verilog语言设计

空调系统状态机自动控制系统verilog语言设计

《FPGA》设计报告题目:学院:专业:班级:姓名:学号:摘要:空调系统状态机自动控制是以可编程逻辑为核心,配以各种传感器,电机驱动,状态机,变频器等实现自动控制,能确保空调末端温度供给,降低系统运行费用和时间,从而节约资源,它必将日趋成熟,在人类的生活中大显身手。

关键字:FPGA,空调系统状态机,自动控制。

一设计背景:空调的发明已经列入20世纪全球十大发明之一,它首次向世界证明了人类对环境温度、湿度、通风和空气品质的控制能力。

我们现在所定义的空调出现于18世纪90年代到19世纪初的一次科学技术的急速发展。

19世纪初,英国科学家及发明家麦克*法拉第,发现压缩液化某种气体可以将空气冷冻,此现象出现在液化亚摩亚蒸发时,当时其意念仍流于理论化。

二十世纪六七十年代美国为解决干旱缺水地区的冷热源问题而率先研制出冷式冷水机,用空气散热代替冷却塔,设备设计和制造技术在90年代被转让到中国。

随着人们生活水平的逐渐提高,空调产品也将由“生活奢侈品”逐渐变为日常生活用品。

在空调健康,节约功能以及外观设计上,国内企业引进,消化,吸收,技术水平产品及产品质量都在不断的趋于完善,我国已经发展为世界空调产业重要研发和生产基地。

二课程设计目的和要求:1课程设计目的:本课程设计的目的是在掌握EDA实验开发的初步使用基础上,了解DEA技术,对空调系统进一步了解,掌握其状态机的工作原理,掌握用Verilog实现状态机的方法。

通过本课程的设计,更好的巩固加深基础知识的理解,独立完成仿真过程,增强理论联系实际,提高电路分析能力,为日后的学习奠定基础。

2课程设计要求:试设计一个空调系统状态机,它两个输入端TEMP-HIGH和TEMP-LOW分别与传感器相连(用两位拨码开关模拟),用于检测室内温度。

如果室内温度正常,则TEMP-HIGH和TEMP-LOW均为0。

如果室内温度过高,则TEMP-HIGH为“1”,TEMP-LOW为“0”。

如果室内温度过低,则TEMP-HIGH为“0”,TEMP-LOW为“1”。

基于FPGA的智能温度控制器

基于FPGA的智能温度控制器

基于FPGA的智能温度控制器基于FPGA的智能温度控制器在实际工程当中,对环境的温度控制的要求不断提高,智能温度控制器对温度的控制更加精准和稳定。

智能温度控制器的硬件部分组成有温度传感器、放大器、A/D,D/A转换器等部分构成。

在Quartus开发环境下用VHDL语言实现了智能温度控制器的数据采集、时钟记时和定时报警、温度控制等模块,并利用FPGA实现相应的功能,经过波形仿真验证了设计的可行性。

一、实验原理AD590温度传感器的感测能力是温度每升高1K就增加1uA的电流量,该电流流入10k 电阻后将产生10mV的电压。

而0℃(等于273K)时,输出电流273uA,经过I/V转换后,将产生2.73V的电压。

如果测得的电压为xV时,则可由(x-273)÷0.01得到要测量的而温度。

温度传感器AD590的Vin(+)管教。

ADC0809 的是8位数模转换器。

测量精度为0.02V,当ADC0809的转换值为x时,所测得的温度为T=(x*0.02-2.73)÷0.01=x*2-273.控制功能由FPAG实现。

在FPGA中对测得的实际温度T值和标准值tempconstant进行比较,若实际温度比设定的温度值要低,那么输出加热信号到后向加热器件,否则不进行加热。

当检测到实际温度在标准值范围tempconstant-3<t<tempconstant+3时,时钟开始计时,如果温度保持在这个范围的时间达到设定时间时,fpga输出信号给蜂鸣器实现报警功能。

< bdsfid="68" p=""></t<tempconstant+3时,时钟开始计时,如果温度保持在这个范围的时间达到设定时间时,fpga输出信号给蜂鸣器实现报警功能。

<>二、模块设计1、ADC0809模数转换模数转换芯片采用的是ADC0809,具体的连接电路图如下VREF同IN0—IN7管角中任选一路作为前向温度采集电路的输入,VCC与VREF与GND接地,OUT1—OUT8数据输出端连接FPGA,START,时接+5V电压,_OE,EOC,ADDA-C均连接FPGA,根据ADC0809的工作时序图,由FPGA给出相应的信号控制ADC0809。

基于verilog HDL语言的遥控器设计

基于verilog HDL语言的遥控器设计

《EDA技术与Verilog HDL》课程实验报告实验项目名称:基于Verilog HDL语言的遥控器设计队别:二队专业:电子工程指导教员:学员姓名:学号:成绩:同组学员姓名:实验地点:2328实验室实验日期:2012 年10月18 日一、实验项目名称基于Verilog HDL语言的遥控器设计二、实验目的和要求(1)实验目的1.掌握Verilog HDL语言的基本运用;2.熟悉QuartusⅡ的简单操作;3.掌握一个基本EDA工程设计流程;4.掌握遥控器的设计基本原理。

(2)实验要求1.对于待发射的码序列中的‘1’信号,脉冲调制信号的脉宽为4个时钟周期,占空比为1/8;对于‘0’信号,脉冲调制信号的脉宽为2个时钟周期,占空比为1/4。

2.遥控装置上共有1-10十个数字按纽,每按下一个按钮将产生一个该数字的四位二进制数调制序列输出。

三、实验内容和原理1、遥控器共使用寄存器、分频、编码、顶层描述等模块来实现其功能。

其总体结构如下图所示。

(1) 寄存器模块该模块实现功能:实现数据的依次输出。

(2)分频电路模块该模块实现功能:分别产生一个4个时钟周期和一个2个时钟周期的信号作为发射码序列中的“1”信号和”0”信号。

分频模块共分为2个部分,分别为二分频和四分频。

二分频的时序仿真图像如下:遥控器顶层描述模块 寄存器模块分频模块 编码模块二分频 四分频四分频的时序仿真图像如下:(3) 编码模块该模块实现功能:实现遥控器的十个按钮功能,每按下一个按钮将产生一个该数字的四位二进制数调制序列输出。

(4)顶层描述模块该模块实现功能:将分频模块、寄存器模块、编码模块综合到一起,共同实现遥控器的功能要求。

顶层描述模块的时序仿真图像如下:四、实验结果分析本次对于遥控器的设计,结果中输出的波形基本正确,但是在输入和输出之间有一线部分延迟,通过分析认为是由移位寄存器的输出导致的延迟。

本设计全部采用Verilog HDL文本描述,所有文本存放在同一个工作文件夹中。

基于vhdl语言的智能空调控制器的设计报告

基于vhdl语言的智能空调控制器的设计报告

数字系统设计与硬件描述语言期末考试作业题目:智能空调控制器的设计学院:电子信息工程学院专业:电子信息工程学号:3012204273姓名:王欢2015-01-09一、选题设计描述1.功能介绍对于这次的期末课程作业,我选择的是智能空调控制器的设计。

众所周知,日常使用的空调至少具有定时、控温、模式选择等基本功能。

我设计的这个智能空调主要能实现以下几种功能:①四种模式选择:强风、弱风、自然风、睡眠状态。

②工作时间设定:半小时、一小时、一个半小时、两小时。

③工作温度设置:可以自由设置温度,然后将室温与设置的温度进行比较,当室温低于设置的温度时,空调温度升高;当室温高于设置的温度时,空调温度下降;并且当室温达到设置的温度时,温度就不再变化。

2. 算法简介按照上述的几种功能介绍,我将分几个模块依次介绍:①模式选择模块:因为有4种模式,所以用一个4路数据选择器就可以实现。

“00”、“01”、“10”、“11”分别代表“强风”、“弱风”、“自然风”、“睡眠状态”。

②时间设置模块:半个小时即三十分钟,可以用一个三十进制的计数器来实现定时,一个小时即六十分钟,可以用一个六十进制的计数器实现,依此类推即可。

③温度设置模块:室温与设置温度的比较需要用比较语句来实现,空调温度的增减都需要用计数器来实现,所以这是一个包含比较和计数两种功能的电路。

④开关模块:我采用的是一个是三输入开关控制器,三个输入分别代表模式选择、时间设置、温度设置,只要其中有一个模块开始工作,那么开关就打开,空调就开始工作。

⑤显示模块:上述几个模块都需要这个模块来进行显示。

用两个BCD-七段译码器来分别显示显示十位和个位。

就可以看出温度和时间的变化。

二、程序源代码及说明①模式选择,四选一数据选择器:仿真见图一LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY xuanze ISPORT(a,b,c,d,s1,s2 : IN STD_LOGIC; ---a,b,c,d是数据端口,s1和s2是选择端口。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字系统课程设计设计报告设计题目:家用空调温度控制器班级:电技081******学号:**********日期:2010-12-31一设计题目的要求:家用空调温度控制器的功能为:1、室内温度可由按键设置,温度的设置范围为20度至39度。

2、有加热和制冷两种工作模式。

当空调工作在加热模式时,如果室温低于设定温度,空调加热,反之,不加热;当空调工作于制冷模式时,如果室温高于设定温度,空调制冷,反之空调不制冷。

3、对室内温度用两位数码管进行实时显示。

二设计方案及其工作原理:总的设计框图如下:本电路由控制核心cpu、按键、4位锁存器、数码管7位译码器电路组成。

cpu:负责数据接收;室温和设定温度的比较;工作模式选择;显示数据的输出;加热制冷信号的控制;报警信号的输出等。

按键:负责设定标准温度,设置温度的升高与降低。

锁存器:将cpu输出的显示信号锁存,防止干扰,将信号送给译码器。

译码器:将BCD码译成数码管显示用的高低电平。

工作原理在reset信号作用下,设定温度寄存器赋初值,初值为26度,通过add (温度升)和down(温度减)来步进调整设定温度(步进为一)。

按键(key)模块通过seta和setb输出端口将设定温度传给cpu。

cpu接收到设定温度后将其与由温度传感器传来的室温xy比较,将比较结果标志存在寄存器(flag)中。

读取用户工作模式(mod=1时为加热,mod=0时为制冷)。

在加热模式状态下,根据flag的值给出加热控制寄存器heat赋值;在制冷模式状态下,根据flag的值给制冷状态寄存器cool赋值。

cpu还将设置温度与设置温度范围比较,将比较结果标志存在报警寄存器flag_high(超上界寄存器)和flag_low(超下界寄存器)。

cpu还将室温和设定温度分别存放在室温寄存器和设定温度寄存器中。

最后,cpu将寄存器的值通过各端口输出。

各锁存器将数据锁存后在时钟信号的作用下将锁存信号输出给译码器,译码器再把BCD码转换成数码管显示的高低电平,数码管显示出室温和设置温度。

Led灯接到有效信号后点亮,指示设定温度是否越界(led_settoohigh表示设置温度过高;led_settoolow表示设置温度过低)。

三各单元电路设计:1、cpu设计cpu框图如下:disp_outx:室温十位输出显示disp_outy:室温个位输出显示disp_outa:设置十位输出显示disp_outb:设置个位输出显示cool:制冷输出信号heat:加热输出信号led_settoohigh:设定温度超越上限报警led_settoolow:设定温度超越下限报警x:室温十位输入y:室温个位输入a:设定温度十位输入b:设定温度个位输入mod:用户加热制冷模式选择clk:时钟脉冲flag:室温和设置温度比较标志位寄存器flag_high:设置温度超越上界标志位寄存器flag_low:设置温度超越下界标志位寄存器2、按键(key)设计按键(key)框图如下:seta 输出温度设定十位setb 输出温度设定个位add 设定温度加一down 设定温度减一clk 时钟信号reset复位信号(用于寄存器赋初值)3、锁存器设计锁存器框图如下:data:锁存数据输入qout:锁存数据输出clk:时钟信号4、译码器设计译码器框图如下:D4:译码器BCD码输入信号a,b,c,d,e,f,g:译码器输出信号(输入给数码管)四模拟仿真验证及结果分析:因整体仿真验证结果不易说明效果,故将各模块仿真结果予以分析。

1、cpu仿真结果cpu仿真结果如图:分析:前两个周期,用户模式为加热模式(mod=1)室温<设定温度,加热(heat=1);5~6周期用户模式为制冷(mod=0),室温>设定温度,制冷(cool=1);第7~9周期设置温度<20度,超越下界报警(led_settoolow=1);第10~12周期,设置温度>39度,超越上界报警(led_settoohigh=1)。

2、键盘仿真结果键盘仿真结果如图:分析:前2周期,reset=1,设置温度被设为26度,第5~10周期,add=1,设置温度每周期递增一;第12~20周期down=1,设置温度每周期递减一,21~27周期,没有增加和减少信号,温度稳定在24度。

3、锁存器仿真结果锁存器仿真结果如图:分析:如图,在每个时钟的上升沿将data中数据从qout输出。

4、译码器仿真结果译码器仿真结果如图:分析:D4输入8时,abcdefg为:1111111,D4输入为7时,abcdefg为:1110000,符合数码管显示规则。

下图为整个顶层结果仿真图(部分),仅供参考:五总结体会:在这次课程设计的过程中,遇到了很多的问题;但也学习到了很多平时上课不曾接触到的东西、不懂的知识。

了解到了具体的大工程是如何生成的、进一步掌握并熟悉了verilog HDL语言,同时也学会了同学之间相互的团结和协作。

通过本次课程设计,我懂得一个工程,必须先要有一个总体的方案,心中要明确设计的目的,如何才能达到这个目的;然后划分模块,将复杂抽象的问题具体简单化;接着逐个设计每个模块,调试,分析,再调试,直到完成各个模块的要求为止;最终,将各个模块整合起来,完成整体模块,完成工程设计。

可谓受益匪浅……。

附录:程序源代码/*温度控制cpu*///disp_outx 室温十位输出显示//disp_outy 室温个位输出显示//disp_outa 设置十位输出显示//disp_outb 设置个位输出显示//cool 制冷输出信号//heat 加热输出信号//led_settoohigh 设定温度超越上限报警//led_settoolow 设定温度超越下限报警//x 室温十位输入//y 室温个位输入//a 设定温度十位输入//b 设定温度个位输入//mod 用户加热制冷模式选择//clk 时钟脉冲//flag 室温和设置温度比较标志位寄存器//flag_high 设置温度超越上界标志位寄存器//flag_low 设置温度超越下界标志位寄存器module cpu(disp_outx, disp_outy, disp_outa, disp_outb, cool, heat, led_settoohigh, led_settoolow,x,y,a,b,mod,clk);output[3:0] disp_outx, disp_outy, disp_outa, disp_outb;output cool, heat, led_settoohigh, led_settoolow;input[3:0] x,y,a,b;input mod,clk;reg[3:0] disp_outx, disp_outy, disp_outa, disp_outb;reg[1:0] flag;reg flag_high,flag_low, cool, heat, led_settoohigh, led_settoolow;always@(posedge clk)beginbegin /*设定温度上下界标志位判断*/ if(a>=4)beginflag_high =1;flag_low=0; //flag_high=1 设定温度超出上界endelse if(a<2)beginflag_low=1; //flag_low=1 设定温度超出下界flag_high =0;endelsebeginflag_low =0;flag_high=0; // flag_low =0 flag_high=0 设定温度在正常范围内endendbegin /*室温与设置温度比较标志位判断*/if(x>a)flag=2'b01; //flag=01 室温高于设定温度else if(x<a) //flag=10 室温低于设定温度flag=2'b10;elsebeginif(y>b)flag=2'b01;else if(y<b)flag=2'b10;elseflag=2'b11; //flag=11 室温等于设定温度endendbegin /*制冷、加热输出寄存器赋值*/if(mod)begin //mod=1 加热模式下if((flag==2'b01) || (flag==2'b11))beginheat=0; //停止加热cool=0;endelse if(flag==2'b10)begin //加热heat=1;cool=0;endendelse //mod=0 制冷模式下beginif((flag==2'b10) || (flag==2'b11))begincool=0; //停止制冷heat=0;endelse if(flag==2'b01)begincool=1; //制冷heat=0;endendendbegin /*显示、报警输出寄存器赋值*/if(!flag_high&&!flag_low) //室温和设定温度显示寄存器赋值begindisp_outx=x;disp_outy=y;disp_outa=a;disp_outb=b;led_settoohigh =0;//led_settoohigh =0 led_settoolow=0 设定温度在正常范围led_settoolow=0;endelse if(flag_high&&!flag_low) //设定温度超越上界报警寄存器赋值beginled_settoohigh =1; // led_settoohigh =1 设定温度超越上界led_settoolow=0;endelse if(!flag_high&&flag_low) //设定温度超越下界报警寄存器赋值beginled_settoohigh =0;led_settoolow=1; //led_settoolow=1 设定温度超越下界endendendendmodule/*按键输入设定温度*///seta 输出温度设定十位//setb 输出温度设定个位//add 设定温度加一//down 设定温度减一//clk 时钟信号//reset复位信号(用于寄存器赋初值)module key(seta,setb,add,down,clk,reset); output[3:0] seta,setb;input add,down,clk,reset;reg[3:0] seta,setb;always@(posedge clk or posedge reset) beginif(reset) /*寄存器赋初值*/ beginseta=2;setb=6;endif(add) /*寄存器加一*/beginif(setb==9)beginsetb=0;seta=seta+1;endelsesetb=setb+1;endelse if(down) /*寄存器减一*/ beginif(setb==0)beginsetb=9;seta=seta-1;endelsesetb=setb-1;endendendmodule/*4位锁存器*///qout 输出信号//data 输入信号//clk 时钟信号module suocunqi(qout,data,clk);output[3:0]qout;input[3:0]data;input clk;reg[3:0] qout;always@(clk or data)beginif(clk)qout=data; //在时钟信号作用下输出信号endendmodule/*7位数码管译码器*///a,b,c,d,e,f,g, 数据输出//D4 输出数据module yimaqi(a,b,c,d,e,f,g,D4);output a,b,c,d,e,f,g;input[3:0]D4;reg a,b,c,d,e,f,g;always@(D4)begincase(D4)4'd0:{a,b,c,d,e,f,g}=7'b1111110;4'd1:{a,b,c,d,e,f,g}=7'b0110000;4'd2:{a,b,c,d,e,f,g}=7'b1101101;4'd3:{a,b,c,d,e,f,g}=7'b1111001;4'd4:{a,b,c,d,e,f,g}=7'b0110011;4'd5:{a,b,c,d,e,f,g}=7'b1011011;4'd6:{a,b,c,d,e,f,g}=7'b1011111;4'd7:{a,b,c,d,e,f,g}=7'b1110000;4'd8:{a,b,c,d,e,f,g}=7'b1111111;4'd9:{a,b,c,d,e,f,g}=7'b1111011;default:{a,b,c,d,e,f,g}=7'bx; //输出任意态endcaseendendmodule。

相关文档
最新文档