直流电机控制设计1.docx
《直流电机控制设计1.docx》由会员分享,可在线阅读,更多相关《直流电机控制设计1.docx(27页珍藏版)》请在冰豆网上搜索。
直流电机控制设计1
河南科技大学
课程设计说明书
课程名称现代电子系统课程设计
题目_直流电机控制设计
学院__电子信息工程学院____
班级_________
学生姓名__________
指导教师__________
日期_______
课程设计任务书
(指导教师填写)
课程设计名称现代电子系统课程设计学生姓名专业班级
设计题目直流电机控制设计
一、课程设计目的
学习直流电机PWM的FPGA控制;
掌握PWM控制的工作原理;
掌握GW48_SOPC实验箱的使用方法;
了解基于FPGA的电子系统的设计方法。
二、设计内容、技术条件和要求
利用PWM控制技术实现直流电机的速度控制。
(1)基本要求:
a.速度调节:
4档,数字显示其档位。
b.能控制电机的旋转方向。
c.通过红外光电电路测得电机的转速,设计频率计用4位10进制显示电机的转速。
(2)发挥部分
a.设计“去抖动”电路,实现直流电机转速的精确测量。
b.修改设计,实现直流电机的闭环控制,旋转速度可设置。
c.其它。
三、时间进度安排
布置课题和讲解:
1天
查阅资料、设计:
4天
实验:
3天
撰写报告:
2天
四、主要参考文献
何小艇《电子系统设计》浙江大学出版社2008.1
潘松黄继业《EDA技术实用教程》科学出版社2006.10
齐晶晶《现代电子系统设计》实验指导书电工电子实验教学中心2009.8
指导教师签字:
2010年12月30日
摘要
利用FPGA可编程芯片及VHDL语言实现了对直编程实现流电机PWM控制器的设计,对直流电机速度进行控制。
介绍了用VHDL语言编程实现直流电机PWM控制器的PWM的产生模块、转向调节模块、转速控制模块、去抖动电路模块、电机转速显示等模块功能。
采用CPU控制产生PWM信号,一般的PWM信号是通过模拟比较器产生的,比较器的一端按给定的参考电压,另一端接周期性线性增加的锯齿波电压。
当锯齿波电压小于参考电压时输出低电平,当锯齿波电压大于参考电压时输出高电平。
改变参考电压就可以改变PWM波形中高电平的宽度。
若用单片机产生PWM信号波形,需要通过D/A转换器产生锯齿波电压和设置参考电压,通过外接模拟比较器输出PWM波形,因此外围电路比较复杂。
FPGA中的数字PWM控制与一般的模拟PWM控制不同,用FPGA产生PWM波形,只需FPGA内部资源就可以实现。
用数字比较器代替模拟比较器,数字比较器的一端接设定值计数器输出,另一端接线性递增计数器输出。
当线性计数器的计数值小于设定值时输出低电平,当计数值大于设定值时输出高电平。
与模拟控制相比,省去了外接的D/A转换器和模拟比较器,FPGA外部连线很少,电路更加简单,便于控制。
脉宽调制式细粉驱动电路的关键是脉宽调制,转速的波动随着PWM脉宽细分数的增大而减小。
直流电机控制电路主要由三部分组成:
(1)FPGA中PWM脉宽调制信号产生电路。
(2)FPGA中的工作/停止控制和正/反转方向控制电路。
(3)由功率放大电路和H桥组成的正反转功率驱动电路
关键词
直流电机、PWM、控制、速度、FPGA
一.任务解析…………………………………………………………….5
二.系统方案论证………………………………………………………..6
2.1总体系统方案论证…………………………………………….……6
2.2系统原理与结构…………….……………………………………….6
2.2.1主要硬件芯片选择…………….……………………………………6
2.2.2系统结构…………………………………………………………….6
三、直流电机控制模块设计……………………..………………………..7
3.1速度控制模块设计……………………………………………………7
3.2正反转、工作/停止控制计…………………………………………..8
3.3闭环控制设计………………………………………………………...9
四.仿真调试,硬件功能验证………………………………....................9
4.1模块仿真…………………………………………..................................10
4.1.1PWM控制模块仿真……………………………………….................10
4.1.2旋转方向控制模块仿真……………………………............................10
4.1.3速度档位控制模块仿真…………………….………………`…….…10
4.2硬件功能验证与误差分析……………………………………………11
4.2.1功能验证…………………………………………………………….11
4.2.2误差分析…………………………………………………………….11
五、设计心得………………………………………………………………11
六、参考文献………………………………………………………………12
附页1(参考程序)……………………………………………………….13
附页2(系统整体原理图)……………………………………………….22
封底(评语成绩)……………………………………………………….23
一、任务解析
本次设计利用PWM控制技术实现直流电机的速度控制。
根据题目的要求实现如下功能:
a.速度调节:
4档,数字显示其档位。
b.能控制电机的旋转方向。
c.通过红外光电电路测得电机的转速,设计频率计用4位10进制显示电机的转速。
d.设计“去抖动”电路,实现直流电机转速的精确测量。
e.修改设计,实现直流电机的闭环控制,旋转速度可设置。
本次设计采用单片大规模FPGA实现的发生的直流电机控制器,其中产生的PWM波具有脉冲中心对称、PWM周期和死区时间可编程等特点,且性能优异,灵活性和可靠性高, 用数字比较器代替模拟比较器,数字比较器的一端接设定值计数器的输出,另一端接线性递增计数器输出。
与模拟控制相比,省去了外接的D/A转换器和模拟比较器,FPGA外部连线很少,电路更加简单。
而且通过总线数据或按键控制在系统调整脉宽数及数字比较器的设定值,从而实现对电机转速等参数的灵活控制。
该系统以芯片为控制核心,通过按键或上位机设定电机速度和PWM占空比,由FPGA的I/O口控制直流电机驱动芯片驱动直流电机的转动。
转速的测量由码盘完成,速度显示数码管来实现。
本系统是基于实现电机的恒速调节而进行设计的。
整个直流电机控制系统分为PWM模块、电机速度控制模块、电机方向控制模块、去抖动电路模块、电机转速显示等模块。
直流电机控制原理框图如图l所示。
图1:
直流电机控制原理框图
二、系统方案论证
2.1总体系统方案论证
方案一:
采用线性控制方式进行直流电动机的控制。
此方式一般用于小功率电机平滑转速控制。
方案二:
采用一般模拟PWM进行电动机的控制。
此方案外接有D/A转换器和模拟比较器,外部连线较多。
电路复杂、不便于控制,故该方案不理想。
方案三:
采用FPGA中的数字PWM进行电动机的控制。
该方案省去了外接D/A转换器和模拟比较器,外部连线比较少、电路更加简单、便于控制。
比较以上三种方案第二种方案比较简洁易于操作控制,综合各方面的因素最终选择第二种方案进行设计
2.2系统原理与结构
2.2.1主要硬件芯片选择
Gw-48-PK2中FPGA可编程芯片:
通过HDL语言与该可编程芯片实现了对直流电机的PWM控制
数码管:
实现对直流电机的档位、速度、预设速度的直观显示
按键:
实现了档位调换、速度预设、正反转控制、预设使能控制
累加器:
实现对红外传感信号的累加计数进而实现测速功能
示波器:
通过观察方波频率验证显示速度是否正确
2.2.2系统结构
本次设计系统硬件整体设计系统的整体框图如图2所示。
该系统以芯片为控制核心,通过按键或上位机设定电机速度和PwM占空比,由FPGA的I/O口控制直流电机驱动芯片驱动直流电机的转动。
转速的测量由码盘完成,速度显示数码管来实现。
本系统是基于实现电机的恒速调节而进行设计的。
系统分以下几个模块:
转速调节模块,脉宽调制(PwM)模块,速度检测模块,串行通信模块。
图2:
整体硬件系统框图
三、直流电机控制模块设计
3.1速度控制模块设计
本次设计是采用定制的PWM信号对直流电机速度进行控制该模块如图3所示
图3:
PWM定制模块
该PWM模块通过对输入信号a和b两者的信号进行比较最终输出方波信号,该信号作用于开关晶体管的基极上,控制开关管的导通时间t,改变占空比,达到控制目的。
整个控制模块有信号发生电路、PWM速度控制电路、电机驱动电路等几部分组成。
整个控制模块采用了转速、电流双闭环控制结构,如图4所示。
在系统中设置两个调节器,分别调节转速和电流,二者之间实行串级连接,即以转速调节器的输出作为电流调节器的输入,再用电流调节器的输出作为PWM的控制电压。
从闭环反馈结构上看,电流调节环在里面,是内环,按典型Ⅰ型系统设计;转速调节环在外面,成为外环,按典型Ⅱ型系统设计。
为了获得良好的动、静态品质,调节器均采用PI调节器并对系统进行了校正。
检测部分中,采用了霍尔片式电流检测装置对电流环进行检测,转速还则是采用了测速电机进行检测,达到了比较理想的检测效果。
主电路部分采用了以GTR为可控开关元件、H桥电路为功率放大电路所构成的电路结构。
PWM方式是在大功率开关晶体管的基极上,加上脉冲宽度可调的方波电压,控制开关管的导通时间t,改变占空比,达到控制目的。
图4是直流PWM系统原理框图。
这是一个双闭环系统,有电流环和速度环。
核心部分是脉冲功率放大器和脉宽调制器。
控制部分采用SG1525集成控制器产生两路互补的PWM脉冲波形,通过调节这两路波形的宽度来控制H电路中的GTR通断时间,便能够实现对电机速度的控制。
图4:
直流电动机PWM系统原理图
3.2正反转、工作/停止控制模块设计
图5为FPGA直流电机驱动控制电路。
电机的正反转是由两个二选一多路选择器进行控制,Z/F键控制选择PWM波形从正端Z进入H桥,还是从负端F进入H桥,以控制电机的转向。
Start键通过‘与’门控制PWM的输出,实现对电机的工作/停止的控制。
H桥电路由大功率晶体管组成,PWM波形通过方向控制电路送到H桥,经功率放大以后驱动电机转动。
图5:
FPGA直流电机驱动控制电路
3.3闭环控制设计
该模块实现对直流电机速度的设置,控制直流电机按照设定的速度旋转,该模块如图6所示:
图6:
闭环预设控制模块
该模块实现对直流电机旋转速度的预设,通过使能键实现直流电机按照预设的速度进行旋转
四.仿真调试,硬件功能验证
4.1模块仿真
4.1.1PWM控制模块仿真
仿真结果如图7所示
图7
该模块通过改变PWM的占空比来实现直流电机速度的控制
4.1.2旋转方向控制模块仿真
仿真结果如图8所示
图8
电机的正反转是由两个二选一多路选择器进行控制,Z/F键控制选择PWM波形从正端Z进入H桥,还是从负端F进入H桥,以控制电机的转向。
4.1.3速度档位控制模块仿真
仿真结果如图9所示
图9
通过仿真结果可以看出通过按键en转换档位来实现速度的控制。
档位0直流电动机停止转动,档位1,2,3,4直流电动机的转速依次不断的提高,实现直流电机的调速功能。
4.2硬件功能验证与误差分析
4.2.1功能验证
通过把设计完成的工程下载到GW-48-pk2中FPGA芯片上对设计所要求达到的功能进行验证,通过验证本次设计只能够完成直流电机速度测试、速度显示、正反转、调档、预设等功能但是由于能力和时间的原因去抖动功能没有实现导致速度测试结果与示波器观察到的结果有一定的差别。
最终没有实现该次设计的完整功能
4.2.2误差分析
本次设计在硬件验证这一环节出现一定的误差,这包括两方面的产生的一是设计本身产生的,二是实验系统造成的。
1)设计误差分析
由于设计者本身的能力以及在设计中的逻辑分析中有一定的失误,以及设计的过程中一些能够影响到最终结果的因素没有考虑到造成在硬件验证这一环节出现一定的误差。
2)系统误差分析
本次设计中速度测试传感模块由于码盘自身的老化,以及红外灯的放置有一定的问题最终将导致速度测试的不准确性,这是由硬件系统造成的是无法改变的,其次就是示波器观察波形这一测试过程中由于与硬件信号输出端连线存在一定的问题在测试的过程中,可能因为一个小小的问题就可能导致示波器无法正常接收到实验硬件输出的信号,导致实验数据的误差,再者就是实验系统有一定的问题导致验证无法实现,在实验的过程中换了几次实验箱才找到一个合适的,这也是产生误差的一个重要的原因,实验系统本身都有很大的毛病。
五、设计心得
通过这次课程设计对直流电机的工作原理及相关的控制原理有了进一步的了解,认识到自己所学知识的不足,以及所学知识在实际中的具体应用,进一步加深对所学知识的理解。
在这次课程设计中遇到了众多的难题,有好多由于自己对所学知识不太透彻导致设计中遇到好多问题自己无法解决,最后还是在向同学寻求帮助才能够具体的实现其整体功能中的部分。
如:
直流电机的速度、转向控制、档位选择、等功能,另外的一些功能如:
闭环预设、消抖动模块由于能力和时间的原因没有完全的实现,成为本次设计的一大遗憾。
在具体到每一个模块的设计中,可能是由于在这方面的知识不足吧,并不是很顺利,例如在直流电动机的的方向控制模块,是怎么控制选通PWM信号通过H桥的不同的晶体管的基极来控制直流电动机的转向的在这一个方面都费了很大的力气才搞懂,再者就是直流电机闭环预设这一模块虽然开始下了很大的功夫但是也没有整出来,最后还是在其他同学的帮助下,借鉴其他同学的设计思想才整出来一个模型,最后才勉强能够实现速度的预设,但是在闭环使能按预设速度运行的时候无法测试到直流电机按预设速度进行旋转的速度,无法实现对预设结果是否正确进行判断。
在消抖动模块中,随说是设计的有这一个模块,但是在进行硬件验证的过程中发现测试的速度很不稳定,并且测得的速度和示波器观察到的频率有一定的出入。
也就是说,最终没有实现消抖动这一功能。
也成为本次设计中的一大遗憾。
虽说本次设计由于自己能力有限没有完成所有的功能但是由于是自己亲身参与,其中滋味只有自己知道,通过这次设计不但对自己有了更清楚的认识同时也为今后的工作学习有很大促进作用,做任何事都要与其他人进行交流,通过不断的交流来完善自己的思想,最后达到自己的目的。
六、参考文献
1)何小艇《电子线路设计》第四版,浙江大学出版社,2007
2)谭会生、瞿遂春,《EDA技术综合应用实例与分析》,西安电子科技大学出版社,2004
3)高有堂,《EDA技术及应用实践》,清华大学出版社,2006
4)亿特科技,CPLD/FPGA应用系统设计与产品开发》,人民邮电出版社,2005
5)潘松、黄继业,《EDA技术实用教程》第三版,科学技术出版社,2006
6)候伯亨、刘凯、顾新,《VHDL硬件描述语言与数字逻辑电路设计》第三版,西安电子科技大学出版社,2009
7)王彦,《基于FPGA的工程设计与应用》[M]西安电子科技大学出版社,2007
附页1:
参考程序
一:
preset_con
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitypreset_conis
port(
clk:
instd_logic;
en_set:
instd_logic;
din_tst:
instd_logic_vector(7downto0);
din_set:
instd_logic_vector(7downto0);
set_in:
instd_logic_vector(7downto0);
set_out:
bufferstd_logic_vector(7downto0)
);
endpreset_con;
architectureconofpreset_conis
signaltmp_sp:
std_logic_vector(7downto0);
signala,b,c:
std_logic_vector(7downto0):
="00000000";
signalen_alu:
std_logic;
signalp,d:
integer;
--signalu_d:
std_logic;
begin
p<=6;
d<=-4;
process(en_set,clk)
begin
ifrising_edge(clk)then
ifen_set='1'thentmp_sp<=din_set;
endif;
endif;
endprocess;
process(en_set)
begin
ifen_set='1'then
if(tmp_sp(7downto4)=din_tst(7downto4))and(tmp_sp(3downto0)
=din_tst(3downto0))
thenen_alu<='0';
elsif(tmp_sp(7downto4)>din_tst(7downto4))or
(tmp_sp(7downto4)=din_tst(7downto4)andtmp_sp(3downto
0)>din_tst(3downto0))
thenen_alu<='1';--u_d<='1';
elsif(tmp_sp(7downto4)(tmp_sp(7downto4)=din_tst(7downto4)andtmp_sp(3downto
0)thenen_alu<='1';--u_d<='0';
endif;
elseen_alu<='0';
endif;
endprocess;
process(clk)
begin
ifrising_edge(clk)then
a<=din_set;
b<=set_out;
c<=b;
endif;
endprocess;
process(en_alu,clk)
begin
ifen_alu='1'then
set_out<=set_out+conv_std_logic_vector(p*conv_integer(a-b)
+d*conv_integer(a-b-b+c),8);
--ifrising_edge(clk)then
--ifen_alu='0'thentmp<="00000000";
--elsifu_d='1'then
--tmp<=tmp+'1';
--elsifu_d='0'then
--tmp<=tmp-'1';
--endif;
elseset_out<=set_in;
endif;
endprocess;
--process(en_set,set_in)
--begin
--ifen_set='1'then
--set_out<=tmp+set_out;
--elseset_out<=set_in;
--endif;
--endprocess;
end;
二:
g_set
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityg_setis
port(
en:
instd_logic;
grade:
outstd_logic_vector(2downto0);
set_out:
outstd_logic_vector(7downto0)
);
endg_set;
architecturesetofg_setis
signalcnt:
std_logic_vector(2downto0);
begin
process(en)
begin
ifrising_edge(en)then
ifcnt="100"then
cnt<="000";
elsecnt<=cnt+'1';
endif;
endif;
endprocess;
process(cnt)
begin
casecntis
when"000"=>set_out<="00000010";
when"001"=>set_out<="00101100";
when"010"=>set_out<="00111011";
when"011"=>set_out<="01010011";
when"100"=>set_out<="11111111";
whenothers=>null;
endcase;
endprocess;
grade<=cnt;
end;
三:
cmp
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycmpis
port(
a:
instd_logic_vector(7downto0);
b:
instd_logic_vector(7downto0);
pwm_wave:
outstd_logic
);
endcmp;
architecturecmpofcmpis
begin
process(a,b)
begin
ifb<=athen
pwm_wave<='1';
elsifb>athen
pwm_wave<='0';
endif;
endprocess;
end;
四:
mux21
libraryieee;
useieee.std_logic_1164.all;
entityMUX21is
port(
a:
instd_logic;
b:
instd_logic;
s:
instd_logic;
y:
outstd_logic
);
endMUX21;
architecturertlofmux21is
begin
y<=(sanda)or(notsandb);
end;
五:
cnt5
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_