毕业设计论文基于FPGA的电机控制.docx
- 文档编号:27076805
- 上传时间:2023-06-26
- 格式:DOCX
- 页数:29
- 大小:105.80KB
毕业设计论文基于FPGA的电机控制.docx
《毕业设计论文基于FPGA的电机控制.docx》由会员分享,可在线阅读,更多相关《毕业设计论文基于FPGA的电机控制.docx(29页珍藏版)》请在冰豆网上搜索。
毕业设计论文基于FPGA的电机控制
毕业设计(论文)-基于FPGA的电机控制
基于FPGA的电机控制
指导老师:
设计了一个基于现场可编程门阵列(FPGA)的电机控制系统。
简单介绍了步进电机和直流电机的工作原理和工作特点,并根据两种电机的不同特性设计了基于FPGA的不同的控制电路:
以改变频率来控制步进电机的转速;调节脉冲的占空比大小改变输出电压的大小,从而达到控制直流电机的转速的目的。
关键字:
FPGA步进电机直流电机电机控制PWM
DesignoftheMotor-ControlBasedonFPGA
Abstract:
theelectromotorcontrolsystemisdesignedbasedonFPGA.
Thispapersimplyintroducestheprincipleandthecharacrersofcurrent-motorandstep-motor.Andwhat’smore,differentcontrolcircuitsbasedFPGAaredesignedaccorderingtothedifferentcharacteristicofcurrent-motorandstep-motor.Therotatespeedofstep-motoriscontrolledbychangingfrequency.Theoutput-voltagechangesaccorderingtotherateofimpulses,andsotheaimtocontroltherotateofcurrent-motorachieve.
Keyword:
step-motormotor-controlPWMFPGA
1.系统设计…………………………………………………………………3
功能介绍…………………………………………………………………3
电机控制简介……………………………………………………………3
步进电机的控制………………………………………………………3
直流电机的控制………………………………………………………3
总体设计方案………………………………………………………4
总体设计思路…………………………………………………………4
方案论证与比较…………………………………………………4
2.单元电路设计……………………………………………………………7
2.1.步进电机驱动电路……………………………………………………………7
2.2.直流电机驱动电路……………………………………………………8
3.软件设计……………………………………………………………………8
实现方法……………………………………………………………………8
3.2程序流程图………………………………………………………………9
4.系统测试……………………………………………………………………10
5.结论及参考文献………………………………………………………10
5.1.结论:
…………………………………………………………………………10
5.2.参考文献:
……………………………………………………………………10
6.附录………………………………………………………………………………10
前言
步进电机:
一般,电动机都是连续旋转,而步进电动机却是一步一步转动的。
每输入一个脉冲信号,步进电机就将电脉冲信号转变为角位移或线位移。
在正常情况下,电机的转速、停止的位置只取决于脉冲信号的频率,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
步进电机只有周期性的误差而无累积误差等特点。
使它在速度、位置等控制领域应用非常广泛。
步进电动机的种类很多,按励磁方式可分为反应式、永磁式和感应子式;按相数分则可分为单相、两相和多相三种。
直流电机:
目前,直流电动机在控制系统中的应用十分广泛。
直流电动机的工作原理比较简单:
当定子中的励磁磁通和转子中的电流相互作用时,就会产生电磁转矩驱动电枢转动,恰当地控制转子中电枢的电流的方向和大小,就可以控制直流电动机的转动方向和转动速度。
电枢电流为零时直流电机则停止不动。
1.系统设计
功能简介
一、基本功能
(1)步进电机能够在四相八拍工作方式下连续运行。
(2)能实现步进电机正\反转及速度变换。
(3)能够实现直流电机的正反转及速度调节
(4)显示电机工作状态
电机控制简介
步进电机的控制
步进电机能够直接将数字脉冲信号转化成为角位移,不需要A/D转换,步进电机的空载启动频率一般较高,而运行频率相对来说较低,以超过空载频率启动将出现失步甚至无法启动。
为了保证控制速度的精确性,要从一个速度准确达到另外一个速度,就要建立一个校验机制,以防超过或未达到所需速度.
步进电机的脉冲分配:
步进电机的脉冲分配是通过电机的通电换相来实现的。
例如:
四相步进电机的八拍工作方式,当电机正转时,其各相通电顺序为A-AB-B-BC-C-CD-D-DA-A,当电机反转时,其各相通电相序为A-AD-D-DC-C-CB-B-BA。
步进电机换向时,一定要在电机降速停止或降到频率较低时才换向,以免产生较大的冲击而损坏电机。
换向信号一定要在前一个方向的最后一个CP脉冲结束后以及下一个方向的第一个CP脉冲前发出。
步进电机的转速控制:
步进电机的转速控制实际上就是控制触发脉冲的频率。
当脉冲的频率升高时,电机转速增加,当脉冲的频率降低时,电机的转速变慢。
1.2.2直流电机的控制
直流电机具有很好的线性调速特性,简单的控制性能。
控制直流电动机的转动方向比较简单,只需使驱动电路控制直流电源正接、反接,便可以达到对方向的控制。
直流电机转速n的表达式为
式中U--电枢端电压;I---电枢电流;R--电枢电路总电阻;φ---每极磁通量;K---电机结构参数。
由式可得,直流电机的转速控制方法可以分为两类:
一类是对励磁通进行控制的厉磁控制法即改变磁通ф,一类是对电枢电压进行控制的电枢控制法即改变电枢电压U。
现在一般采用后面一种方法。
总体设计方案
.1总体设计思路
用于控制的电机是广州致远电子公司生产的电机实验仪:
DP-51MOTOR(带有驱动电路,我们可以另外设计驱动电路)。
为了实现对电机的控制,我们没有去做FPGA最小控制系统,而是直接采用F广州致远电子有限公FPGA实验仪:
DP-FPGA。
关键问题是如何产生对电机的控制信号。
.2方案论证与比较
一.控制部分的方案论证
方案一、用逻辑电路实现。
用定时芯片产生脉冲,用组合和时序电路实现对脉冲的分配及频率的调节。
整个电路用到的分立元件较多,电路构成复杂,不易焊接,且电路的抗干扰能力较差。
方案二:
采用单片机作为核心控制部件。
单片机设计控制电路省去了很多分立元器件。
对于脉冲的产生及分配,频率的调节,转速及状态的改变都可以由单片机实现,不必再分别用分立元器件实现。
但是按照给定的通电换相顺序,通过单片机的I/O向驱动电路发出控制脉冲,在电机的运行过程中要不停的产生控制脉冲,占用了大量的CPU时间,可能使单片机无法进行其它工作。
方案三、用FPGA作控制部件,FPGA控制外围电路简单,整体性能好,有更好的稳定性好。
精度高,抗干扰能力强。
显然第三种方案具有更大的优越性,灵活性,经比较采用第三种方案。
二.功率驱动电路的方案论证
为了便于控制,我们把步进与直流电机的驱动电路做在一块PCB板子上。
由于从FPGA的I/O中出来的电流较少,不足以驱动电机,或者能够驱动起来,但功率达不到要求。
对于直流电机的驱动方案,有一个非常精典的驱动电路,不做过多论证。
即采用由晶体管功率放大器8050和8550组成的H型PWM电路。
用FPGA控制晶体管功率放大器使之工作在占空比可调的开关状态,精确调整电动机的转速,这种电路由于工作在管子的饱和截止模式下,效率非常高;H型电路保证了可以简单的实现转速和方向的控制;电子开关速度很快,稳定性也极强,是一种广泛应用的PWM调速技术。
下面就步进电机的驱动作如下论证。
方案一:
单电压驱动。
单电压驱动是指电机在工作时,只用一个电压源对绕组供电。
如下图所示。
步进电机单电压驱动
它的特点是电路最简单。
电路中的限流电阻R1决定了时间常数,但R1太大会使绕组供电电流减小。
可在R1两端并联一个电容C,这样就可使电流的上升波形变陡,改善了高频特性。
该电路一般只适用于小功率步进电机的驱动。
方案二:
斩波恒流驱动
斩波驱动原理图
T1是一个高频开关管,T2开关管的发射极接一只小电阻R0。
以上的驱动过程表现为;T2每导通一次,T1导通多次,绕组的电流波形为:
在T2导通的时间里,电源是脉冲式供电,提高了电源效率,并且能在效抑制共振。
但是,由于电流波形为锯齿形,将会产生较大的电磁噪声。
经比较,单电压驱动电路简单,比较适合小功率驱动,正好适合本设计的要求。
所以采用方案一。
经过上面的比较与论证,可以得出电机控制的总方框图
2.单元电路设计
2.1.步进电机驱动电路
步进电机的驱动电路如下图所示,其驱动电路原理为:
从FPGA出来的脉冲信
号按一定的顺序分别接到晶体管Q3---Q6的基极,四个8050的集电极分别有四个相应的信号输出,并接到电机的1、4、3、6脚,2、5脚接高电平。
我们要求的电机的工作方式为四相八拍。
正转各相通电顺序为A-AB-B-BC-C-CD-D-DA-A,则只要依次通1110-1100-1101-1001-1011-0011-0111-0110-1110脉冲序列。
反转也可以此类推。
则电机在脉冲序列信号的作用下按预定方向转动,通过改变脉冲序列信号的快慢即频率来控制步进电机转速。
步进电机驱动原理图
2.2.直流电机驱动电路
直流电机驱动原理图
P1为直流电机的选择信号,即直流电机的总控制信号。
当P1为高电平时,就是让直流电机处于工作状态。
当P2输入为低电平,P3输入为高电平时,晶体管功率放大器Q2、Q5导通,Q3、Q4截止。
Q2、Q5与电机J10一起形成一个回路。
从而驱动电机正转。
当P2输入为高电平,P3输入为低电平时,晶体管功率放大器Q2、Q5截止,Q3、Q4导通,Q3、Q4与电机J10形成回路,驱动电机反转。
,若功放管的基极直接与FPGA的I/O口相连,则控制电压最高为3.3V,再加上晶体管本身的压降,加到电动机两端的电压就更少了,电动机的驱动力明显不够.。
因此,我们运用了TLP521-2光耦集成芯片,将控制部分与电机的驱动部分隔离开来,这样不仅增加了各系统模块之间的隔离度,也使驱动电流得到大大的加强。
3.软件设计
实现方法
总控制模块是采用VHDL语言在DP-FPGA实验板上编程。
通过对各个按键的选择来实现各种功能。
总的控制模块就是一个对不同按键的响应程序。
共有复位RESET键,步进与直流电机选择SLECT键,正反选择SHIFT键,速度选择SPEED键四个按键
3.2程序流程图
N
Y
4.系统测试
4.1.使用仪器:
FPGA实验仪:
DP-FPGA,广州致远电子有限公司
电机实验仪:
DP-51MOTOR,广州致远电子有限公司
数字万用表:
UT101MULTIMETER金创电子仪器厂
直流稳压电源:
DCPOWERSUPPLYDF1731SL2A,ZhongCeElectronicsCO.,LTD
5.结论及参考文献
5.1.结论:
步进电机控制的控制通过程序较易实现,但要注意其起动时的频率不能太大,否则易产生失步,甚至根本起动不起来。
步进电机的转速越快,其转矩将越小。
5.2.参考文献:
1王晓明电动机的单片机控制北京:
北京航空航天大学出版社2002年第一版
2.潘松,黄继业.EDA技术实用教程[m].北京:
科学出版社.2002
3.黄智伟全国大学生电子设计竞赛训练教程北京:
电子工业出版社2005年第一版
4.南华大学第六届全国电子设计竞赛全体参赛成员.第六届电子大赛资料
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
--Uncommentthefollowinglinestousethedeclarationsthatare
--providedforinstantiatingXilinxprimitivecomponents.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entitytopis
Port(clk:
instd_logic;
reset:
instd_logic;---1为复位0开启
button1:
instd_logic;---速度选择
button2:
instd_logic;---正反选择
control:
outstd_logic_vector(3downto0);---四相电机输入信号
buzzer:
outstd_logic;---报警信号
cs:
outstd_logic;---数码管选中
shift:
outstd_logic_vector(3downto0);---数码管位选信号
data_led:
outstd_logic_vector(7downto0));---数码管数据
endtop;
architectureBehavioraloftopis
componentkeyis
Port(reset:
instd_logic;---输入复位信号
clk:
instd_logic;
button1:
instd_logic;---输入速度按键信号
button2:
instd_logic;---输入正反转按键信号
speed:
outstd_logic_vector(2downto0);---速度数据输出端
sel:
outstd_logic_vector(1downto0));---正反转信号输出端
endcomponent;
componentmcfpis
Port(pwm_clk:
instd_logic;---速度控制脉冲
clk:
instd_logic;
reset:
instd_logic;
sel:
instd_logic_vector(1downto0);---正反转
qs:
outstd_logic;
control:
outstd_logic_vector(3downto0));
endcomponent;
componentmcfsis
Port(clk:
instd_logic;
reset:
instd_logic;
speed:
instd_logic_vector(2downto0);
pwm_clk:
outstd_logic);
endcomponent;
componentjishuis
Port(reset:
instd_logic;
qs:
instd_logic;
sel:
instd_logic_vector(1downto0);
alarm:
outstd_logic;
shuju1:
outstd_logic_vector(7downto0);
shuju2:
outstd_logic_vector(7downto0));
endcomponent;
componentbaojinis
Port(clk:
instd_logic;
alarm:
instd_logic;
buzzer:
outstd_logic);
endcomponent;
componentxsis
Port(clk:
instd_logic;
reset:
instd_logic;
shuju1:
instd_logic_vector(7downto0);
shuju2:
instd_logic_vector(7downto0);
cs:
outstd_logic;
shift:
outstd_logic_vector(3downto0);
data_led:
outstd_logic_vector(7downto0));
endcomponent;
signalload1:
std_logic_vector(2downto0);
signalload2:
std_logic;
signalload3:
std_logic_vector(1downto0);
signalload4:
std_logic;
signalload5:
std_logic;
signalload6:
std_logic_vector(7downto0);
signalload7:
std_logic_vector(7downto0);
begin
u1:
keyportmap(reset=>reset,clk=>clk,button1=>button1,button2=>button2,speed=>load1,sel=>load3);
u2:
mcfsportmap(clk=>clk,reset=>reset,speed=>load1,pwm_clk=>load2);
u3:
mcfpportmap(pwm_clk=>load2,clk=>clk,reset=>reset,sel=>load3,control=>control,qs=>load4);
u4:
jishuportmap(reset=>reset,qs=>load4,sel=>load3,alarm=>load5,shuju1=>load6,shuju2=>load7);
u5:
baojinportmap(clk=>clk,alarm=>load5,buzzer=>buzzer);
u6:
xsportmap(clk=>clk,reset=>reset,shuju1=>load6,shuju2=>load7,cs=>cs,shift=>shift,data_led=>data_led);
endBehavioral;
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
--Uncommentthefollowinglinestousethedeclarationsthatare
--providedforinstantiatingXilinxprimitivecomponents.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entitybaojinis
Port(clk:
instd_logic;
alarm:
instd_logic;
buzzer:
outstd_logic);
endbaojin;
architectureBehavioralofbaojinis
signalc:
std_logic;
begin
process(clk,alarm,c)
variablecnt:
integerrange0to50000;
begin
ifclk'eventandclk='1'thencnt:
=cnt+1;
ifcnt<25000thenc<='1';
elsifcnt<50000thenc<='0';
elsecnt:
=0;c<='0';
endif;
endif;
ifalarm='1'then
buzzer<=c;
elsebuzzer<='0';
endif;
endprocess;
endBehavioral;
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
--Uncommentthefollowinglinestousethedeclarationsthatare
--providedforinstantiatingXilinxprimitivecomponents.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityjishuis
Port(reset:
instd_logic;
qs:
instd_logic;---1个八拍信号
sel:
instd_logic_vector(1downto0);---01正转10反转
alarm:
outstd_logic;---报警信号
shuju1:
outstd_logic_vector(7downto0);
shuju2:
outstd_logic_vector(7downto0));
endjishu;
architectureBehavioralofjishuis
signalc1,c2:
std_logic;
begin
process(qs)
variablecnt:
integerrange0to50;
begin
ifrising_edge(qs)thencnt:
=cnt+1;
ifcnt=50then
cnt:
=0;alarm<='1';c1<='1';
elsealarm<='0';c1<='0';
endif;
endif;
endprocess;
process(reset,c1,sel)
variablecnt:
std_logic_vector(7downto0):
="00000000";
begin
ifreset='1'thenshuju1<="00000000";
elsifrising_edge(c1)then
ifsel="01"then
ifcnt(3downto0)>="1001"then
cnt(3downto0):
="0000";
cnt(7downto4):
=cnt(7downto4)+1;
elsecnt(3downto0):
=cnt(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 论文 基于 FPGA 电机 控制