当前位置:文档之家› 基于AVR单片机和A3977的步进电机控制系统设计

基于AVR单片机和A3977的步进电机控制系统设计

基于AVR单片机和A3977的步进电机控制系统设计王宇驰(上海大学,机电工程与自动化学院,上海200072)摘要:基于A VR 单片机和A3977步进电机驱动芯片,实现了一种新型驱动步进电机的控制系统该方案硬件电路简单、软件编程方便,利用串口通信可以实现计算机的远程控制。

实践证明该控制系统具有结构简单、精确度高、稳定可靠等特点。

关键词:步进电机;电机驱动; 单片机Design of Step Motors Control System Based on A VRMicrocontroller and A3977WANG Yuchi(School of Mechatronic Engineering and Automation ,Shanghai University, Shanghai 200072, China)Abstract: A step motor driver system based on A VR Microcontroller and A3977 stepmotor driver was presented,it could precision control the position of beeline. Thehardware circuits and software designing were easier to implement in this design project.Using UART communication,it could be remote control by computer. The practicesShowed the system have higher control precision,stable and reliable.Key words: step motor; motor drive; microcontroller引言步进电机是数字控制电机,它将电脉冲信号转变为角位移,在正常情况下,步进电机的转速停止的位置仅由脉冲信号的频率和个数决定;同时,步进电机只有周期性的无累积误差,精度和可靠性高,动态响应快,易于起停正反转及变速由于这些优点,步进电动机已广泛应用于速度控制、位置控制的系统中,如数控机床、工业机器人等,随着应用的扩大,对步进电机的驱动控制要求也更高,如更小体积及更大的驱动能力等。

本文采用A VR单片机和Allegro公司的A3977电机驱动芯片作为电机驱动系统的设计方案,该系统的特点是集成度高、驱动电流大、精度及可靠性高、成本低,并具有很好的通用性,结合单片机串口通信可以实现远程控制。

1.步进电机控制系统实现本文的步进电机控制系统采用上位机、下位机结构。

下位机负责进行指令译码,控制步进电机的转动、停止和加、减速的实现。

加速或减速过程采用软件程序实现。

上位机为PC 机,负责将控制指令传递给下位机,并接收下位机的状态信息,上位机和下位机通过串口交换数据。

步进电机驱动系统硬件框图如图1所示,采用A VR单片机和A3977来控制四相的步进电机,通过单片机来控制L6208 实现驱动电机工作。

单片机通过串口接收上位机发出的运行指令,根据指令控制电机执行相应的运动,并将相应的状态通过串口回传给PC机。

单片机采用Atmel公司生产的ATmega16,它是8位低功耗增强型内置Flash 程序存储器的精简指令集结构单片机,与51单片机相比,A VR 单片机具有很高的执行速度和非常丰富的片内资源。

A3977是Allegro公司新近开发专门用于双极型步进电机的微步进电机驱动集成电路,其内部集成了步进和直接译码接口、正反转控制电路、双H桥驱动,电流输出2.5A,最大输出功率可接近90W。

它主要的设计功能包括:自动混合模式电流衰减控制,PWM电流控制,同步整流,低输出阻抗的DMOS电源输出,全、半、1/4及1/8步进操作,HOME输出,休眠模式以及易实现的步进和方向接口等。

A3977其最简单的步进输入只需“STEP”(步进)和“DIR”(方向)2条输入线,输出由DMOS的双H桥完成。

通过“STEP”脚简单的输入1个脉冲就可以使电机完成1次步进,省去了相序表,高频控制线及复杂的编程接口。

这使其更适于应用在没有复杂的微处理器或微处理器负担过重的场合。

2.电路原理及方案实现2.1硬件电路具体的电路如图2所示,VCC通过外接电源来提供,OUT1A 、OUT1B、OUT2A、OUT2B 与四相步进电机相连。

控制信号由Atmega16单片机提供,该系统采用单片机I/O 中的PD3、PD4、PD5引脚分别与驱动单元的DIR、EN、CLK 引脚相连。

图2 步进电机驱动单元2.2软件设计系统的软件开发平台选用A VR Studio作为开发工具,采用C语言实现。

整个系统软件分为三个主要模块,如图3所示。

图3 程序框图main.c:输出人机交互界面,使用户通过串口控制步进电机。

speed_cntr.c:计算所需的数据,并按希望的速度曲线产生步进脉冲。

sm_driver.c:输出正确的步进信号。

步进电机的运动由4个参数决定。

如图4所示,速度从零开始加速直至预设的速度,这个最大速度需要保持一段时间再开始减速阶段,最后,电机按照预先设定的步数减速到零。

图4 速度曲线Step –步进电机走的总步数。

Accel –加速加速度。

Decel –减速加速度。

Speed –最大速度。

2.2.1菜单命令界面用户可以通过给不同指令来控制步进电机并得到反馈。

