【matlab编程代做】步进电机控制器设计
利用DSP实现的步进电机控制器的设计

利用DSP实现的步进电机控制器的设计数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。
数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。
在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。
德州仪器、Freescale等半导体厂商在这一领域拥有很强的实力。
TMS320LF2407是TI公司主推的一种高性能、低价格DSP处理器,其处理速度达到30 MIPS,片内处理集成RAM、Flash及定时器外,还集成了A/D转换器、PWM控制器及CAN总线控制器等模块,特别适合于电机、电源变换等实时要求高的控制系统。
但是通常设计DSP程序的方法是,在DSP的集成开发环境CCS中用C语言设计,需要花费大量的时间用来编写和输入程序代码。
在Matlab中用图形化的方式设计DSP的程序,能够缩短产品的开发时间。
本文所介绍的是一种基于TMS320LF2407实现的步进电机控制系统的设计。
1 系统硬件构成整个系统分为五个部分组成:DSP中央控制器TMS320LF2407,步进电机及驱动,光电编码器,键盘及液晶显示部分,以及整个系统的外围电源电路及看门狗复位电路组成,。
在这个系统设计中,由键盘设定给定转速(位置),通过中央控制器TMS320LF2407来产生PWM脉冲信号来控制步进电机的转速(位置),可以采用光电编码器对步进电机的转速(位置)进行采样检测实现闭环控制,也可以采用开环控制无需转速(位置)信号,以上过程中的多个变量、参数可以在液晶显示屏上得到直观地反映。
整个硬件结构简单直观,中央控制器TMS320LF2407还剩余丰富的I/O及中断资源,在此设计基础上具有一定的扩展空间。
基于MATLAB的步进电机PID闭环控制系统仿真

度,
限幅模块 控制电机的转 速。在不同PID参数下 位置仿真 输}f {如图 5所示萁 中PI D控制 系统的 响,相t 间为4s.这是山于在起始阶段J PJD控制 器的 KP使得 步进 电机以 较高速 度向 期单位 置
参 考文献
【l 】李维波.MATIAB在电气工程中的应用呻北
京:中 国电力出版社2 009.
f 21 史敬灼.步进电机伺服控制技彳qMI 北京:科学 出版社2 006
【3惆尊派正弦波细分步进电机微步驱动器LI l 微 特电机1 997.
作者简介:石建飞,09 7¨,男,哈尔滨理工 大学硕士毕业。讲师,现主要从事电力电子与电 力传 动方面 的研究 ,
形式。这样可以更好地降低电机的低频振荡现
o■一’=一…“ 淑 毋 白|
同
L=}
圹卜《争—坚—日—矾k
图2 细分 子模块
图3细分前后电机输出角位移 2 PID控制系统仿真 由f 细分控制仪仅采用电流闭环,故叮以 将其作为位置闭环控制的一个内环加入到步进 电机PI I ) 控制系统中。如此可以将开环步进电 机控制系 统改造为闭环 系统,步进电机 PI D控 制系统结构框图如图4所示。
一10一
中国新技术新产品
l PID与细 分模块 在工业 过程控制中, PI D控制 系统是应用 最广泛的,其具有原理简单、无需精确数学模 型、应朋面宽等优点。PI D调节足根据系统的误 差,按偏差的比例( P) 、积分m和微分0) ) 进行控制 的,存被控对象的结构与参数不能完全掌握域 得不列精确的数q' 4 葜- 型等情况下.叮以通过PI D 闭环控制来有效提高控制系统的精度和性能。 随着i f .算机技术的快速发展.1,I D控制器都通 过数 字控制 来实现 并且利用 计算机 的强大 功 能,不断改进数字PI D控制规律’朝着更加灵活 和智能化 的方向发展, 其中增域式PID算法在 实际 中就 多被 采用 ,其算 法如 F:
MATLAB语言控制系统分析与设计电机位置控制系统设计与仿真

