EDA步进电机控制Word格式.docx
- 文档编号:17914427
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:22
- 大小:813.17KB
EDA步进电机控制Word格式.docx
《EDA步进电机控制Word格式.docx》由会员分享,可在线阅读,更多相关《EDA步进电机控制Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。
PWM信号任然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。
电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。
通的时候即是直流供电被加到负载上的时候,短的时候即是供电被断开的时候。
只要带宽足够,任何模拟值都可以使用PWM进行编码。
3.2、直流电机的PWM控制
PWM信号可以由CPU产生,也可以油FPGA产生。
由CPU产生PWM信号时,是通过模拟比较器产生的,比较器的一端接一个给定的参考电压,另一端接周期线性增加的锯齿波电压。
当锯齿波电压小于参考电压时输出低电平,当锯齿波电压大于参考电压时就输出高电平。
所以改变参考电压就可以改变PWM波形的高电平的宽度,也就是改变PWM波形的占空比。
CPU产生PWM信号,需要D/A转换器产生锯齿波电压和设置参考电压,通过外接模拟比较器输出PWM,因此外围电路很复杂。
而用FPGA的数字PWM控制产生PWM信号,只需要FPGA内部资源就可以实现,运用可编程逻辑器件,采用VerilogHDL硬件描述语言编程。
数字比较器的一端接设定值计数器输出,另一端接线性递增计数器输出。
如果线性计数器的技术值小于设定值就输出低电平,如果线性计数器的技术值大于设定值时输出高电平。
FPGA的数字PWM控制与模拟PWM控制相比,省去了外接的D/A转换器和模拟比较器,FPGA外部连线很少、电路简单、便于控制。
四、基本功能介绍
4.1、功能简介
本次设计制作了一个PWM信号电机控制系统,共有两个按键,其中,一个按键可以控制产生的PWM的宽度(即数字‘1’的时间长度),按下该按键,PWM的宽度增加4096个主时钟宽度,从而达到电机加速的目的,共有16个档速,PWM的宽度从0-4096*15个主时钟的宽度。
另外一个按键控制PWM波的输出与否,按下,如果PWM在输出,则停止输出,如果不在输出,则开始运行,从而实现对电机的开关控制。
同时,本系统内部自行设定了一个5s定时器,可以实现每5S钟电机转向的反转。
4.2、设计原理框图
电机控制系统
Key_in[1]
Key_in[0]
Pwm_en指示信号
Motoa电机a端
Motob电机b端
按键消抖及检测
5s定时实现反转
转速控制
电机开关
4.3、顶层图
4.4、引脚说明
输入:
Clock:
系统总时钟输入
Rst_n:
系统复位按键
Key[1:
0]:
系统功能按键。
Key[1]控制PWM波从输出与否
Key[0]控制电机转速,可加速
输出:
motoa,motob:
电机的两个输入引脚
pwm_en:
pwm波指示:
1--输出(即电机开启)
0--停止(即无PWM输出)
五、代码各部分模块介绍
5.1、系统模块RTL视图
5.2、系统各模块简介:
5.2.1、pwm_logic模块简介
引脚说明:
输入:
clk:
总时钟信号
rst_n:
复位信号
pwm使能信号
duty_cycle:
控制PWM宽度
输出:
pwm_out:
PWM输出
PWM_logic模块顶层视图
5.2.2、pwm_logic模块原理介绍
程序通过一个计数器来实现PWM的输出,通过duty_cycle来控制输出的PWM波的占空比,PWM_en来实现PWM的输出与否。
核心程序如下:
always(posedgeclk)//计数器计数,pwm_en为使能信号
begin
if(!
rst_n)
counter<
=0;
elseif(pwm_en)
=counter+1'
b1;
end
always(posedgeclk)//PWM_out输出,程序根据判断计数器
begin//counter【15:
12】跟duty_cycle比较来实现
rst_n)//PWM的输出,<
则输出‘1’大于则输//‘0’.
pwm_out<
=1'
b0;
elseif(pwm_en&
(counter[15:
12]<
=duty_cycle))
else
end
5.2.3、moto模块简介
Key[1:
按键输入
PWM_in:
PWM输入信号
duty_cycle:
转速控制
Motoa:
电机a端口。
Motob:
电机b端口。
moto模块顶层视图
5.3、moto模块原理介绍
模块内部原理:
5.3.1、按键消抖及检测部分
//按键消抖部分
always(posedgeclock)
begin
dout1<
dout2<
dout3<
end
elseif(div_clk)//div_clk是主时钟分频之后的时钟,
Begin//用于使能按键检测
=key;
=dout1;
=dout2;
end
//按键边沿检测部分
always(posedgeclock)
buff<
else//按键检测,通过assign语句对key_edge
=dout1|dout2|dout3;
//赋值,保证了按键的消抖
assignkey_edge=~(dout1|dout2|dout3)&
buff;
5.3.2、时钟分频部分
核心程序如下:
count<
div_clk<
//elseif(count<
17'
d120000)
d4000)
elseif(count<
d4)
Begin//counter计数器计数,通过判断
=count+1'
//counter的大小来决定输出的频率
=17'
d0;
5.3.3、5s定时及反转部分
通过对计数器进行计数,计到5s,大约计数器等于30'
h2FAF080时执行下列语句,来实现输出motoa,motob的反转。
moto_dir<
=~moto_dir;
assignmotoa=moto_dir?
pwm_in:
1'
assignmotob=moto_dir?
b0:
pwm_in;
5.3.4、按键控制部分
本程序共有两个按键,按键一通过控制duty_cycle的长度来控制PWM波的占空比,从而实现电机转速的控制。
按键二通过控制PWM_EN来实现PWM输出与否,从而实现电机的开关。
核心程序如下
always(posedgeclock)//按键1,控制电动机速度
duty_cycle<
elseif(key_edge[0])
=duty_cycle+1'
//按键按下,则PWM占空比加一
always(posedgeclock)//按键2,控制电动机启动、停止
pwm_en<
elseif(key_edge[1])//按键二按下,PWM输出使能取反
=~pwm_en;
//实现电机的开关
End
5.4、两个小模块之间的配合
两个模块moto模块、pwm_logic模块之间的连接程序如下:
motomoto_inst(
.clock(clock),
.rst_n(rst_n),
.key(key),//按键输入,控制电机速度及开关
.duty_cycle(duty_cycle),//输出给pwm_logic,实现转速的调整
.pwm_en(pwm_en),//输出给pwm_logic,实现电机的开关
.pwm_in(pwm_out),//来自pwm_logic的输出,接收PWM波
.motoa(motoa),//输出给电机,通过ab,的不同输出实现电
.motob(motob)//机的转动及反转
);
pwm_logicpwm_logic_inst(
.clk(clock),
.pwm_en(pwm_en),//来自moto的输出,使能PWM波的输出
.duty_cycle(duty_cycle),//来自moto的输出,控制电机转速
.pwm_out(pwm_out)//PWM波输出给moto模块,实现电机旋转
六、仿真结果与分析
6.1、moto模块的仿真结果(仿真中的时间全部比实际缩短)
6.1.1、验证按键消抖及PWM占空比控制模块
在本次验证中,给按键1一个负脉冲,如果脉冲宽度小于3个时钟周期,则判定为干扰,duty_cycle不加1,仿真图如下:
在下图中,红色部分表示按键一有一个小于3个时钟宽度的负脉冲,程序认为是按键干扰,占空比不加1,图中下面红色部分表示占空比始终处于0档。
图一、按键干扰仿真图
给按键1一个负脉冲,如果脉冲宽度大于三个时钟周期,则判定为确实有按键按下,duty_cycle加一,仿真图如下:
红色圆圈表示大于3个时钟周期的负脉冲,下面表示的是控制占空比的档位,从图中可以看出,每来一个负脉冲,则占空比档位加一:
图二、按键按下而非干扰仿真图
由以上两图可以看出,本模块中的按键消抖以及对按键占空比档位的控制是正确的,按键二与按键一大致相同,在此不赘述。
6.1.2、5s电机反转部分
在仿真中,将电机反转时间设定为100个时钟周期,便于观察。
结果如下图所示:
图三、5s电机反转仿真
图中红色部分即为电机反转的实现部分。
上图说明反转功能没有问题。
6.2、pwm_logic模块的仿真结果及分析
人为改变duty_cycle的大小,可以看到占空比逐渐在增大,实现了本模块的要求,仿真如下图:
图四、PWM占空比改变输出
6.3、两个模块联调仿真及分析
由前面两个环节可以验证两个模块独立运行没有问题,各自的功能均以实现,现在将两个模块连接起来进行联合仿真,在key人为加入负脉冲,看能否正常工作,仿真结果如下:
图五、联合仿真
如上图,在图中,首先按下按键2,使PWM_en使能,之后按下按键1,占空比增加,共可以增加16次,即16个速度档位,挂到最高后,会自动回到最低档位(最小占空比输出图中最左侧)。
七、心得体会
通过这次设计加深了我对EDA技术的理解,感受到在几十年间EDA技术蓬勃的发展历程与为设计者带来的更加高效与简单的体验,因为不同年份的书籍介绍的软件版本不同,我在Altera官网等网站浏览资料及下载软件时也都切身感受到其推陈出新更新换代之快,让我明白掌握扎实基本功才能以不变应万变。
因为没有参与民大课程及实验,所以并不是很难的东西也会使我花费许多时间,于是我也认真阅读了同学发来的老师的教案、实验报告册的内容,本次设计我也遇到了一些问题,例如modelsim软件的操作不熟悉以至波形仿真方面调试了很久,代码错误的修改无从下手等等,期间我也在图书馆查阅了很多资料,但是相较于VHDL台湾出版的Verilog相关书籍少得可怜,也使我颇为苦恼。
在整体构思上我也参阅了您发表的一篇文章,并且向实验室的研究生助教请教,得到了许多帮助,受益匪浅。
8、参考文献
[1]潘松,黄继业EDA技术实用教程[M];
科学出版社2006
[2]程耀林FPGA的系统设计方法解析[J];
现代电子技术2005(19)
[3]韩威,徐火生,方湘艳EDA与集成电路工程设计[M];
科学出版社2009
[4]周润景,苏良碧基于QuartusII的数字系统VerilogHDL设计实例详解[M];
电子工业出版社2010
[5]Palnitkar,Samir,黃英叡Verilog硬體描述語言[M];
臺北市全華科技2005
基于MATLAB的三相SPWM逆变电路与Deadtime对其影响的仿真
电子信息工程学院通信工程二班
顾问2012214485
1、MATLAB与Simulink简介
MATLAB程序设计语言是美国MathWorks公司在20世纪80年代中期推出的高性能数值计算软件。
该公司经过三十年的开发、扩充、不断完善与更新换代,MATLAB已经发展成适合多学科切功能特别强、特别全的大型软件。
Simulink是MATLAB的一个附加组件,为用户提供了一个建模与仿真的工作平台。
由于它的许多功能都是必须基于MATLAB环境下运行的,因此也有人将其称之为MATLAB的一个工具箱。
它能够实现动态系统建模与仿真的环境集成,且可以根据设计及使用的要求,对系统进行修改与优化,以提高系统工作的性能,实现高效开发系统的目的。
2、三相SPWM逆变电路
三相PWM逆变器主电路
三相SPWM逆变电路中,载波信号
仍为对称三角波,幅值为
,频率为
,调制信号为三相正弦波
、
与
,幅值为
,对于a相桥臂,当
>
时,S1导通S4关断,当
<
时,S4导通S1关断,b相和c相类似。
下图为载波比p=3时的三相SPWM逆变电路基本波形
输出电压的谐波集中分布在
处,其中
n=1,3,5,…时,k=3(2m-1)
1,m=1,2,3,…
n=2,4,6,…时,k=6m+1,m=0,1,2,…,或k=6m-1,m=1,2,3,…
所以,在载波频率的整数倍处的高次谐波不再存在。
SPWM的谐波分布一组一组集中分布于载波频率的整数倍频率两侧,且在每一组谐波中,随着k的增大,谐波值通常逐渐减小。
3、三相SPWM半桥逆变电路的仿真
在仿真在Simpowersystems的“ElectricalSources”库中选择电压源模块,直流电压设置为530V,选择“UniversalBridge”模块,在对话框中选择桥臂数为3,构成三相半桥电路,开关器件选择带反并联二极管的IGBT,三相串联RLC负载模块选择Y型连接,设定额定电压为413V,额定功率为50Hz,有功为1kW,感性无功为500Var,SPWM控制信号由Simpowersystems中的“DiscretePWMGenerator”产生,选择三桥臂六脉冲模式。
仿真模型如下:
设置调制深度m为1,输出基波频率设为50Hz,载波频率设为基频的30倍,即1500Hz,仿真时间设为0.06s,在powergui中设置为离散仿真模式,sampletime为5*10
s,运行后结果图如下:
三相SPWM逆变器m=1时的仿真波形
由上至下分别为直流电流波形,交流相电压波形,相电流波形,线电压波形;
输出电压谐波分析如下图:
三相SPWM逆变器m=1时的谐波分析图
所以当m=1时,输出线电压的幅值为0.866U
,谐波的分析符合之前分析结果,主要在开关频率的整数倍附近。
经分析,相电流的THD仅为3.56%,若进一步提高开关频率,则电流更加近似于正弦波。
4、死区时间(deadtime)对其影响
众所周知,桥式电路是很多逆变电路的基本结构,在理想情况下,每个桥臂的上下开关管严格轮流导通和断开。
但实际情况并非如此,每个开关管的通断都需要一定时间,关断时间比导通时间长,所以为了防止桥臂短路,通常会让触发信号推迟一段时间,称为死区时间。
在此时间内桥臂上下开关都没有触发信号,桥臂的工作状态将取决于两个续流二极管和该相电流的方向。
在下图中,
和
分别是无死区时a相桥臂上下开关管的互补驱动信号,
分别是将理想互补信号的各个上升沿均推迟了死区时间
的实际SPWM驱动脉冲。
当电流
为负值时,电流由桥臂上管的反并联二极管
和下管
承载,因此在上下脉冲都不存在的死区时间里
工作,输出电压为正;
为正值时,电流由桥臂下管的反并联二极管
和上管
工作,输出电压为负。
综上所述,下图中画出了有死区时的实际输出电压波形
、对照无死区时的理想输出电压
。
定义死区对输出电压的影响为死区畸变电压
=
-
如下图所示,
为宽度为
、高度为
的窄脉冲,其周期与调制波相同,其符号与电流相反,正电流时
为负,负电流时
为正。
桥臂逆变的实际输出电压即为无死区时的理想输出电压再叠加上死区畸变电压,因此只需对
进行分析,再结合理想电压的分析结果,便可确定死区时间对逆变器输出电压的影响。
死区时间对逆变桥臂输出的影响
死区畸变电压的窄脉冲可以用调制波周期的矩形脉冲等效,对其进行傅里叶分析知其包含3、5、7次奇次谐波,因此死区将低次谐波引入逆变器,降低了逆变器的谐波性能。
5、通过仿真研究死区时间的影响
仿真模型的建立以之前的为基础,使用Simpowersystems/ExtraLibray/DiscreteControlBlocks中的“DiscreteOn/OffDelay”来模拟死区时间。
在PWM发生器与三相桥的驱动信号输入端之间插入此模块,选择上升沿滞后模式,deadtime为2*10
s。
仿真模型如下图:
下图由上至下分别为直流电流波形,交流相电压波形,相电流波形,线电压波形:
有死区时间时三相SPWM逆变器的仿真波形图
死区畸变电压波形图
有死区时间三相SPWM逆变器输出电压的谐波分析图
综合以上几幅图可知,负载电流与死区畸变电压的关系符合之前分析,由图可知,此时输出电压基波幅值为427.2V,小于无死区时的459V;
输出电压的THD为75.75%大于无死区时的68.55%,所以对比两个谐波频谱图可知,加入了死区时间后出现了明显的低次谐波。
六、心得体会
之所以想到做这个题目是因为之前有选修MATLAB,而且在信号与系统实验是也是用到了Simulink,不算是陌生,通过这次对三相SPWM逆变电路的仿真模拟,加深了我对电力电子学的理解,也使我更加熟悉了MATLAB与Simlink的运用,让我认识到计算机软件辅助设计对于项目研究有着巨大的意义。
在这次写作中,也遇到了很多问题,通过与同学与助教的讨论最终得到了解决,我觉得受益匪浅。
七、参考文献
【1】廖东初《电力电子技术》华中科技大学出版社2007
【2】黄忠霖《电力电子技术的MATLAB实践》国防工业出版社2009
【3】徐瑞隆《電力電子學電腦輔助分析與設計》新文京開發出版公司
【4】林飞《电力电子应用技术的MATLAB仿真》中国电力出版社2008
【5】Karris,StevenT《IntroductiontoSimulinkwithengineeringapplicationgs》OrchardPblications
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 步进 电机 控制