异步串行通讯接口(UART)的设置为波特率19200,8位数据位,无奇偶校验,1为停止位。

串口接收(UART RX)中断程序(在uart.c)把接收的字符储存在接收缓冲区,并对退格命令进行处理。

当收到<enter>(ascii 码为13)时,主程序读接收缓冲区并执行给定的指令。

当程序开始,或者收到“?”命令的时候,屏幕显示如图5所示:图5 菜单命令界面在这个菜单之后或者命令执行之后显示以下信息:图6程序给出了额当前电机的位置,加速加速度,减速加速度,最大速度和步进电机走的总步数。

有以下三种方式能使步进电机运动:1.按<enter>.步进电机按原先的设置运动2.m [data].步进电机按原先的设置运动[data]步数。

3.move [steps] [accel] [decel] [speed].按设定的[accel] [decel] [speed]的参数运动[steps]步数。

当步进电机运动的使用,会显示“Running…”。

只要电机开始运动,新的指令是无效的。

当电机停止,会显示“OK”,能接受新的命令。

2.2.2速度控制速度控制部分程序计算和产生速度曲线。

速度控制的原理框图如图7所示。

速度控制函数由Move()函数调用。

图7速度控制原理框图函数Move()首先计算所有需要的参数并把他们存储在speed ramp data结构体(sturct)中,然后开启定时器中断。

定时器按照设计的速率产生中断,并且在每个中断的时候调用函数Step_Counter()使动电机。

2.2.2.1步数计算为了更快的运算,程序避免使用浮点运算。

因此变量的精度对于保持准确性是十分重要的。

在smdriver.h中使用预先计算的编译常量(Precalculated compiler constants)来简化运算。

使用以下变量进行简化:速度(speed):加速加速度(acceleration):对于速度曲线有两个不同情况:1.加速直到预设的速度如图8所示,在减速之前已经达到预设的速度。

图8加速直到预设的速度max_s_lim是达到最高速需要的步数。

accel_lim是在减速开始之前走的步数(不管是否达到最高速)如果max_s_lim<accel_lim,decel_val为:2.未达到预设速度就开始减速如图9所示。

图9未达到预设速度就开始减速如果max_s_lim>accel_lim,decel_val为:2.2.3定时器中断定时器中断产生“步进脉冲”(通过调用函数StepCounter( ))并只在步进电机运动的时候有效。

对于速度曲线,定时器中断工作在四种状态,如图10所示。

图10四种工作状态对于电机的不同工作状态,定时中断的实现如图11所示。

图11电机工作状态流程当程序刚开始或者步进电机停止的时候,电机状态参数就停留在STOP阶段,当设定的计算完成后,一个新的状态就被设定,并且定时器开始工作。

当电机走大于1步,电机状态参数就转向ACCEL。

如果只走1步,状态转向DECEL。

2.2.3.1计算与计数在加速或者减速的时候每一步所需的延迟时间都必须被计算。

为了确保计数值的准确性,本文给出了以下算法。

同时,为了记录电机的位置从而决定什么时候转变状态,一些计数变量是必须。

图12对这些变量做了说明。

图12延迟计数变量step_count:记录步数,从开始加速直至停止总共步数。

accel_count:分别记录加速和减速阶段的步数。

在加速阶段,它从零开始逐步增加直到加速结束;在减速阶段,他被设定为decel_val,为负数,逐步增加到零直到减速结束,然后停止。

decel_start:说明减速开始的位置,decel_start的值与decel_val相等。

2.3应用实例该步进电机控制系统已成功应用于四自由度机械臂中。

机械臂是模仿着人手的部分动作,按给定程序、轨迹和要求实现自动抓取、搬运或操作的自动机械装置。

在工业生产中应用的机器人也被称为“工业机器人”。

目前,采用该系统的机械臂具有良好的精度,能够实现可靠的运动,3.结论该系统结合单片机和步进电机驱动芯片设计步进电机控制系统,该控制系统硬件电路设计简单,结构紧凑运行可靠;软件编写简单有效;该系统能满42、56、82等系列的四相步进电机的控制,实践表明该控制系统效果好该系统还可通过串口通信实现步进电机的远程控制,能与其他反馈检测环节连接,组成闭环控制系统。

致谢感谢沈老师对微机接口与数字控制技术课程的教授,感谢陈金波博士,欧阳航空博士给我实践的机会,让我完成了控制机械臂步进电机的单片机程序的编写。

参考文献[1]马潮. AVR 单片机嵌入式系统原理与应用实践[M]. 北京:北京航空航天大学出版社,2007. [2]Atmel Corporation. Atmel data sheet ( ATmega16 Rev. 2467P- 08 /07)[G]. 2007.[3]AS3977 Datasheet. Allegro MicroSystems[G].[4]AVR446: Linear speed control of stepper motor. Atmel Corporation[G]2006.。

相关主题