电机位置控制系统设计与仿真一、简介直流电机是控制系统中常用的执行机构,它可以直接提供旋转运动,或和轮子、滚筒和皮带等耦合提供运动的传递。
电机的原理框图如图1所示。
图1 电机结构框图电机的物理参数由电机生产厂家和实验获得。
电机转动惯量J =3.2284⨯10-6 kg.m 2/s 2;机械阻尼系数b=3.5077⨯10-6 Nms ;机电常数K=Ke=Kt=0.0274 Nm/Amp ;电枢电阻R=4ohm ;电枢电感L=2.75⨯10-6 H 。
输入信号电枢电压V ,输出信号为轴的位移θ。
假定转子和轴均为刚性。
1.电机数学模型的建立分析电机工作原理,可根据基尔霍夫定理和牛顿定理建立电机的数学模型:dt d K V Ri dt di L iK dt d b dtd Je t θθθ-=+=+22 (1)将式1-1取拉氏变换整理后可得电机的传递函数:]))([(2K R Ls b Js s K V +++=Θ (2) 如选择电机位置、速度和电枢电流作为状态变量,可建立其状态空间模型为:[]⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-+⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡---=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡i y Vi i L L R L K J K J b θθθθθθ00100000101 (3)2.设计目标希望能精确控制电机的位置,即要求电机的稳态误差为零,同时希望因扰动引起的稳态误差也能为零。
对于动态性能的要求,希望电机能较快且平稳,期望调节时间T s 为40ms ,超调量小于16%。
根据时域和频域指标的关系,可将时域性能指标转换为频率响应的约束条件。
如系统的带宽与闭环系统自然振荡频率ωn 和阻尼比ζ有关,而ζωn 与调节时间有关。
相角裕度PM 和阻尼比ζ有关,进而与超调量相关。
()()244214 24421242242+-+-=+-+-=ζζζζζζζωωS n bw T (4)zeta = -log(.16)/sqrt(pi^2+(log(.16))^2); PM = 100*zeta;wbw = (4/(0.04*zeta))*sqrt((1-2*zeta^2)+sqrt(4*zeta^4-4*zeta^2+2));得 ζ>0.503,PM>50.3 deg ,wbw>252 rad/sec 3.校正前电机开环频率响应首先用MATLAB 描述电机模型,并观察电机的开环频率特性。
电机设计matlab程序

电机设计matlab程序⒈简介此文档旨在介绍如何使用MATLAB进行电机设计。
我们将会详细讨论各个步骤,包括电机设计理论、MATLAB代码编写、数据分析和结果可视化。
⒉系统要求在开始之前,确保您的计算机满足以下系统要求:- MATLAB软件(最新版本)- 电机设计所需的相关工具包⒊电机设计理论⑴电机基本原理在此章节中,我们将介绍电机的基本工作原理,如电磁感应、电磁力和转矩产生等。
⑵电机设计参数在此章节中,我们将讨论影响电机设计的主要参数,包括电流、电压、磁场强度等。
⒋MATLAB编程基础在设计电机之前,您需要熟悉MATLAB编程语言。
在此章节中,我们将介绍MATLAB的基础知识和编程技巧。
⒌电机设计步骤⑴电机建模在此步骤中,我们将介绍如何使用MATLAB进行电机建模,包括电路图、绕组和铁芯设计。
⑵参数计算在此步骤中,我们将介绍如何使用MATLAB计算电机设计所需的参数,如电感、电阻和磁通量等。
⑶性能分析在此步骤中,我们将使用MATLAB进行性能分析,包括电机效率、转矩和功率输出等。
⒍数据分析与结果可视化在此章节中,我们将介绍如何使用MATLAB对电机设计的数据进行分析和结果可视化。
⒎结论通过使用MATLAB进行电机设计,我们可以得出一系列数据和结果。
在此章节中,我们将总结这些结果,并讨论其意义和应用。
附件:本文档附带以下附件,以辅助电机设计:- 电路图示例文件- MATLAB代码示例文件- 数据集示例文件法律名词及注释:⒈版权:著作权法对原创作品的权益保护。
⒉商标:商标法对特定商标的注册和使用进行规范。
⒊许可证:指定条件下的合法许可使用。
⒋法律责任:法律规定的违法行为的责任。
步进电机控制系统设计(个人制作)

目录第一章步进电机控制系统设计........................................................................... - 1 -1.1 设计目的................................................................................................... - 1 -1.2 设计任务................................................................................................... - 1 -1.3 设计要求................................................................................................... - 1 -1.3.1 基本功能......................................................................................... - 1 - 第二章系统方案设计和工作原理....................................................................... - 2 -2.1 系统方案设计........................................................................................... - 2 -2.2 工作原理................................................................................................... - 2 - 第三章硬件电路设计........................................................................................... - 4 -3.1 驱动电路的设计....................................................................................... - 4 -3.1.1 脉冲分配器..................................................................................... - 5 -3.1.2 功率驱动单元................................................................................. - 5 -3.2 显示电路和控制按键............................................................................... - 5 - 第四章软件设计流程........................................................................................... - 6 -4.1 主程序设计............................................................................................... - 6 -4.2 调速程序设计........................................................................................... - 6 -4.2.1 电机的启动/停止控制 ................................................................... - 6 -4.2.2 电机正反转控制............................................................................. - 6 -4.2.3 电机加减速控制............................................................................. - 7 - 第五章系统仿真、调试结果及性能分析........................................................... - 8 -5.1 系统仿真................................................................................................... - 8 -5.2 调试结果................................................................................................. - 11 -5.3 性能分析................................................................................................. - 11 - 第六章实验心得................................................................................................. - 12 - 参考文献................................................................................................................. - 13 - 附录1 系统完整原理图...................................................................................... - 14 - 附录2 源程序...................................................................................................... - 15 -摘要步进伺服是一种用脉冲信号进行控制,并将脉冲信号转换成相应的角位移的控制系统。
基于Matlab的步进电机闭环建模与仿真

-k - G ai n3 -k - G ai n410 G ai n1× P r o duc t 1++ 1 1 E× d u /d t 20 D er iv ativ e1 G ai n2O u t+ A dd1 P r o duc t 2 F u zzy Lo g i c 1Co n tr o ll er-k - G ai n5sI nte g r ato r1×P r o duc t 3t 10=T 姨 姨姨t 11= T t = T s姨 姨 姨姨 姨 姨 姨 姨 姨 姨 姨doi:10.13436/j.m kjx.201403016基于 M atlab 的步进电机闭环建模与仿真陈 翔, 崔志琴, 徐兆华(中北大学 机电工程学院, 太原 030051)摘 要: 通过综合运用模糊 PID 控制算法、空间电压矢量脉宽调制方法(SVPWM )与矢量转换 技术,搭建了一种包括速度闭环与电流矢量闭环的二相混合步进电机双闭环的控制系统,并借助于 MATLAB/Sim ulink 强大的建模仿真功能,对步进电机双闭环控制系统进行了仿真分析。
相关仿 真结果表明,该控制系统具有较好的控制性能与动态响应能力。
关键词: 模糊 PID ; SVPWM ; 步进电机; 闭环仿真 中图分类号: TP273文献标志码: A文章编号: 1003 - 0794(2014)03 - 0035 - 02Closed-Loop Modeling and Simulation of Stepper Motor Based onM atlabCHEN Xi an g , CUI Zhi -qi n , XU Z hao-hua(College of M echanical and Electrical Engineering , North University of China, Taiyuan 030051, China)A b s trac t: A control system of double close d -loop f or two -pha se hybrid ste ppe r motor whic h including spee d close d -loop a nd curre nt close d -loop is esta blishe d base d on f uzzy -P ID control algorithm , spac e vector pulse width modulation (SVPWM ) method a nd space vec tor conversion, and the pe rforma nce of the doubled close d -loop control syste m of steppe r motor is analyze d by the powerful mode lling and sim ula tion f unc tion of MATLAB/Sim ulink. The simula tion results show tha t the control system has f a vora ble control perform ance and dynam ics c ha rac te ristic.K e y w ord s : f uzz y-P ID ; SVPW M ; ste ppe r motor ; c los ed-L oop sim ula tion 0 引言在传统的步进电机闭环控制中,控制器常采用 的算法为 PID 或模糊控制方法。
MATLAB电机控制综合仿真实验

MATLAB电机控制综合仿真实验一、他励直流电机单闭环调速仿真实验要求:利用Simpowersystem里面自带的DC电机模块,完成他励直流电机单闭环调速仿真,速度调节用PI控制方法,要求封装PI模块,给定速度100rad/s,负载由空载到1s时跳变到20N。
调节不同的PI参数,观察仿真结果总结速度波形、转矩波形的变化规律(PI参数和超调量、稳定时间、稳态误差、振荡次数)。
另外要求将scope图中的4条曲线参数导出到工作空间,并用subplot和plot 函数画在同一个窗口中,每个子图加上对应的标题。
电机相关参数的设置图:仿真原理图:在仿真试验中需要按照实验要求对PI控制器子系统进行封装,然后更改Kp、Ki参数值的大小。
封装PI模块图如下:Plot绘图程序:>>subplot(411)>> plot(t,W,'r'),title('转速')>> subplot(412)>> plot(t,Ia,'b'),title('电枢电流')>> subplot(413)>> plot(t,Te,'g'),title('转矩')>> subplot(414)>> plot(t,If,'y'),title('励磁电流')速度调节用PI控制方法,给定速度100rad/s,负载由空载到1s 时跳变到20N,调节不同的PI参数,从PI模块封装中调节,修改不同的参数Ki 、Kp观察仿真结果。
Ki=100, Kp=5;050100w (r a d /s )00.51 1.52 2.53 3.54 4.55-2000200I a (A )-202I f (A )-1000100T e (N .m )Ki=2, Kp=1;w (r a d /s)I a (A)00.51 1.52 2.53 3.54 4.55I f (A)00.51 1.52 2.53 3.54 4.55T e (N .m )二、 他励直流电机闭环调速系统仿真实验要求:利用Simulink 基本模块搭建他励直流电机闭环调速系统直流电机子模块,根据以下电机数学模型搭建:电磁转矩公式:e M a T C I =Φ 动力学平衡方程:e L m d T T B J dtωω--=电机模块要求封装,参数20.05kg m J =⋅,0.02N m s m B =⋅⋅,165m C =,0.01Wb f Φ=,恒定负载T L =20N 点击封装模块时输入。
Matlab在电机设计与控制中的应用方法总结

Matlab在电机设计与控制中的应用方法总结一、引言电机设计与控制是电力系统领域的重要研究方向。
随着计算机技术的发展,Matlab作为一种强大的数学软件工具,成为电机设计与控制中不可或缺的工具。
本文将总结Matlab在电机设计与控制中的应用方法,并探讨其在该领域的优势和潜力。
二、电机设计1. 参数计算与仿真电机设计的第一步是参数计算和仿真。
Matlab提供了丰富的数学计算和仿真工具,可用于电机参数的计算和模拟。
例如,可以通过Matlab的符号计算功能,快速且准确地计算电机各种参数,如电机的电感、电阻、转速等。
同时,Matlab的仿真工具Simulink可以方便地建立电机的仿真模型,并进行系统级的仿真分析,有助于优化电机设计。
2. 磁场建模与优化Matlab在磁场建模与优化方面具有强大的功能。
通过使用Matlab,可以建立电机的二维和三维磁场模型,并进行电磁场分析。
同时,Matlab还提供了各种优化算法,如遗传算法和粒子群算法,可以在电机设计中应用,以寻找最优的设计方案。
三、电机控制1. 控制算法设计与仿真Matlab提供了丰富的控制算法工具箱,可以用于电机控制系统的算法设计和仿真。
例如,PID控制器是电机控制中常用的算法之一,通过使用Matlab中的控制系统工具箱,可以方便地设计和调试PID控制器,并进行闭环仿真分析。
此外,Matlab还支持其他高级控制算法,如模糊控制和自适应控制,可以根据实际需求选择适用的控制算法。
2. 控制系统性能评估Matlab可以用于电机控制系统性能的评估。
通过分析系统的响应曲线和频率特性,可以评估系统的稳定性、响应时间、抗干扰能力等性能指标。
Matlab提供了强大的信号处理和频谱分析工具,可以对电机控制系统的信号进行分析,以评估系统性能。
四、应用案例以一台直流电机的设计与控制为例,介绍Matlab的应用方法。
1. 参数计算与仿真首先,使用Matlab的符号计算功能,计算直流电机的电感、电阻等参数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
步进电机控制器设计报告1.绪言在本次EDA课程设计中,我们组选择了做一个步进电机驱动程序的课题。
对于步进电机我们以前并未接触过,它的工作原理是什么,它是如何工作的,我们应该如何控制它的转停,这都是我们迫切需要了解的。
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。
使得在速度、位置等控制领域用步进电机来控制变的非常的简单。
步进电机及驱动电源是互相联系的整体。
步进电机驱动电源框图如图1所示。
变频信号源产生频率可调的脉冲信号,调节步进电机的速度。
脉冲分配器则根据要求把脉冲信号按一定的逻辑关系加到脉冲放大器上,使步进电机按确定的运行方式工作。
感应子式步进电机以相数可分为:二相电机、三相电机、四相电机、五相电机等。
以机座号(电机外径)可分为:42BYG(BYG 为感应子式步进电机代号)、57BYG、86BYG 、110BYG 、(国际标准),而像70BYG 、90BYG 、130BYG 等均为国内标准。
1.1 驱动控制系统组成使用、控制步进电机必须由环形脉冲,功率放大等组成的控制系统。
1.1.1 脉冲信号的产生脉冲信号一般由单片机或CPU 产生,一般脉冲信号的占空比为0.3-0.4 左右,电机转速越高,占空比则越大。
1.1.2 信号分配感应子式步进电机以二、四相电机为主,二相电机工作方式有二相四拍和二相八拍二种,具体分配如下:二相四拍为,步距角为1.8 度;二相八拍为,步距角为0.9 度。
四相电机工作方式也有二种,四相四拍为AB-BC-CD-DA-AB,步距角为1.8 度;四相八拍为AB-B-BC-C-CD-D-AB,(步距角为0.9 度)。
2.课题要求2.1 步进电机控制器设计要求: (1) start为”1”时,步进电机转动。
start为”0”时,步进电机停转。
(2) 预设step_in为常数,当clk为上升沿,load和start为”1’加载时,电机开始转动,转动step_in次后,停止转动。
当下次符合此要求时将再次转动。
(3) 通过load,,step_in同步或异步载入steps值。
示意图如下:图2如图2所示,为步进电机控制器的输入输出示意图。
其中:load为加载信号start为步进电机启动信号en为使能信号reset为置位清零信号clk为时钟信号step_in[15..0]表示输入的十六位二进制数,其数值范围用十进制数表示为0-65535。
Coil_out[3..0]表示输出,共有A,B,A′,B′四种状态。
A,B,A′,B′四种转动状态可用图3表示,电机按下图A- B- A′- B′- A循环转动,每转过一次变换90度。
当Coil_out[3..0]=“1000”,指针指向A;当Coil_out[3..0]=“0100”,指针指向B;当Coil_out[3..0]=“0010”,指针指向A′;当Coil_out[3..0]=“0001”,指针指向B′;当Coil_out[3..0]=“0000”,电机不工作。
图32.2 通过网络上收集资料,图书馆查阅书本,我们逐步了解了步进电机,了解它的基本工作原理后我们我们逐渐形成了一些驱动程序的基本构思,我们决定利用状态机的工作方式去编写步进电机的驱动。
3.方案设计与论证3.1状态机关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。
状态机通过响应一系列事件而“运行”。
每个事件都在属于“当前”节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。
函数返回“下一个”(也许是同一个)节点。
这些节点中至少有一个必须是终态。
当到达终态,状态机停止。
包含一组状态集(states)、一个起始状态(start state)、一组输入符号集(alphabet)、一个映射输入符号和当前状态到下一状态的转换函数(transition function)的计算模型。
当输入符号串,模型随即进入起始状态。
它要改变到新的状态,依赖于转换函数。
在有限状态机中,会有有许多变量,例如,状态机有很多与动作(actions)转换(Mealy机)或状态(摩尔机)关联的动作,多重起始状态,基于没有输入符号的转换,或者指定符号和状态(非定有限状态机)的多个转换,指派给接收状态(识别者)的一个或多个状态等等。
传统应用程序的控制流程基本是顺序的:遵循事先设定的逻辑,从头到尾地执行。
很少有事件能改变标准执行流程;而且这些事件主要涉及异常情况。
“命令行实用程序”是这种传统应用程序的典型例子。
另一类应用程序由外部发生的事件来驱动——换言之,事件在应用程序之外生成,无法由应用程序或程序员来控制。
具体需要执行的代码取决于接收到的事件,或者它相对于其他事件的抵达时间。
所以,控制流程既不能是顺序的,也不能是事先设定好的,因为它要依赖于外部事件。
事件驱动的GUI应用程序是这种应用程序的典型例子,它们由命令和选择(也就是用户造成的事件)来驱动。
3.2 设计论证利用状态机的工作原理来设计步进电机的控制程序。
本课题要求需要输出五种状态,其中有四种转动状态,电机即按照此四种状态旋转,还有一种状态是用于保护电机,避免电机因通电过长而烧坏。
3.3最初设计:按照由易及难的原则,即将steps值固定,使电机转动步数恒定,每次触发旋转则按照固定steps值转,转动steps值后停转。
二次修改:在设计好最初的目标程序后,我们有对程序进行改进,即增加了steps预设功能,在进行波形仿真的时候,可修改输入信号step_in的值(16位二进制数),从而改变步进电机的转动步数。
更高要求:(1)在电机停转之后,应使输出为零,即保持电机的电路电流为零,从而达到保护电机不被烧毁的目的。
(2)在电机停转之后,若再次启动旋转,则从上次停止的位置继续旋转,这是符合实际情况的仿真。
(3)在电机停转之后,利用PWM技术对电路进行控制。
3.4鉴于以上要求,我们组经过一周左右时间利用VHDL语言设计出了符合课题要求的步进电机控制器程序(见附录)。
如下图4所示,为步进电机控制仿真波形图:图4图4中显示的是step_in值分别为10,8,12三种情况(16进制表示)时,Coil_out的输出情况,结果表明波形仿真与设计要求相符。
4. 总结与体会在编写程序的过程中我们出现了很多这样那样的困难,但我们并没有气馁,而是认真的探讨研究,终于将其一一解决。
在编程的开始我们就遇到了麻烦,输入端口step_in是输入了一个16位的二进制数,为了下面计数简单一点需要将其转换为十进制数。
开始我们打算用数据类型转换函数TO_INTEGER将STD_LOGIC_VECTOR转换成INTEGER,这需要调用DATAIO库,可在编译的时候提示找不到DATAIO库,我们只有放弃这一思路,另谋出入。
在一次翻阅图书馆资料的时候我无意中发现了一个新思路,就是在实体的说明语句中直接将step_in定义为step_in:IN INTEGER RANGE 65535 TO 0,这样电脑可以将输入的二进制自动转换为十进制的。
步进值输入了,那就要开始计数,本来我们想用加法从0开始计数,但在编程实现这一想法的时候我们发现这样做需要考虑的因素太多了,实现起来也比较困难。
所以有人提议我们试着用减法计数,我们照着做了,结果发现这样编确实很简单,而且程序也简洁明了。
在老师检查我们的程序的时候,老师发现了一个严重的漏洞,就是在转动steps停转后电机仍保持着当前状态,这样长时间通电会导致电机烧坏。
我们思考了一会决定给状态机增加一个状态,就是停转的时候不给电机通电,在停转的时候给电机这样一个状态可以起到保护的作用。
在第二次给检查的时候,老师又发现了要改进的地方,那就是在转了一个步进值之后又给电机一个加载信号,使电机进行二次工作,此时应紧接着上一次的状态继续工作,而我们的却从“1000”状态重新开始的。
经过反复思考,我们决定增加一个变量before_state,使之保留当前状态,即当current_state处于s0状态时,next_state<=s1,before_state〈=s0。
这样我们就解决了这一问题。
在这次编程中还有一个最令人头痛的问题,我们这个课题有很多的输入,要使电机转动有很多的条件,这就用到很多的if语句,可是在嵌套使用的过程中总是有问题,电脑显示太复杂,经过无数次的调整,最后也被我们克服了。
在这次课程设计中,我们学到了关于EDA的很多其他知识点,对EDA有了更深的认识,扩展了知识面。
同时我们也有很多的体会,课程设计是四人一组的,这就需要我们有着良好的团队合作意识,正是我们四个人的通力合作才顺利完成了本次课程设计,每个人在这次课程设计中都扮演着重要的角色,每段程序都凝结着我们智慧的结晶,正所谓“三个臭皮匠顶上一个诸葛亮”。
我们遇到困难时,并没有退却,而是勇敢的面对,正是这种不怕困难的精神克服了一个又一个难点。
老师在选题时曾说过,步进电机是比较有难度的,但这并未成为我们的阻力,反而成了我们不断超越的动力!总而言之,本次课程设计让我们受益匪浅!5.参考文献5.1 VHDL电路设计技术王道宪主编。
5.2 电子技术基础实验陈大钦等著。
5.3 EDA技术及应用(第二版)谭会生、张昌凡编著。
附录:VHDL源程序代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY stepmotor ISPORT(reset,clk,load,en,start:IN STD_LOGIC;step_in:IN INTEGER RANGE 65535 TO 0;coil_out:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END stepmotor;ARCHITECTURE ART OF stepmotor ISTYPE FWM1 IS(s0,s1,s2,s3,s4);SIGNAL current_state,next_state,before_state:FWM1;BEGINPROCESS(load,clk,en,start)ISV ARIABLE count:INTEGER RANGE 65535 TO 0;BEGINIF(load='1')THENcount:=step_in+1;ELSIF(reset='1')THENcurrent_state<=s4;ELSIF(CLK'EVENT AND CLK='1')THENIF(count>0 AND start='1')THENcount:=count-1;IF(en='1')THENcurrent_state<=next_state;END IF;IF(count=0)THENcurrent_state<=s4;END IF;END IF;END IF;END PROCESS;PROCESS(current_state)IS BEGINCASE current_state ISWHEN s0=>coil_out<="1000"; next_state<=s1;before_state<=s0;WHEN s1=> coil_out<="0100"; next_state<=s2;before_state<=s1;WHEN s2=>coil_out<="0010"; next_state<=s3;before_state<=s2;WHEN s3=> coil_out<="0001"; next_state<=s0;before_state<=s3;WHEN s4=> coil_out<="0000"; next_state<=before_state;END CASE;END PROCESS;END ART;。