FPGA直流电机控制系统设计Word文件下载.docx
《FPGA直流电机控制系统设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《FPGA直流电机控制系统设计Word文件下载.docx(31页珍藏版)》请在冰豆网上搜索。
第四章.核心器件及开发环境的介绍27
4.1FPGA核心板的介绍27
4.2四电压比较器LM339简介28
4.3开发环境QuartusII7.0介绍30
第五章系统调试32
5.1硬件电路的调试32
5.1.1电源电路32
5.1.2显示电路的调试32
5.2系统软件调试33
5.2.1消抖电路参数的调整33
5.2.2PWM波形参数的设计33
5.2.3比较器的设计34
5.2.3PID控制器的参数设计34
5.2.4系统的最终实现35
结束语36
致37
参考文献38
引言
电机是电动机和发电机的统称,是一实现机电能转换的电磁装置。
拖动生产机械,将电能转换为机械能的电机称为电动机;
作为电源,将机械能转换为电能的电机称为发电机。
由于电流有交流、直流之分,所以电机也就分为交流电机和直流电机两大类。
在各类机电系统中,由于直流电机具有良好的起动、制动和调速性能,直流调速技术已广泛运用于工业、航天领域的各个方面。
直流电机具有良好的启动和调速性能,被广泛地应用于对启动和调速有较高要求的拖动系统,例如电力牵引、轧钢机、起重设备等。
小容量的直流电动机在制动控制系统中的应用也很广泛。
本设计的课题为基于FPGA的直流电机调速系统。
最常用的直流调速技术是脉宽调制(PWM)直流调速技术,它具有调速精度高、响应速度快、调速围宽和耗损低等特点。
系统采用PWM调节实现对电机的调速,采用红外发射接收对管采集电机转速。
FPGA系统部进程工作在并行的状态下,各子进程相互独立,输出的PWM波形具有频率高,占空比调节步精密的特点。
高频率的PWM波形对直流电机工作的稳定起着极其重要的作用,尤其在高负载的调速系统中体现的优越性极其明显,频率越高电机运行越平稳。
另外,对PWM波形输出占空比的调节步进细分的特点大大的扩大了调速系统的调速围。
本设计中主要研究FPGA产生PWM波形的优越性并对其进行验证,并且针对FPGA系统进行等精度频率测量的高精度性进行验证。
设计方案及系统分析
1.1系统的实现及参数的要求
本系统是基于FPGA的直流电机闭环控制系统。
要求系统能用按键设定电机的工作转速,并在系统工作时可以通过外部设定改变电机的转速。
当电机的负载变化时,系统通过检测电机转速的变化对电机的转速进行PID调节,迅速调整电机的转速稳定工作在设定的工作频率。
要求系统工作稳定在设定值偏差1HZ围。
1.2直流电机调速原理
根据励磁方式不同,直流电机分为自励和他励两种类型。
不同励磁方式的直流电机机械特性曲线有所不同。
对于直流电机来说,人为机械特性方程式为[1]
(1.1)
式中:
、
——额定电驱电压、额定磁通量
——与电机有关的常数
——电机外加电阻、电机阻
——理想空载转速、转速降
分析(1.1)式可得.当分别改变
、
和
时,可以得到不同的转速n,从而实现对速度的调节。
由于
当改变励磁电流
时,可以改变磁通量的大小,从而达到变磁通调速的目的。
但由于励磁线圈发热和电动机磁饱和的限制,电动机的励磁电流
If和磁通量Φ只能在低于其额定值的围调节,故只能弱磁调速。
而对于调节电枢外加电阻R时,会使机械特性变软,导致电机带负载能力减弱。
对于他励直流电机来说,当改变电枢电压Un时,分析人为机械特性方程式,得到人为特性曲线如图1—1所示。
理想空载转速
随电枢电压升降而发生相应的升降变化。
不同电枢电压的机械特性曲线相互平行,说明硬度不随电枢电压的变化而改变,电机带负载能力恒定。
当我们平滑调节他励直流电机电枢两端电压时,可实现电机的无级调速。
基于以上特性,改变电枢电压,实现对直流电机速度调节的方法被广泛采用。
改变电枢电压可通过多种途径实现,如晶闸管供电速度控制系统、大功率晶体管速度控制系统、直流发电机供电速度控制系统及晶体管直流脉宽调速系统等。
图1—1直流电机机械特性曲线
1.3PWM基本原理设计方案
1.3.1PWM基本原理
PWM是通过控制固定电压的直流电源开关频率,从而改变负载两端的电压,进而达到控制要求的一种电压调整方法。
PWM可以应用在许多方面,如电机调速、温度控制、压力控制等。
在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并根据需要改变一个周期“接通”和“断开”时间的长短。
通过改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。
因此,PWM又被称为“开关驱动装置”。
如图1—2所示,在脉冲作用下,当电机通电时,速度增加;
电机断电时,速度逐渐减少。
只要按一定规律,改变通、断电的时间,即可让电机转速得到控制。
设电机始终接通电源时,电机转速最大为
设占空比为
,则电机的平均速度为[2]
式中,
——电机的平均速度;
——电机全通电时的最大速度。
,——占空比。
图1—2电驱电压“占空比”与平均电压关系图
1.3.2PWM波形的设计方案
如果采用CPU控制产生PWM信号,一般的PWM信号是通过模拟比较器产生的,比较器的一端接给定的参考电压,另一端接周期线形增加的锯齿波电压。
当锯齿波电压小于参考电压时输出低电平,当锯齿波电压输出电压大于参考电压时输出高电平。
改变参考电压就可以改变PWM波形中高电平的宽度。
若用单片机产生PWM波形信号,需要通过D/A转换器产生锯齿波电压和设置参考电压,通过外接模拟器输出PWM波形,因此外围电路比较复杂。
FPGA中的数字PWM控制与一般的模拟PWM控制不同。
用FPGA产生PWM波形,只需要FPGA部资源就可以实现。
用数字比较器代替模拟比较器,数字比较器的一端接设定值计数器输出,另一端接线性递增计数器输出。
当线性计数器的计数值小于设定值时输出低电平,当计数值大于设定值时输出高电平。
与模拟控制相比,省去了外接D/A转换器和模拟比较器的,FPGA部连线很少、电路更加简单、便于控制。
脉宽调制细分驱动电路的关键是脉宽调制,转速的波动随着PWM脉宽细分数的增大而减小。
针对FPGA的优越性,本设计采用了Altera公司的EP2C5Q208C8FPGA芯片作为系统的核心控制器件,设计基于FPGA的直流电机闭环控制系统。
[3]
1.4系统的外围硬件及其与FPGA的接口电路
硬件系统由FPGA核心学习板模块、显示模块、按键输入模块、电机测速模块、直流电机驱动模块组成,如图1—3。
图1—3系统硬件框架图
1.5系统的工作流程
基于FPGA的直流电机闭环控制系统的系统工作流程框图如图1—4。
系统通过FPGA部产生PWM波形输出到H型驱动电路控制电机的转动,采集电路反馈电机转动的波形到FPGA进行系统分析,形成闭还控制。
显示模块和按键输入独立接到FPGAD的I/O口,显示模块负责显示设定转速和实际测量到的转速。
按键输入模块对系统部信号进行设置。
工作流程为:
检测到电机工作脉冲,将其转换为实际转速M,实际转速M与通过键盘设定好的设定转速N比较并且分析,得出偏差值Q,部的PID调节器对偏差Q和M,N进行分析,输出调节比较器2(PWM波形发生器)的比较值的信号。
比较器2输出的PWM波形接到电机开关控制器,电机控制器的输出由输入按键5控制。
开关控制器开时输出PWM波形到H型驱动电路驱动电机工作。
第二章、硬件设计
2.1、电源模块的设计
本系统的电源设计采用2个独立电源供电,核心控制部分采用5V,3.3V供电,先输出5V电压满足部分外围硬件工作电压,再将5V电压转为3.3V稳压输出满足FPGA系统工作电压。
H型电机驱动电路采用15V电压供电。
两电源的接口通讯部分采用光电偶合器PC817实现。
电源原理图如图2—1[4],
图2—1中两电源不共地,IN1,IN2分别为隔离变压器输入的交流电压,经过整流二级管整流后输出直流电压,经4700u的滤波电容后得到平稳的直流电压,最后经过三端集成稳压器后在OUT1,和OUT2分别输出+5V和+15V的直流电压。
0.1u的瓷片电容的作用是滤除电源高频成分,滤除直流电源对电子系统的影响。
图2—1电源设计原理图
2.2、电机驱动模块
电机驱动采用H型乔氏驱动电路[5],该电路可通过PWM控制电机转速和控制电机方向。
电路图如图2—2:
电路与FPGA I/O接口部分采用光偶隔离,通过控制光电偶合器U1,U2的红外发光二级管的亮与灭来控制控制U1,U2的导通与截止。
如下图:
当A、B的电平分别为1和0时,U1,Q1,Q3截止,U2,Q2,Q4导通,电流方向为:
15V Q2 M1 M2 Q4地,电机正转;
若A、B的输出电平分别为0和1时,U1,Q1,Q3导通,U2,Q2,Q4截止,电流方向为:
15V Q1 M2 M Q3地,电机反转。
图2—2H型直流电机驱动电路
2.3、电机转速测量模块
由于在本系统设计中用由无刷直流电机组成的风扇来模拟,所以检测电机转速是通过在风扇的扇叶的两端分别装上一个红外线发射二级管和一个红外线接收管[6]。
硬件电路如图2—3。
当扇叶挡住红外发射对管时,接收管Q截止,由LM339构成的比较器的5脚正端输入得到的是 接近5V的高电平。
假设比较器的负端输入电压为3.8V,则比较器输出端IO输出高电平。
反之,当红外收发对管没有被煽叶挡住的时候,接受管接受到DS发出的光而导通,在导通的情况下,比较器5脚的正端输入电压被拉低到0.3左右,比4脚的3.8V电压低,从而使LM339的输出端2脚输出低电平。
由此可知,当电机转动的时候,通过红外收发对管结合LM339够成的比较器电路,在比较器输出端IO得到周期随电机转速的变化而变化的方波,通过FPGA部的频率计检测该波形可以转换准确的求出电机的转速。
这样就完成了速度的采集部分。
另外在设计电路的时候,LM339的电源两端并联1个100u的电解电容和一个0.1u的瓷片电容做为退偶电容,可以消除电源纹波的干扰使电路处于最佳工作状态。
还有一点要说明的是,由于EP2C5的高电平为3.3V所以为了得到高电平为3.3V的方波,必需在LM339比较器的输出端接3.3V的上拉电阻,调试电路的时候必须用示波器观察比较器输出的波形混有杂波,通过加大滤波电容等办法将杂波滤除,从而消除了干扰得到准备的测量值。
图2—3LM339比较器模块(测速模块)
2.4、按键输入模块
采用轻触键实现与FPGA的接口[7]。
如图2—4,key1,key2,key3,key4,key5分别与FPGA核心板引出的IO口连接,由于接上了上拉电阻,所以当按键未按下时在FPGA上呈现的是高电平,当按键按下时,按键的两端导通接到地,在FPGA端口上呈现低电平。
FPGA通过检测输入端口的跳变或输入端口的电平状态来对部信号进行调整。
图2—4按键接口电路
2.5、LED显示模块
显示采用2片4位一体共阴极8段数码管显示[8],一片用来显示设定的转速,;
另一片用于显示实际采集到的电机的转速。
电路如图2—5,显示采用动态扫描方式实现,数码管的段码并联经过一线流电阻直接接到FPGA的IO口,位选端经过小功率NPN三级管8050实现扫描开关控制。
R1~R8为150欧姆的限流电阻,R9~R16为4.7K,用与保持三级管基极电压。
当P2输出的位选信号为低电平时,三极管截止,数码管熄灭。
当P2输出信号为高电平时,三极管导通,位选接地,数码管点亮。
数码管扫描显示就是依次单个选通8个位选端,快速的循环显示。
动态扫描不仅节约IO口,而且减少了电源的负载。
P1,P2分别接FPGA核心板引出的IO口。
图2—5LED显示模块电路
第三章、系统软件设计及分析
3.1、频率计的设计
对电机转速的测量是通过对LM339输出的脉冲个数在一定闸门时间进行记数。
通过对记数值的转换来得到电机的转速。
由于风扇有的转轴有7片煽叶,所以电机转过一圈产生7个脉冲个数。
在本设计中,闸门时间为0.25秒。
假设在0.25秒的闸门时间共检测到N个脉冲,则可以通过计算得出电机的转速F=N*4/7转/秒。
在频率检测电路中,对脉冲输入检测的消抖电路极其重要消抖进程的时钟参数的设计直接影响到最后频率计得出的频率值。
下面结合消抖进程的仿真波形和VHDL代码简单介绍消抖电路的工作原理和参数的设计[9]。
RTL视图:
图3—1消抖电路RTL视图
仿真波形:
图3—2仿真波形图
消抖进程VHDL代码:
libraryieee;
useieee.std_logic_1164.all;
entitydoudongis
port(din,clk:
instd_logic;
dout:
outstd_logic);
enddoudong;
architecturebehaofdoudongis
signalx,y:
std_logic;
begin
process(clk)
ifclk'
eventandclk='
1'
then
x<
=din;
y<
=x;
endif;
dout<
=xand(noty);
endprocess;
endbeha;
从RTL视图中可知,该电路是由2个D触发器构成的RS触发器。
进程中CLK为消抖时钟,din为IO口电平输入,dout为输出信号。
CLK的时间周期的设计直接影响频率计计数的准确行。
从仿真波形可以设计出CLK的周期应为:
T<
Tclk<
Tmin,Tclk为CLK的时钟周期,T为干扰信号的周期,Tmin为电机达到最大速度时检测到波形信号的周期。
如果Tclk<
T则带入了干扰信号,没有达到消抖的作用。
如果T>
Tmin,则是消抖过大,把有用的信号滤除掉。
在设计Tclk时,结合设计电路,不断的测试并对得到的值进行对比将Tclk的周期设为100us左右,测量得到准确的频率值。
3.2、数据显示的程序设计
对设定值和实际转速的显示都是经过换算分别求得要显示的数的十位、个位、十分位、百分位的值。
然后经过转换成为BCD码,最终显示在2片4位一体的共阴极数码管上面。
在换算过程中,是通过编写一个除法器来对要显示的数值进行求余取摸运算。
除法器如图3—2。
由于该除法器只能对2个整数进行进行除法运算,所以对要处理的数乘以100,假设乘以100后得到的数为M(即为图3—3中的a),则对M先除以1000(即为下图中的b),得到的商y和余数rest。
Y为十位的数值,rest为M求余100得到的值。
接着对rest除以100即可即可得到个位的位数和余数,即为循环上述的过程,整个显示模块总共调用了3个除法器[10]。
图3—3除法器电路
除法器VHDL代码如下:
libraryieee;
entitydivideris
generic(n:
integer:
=14);
port(a,b:
inintegerrange0to32767;
y:
outstd_logic_vector(14downto0);
rest:
outintegerrange0to32767);
enddivider;
architecturert1ofdivideris
begin
process(a,b)
variabletemp1:
integerrange0to32767;
variabletemp2:
temp1:
=a;
temp2:
=b;
foriinndownto0loop
if(temp1>
=temp2*2**i)then
y(i)<
='
;
temp1:
=temp1-temp2*2**i;
elsey(i)<
0'
endif;
endloop;
rest<
=temp1;
endrt1;
3.3、PWM波形发生器的程序设计及分析
PWM波形发生器,如图3—4:
PWM的产生是从比较器的输出得到的,通过改变比较器的输入来达到输出周期一定占空比可调的方波。
设计思路为dataa从0到1024步进加1一直循环,循环的周期即为最终输出的方波的周期。
Dataa的值从0一直加1加到1024后跳变回到0,从模拟的角度考虑问题,可以把dataa看成是周期一定的锯齿波。
通过PID控制器计算,根据反馈的值调整datab对比较器的输入,从而达到改变输出PWM占空比的目的。
datab在系统部定义为标准逻辑类型signal:
databstd_logic_vector(9downto0);
转换成10进制其最大值为1024,但是由于PID控制器的原因,datab的取值在转换成10进制后只能在30-994的围。
若超出围,则在调整datab时执行datab<
=dadab+30或datab<
=data-30语句时,datab的值益出跳出最大值或最小值,导致输出占空比突然跳变,影响系统的稳定性。
图3—4比较器电路(PWM波形发生器)
3.4PID控制模块
根据测量到的实际转速(假设为M)结合设定的转速(假设为N),对数据进行分析,采用PID控制算法对决定转速大小的占空比输出进行调整。
控制框图如图3—5:
控制模块包括一个比较器和一个比较值发生器(即为占空比调整器)。
比较值发生器结合偏差来调整输出比较值DATA。
偏差Q=|M—N|,比较器输出为OUT,当实际值>
设定值时OUT=1;
当实际值
设定值时比较器输出OUT=0;
即当
OUT=1时,Q=M—N,当OUT=0时Q=N—M。
设定值M比较器输出OUT
实际值N
比较值DATA
图3—5PID控制框图
比较器VHDL代码如下:
entitybijiaoqiis
port(M,N:
integerrange0to9999;
outp:
endbijiaoqi;
architectureoneofbijiaoqiis
begin
process(M,N)
begin
ifM>
Nthenoutp<
elseoutp<
;
endone;
PID调节器[11]程序设计流程图如图3—6,当实际值大于设定值时,PID控制器应该做出反应,相应减小占空比输出。
当实际值小于设定值时,应增加占空比出。
PID控制器根据实际采样跟设定的偏差值Q的不同做出不同的调节,控制器根据Q所落在数据的围对输出的比较值进行粗调或微调,调节步进可变,步进的取值是经过多次的实际测试得出适当的值。
在本系统中取值为:
当Q值>
=570时,DATA为调整值,DATAT的调节步进为30,即偏差较大时需要对PWM波形输出的占空比做较大的调整才能达到迅速调节的目的。
当114<
Q<
570时,DATA调节步进为6,当实际值接近设定值时,应该适当减小调整步进,以免调整过大造成系统工作波动太大。
当
时,实际值逼近设定值,这时应对DATA进行小幅度调节,调节步近为3。
时,实际值临近设定工作频率,控制器以微小的步进对DATA进行调节,步进值为最小值1。
若Q=0则不对DATA进行调整。
逐次逼近最终使系统工作稳定在设定值。
由于系统工作负载是动态变化的,所以调节也是随着负载的变化动态调节PWM波形输出。
偏差值Q之所以那么大是因为Q是设定值跟实际值的差求得,但是因为显示部分要对设定值和实际值进行除法运算,由于除法器支持的是整数的运算,所以先把设定值和实际值放大100倍,然后进行处理才能分出十分位、百分位。
由于频率计的记数闸门时间设定为0.25秒,闸门时间中记数值为NUM,系统采用风扇来模拟,电子转过一圈产生脉冲个数X=7。
由此可以换算得出频率F=4*NUM/X,即F=0.57NUM。
所以本系统的调节频率为步进0.57HZ。
若想更细分调节电机的工作频率围,可以通过提高X的值来实现。
本系统中X取值为7。
图3—6PID控制流程
PID控制器进程的VHDL代码:
---******************************************************
PROCESS(clk_1hz,power)--输出调整
variableBB:
std_lo