2.4 计数器counter的设计
根据设计要求,counter为减数计数器,其最大计时99:59。因此可以用3个十进制计数器和1个六进制计数器级联构成。计数器的工作与状态机的状态有关,当状态机处在复位状态、测试状态、停止状态、结束状态、档位状态都属于不工作状态,只有在计数状态时,才会工作。计数器如果进入了停止状态,会保留当前计数值,当再次按下开始键时,计数器由当前值开始计数。
4个计数器的计数使能端相连、置数使能端相连,实现同时计数和同时置数。第一个计数器的计数脉冲是从1 kHz输入的,第二个计数器的计数脉冲clk与第一个计数器的进位cn相连,第三个计数器的计数脉冲clk与第二个计数器的进位相连cn,第四个计数器的计数脉冲clk与第三个计数器的进位cn相连,设计中使用了库中的一个4输入与门,所有进位输出都连接到4输入与门,当倒计时结束,done输出“1”信号。
2.5 微波加热信号锁存器latch_cook的设计
对于latch_cook的设计,主要用来锁存微波信号,数据的输入由状态控制得到,当启动档位1时,st1_en输出信号为1、st1_en输出信号为0、st1_en输出信号为0,1_en与d1相连、 st2_en与d2相连、 st3_en与d3相连,也就是d1d2d3输入端口的数据是启动档位1的输出数据“001”。同理,当启动档2时,d1d2d3输入端口的数据为“010”,启动档位3时,d1d2d3输入端口的数据为“011”,其他状态时latch_cook模块设计中使用了两个进程。第一个进程是把输入微波信号赋给寄存器q,当g使能信号为1时,判断是哪个档位微波加热信号后,再对寄存器q进行赋值。使能端g是从load_en取得信号值的。输出load_en为1信号只有复位、测试、结束、档位这几个工作状态。其中只有在档位状态时才能触发进程,其他都不能。第二个进程是对微波信号的锁存控制,eo与计数使能端相连,只有在计数时才能触发进程,使cook输出信号值,否则cook输出高阻抗信号。latch_cook的输入、输出端口如图7所示。
部分关键程序如下:
architecture one of latch_cook is
signal q:std_logIC_vector(2 downto 0);
signal s:std_logic_vector(2 downto 0);
begin
s<=d1&d2&d3;
process(s)
begin
if g='1'then
case s is
when"001"=>q<="001";--档位3
when"010"=>q<="010";--档位2
when"100"=>q<="100";--档位1
when others=>null;
end case;
end if;
end process;
process(oe)
begin
if oe='1'then--输出信号
cook<=q;
else
cook<="ZZZ";--呈现高阻抗
end if;
end process;
end;
2.6 显示译码器LED的设计
对于显示电路,硬件上使用了串行连接的设计,即每个数码管对应的引脚都接在一起,通过控制公共端控制相应数码管的亮灭(共阴极数码管的公共端为高电平时,LED不亮;共阳极的公共端为低电平时,LED不亮)。
因此,在显示模块里有4个进程实现设计——数码管动态扫描计数进程、数码管位动态扫描进程、数码管闪烁显示进程、译码信号进程。显示模块工作首先是动态扫描计数,以1 kHz的扫描频率进行扫描计数。扫描所得到的计数值传递到数码管位动态扫描进程中,控制数码管的位选信号,即显示完第一位后,接着显示第二位,依此类推,一直显示到第5位,显示模块接着继续从第一位显示,从而实现循环显示。因为1 kHz的扫描频率使6个数码管看上去是同时显示的,实现了计数结果和状态信息的显示;译码信号进程则根据动态扫描所得到的信号值,选择相应的显示数据,只要计数器数据输出或状态发生变化,则数码管的显示也发生相应的变化。对于数码管闪烁显示进程,当ficker_seg=1时,则段信号与1 Hz频率相与后再送到输出端去以1 s的频率闪烁、一亮一暗、全段灭、全段亮,否则正常输出段信号。显示模块的输入、输出端口如图8所示。
3 系统调试
为了能够准确地对所编写的软件进行调试,采用EMP240系列开发板上进行系统调试。图9是一个模拟操作系统界面。
系统调试的主要步骤如下:
(1) 在上电复位时,系统操作界面显示:00000。微波加热信号为0。正处于待机状态。
(2)按下TEST测试键,5个数码管所有段位点亮同时一亮一暗地交替闪烁着。按下复位键,系统返回复位待机状态。
(3) 右边有三个档位控制键,在待机状态时,只要按下其中一个键,就能对时间进行设定。而三个档位之间可以相互转换。按下复位键,系统返回复位待机状态。
(4) 设定好时间后就可以按下开始键,启动相应微波加热信号,同时进行倒计时计数,如果要停止加热,则按下停止键,系统进入停止状态,微波加热信号输出为0,想要再次加热,则按回开始键。按下复位键,系统返回复位待机状态。
(5) 当计时结束后,输出done显示提示,微波加热信号输出为0。按下复位键,系统返回复位待机状态。
本系统以EMP240T100C5为主要控制芯片,综合运用了QUARTus II开发工具,使用VHDL硬件描述语言,使得系统设计的硬件功能基本都可以通过软件编程实现,程序经过实验仿真与调试,各项功能达到了预定的设计指标。这种设计方案不仅使电子系统的设计以及产品性能的改进和扩展变得十分简单,同时它还代替了原有的许多单元电路或单片机的控制芯片和大量外围电路,使电子电路设计更加灵活方便。为实现微波炉以及更多家用电器的信息化和智能化进行了较深入的探索和实践。
参考文献
[1] 周润景,图雅,张丽敏. 基于QuartusII的FPGA/CPLD数字系统设计实例[M]. 北京:电子工业出版社,2007.
[2] 延明,张亦华. 数字电路EDA技术入门[M].北京:北京邮电大学出版社,2006.
[3] 韩团军. 基于FPGA微波炉控制器设计[J].研究与开发, 2010,29(8):64-67.
[4] 刘昌华. 数字逻辑EDA设计与实践—MAX+plusII与QuartusII双剑合璧[M].北京:国防工业出版社,2006.