1、总共具有5种不同的元件,分别负责不同的功能:十进制BCD码减法计数器是用于控制系统的计时,时序电路负责存储电机的工作方式,信号翻译器负责将时序电路的信号翻译为电机可识别信号,编码器负责将输入的时间转换为2个4位编码给2个数码管显示。具体原理图如下图2-1:图2-1 电机控制原理图2.1.2电机控制系统设计内容 设计六个模块来实现一个简单的电机控制系统,主要可以控制电机工作的时间和工作方式并将剩余工作时间显示出来。 整个系统的输入端口一共有三个,分别是开关控制输入端口、工作时间输入端口和时钟频率输入端口。输出端有三个分别是正转输出端口、反转输出端口和暂停输出端口。同时有两个七段数字显示器。时间数
2、据由工作时间输入端口存储到十进制BCD码减法计数器中并显示在七段数码管显示器中。通过开关控制输入端口开始程序将开始信息传到时序电路中启动时序电路。时序电路将输出方法传递到信号翻译器中翻译并给出最终输出信号。2.2模块设计共设计6个模块分别如下:1.(b2d)顶层文件:引用各个模块组成电机控制系统。2.(counter)十进制BCD码减法计数器:实现输入的为分钟数,每隔60秒计数器减1。3.(decoder)信号翻译器:将时序电路的信号翻译为暂停,正转,反转信号。4.(settime)预置时间与编码寄存电路:将输入的1-10分钟编为2个4位的BCD码。5.(shixu)时序电路:控制电机按20秒
3、正转,停十秒。20秒反转,停十秒的顺序运行。6.(showtime)数码管显示器:实现数码管显示。第3章系统的程序说明和仿真3.1 顶层文件K为工作时间的输入端口,输入的一个10位的二进制数。START为此程序的启动输入端口。当从K端口输入工作时间时,数据会传递到十进制BCD码减法计数器中,并由十进制BCD码减法计数器将K译码传递到数码管显示器中显示是数码管上。当START端口为高电平时则为程序的开始,十进制BCD码减法计数器开始倒数,时序电路启动并将信号传递到信号翻译器,翻译器开始工作传递最终控制信号到电机中。同时十进制BCD码减法计数器中置TIME_REMAINH每次改变都会通过数码管显示
4、器显示在七段数码管上表示剩余时间。仿真图形如下图3-1:图3-1 电机控制系统仿真图3.2 十进制BCD码减法计数器 十进制BCD码减法计数器主要实现的功能为定时功能。输入时间信号后开始倒数计时,到计数器为零时停止。 其中START为开始的输入端口,CLK为时钟输入端口,MIME_REMAIN为输出时间数据到数码管的输出端口,K为输入时间数据的输入端口。TIME_IS_UP为电机工作状态的输出端口。通过将K中的数字装入TIME_REMAINH中开始并开始计时,置TIME_ second为60并开始每一秒减一,TIME_ second为零时从新开始并置TIME_REMAINH减一。一直循环到TI
5、ME_REMAINH为零时结束程序,并置TIME_IS_UP为0表示电机停止运行。仿真图形如下图3-2: 图3-2十进制BCD码减法计数器仿真图3.3 信号翻译器从时序电路中传来的信号并不能直接用于驱动直流电机的运转,必须通过信号翻译器将这两个输入信号翻译成三个分别为RUN(正转),REV(反转),PAUSE(暂停)的信号再输出给直流电机来控制电机。 其中Q1和Q2是从时序电路来的控制信号,RUN为正转输出信号,REV为反转输出信号,PAUSE为暂停输出信号.这是一个简单的译码器,当Q1和Q2输入为00,01,10时分别输出为001,010,100,其他为000。通过CASE语句翻译Q1和Q2
6、的输出情况,其他的时候输出000表示出错。仿真图形如下图3-3:图3-3. 信号翻译器仿真图 3.4 预置时间与编码寄存电路 预置时间与编码寄存电路,将输入的1-10分钟编为2个4位的BCD码。K为时间输入端口,LOAD为时钟输入端口,O为2个4位的BCD码的输出端口。仿真图形如下图3-4:图3-4. 预置时间与编码寄存电路仿真图3.5 时序电路时序电路是不同功能实现的基础,通过调整程序中正转和反转的持续时间和顺序达到调整电机运转方式的功能。 其中Q1和Q2为输出信号量送至信号翻译器中。CP为时钟输入端口。RD和EN为程序开始的信号输入端口。由于运作方式已经内置在程序中,调整输出方式只能修改程
7、序中的相应数据。程序开始后会依次执行正传,反转,暂停并循环。直到结束。仿真图形如下土3-5:图3-5.时序电路仿真图3.5 数码管显示器数码管显示器将输入的从0-9的4位二进制数,以七段译码器的方式输出。可以使用一个7位向量来分别表示中的七段数码管,如图3-6所示:a b c de e g图3-6七段LED与向量元素的对应图各个LED的选通表示不同的字母,该程序采用数据流描述方式。Cp信号为时钟信号,remain_time信号为输入的数字,Q1为低位输出,Q2为高位输出,A,B,C,D,E,F,G分别对应7个数码管。进程是以输入信号为敏感量的。通过CASE语句将输入信号翻译成输出信号。定义输入
8、信号作为进程的敏感量触发进程,将输入信号赋值给内部数值信号,通过CASE语句翻译0-9七段译码的输出情况,其他的时候输出-1表示出错。仿真图形如下图3-7所示:图3-7 数码管显示器仿真图第四章 课程设计总结通过7天的课程设计,我设计并完成了电机控制系统的设计,并用MAX-PLUS2仿真出了波形图。通过这次的课程设计,我学习到了很多的知识,不仅巩固了上课老师讲到的知识,也学到到了老师所没讲过的知识。能够灵活的运用书本中的知识并与实际进行联系,解决一些实际生活中遇到的问题。在这次课程设计,我遇到了很多困难,我通过同学和老师的帮助,一步步的客服了它们,并且很好的完成了本次课程设计。参考文献l 侯伯
9、亨基于Quartus 的FPGA/CPLD设计电子工业出版社 20012 潘松CPLD系统设计技术入门与应用电子工业出版社 20043 边际年EDA技术基础湖南大学出版社 20004 沈明山 EDA技术及可编程器件应用实训科学出版社 19995 朱正伟 EDA技术及应用清华大学出版社 2000附录程序清单-十进制BCD码减法计数器, library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter is port(clk,start:in std_logic; k:in STD_LOG
10、IC_VECTOR(7 downto 0); time_remain:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); time_is_up:out std_logic);end counter;architecture rtl of counter isbegin process(clk)-variable time_second:integer:=60;variable time_second:=0; begin if(clkevent and clk=1) then -end if; - if(time_second0 and start=) - then tim
11、e_second:=time_second-1; - else time_second:=59; - end if; if(start=0 time_remain0) then -time_remain(3 downto 0)=time_remain(3 downto 0)-start;time_remain(3 downto 0) then -time_remain(7 downto 4)=time_remain(7 downto 4)-start; time_remain(7 downto 4)=time_remain(7 downto 4)-1; time_remain(3 downto
12、 0)=1001; end if; else -if(time_second=0 and time_second=1) if(time_remain=0) then time_is_up= else time_is_up end process;end rtl;-将时序电路的信号翻译library ieee;entity decoder is port( Q1,Q2: in std_logic; REV,RUN,PAUSE: out std_logic-rev,run,pause );end decoder;architecture rtl of decoder is-signal choos
13、e:std_logic_vector(1 downto 0);begin-choose(1)=q1;choose(0)REVRUNPAUSE-end case;-end process;=Q2;=Q1;=not(Q1 OR Q2);entity encode is bcd : in std_logic_vector(3 downto 0); a,b,c,d,e,f,g: out std_logic );end encode;architecture rtl of encode issignal temp:std_logic_vector(6 downto 0); table bcd = tem
14、p; 00001111110 ;00010110000001011011010011111100101000110011010110110110110101111101111110000100011111111111011 end table;a=temp(6);b=temp(5);c=temp(4);d=temp(3);e=temp(2);f=temp(1);g=temp(0);-预置时间与编码寄存电路 library ieee;entity settime is port(load:in std_logic_vector(9 downto 0); o:out std_logic_vecto
15、r(7 downto 0)end settime;architecture rtl of settime is signal p1:std_logic_vector(7 downto 0);process(load) if(loadevent and load= case k is when 1000000000p100000000 end case;o=p1;-时序电路。entity shixu is port(cp,en,rd: q1,q2:out std_logic);end shixu;architecture rtl of shixu isprocess(cp)-variable w
16、ash_time:integer range 0 to 19;-variable wait_time:integer range 0 to 9;variable state:std_logic; variable wash_time:integer := 21;variable wait_time:= 9; begin -if(en=- wash_time:19- wait_time:9- state:- end if;if(en=then wash_time:=21; Q1Q2 then wash_time:=wash_time-1; wait_time:=9; if(wait_time0)
17、- then wait_time:=wait_time-1; else wash_time:=20; state:=not state; if(wash_time=0) then Q1 else if(state=) then Q1 else Q1end if;entity showtime is port(remain_time:in std_logic_vector(7 downto 0); cp:out std_logic;end showtime;architecture rtl of showtime issignal bcd:std_logic_vector(3 downto 0);signal choose: if(cp then choose=not choose; if(choose= then q1q2 bcd=remain_time(7 downto 4); else q1=remain_time(3 downto 0);end process;process(bcd) case bcd iswhen temptemp
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1