收藏 分销(赏)

EDA步进电机控制.doc

上传人:精*** 文档编号:10698584 上传时间:2025-06-10 格式:DOC 页数:22 大小:1.70MB 下载积分:10 金币
下载 相关 举报
EDA步进电机控制.doc_第1页
第1页 / 共22页
EDA步进电机控制.doc_第2页
第2页 / 共22页


点击查看更多>>
资源描述
EDA技术设计报告 《直流电机的PWM控制》 电子信息工程学院 通信2班 顾问 2012214485 一、 EDA技术概述 EDA(Electronic Design Automation)技术作为现代电子设计技术的核心,它依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成的设计文件,自动地完成逻辑化简、逻辑分割、逻辑综合、结构综合(布局布线),以及逻辑优化和仿真测试等项功能,直至实现既定性能的电子综合系统功能。EDA技术使得设计者的工作几乎仅限于利用软件的方式,即利用硬件描述语言HDL和EDA软件来完成对系统硬件功能的实现。 二、 硬件描述语言与所用软件简介 2.1、Verilog HDL硬件描述语言功能介绍 Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。   Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。   Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。 2.2、Quartus II软件综述 Quartus II是Altera公司在21世纪初推出的FPGA/CPLD开发环境,是Altera前一代FPGA/CPLD开发环境MAX+PLUSII的更新换代产品,其优点是功能强大、界面友好、使用便捷。Quartus II软件集成了Altera的FPGA/CPLD开发流程中所涉及的所有工具和第三方软件接口。通过此开发工具,设计者可以创建、组织和管理自己的设计。 2.3、第三方仿真工具ModelSim ModelSim仿真工具是由Model技术开发公司开发的目前业界最通用的仿真器之一,它支持Verilog和VHDL混合仿真,仿真精度高,仿真速度快。其仿真版本繁多,与Altera相关的主要有ModelSim-Altera(即AE版本)、ModelSim SE和ModelSim PE版本等。 三、设计原理 3.1、直流电机PWM调速原理 脉冲宽度调制(PWM)是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。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_en: pwm使能信号 duty_cycle: 控制PWM宽度 输出: pwm_out:PWM输出 PWM_logic模块顶层视图 5.2.2、pwm_logic模块原理介绍 程序通过一个计数器来实现PWM的输出,通过duty_cycle来控制输出的PWM波的占空比,PWM_en来实现PWM的输出与否。 核心程序如下: always @(posedge clk) //计数器计数,pwm_en为使能信号 begin if(!rst_n) counter <= 0; else if(pwm_en) counter <= counter + 1'b1; end always @(posedge clk) //PWM_out输出,程序根据判断计数器 begin //counter【15:12】跟duty_cycle比较来实现 if(!rst_n) //PWM的输出,<则输出‘1’大于则输//‘0’. pwm_out <= 1'b0; else if (pwm_en & (counter[15:12] <= duty_cycle)) pwm_out <= 1'b1; else pwm_out <= 1'b0; end 5.2.3、moto模块简介 引脚说明: 输入:clk:总时钟信号 rst_n:复位信号 Key[1:0]:按键输入 PWM_in:PWM输入信号 输出: duty_cycle:转速控制 pwm_en: pwm使能信号 Motoa:电机a端口。 Motob:电机b端口。 moto模块顶层视图 5.3、moto模块原理介绍 模块内部原理: 5.3.1、按键消抖及检测部分 核心程序如下: //按键消抖部分 always @(posedge clock) begin if(!rst_n) begin dout1 <= 0; dout2 <= 0; dout3 <= 0; end else if(div_clk) //div_clk是主时钟分频之后的时钟, Begin // 用于使能按键检测 dout1 <= key; dout2 <= dout1; dout3 <= dout2; end end //按键边沿检测部分 always @(posedge clock) begin if(!rst_n) buff <= 0; else //按键检测,通过assign 语句对key_edge buff <= dout1 | dout2 | dout3; //赋值,保证了按键的消抖 end assign key_edge = ~(dout1 | dout2 | dout3) & buff; 5.3.2、时钟分频部分 核心程序如下: always @(posedge clock) begin if(!rst_n) begin count <= 0; div_clk <= 0; end //else if (count < 17'd120000) //else if (count < 17'd4000) else if (count < 17'd4) Begin //counter 计数器计数,通过判断 count <= count + 1'b1; //counter的大小来决定输出的频率 div_clk <= 1'b0; end else begin count <= 17'd0; div_clk <= 1'b1; end end 5.3.3、5s定时及反转部分 通过对计数器进行计数,计到5s,大约计数器等于30'h2FAF080时执行下列语句,来实现输出motoa,motob的反转。 moto_dir <= ~moto_dir; assign motoa = moto_dir ? pwm_in : 1'b0; assign motob = moto_dir ? 1'b0 : pwm_in; 5.3.4、按键控制部分 本程序共有两个按键,按键一通过控制duty_cycle的长度来控制PWM波的占空比,从而实现电机转速的控制。按键二通过控制PWM_EN来实现PWM输出与否,从而实现电机的开关。 核心程序如下 always @(posedge clock) //按键1,控制电动机速度 begin if(!rst_n) duty_cycle <= 0; else if(key_edge[0]) duty_cycle <= duty_cycle + 1'b1;//按键按下,则PWM占空比加一 end always @(posedge clock) //按键2,控制电动机启动、停止 begin if(!rst_n) pwm_en <= 1'b0; else if(key_edge[1]) //按键二按下,PWM输出使能取反 pwm_en <= ~pwm_en; //实现电机的开关 End 5.4、两个小模块之间的配合 两个模块moto模块、pwm_logic模块之间的连接程序如下: moto moto_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_logic pwm_logic_inst( .clk(clock), .rst_n(rst_n), .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相关书籍少得可怜,也使我颇为苦恼。在整体构思上我也参阅了您发表的一篇文章,并且向实验室的研究生助教请教,得到了许多帮助,受益匪浅。 八、 参考文献 [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逆变电路与Dead time 对其影响的仿真 电子信息工程学院 通信工程二班 顾问 2012214485 一、 MATLAB与Simulink简介 MATLAB程序设计语言是美国MathWorks公司在20世纪80年代中期推出的高性能数值计算软件。该公司经过三十年的开发、扩充、不断完善与更新换代,MATLAB已经发展成适合多学科切功能特别强、特别全的大型软件。Simulink是MATLAB的一个附加组件,为用户提供了一个建模与仿真的工作平台。由于它的许多功能都是必须基于MATLAB环境下运行的,因此也有人将其称之为MATLAB的一个工具箱。它能够实现动态系统建模与仿真的环境集成,且可以根据设计及使用的要求,对系统进行修改与优化,以提高系统工作的性能,实现高效开发系统的目的。 二、 三相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的增大,谐波值通常逐渐减小。 三、 三相SPWM半桥逆变电路的仿真 在仿真在Simpowersystems的“Electrical Sources”库中选择电压源模块,直流电压设置为530V,选择“Universal Bridge”模块,在对话框中选择桥臂数为3,构成三相半桥电路,开关器件选择带反并联二极管的IGBT,三相串联RLC负载模块选择Y型连接,设定额定电压为413V,额定功率为50Hz,有功为1kW,感性无功为500Var,SPWM控制信号由Simpowersystems中的“Discrete PWM Generator”产生,选择三桥臂六脉冲模式。仿真模型如下: 设置调制深度m为1,输出基波频率设为50Hz,载波频率设为基频的30倍,即1500Hz,仿真时间设为0.06s,在powergui中设置为离散仿真模式,sample time为5*10s,运行后结果图如下: 三相SPWM逆变器m=1时的仿真波形 由上至下分别为直流电流波形,交流相电压波形,相电流波形,线电压波形; 输出电压谐波分析如下图: 三相SPWM逆变器m=1时的谐波分析图 所以当m=1时,输出线电压的幅值为0.866U,谐波的分析符合之前分析结果,主要在开关频率的整数倍附近。经分析,相电流的THD仅为3.56%,若进一步提高开关频率,则电流更加近似于正弦波。 四、 死区时间(dead time)对其影响 众所周知,桥式电路是很多逆变电路的基本结构,在理想情况下,每个桥臂的上下开关管严格轮流导通和断开。但实际情况并非如此,每个开关管的通断都需要一定时间,关断时间比导通时间长,所以为了防止桥臂短路,通常会让触发信号推迟一段时间,称为死区时间。在此时间内桥臂上下开关都没有触发信号,桥臂的工作状态将取决于两个续流二极管和该相电流的方向。 在下图中,和分别是无死区时a相桥臂上下开关管的互补驱动信号,和分别是将理想互补信号的各个上升沿均推迟了死区时间的实际SPWM驱动脉冲。当电流为负值时,电流由桥臂上管的反并联二极管和下管承载,因此在上下脉冲都不存在的死区时间里工作,输出电压为正;当电流为正值时,电流由桥臂下管的反并联二极管和上管承载,因此在上下脉冲都不存在的死区时间里工作,输出电压为负。综上所述,下图中画出了有死区时的实际输出电压波形、对照无死区时的理想输出电压。定义死区对输出电压的影响为死区畸变电压 =- 如下图所示,为宽度为、高度为的窄脉冲,其周期与调制波相同,其符号与电流相反,正电流时为负,负电流时为正。桥臂逆变的实际输出电压即为无死区时的理想输出电压再叠加上死区畸变电压,因此只需对进行分析,再结合理想电压的分析结果,便可确定死区时间对逆变器输出电压的影响。 死区时间对逆变桥臂输出的影响 死区畸变电压的窄脉冲可以用调制波周期的矩形脉冲等效,对其进行傅里叶分析知其包含3、5、7次奇次谐波,因此死区将低次谐波引入逆变器,降低了逆变器的谐波性能。 五、 通过仿真研究死区时间的影响 仿真模型的建立以之前的为基础,使用Simpowersystems/Extra Libray/Discrete Control Blocks 中的“Discrete On/Off Delay”来模拟死区时间。在PWM发生器与三相桥的驱动信号输入端之间插入此模块,选择上升沿滞后模式,dead time为2*10s。仿真模型如下图: 下图由上至下分别为直流电流波形,交流相电压波形,相电流波形,线电压波形: 有死区时间时三相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, Steven T 《 Introduction to Simulink with engineering applicationgs》 Orchard Pblications 电子信息工程学院 通信2班 顾问 2012214485
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服