毕业设计基于FPGA的电机控制Word文件下载.docx
《毕业设计基于FPGA的电机控制Word文件下载.docx》由会员分享,可在线阅读,更多相关《毕业设计基于FPGA的电机控制Word文件下载.docx(34页珍藏版)》请在冰豆网上搜索。
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
主控制器
步进电机
伺服电机
整流桥
2w10
整流用
电阻若干
10K(2个),220K(2
个),100欧/1W(4个),200欧(2个),470欧(2个)
NPN三极管
5609
2
9013
8050
4
PNP三极管
5610
发光二极管
光电耦合器
4N25
二极管
IN4148
电源插孔
插针
信号接口
电解电容
1000uF/50V
瓷片电容
33P
小车车架
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;
ifrst='
0'
thencnt:
=0;
elsifkey='
1'
elseifrising_edge(clk)then
ifcnt<
32000000thencnt:
=cnt+1;
y<
='
;
elsecnt:
=32000000;
endif;
endif;
endif;
endprocess;
process(key,sel1,rst)
thensel1<
elsifrising_edge(key)then
sel1<
=notsel1;
sel<
=sel1;
endprocess;
endBehavioral;
--/*STEP_MOTOR.VHD*/--步进电机控制脉冲产生模块
entitystep_motoris
Port(clk,rst:
instd_logic;
--系统时钟/复位信号
sel:
--正反转切换键
clkkk:
outstd_logic;
--步进电机步进脉冲
control:
outstd_logic_vector(3downto0));
--步机电机四相输出
endstep_motor;
architectureBehavioralofstep_motoris
signalclkk:
typestepisarray(0to7)ofstd_logic_vector(3downto0);
constanteight_step:
step:
=("
0001"
"
0011"
"
0010"
0110"
0100"
1100"
1000"
1001"
);
process(clk,rst)--电机运转脉冲分频模块
integerrange0to1499999;
elsifclk'
eventandclk='
then
ifcnt>
=7thenclkk<
=notclkk;
cnt:
elsecnt:
clkkk<
=clkk;
process(clkk,sel,rst)--控制脉冲产生模块
variableindex:
integerrange0to7:
begin
thenindex:
elsifrising_edge(clkk)then
ifsel='
then
ifindex<
=6then
index:
=index+1;
elseindex:
elseifindex>
=1then
=index-1;
=7;
control<
=eight_step(index);
--/*CEPIN.VHD*/--测频模块
entitycepinis
Port(clk,clk1,rst:
--系统时钟/输入被测脉冲/复位信号
shift:
outstd_logic_vector(3downto0);
--数码管位选信号
data_led:
outstd_logic_vector(7downto0));
--七段数码管
endcepin;
architectureBehavioralofcepinis
signalcount,d2: