步进电机控制器设计报告

2019-09-02 19:07

常熟理工学院课程设计报告

步进电机控制器设计报告

1.绪言

在本次EDA课程设计中,我们组选择了做一个步进电机驱动程序的课题。对于步进电机我们以前并未接触过,它的工作原理是什么,它是如何工作的,我们应该如何控制它的转停,这都是我们迫切需要了解的。

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。

步进电机及驱动电源是互相联系的整体。步进电机驱动电源框图如图1所示。变频信号源产生频率可调的脉冲信号,调节步进电机的速度。脉冲分配器则根据要求把脉冲信号按一定的逻辑关系加到脉冲放大器上,使步进电机按确定的运行方式工作。

感应子式步进电机以相数可分为:二相电机、三相电机、四相电机、五相电机等。以机座号(电机外径)可分为:42BYG(BYG 为感应子式步进电机代号)、57BYG、86BYG 、110BYG 、(国际标准), 而像70BYG 、90BYG 、130BYG 等均为国内标准。 1.1 驱动控制系统组成

使用、控制步进电机必须由环形脉冲,功率放大等组成的控制系统。 1.1.1 脉冲信号的产生

脉冲信号一般由单片机或CPU 产生,一般脉冲信号的占空比为0.3-0.4 左右,电机转速越高,占空比则越大。 1.1.2 信号分配

0

常熟理工学院课程设计报告

感应子式步进电机以二、四相电机为主,二相电机工作方式有二相四拍和二相八拍二种,具体分配如下:二相四拍为,步距角为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′四种状态。

1

常熟理工学院课程设计报告

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”,电机不工作。

图3

2.2 通过网络上收集资料,图书馆查阅书本,我们逐步了解了步进电机,了解它的基本工作原理后我们我们逐渐形成了一些驱动程序的基本构思,我们决定利用状态机的工作方式去编写步进电机的驱动。

3.方案设计与论证

3.1 状态机

关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是终态。当到达终态,状态机停止。

包含一组状态集(states)、一个起始状态(start state)、一组输入符号集(alphabet)、一个映射输入符号和当前状态到下一状态的转换函数(transition function)的计算模型。当输入符号串,模型随即进入起始状态。它要改变到新的状态,依赖于转换函数。在有限状态机中,会有有许多变量,例如,状态 机有很多与动作(actions)转换(Mealy机)或状态(摩尔机)关联的动作,多重起

2

常熟理工学院课程设计报告

始状态,基于没有输入符号的转换,或者指定符号和状态(非定有 限状态机)的多个转换,指派给接收状态(识别者)的一个或多个状态等等。

传统应用程序的控制流程基本是顺序的:遵循事先设定的逻辑,从头到尾地执行。很少有事件能改变标准执行流程;而且这些事件主要涉及异常情况。“命令行实用程序”是这种传统应用程序的典型例子。

另一类应用程序由外部发生的事件来驱动——换言之,事件在应用程序之外生成,无法由应用程序或程序员来控制。具体需要执行的代码取决于接收到的事件,或者它相对于其他事件的抵达时间。所以,控制流程既不能是顺序的,也不能是事先设定好的,因为它要依赖于外部事件。事件驱动的GUI应用程序是这种应用程序的典型例子,它们由命令和选择(也就是用户造成的事件)来驱动。 3.2 设计论证

利用状态机的工作原理来设计步进电机的控制程序。本课题要求需要输出五种状态,其中有四种转动状态,电机即按照此四种状态旋转,还有一种状态是用于保护电机,避免电机因通电过长而烧坏。 3.3

最初设计:按照由易及难的原则,即将steps值固定,使电机转动步数恒定,每次触发旋转则按照固定steps值转,转动steps值后停转。

二次修改:在设计好最初的目标程序后,我们有对程序进行改进,即增加了steps预设功能,在进行波形仿真的时候,可修改输入信号step_in的值(16位二进制数),从而改变步进电机的转动步数。

更高要求:(1)在电机停转之后,应使输出为零,即保持电机的电路电流为零,从而达到保护电机不被烧毁的目的。

(2)在电机停转之后,若再次启动旋转,则从上次停止的位置继续旋转,这是符合实际情况的仿真。

(3)在电机停转之后,利用PWM技术对电路进行控制。 3.4

鉴于以上要求,我们组经过一周左右时间利用VHDL语言设计出了符合课题要求的步进电机控制器程序(见附录)。

如下图4所示,为步进电机控制仿真波形图:

3

常熟理工学院课程设计报告

图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开始计数,但在编程实现这一想法的时候我们发现这样做需要考虑的因素太多了,实现起来也比较困难。所以有人提议我们试着用减法计数,我们照着做了,结果发现这样编确实很简单,而且程序也简洁明了。

4


步进电机控制器设计报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:4.5凸透镜成像 教案(第一课时)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: