基于FPGA的电机控制.docx
- 文档编号:7468565
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:34
- 大小:141.09KB
基于FPGA的电机控制.docx
《基于FPGA的电机控制.docx》由会员分享,可在线阅读,更多相关《基于FPGA的电机控制.docx(34页珍藏版)》请在冰豆网上搜索。
基于FPGA的电机控制
基于FPGA的电机的控制
********
作者:
刮国文刘智聪王明海(第15组)
摘要:
目前,电机在控制系统中的应用越来越广泛,由此凸现了电机控制的重要性。
本文简单介绍了步进电机和伺服电机的原理和特点,并根据两种电机的不同特性设计了基于FPGA的不同的控制电路:
以PWM变频来控制步进电机的转速;以调节脉冲的占空比大小改变输出电压的大小来控制伺服电机的转速。
关键字:
步进电机伺服电机电机控制PWM占空比
DesignoftheMotor-ControlBasedonFPGA
Abstract:
Atpresent,themotorisplayingamoreandmoreimportantpartintheapplicationofauto-controlsystem;Itimpelsuscontinuouslytostudyhowtomasterthemotortechniques.Thispapersimplyintroducedtheprinciplesandthecharactersofcurrent-motorandstep-motor;Onthebasisofthose,wedesignedthedrivingcircuitforboththecurrent-motorandthestep-motorbasedonFPGA:
changingthefrequencywithPWM(脉宽调制电路)tocontrolthespeedofstep-motor,changingthevolumeofoutput-voltagewithadjustingthedutycycle(占空比)ofimpulsestocontrolthespeedofcurrent-motor.
Keyword:
Step-motorServo-motorMotor-control
PWMDutycycle
第一章总体设计……………………………………….…….3
第二章单元电路设计…………………………….………….6
1.步进电机驱动电路设计………………...…………...……6
2.伺服电机驱动电路设计………..…………………………6
第三章软件设计……………………………………………..7
第四章系统测试……………………………………………..9
第五章结论及参考文献………………………………….….9
第六章附录………………………………………………….10
一.总体设计
1.电机简介
1.1.1.步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。
使得在速度、位置等控制领域用步进电机来控制变的非常的简单。
不过步进电机在控制的精度、速度变化范围、低速性能方面都不如传统的闭环控制的直流伺服电动机,在精度不是需要特别高的场合就可以使用步进电机.
1.1.2.伺服电机可以把输入的电压信号变换成为轴上的角位移和角速度输出,在控制系统中,伺服系统是一种十分广泛应用的系统,伺服电机在系统中是用作执行元件,定子中的励磁磁通和转子中的电流相互作用时就会产生电磁转矩驱动电枢转动,恰当地控制转子中电枢的电流的方向和大小,就可以控制伺服电机的转动方向和转动速度,电枢电流为零时伺服电机则停止不动,不像步进电机需要用时序脉冲去驱动,还可以通过反馈形成闭环控制,达到较高的精度。
实现更简单。
2.电机控制
1.2.1.步进电机的控制:
步进电机能够直接将数字脉冲信号转化成为角位移,不需要A/D转换,所以被认为是理想的数控执行元件。
1.2.1.1.步进电机的起动:
步进电动机的最高起动频率(空载起动频率)一般为0.1KHz到3-4KHz,而最高运行频率则可以达到?
KHz。
以超过最高起动频率的频率直接起动,将出现"失步"现象,甚至无法起动。
因此驱动步进电机时,应当先计算出电机不失步起动的最大频率,但其计算过程涉及参量复杂,鉴于我们不是机械专业学生,对其具体理论了解有限,故不能精确计算出空载起动频率,实际应用对起动段的处理是采用按直线拟合的方法,即"阶梯升速法"。
可按两种情
图1阶梯升速起动
况处理,①已知突跳频率则按突跳频率分段起动,分段数n=f/fq。
②未知突跳频率,则按段拟合至给定的起动频率,每段频率的递增量(后称阶梯频率)△f=f/8,即采用8段拟合。
在运行控制过程中,将起始的速度(频率)分为n分作为阶梯频率,采用"阶梯升速法"将速度连续升到所需要的速度,然后锁定,按预置的曲线运行。
如图1所示。
速度从V1→V2如果是线性增加,则按给定的斜率升/降速;如果是突变,则按"阶梯升速法"处理。
在此过程中要处理好两个问题:
①速度转换时间应尽量短;为了缩短速度转换的时间,可以采用建立数据表的方法。
,结合各曲线段的频率和各段间的阶梯频率便可以建立一个连续的数据表,并通过转换程序将其转换为脉冲速率。
通过在不同的阶段调用相应的脉冲速率,控制电机的运行。
②保证控制速度的精确性;要从一个速度准确达到另外一个速度,就要建立一个校验机制,以防超过或未达到所需速度。
1.2.1.2.步进电机的换向:
步进电机通电换相这一过程称为脉冲分配。
例如:
四相步进电机的八拍工作方式,其各相通电顺序为A-AB-B-BC-C-CD-D-DA-A,通电控制脉冲必须严格按照这一顺序分别控制A、B、C、D相的通断。
如果按给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。
步进电机换向时,一定要在电机降速停止或降到突跳频率范围之内再换向,以免产生较大的冲击而损坏电机。
换向信号一定要在前一个方向的最后一个CP脉冲结束后以及下一个方向的第一个CP脉冲前发出。
如图3所示。
对于CP脉冲的设计主要要求其有一定的脉冲宽度(一般不小于5μs)、脉冲序列的均匀度及高低电平方式.
1.2.1.3.步进电机的转速控制:
步进电机的加/减速控制,实际上就是控制触发脉冲的频率,两个脉冲的间隔长短,决定了步进电机的转速。
升速时,使脉冲频率增高,减速时,使脉冲频率降低。
调整触发脉冲频率,就可以对步进电机进行调速。
1.2.2.伺服电机的控制:
1.2.2.1.控制方案比较
控制直流伺服电动机的转动方向比较简单,只需使驱动电路控制直流电源正接、反接,便可以达到对方向的控制。
而电动机的转动速度则跟电机的电磁转矩有关。
(1.2.2.1)
式(1.2.2.1)中M即为电磁转矩,Φ为磁通量,Ia为励磁电流;控制伺服电机速度的方法有两种:
一种是改变电枢电压Ua即改变电枢电流Ia的方法;另一种是改变励磁电流If即改变磁通ф的方法。
常用调节电枢电压的方法。
对电动机电枢电压的调节电路、方案选择的不同,结果会有很大的差异。
以下是电动机的驱动调速电路的方案选择。
方案一:
采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。
但是电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。
更主要的问题在于一般的电动机的电阻很小,但电流很大;分压不仅会降低效率,而且实现很困难。
方案二:
采用继电器对电机的开或关进行控制,通过开关的切换对电机的速度进行调节。
这个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械结构易损坏、寿命较短,可靠性不高。
方案三:
采用由晶体管功率放大器8050和8550组成的H型PWM电路。
用FPGA控制晶体管功率放大器使之工作在占空比可调的开关状态,精确调整电动机的转速,这种电路由于工作在管子的饱和截止模式下,效率非常高;H型电路保证了可以简单的实现转速和方向的控制;电子开关速度很快,稳定性也极强,是一种广泛应用的PWM调速技术。
基于上述理论的分析,直流伺服电动机驱动的调速电路选用由晶体管功率放大器组成的H型PWM电路来实现。
伺服电机控制闭环控制图:
图2闭环速度控制系统
1.2.2.2.PWM波的实现
用FPGA产生PWM波具有频率稳定、运算速度快等优点。
为了使得到的频率等步进变化,采用相位累加的方法。
输出波形的频率可用式(1.2.2.2.2)算出。
(1.2.2.2.2)
其中,fosc为晶振频率;k为分频系数,取k=200;N为相位累加器位数,取N=10,计数范围即为0~1024;ff为相位累加器步长。
我们采用的实验箱晶振为32MHz,初始状态ff=1,通过改变ff的值可以改变输出波形的频率。
将k=3,N=10,fosc=32M代入式①可得到频率步进为160Hz。
可用式(1.2.2.2.3)计算频率:
(1.2.2.2.3)
可以看出,只要改变ff的值,就可以方便的改变频率,使其实现160Hz的等步进调频。
本设计中设置了100档调节ff,从而实现了从20转/分到1800转/分每档约为20转的等步进调速。
如果有需要,可以方便地修改程序,使其达到预定的要求,从而实现无级调速。
电机控制总框图:
图4电机控制总框图
二.单元电路设计
2.1.步进电机驱动电路:
步进电机的驱动电路如图5所示,其驱动电路原理很简单。
从FPGA出来的脉冲信
图5步进电机驱动电路
号从J1接入按一定的顺序分别接到晶体管Q7~Q10的基极,输出端则有四个相应的信号输出,并接到电机的1、4、3、6脚(注意:
电机引出了六根线,只有1、4、3、6才是真正接电机的四相输入,且分别接电机的A、B、C、D相)。
设脉冲信号Step1的输入信号是低电平,则输出就为高电平,相应的电机A相导通;反之,则A相不导通。
以此类推,其余各相亦是如此。
则电机在脉冲序列信号的作用下按预定方向转动,通过改变脉冲序列信号的快慢即频率来控制步进电机转速。
2.2.伺服电机驱动电路:
直流电动机PWM驱动电路的具体电路如图6所示,本电路是基于PWM原理的H型驱
图6直流伺服电动机PWM驱动电路
动电路。
该电路采用晶体管功率放大器8050和8550,以满足电动机启动瞬间的大电流要求。
当J1-6输入为PWM调制信号时,则J1-5输入为低电平,晶体管功率放大器Q1、Q4导通,Q2、Q3截止。
Q1、Q4与电机DC-Motor一起形成一个回路,从而驱动电机正转。
当J1-5输入为PWM调制信号时,则J1-6输入为低电平,晶体管功率放大器Q1、Q4截止,Q2、Q3导通,Q2、Q3与电机DC-Motor形成回路,驱动电机反转。
一般控制系统电压统一为3.3V电源,因此若晶体管功率放大器的基极由控制系统直接控制,则控制电压最高为3.3V,在加上三极管本身的压降,加到电动机两端的电压就只有2.5V左右,减弱了电动机的驱动力。
基于以上考虑,我们运用了4N25光耦集成块,将控制部分与电动机的驱动部分隔离开来,这样不仅增加了各系统模块之间的隔离度,也使驱动电流得到大大的加强。
在此,光耦集成电路的电源VCC为+9V,H型驱动电路中晶体管功率放大器Q3、Q6的发射极所加的电源为9V。
两个电源利用光耦隔离开来,互不影响。
图7电机驱动电路总电路图
2.3.控制模块的设计:
总控制模块用VHDL语言对FPGA编程实现。
总控制模块其实质是一个按键控制程序,共有reset复位键、add累加键、sub递减键、start/stop启动/停止键、CS-shift伺服/步进电机控制切换键、shift电机正反转控制键六个按键。
系统启动时,首先运行系统初始化程序,程序先转到步进电机控制模块,送复位信号使步进电机处于初始状态,再转到伺服电机控制模块,送复位信号使伺服电机处于初始状态。
系统运行时,默认运行伺服电机控制模块。
其间主控程序不断检测按键,只要有键被按下则启动相应的子模块实现实时控制。
具体程序代码见附录程序清单。
三.软件设计
3.1.程序流程图:
控制模块的程序流程图如图8所示。
图8控制模块程序流程图
3.2.步进电机控制模块的设计:
步进电机控制模块其程序设计共分按键去抖、变频、测频、步进、换向五个部分。
模块一接收到按键信号,则按键去抖部分先对按键信号进行处理,得到稳定的控制信号;如果是变频信号则变频部分动作,通过相位累加模型,改变步进电机脉冲频率,并送给步进部分;如果是换向信号,则换向部分动作,为了使电机降速停止或降到突跳频率范围之内再换向,先停送驱动脉冲一秒,再送反向脉冲给步进部分,驱动电机换向;步进部分则是按照送来的脉冲频率和步进顺序信号驱动电机按预定的转速和转向转动;测频部分通过测定所送脉冲频率,再利用四相电机八拍运行时步距角为θ=360度/(50*8)=0.9度的尺度则可以计算出步进电机的每分钟转速数据,再送给显示模块显示。
3.2.伺服电机控制模块的设计:
伺服电机控制模块其程序设计共分为按键检测、按键去抖、PWM波产生、换向、占空比计数五个部分。
按键检测部分检测到按键信号,则送至按键去抖部分处理后得到稳定的控制信号;在没有收到控制信号时,PWM波产生部分则按默认的设置产生PWM波,一旦收到控制信号,波形产生部分则根据按键为累加或递减信号来产生相应的PWM波脉冲,相应的,占空比计数部分则开始对输出脉冲计数,PWM信号占空比的初始值为50%,通过对时钟进行计数,每计50个脉冲输出一个高电平,再过50个脉冲输出一个低电平。
计数周期固定为100,如果占空比改变为51%,那么来51个脉冲输出一个高电平,49个脉冲输出低电平;然后将占空比计数结果送显示模块显示;如果收到换向信号,则跟步进电机换向部分一样,先停送脉冲一秒,再送反向脉冲信号完成反向转动。
四.系统测试
4.1.使用仪器:
直流稳压电源:
DCPOWERSUPPLYDF1731SL2A,ZhongCeElectronicsCO.,LTD;
数字万用表:
UT101MULTIMETER金创电子仪器厂;
FPGA实验仪:
DP-FPGA,广州致远电子有限公司;
电机实验仪:
DP-51MOTOR,广州致远电子有限公司;
4.2.测试结果:
问题1:
电机不转,正反转指示灯不亮。
原因:
三极管管脚接错;
解决办法:
重接此只三极管;
问题2:
电机不转,但正反转指示灯亮。
原因:
分压电阻过大,导致电机驱动电流过小;
解决办法:
根据电机驱动电流大小换分压电阻。
问题3:
靠近电源接进口的三极管发热严重。
原因:
电路设计与实践数据出现偏差,导致流过三极管的电流偏高.
解决办法:
根据实测电路数据,修改电路原件.
经反复调试,现电路可按照按键输入准确控制电机运行.
五.结论及参考文献
5.1.结论:
对直流伺服电机采用PWM脉冲方式控制,其功率损耗小,运行效率高,加减速性能好,尤其是在要求低速大转矩下连续运行的场合。
伺服电机手
步进电机控制相对简单,但要处理好启动、换向时的加速问题,否则容易产生“失步”现象,对电机造成不必要的冲击。
5.2.参考文献:
1.潘松,黄计业.EDA技术实用教程[m].北京:
科学出版社.2002。
2.黄智伟主编,王彦,陈文光,朱卫华编著.全国大学生电子设计竞赛训练教程[M].北京:
电
子工业出版社2005.
3.南华大学第六届全国电子设计竞赛全体参赛成员.第六届电子大赛资料[C](多谢老师提供).
4.王松武,蒋志坚.通用仪器【M】.哈尔滨:
哈尔滨工程大学出版社.2002。
5.高吉祥.电子技术基础实验与课程设计【M】.北京:
电子工业出版社.2002。
六.附件
6.1.元件清单:
器件
型号
数量
备注
FPGA实验板
1
主控制器
步进电机
1
伺服电机
1
整流桥
2w10
1
整流用
电阻若干
10K(2个),220K(2
个),100欧/1W(4个),200欧(2个),470欧(2个)
NPN三极管
5609
2
NPN三极管
9013
2
NPN三极管
8050
4
PNP三极管
5610
2
发光二极管
2
光电耦合器
4N25
2
二极管
IN4148
4
电源插孔
1
插针
1
信号接口
电解电容
1000uF/50V
1
瓷片电容
33P
1
小车车架
1
6.2.程序清单:
----------------------------------------------------------------------------------------------------------------------
-----------------------------------------步进电机部分-----------------------------------------------------------
--/*ZTSD.VHD*/--换向模块
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
--Uncommentthefollowinglinestousethedeclarationsthatare
--providedforinstantiatingXilinxprimitivecomponents.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityztsdis
Port(clk,key,rst:
instd_logic;--系统时时钟/换向按键/复位信号
y:
outstd_logic;--输出
sel:
outstd_logic);
endztsd;
architectureBehavioralofztsdis
signalsel1:
std_logic;
begin
process(key,clk,rst)--产生换向延时秒脉冲
variablecnt:
integerrange0to32000000;
begin
ifrst='0'thencnt:
=0;
elsifkey='1'thencnt:
=0;
elseifrising_edge(clk)then
ifcnt<32000000thencnt:
=cnt+1;y<='0';
elsecnt:
=32000000;y<='1';
endif;
endif;
endif;
endprocess;
process(key,sel1,rst)
begin
ifrst='0'thensel1<='1';
elsifrising_edge(key)then
sel1<=notsel1;
endif;
sel<=sel1;
endprocess;
endBehavioral;
--/*STEP_MOTOR.VHD*/--步进电机控制脉冲产生模块
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entitystep_motoris
Port(clk,rst:
instd_logic;--系统时钟/复位信号
sel:
instd_logic;--正反转切换键
clkkk:
outstd_logic;--步进电机步进脉冲
control:
outstd_logic_vector(3downto0));--步机电机四相输出
endstep_motor;
architectureBehavioralofstep_motoris
signalclkk:
std_logic;
typestepisarray(0to7)ofstd_logic_vector(3downto0);
constanteight_step:
step:
=("0001","0011","0010","0110","0100","1100","1000","1001");
begin
process(clk,rst)--电机运转脉冲分频模块
variablecnt:
integerrange0to1499999;
begin
ifrst='0'thencnt:
=0;
elsifclk'eventandclk='1'then
ifcnt>=7thenclkk<=notclkk;cnt:
=0;
elsecnt:
=cnt+1;
endif;
endif;
endprocess;
clkkk<=clkk;
process(clkk,sel,rst)--控制脉冲产生模块
variableindex:
integerrange0to7:
=0;
begin
ifrst='0'thenindex:
=0;
elsifrising_edge(clkk)then
ifsel='1'then
ifindex<=6then
index:
=index+1;
elseindex:
=0;
endif;
elseifindex>=1then
index:
=index-1;
elseindex:
=7;
endif;
endif;
control<=eight_step(index);
endif;
endprocess;
endBehavioral;
--/*CEPIN.VHD*/--测频模块
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
--Uncommentthefollowinglinestousethedeclarationsthatare
--providedforinstantiatingXilinxprimitivecomponents.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entitycepinis
Port(clk,clk1,rst:
instd_logic;--系统时钟/输入被测脉冲/复位信号
shift:
outstd_logic_vector(3downto0);--数码管位选信号
data_led:
outstd_logic_vector(7downto0));--七段数码管
endcepin;
architectureBehaviora
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 电机 控制