电机控制系统.docx
- 文档编号:7424442
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:15
- 大小:87.32KB
电机控制系统.docx
《电机控制系统.docx》由会员分享,可在线阅读,更多相关《电机控制系统.docx(15页珍藏版)》请在冰豆网上搜索。
电机控制系统
黑龙江科技学院
课程设计任务书
一、设计题目:
电机控制系统的设计
二、设计的主要内容:
电机控制系统有3种运作方式,分别为正转反转和暂停,有定时系统让电机按程序以一定模式工作,并可以将设定时间和剩余时间显示在数码管显示器上。
指导教师:
日期:
教师评语:
评阅成绩:
评阅人:
日期:
摘要
本设计提出了一种利用VHDL语言设计电机控制器的思路,该控制器能够实现方向控制、工作方式选择,工作时间的显示等多种功能。
本系统共有6个模块.分别为减法计数器模块,信号翻译器模块,编码寄存电路模块,时序电路模块,数码管显示模块和顶层模块.他们分别负责倒数计时(counter),将时序信号转电机控制信号(decoder),将输入的时间编码为2个4位BCD码(settime),输出时序信号(shixu),数码管的数字显示(showtime)。
通过顶层文件调用不同模块的方式构成本系统。
该系统具有修改方便、使用灵活、可靠性高、可移植性强等优点。
关键词:
vhdl,电机控制,仿真
第一章电机控制系统概述
1.1电机控制系统的设计目的和背景
随着电子技术的发展,现场可编程门阵列FPGA和复杂可编程逻辑器件CPLD的出现,使得电子系统的设计者利用与器件相应的电子设计软件,在实验室里就可以设计自己的专用集成电路ASIC器件。
本文就是利用VHDL在CPLD器件上实现一种电机控制系统,能够识别输入的时间、方向等信号控制电机的运作。
这个系统具有体积小、可靠性高、可编程的特点。
可以运用于电扇,洗衣机等不同电器上。
通过对电机控制系统的设计,巩固和综合运用所学课程,理论联系实际,提高设计能力,提高分析、解决计算机技术实际问题的独立工作能力。
同时通过课程设计,深入理解VHDL语言的精髓和掌握运用所学的知识,达到课程设计的目标。
1.2电机控制系统设计要求
本系统要求通过将输入的工作时间和工作方向通过接口电路送给翻译器将控制信息传给直流电机,并通过七段译码器将剩余时间显示在数码管上,并通过不同的程序给予直流电机不同的工作方式来实现电机正转、反转、暂停的相互转换。
并且由时序电路达到这种工作方式的主动化更改与结束。
具体如下:
(1)计数器输入的为分钟数,每隔60秒计数器减1。
(2)控制电机按20秒正转,停十秒。
20秒反转,停十秒顺序运行。
(3)将剩余时间显示在数码管上。
第2章电机控制系统设计思想
2.1主要控制原理
2.1.1电机控制系统原理图
总共具有5种不同的元件,分别负责不同的功能:
十进制BCD码减法计数器是用于控制系统的计时,时序电路负责存储电机的工作方式,信号翻译器负责将时序电路的信号翻译为电机可识别信号,编码器负责将输入的时间转换为2个4位编码给2个数码管显示。
具体原理图如下图2-1:
图2-1电机控制原理图
2.1.2电机控制系统设计内容
设计六个模块来实现一个简单的电机控制系统,主要可以控制电机工作的时间和工作方式并将剩余工作时间显示出来。
整个系统的输入端口一共有三个,分别是开关控制输入端口、工作时间输入端口和时钟频率输入端口。
输出端有三个分别是正转输出端口、反转输出端口和暂停输出端口。
同时有两个七段数字显示器。
时间数据由工作时间输入端口存储到十进制BCD码减法计数器中并显示在七段数码管显示器中。
通过开关控制输入端口开始程序将开始信息传到时序电路中启动时序电路。
时序电路将输出方法传递到信号翻译器中翻译并给出最终输出信号。
2.2模块设计
共设计6个模块分别如下:
1.(b2d)顶层文件:
引用各个模块组成电机控制系统。
2.(counter)十进制BCD码减法计数器:
实现输入的为分钟数,每隔60秒计数器减1。
3.(decoder)信号翻译器:
将时序电路的信号翻译为暂停,正转,反转信号。
4.(settime)预置时间与编码寄存电路:
将输入的1-10分钟编为2个4位的BCD码。
5.(shixu)时序电路:
控制电机按20秒正转,停十秒。
20秒反转,停十秒的顺序运行。
6.(showtime)数码管显示器:
实现数码管显示。
第3章系统的程序说明和仿真
3.1顶层文件
K为工作时间的输入端口,输入的一个10位的二进制数。
START为此程序的启动输入端口。
当从K端口输入工作时间时,数据会传递到十进制BCD码减法计数器中,并由十进制BCD码减法计数器将K译码传递到数码管显示器中显示是数码管上。
当START端口为高电平时则为程序的开始,十进制BCD码减法计数器开始倒数,时序电路启动并将信号传递到信号翻译器,翻译器开始工作传递最终控制信号到电机中。
同时十进制BCD码减法计数器中置TIME_REMAINH每次改变都会通过数码管显示器显示在七段数码管上表示剩余时间。
仿真图形如下图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减一。
一直循环到TIME_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的输出情况,其他的时候输出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为程序开始的信号输入端口。
由于运作方式已经内置在程序中,调整输出方式只能修改程序中的相应数据。
程序开始后会依次执行正传,反转,暂停并循环。
直到结束。
仿真图形如下土3-5:
图3-5.时序电路仿真图
3.5数码管显示器
数码管显示器将输入的从0-9的4位二进制数,以七段译码器的方式输出。
可以使用一个7位向量来分别表示中的七段数码管,如图3-6所示:
a
bc
d
ee
g
图3-6七段LED与向量元素的对应图
各个LED的选通表示不同的字母,该程序采用数据流描述方式。
Cp信号为时钟信号,remain_time信号为输入的数字,Q1为低位输出,Q2为高位输出,A,B,C,D,E,F,G分别对应7个数码管。
进程是以输入信号为敏感量的。
通过CASE语句将输入信号翻译成输出信号。
定义输入信号作为进程的敏感量触发进程,将输入信号赋值给内部数值信号,通过CASE语句翻译0-9七段译码的输出情况,其他的时候输出-1表示出错。
仿真图形如下图3-7所示:
图3-7数码管显示器仿真图
第四章课程设计总结
通过7天的课程设计,我设计并完成了电机控制系统的设计,并用MAX-PLUS2仿真出了波形图。
通过这次的课程设计,我学习到了很多的知识,不仅巩固了上课老师讲到的知识,也学到到了老师所没讲过的知识。
能够灵活的运用书本中的知识并与实际进行联系,解决一些实际生活中遇到的问题。
在这次课程设计,我遇到了很多困难,我通过同学和老师的帮助,一步步的客服了它们,并且很好的完成了本次课程设计。
参考文献
[l]侯伯亨《基于QuartusⅡ的FPGA/CPLD设计》电子工业出版社2001
[2]潘松《CPLD系统设计技术入门与应用》电子工业出版社2004
[3]边际年《EDA技术基础》湖南大学出版社2000
[4]沈明山《EDA技术及可编程器件应用实训》科学出版社1999
[5]朱正伟《EDA技术及应用》清华大学出版社2000
……………
附录
程序清单
--十进制BCD码减法计数器,libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycounteris
port(clk,start:
instd_logic;
k:
inSTD_LOGIC_VECTOR(7downto0);
time_remain:
BUFFERSTD_LOGIC_VECTOR(7DOWNTO0);
time_is_up:
outstd_logic
);
endcounter;
architecturertlofcounteris
begin
process(clk)
--variabletime_second:
integer:
=60;
variabletime_second:
integer:
=0;
begin
if(clk'eventandclk='1')
then
--endif;
--if(time_second>0andstart='1')
--thentime_second:
=time_second-1;
--elsetime_second:
=59;
--endif;
if(start='0')
then
time_remain<=k;
--time_second:
=60;
time_second:
=0;
else
if(time_second=0)
thenif(time_remain(3downto0)>0)
then--time_remain(3downto0)<=time_remain(3downto0)-start;
time_remain(3downto0)<=time_remain(3downto0)-1;
time_second:
=59;
elseif(time_remain(7downto4)>0)
then--time_remain(7downto4)<=time_remain(7downto4)-start;
time_remain(7downto4)<=time_remain(7downto4)-1;
time_remain(3downto0)<="1001";
time_second:
=59;
endif;
endif;
else--if(time_second=0andtime_second=1)
if(time_remain=0)thentime_is_up<='0';
elsetime_is_up<='1';
time_second:
=time_second-1;endif;
endif;
endif;
endif;
endprocess;
endrtl;
--将时序电路的信号翻译
libraryieee;
useieee.std_logic_1164.all;
entitydecoderis
port(
Q1,Q2:
instd_logic;
REV,RUN,PAUSE:
outstd_logic--rev,run,pause);
enddecoder;
architecturertlofdecoderis
--signalchoose:
std_logic_vector(1downto0);
begin
--choose
(1)<=q1;choose(0)<=q2;
--process(choose)
--begin
--casechooseis
--when"00"=>REV<='0';RUN<='0';PAUSE<='1';
--when"10"=>REV<='0';RUN<='1';PAUSE<='0';
--when"01"=>REV<='1';RUN<='0';PAUSE<='0';
--whenothers=>REV<='0';RUN<='0';PAUSE<='0';
--endcase;
--endprocess;
REV<=Q2;RUN<=Q1;PAUSE<=not(Q1ORQ2);
endrtl;
libraryieee;
useieee.std_logic_1164.all;
entityencodeis
port(
bcd:
instd_logic_vector(3downto0);
a,b,c,d,e,f,g:
outstd_logic
);
endencode;
architecturertlofencodeis
signaltemp:
std_logic_vector(6downto0);
begin
table
bcd=>temp;
"0000"=>"1111110";
"0001"=>"0110000";
"0010"=>"1101101";
"0011"=>"1111001";
"0100"=>"0110011";
"0101"=>"1011011";
"0110"=>"1011111";
"0111"=>"1110000";
"1000"=>"1111111";
"1001"=>"1111011";
endtable;
a<=temp(6);b<=temp(5);c<=temp(4);d<=temp(3);e<=temp
(2);f<=temp
(1);g<=temp(0);
endrtl;
--预置时间与编码寄存电路
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitysettimeis
port(load:
instd_logic;
k:
instd_logic_vector(9downto0);
o:
outstd_logic_vector(7downto0)
);
endsettime;
architecturertlofsettimeis
signalp1:
std_logic_vector(7downto0);
begin
process(load)
begin
if(load'eventandload='1')
then
casekis
when"1000000000"=>p1<="00000001";
when"0100000000"=>p1<="00000010";
when"0010000000"=>p1<="00000011";
when"0001000000"=>p1<="00000100";
when"0000100000"=>p1<="00000101";
when"0000010000"=>p1<="00000110";
when"0000001000"=>p1<="00000111";
when"0000000100"=>p1<="00001000";
when"0000000010"=>p1<="00001001";
when"0000000001"=>p1<="00010000";
whenothers=>p1<="00000000";
endcase;
endif;
endprocess;
o<=p1;
endrtl;
--时序电路。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityshixuis
port(cp,en,rd:
instd_logic;
q1,q2:
outstd_logic);
endshixu;
architecturertlofshixuis
begin
process(cp)
--variablewash_time:
integerrange0to19;
--variablewait_time:
integerrange0to9;
variablestate:
std_logic;variablewash_time:
integer:
=21;
variablewait_time:
integer:
=9;
begin
--if(en='0')
--wash_time:
='19';
--wait_time:
='9';
--state:
='0';
--endif;
if(en='0')
thenwash_time:
=21;
Q1<='0';Q2<='0';--停机状态
elseif(cp'eventandcp='1')
thenif(rd='1')
thenif(wash_time>0)
thenwash_time:
=wash_time-1;
wait_time:
=9;else
if(wait_time>0)--thenwait_time:
=wait_time-1;elsewash_time:
=20;
state:
=notstate;
endif;
endif;
--endif;
if(wash_time=0)
thenQ1<='0';Q2<='0';elseif(state='0')thenQ1<='1';Q2<='0';
elseQ1<='0';Q2<='1';
endif;
endif;
elseQ1<='0';Q2<='0';
endif;
endif;
endif;
endprocess;
endrtl;
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityshowtimeis
port(remain_time:
instd_logic_vector(7downto0);
cp:
instd_logic;
q1,q2:
outstd_logic;a,b,c,d,e,f,g:
outstd_logic
);
endshowtime;
architecturertlofshowtimeis
signaltemp:
std_logic_vector(6downto0);
signalbcd:
std_logic_vector(3downto0);
signalchoose:
std_logic;
begin
process(cp)
begin
if(cp'eventandcp='1')
thenchoose<=notchoose;
if(choose='1')
thenq1<='0';q2<='1';
bcd<=remain_time(7downto4);
elseq1<='1';q2<='0';
bcd<=remain_time(3downto0);
endif;
endif;
endprocess;
process(bcd)
begin
casebcdis
when"0000"=>temp<="1111110";
when"0001"=>temp<="0110000";
when"0010"=>temp<="1101101";
when"0011"=>temp<="1111001";
when"0100"=>temp<="0110011";
when"0101"=>temp<="1011011";
when"0110"=>temp<="1011111";
when"0111"=>temp<="1110000";
when"1000"=>temp<="1111111";
when"1001"=>temp<="1111011";
whenothers=>temp<="1111011";
endcase;
a<=temp(6);b<=temp(5);c<=temp(4);d<=temp(3);e<=temp
(2);f<=temp
(1);g<=temp(0);
endprocess;
endrtl;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电机 控制系统