当时做的一个简单的步进电机驱动实验,仅供参考。

第1章 实验目的

本章节主要对步进电机驱动实验的目的进行介绍,主要从实验内容和实验原理进行展开介绍。
1.1 实验内容
(1) 了解步进电机原理;
(2) 采用任意mcu设计步进电机驱动电路;
(3) 编制步进电机驱动(正反转)程序;
(4) 撰写报告。

1.2 实验原理

本章主要对步进电机驱动实验的原理进行介绍。

1.2.1 步进电机原理

步进电机是将电脉冲控制信号转变为角位移或线位移的一种常用的数字控制执行元件,又称为脉冲电机。在驱动电源的作用下,步进电机受到脉冲的控制,其转子的角位移量和速度严格地与输入脉冲的数量和脉冲频率成正比。步进电机每接收一个电脉冲,转子就转过一个相应的角度(步距角)。改变通电顺序可改变步进电动机的旋转方向;改变通电频率可改变步进电动机的转速。因此,通过控制输入电脉冲的数目、频率及电动机绕组的通电顺序就可以获得所需要的转角、转速及转向,利用单片机就可以很容易实现步进电机的开环数字控制。
传统的步进电机控制方法是由触发器产生控制脉冲来进行控制的,但此种控制方法工作方式单一而且难于实现人机交互,当步进电机的参数发生变化时,需要重新进行控制器的设计。因此适合于单片机控制,单片机通过向步进电机驱动电路发送控制信号就能实现对步进电机的控制。
步进电机内部实际产生了一个可以旋转的磁场,如图所示,当旋转磁场依次切换时,转子(rotor)就会随之转动相应的角度。当磁场旋转过快或者转子上所带负载的转动惯量太大时,转子无法跟上步伐,就会造成失步。

图1
图1 步进电机示意图

1.2.2 步进电机分类

步进电机的磁极数量规格和接线规格很多,为简化问题,我们这里就先只以四相步进电机为例进行讨论。所谓四相,就是说电机内部有四对磁极,此外还有一个公共端(COM)接电源,ABCD是四线的接头。而四相电机可以向外引出六条线(两条COM共同接入Vcc),即GND和ABCD,也可以引出五条线,如图所示,所以有六线四相制和五线四相制。
在这里插入图片描述

(a)六线四相制 (b) 五线四相制
图2 四相步进电机接线规格
六线四相制和五线四相制控制方法类似。

1.2.3 步进电机励磁方式

• 一相励磁方式
下表中,1代表高电平,0代表低电平,我们以最简单的一相励磁方式来驱动步进电机。
在这里插入图片描述
表1 一相励磁方式

电机在每个瞬间只有一个线圈导通,消耗电力小,但在切换瞬间没有任何的电磁作用在转子上,容易造成振动,也容易因为惯性而失步。
• 二相励磁方式
这种方式输出的转矩较大且振动较少,切换过程中至少有一个线圈通电作用于转子,使得输出的转矩较大,振动较小,也比一相励磁较为平稳,不易失步。

在这里插入图片描述

• 一相二相励磁交替进行
综合上述两种驱动信号,下面提出一相励磁和二相励磁交替进行的方式,每传送一个励磁信号,步进电机前进半个歩距角。其特点是分标率高,运转更加平滑。
在这里插入图片描述

表3 一相二相励磁交替进行方式

三种驱动方式的时序波形图:
在这里插入图片描述

图3 时序波形图

1.2.4 驱动问题

因为89C51单片机的数字I/O口通过的电流很小,所以89C51单片机的端口是不能直接驱动步进电机的。因此,可以使用晶体管进行放大(或使用专门的集成电路)。常用的方法有三种:

  1. 直接利用晶体管来驱动,这需要对电机和晶体管的详细参数有一定了解,才能选择恰当的参数去匹配他们。此外,还必须使用二极管来处理当电机内部线圈产生感应电动势逆向流入晶体管而对晶体管造成损害。

  2. 使用诸如ULN2003和L298N 这样的激励器,它实际上是内部集成好了放大功能的集成电路芯片,此外也无需额外添加二极管,因为它已经内置了。

  3. 使用光耦,在驱动芯片或者晶体管的前端再加入光耦合器,以加强隔离步进电机的反电动势,以免损害单片机。
    在这里插入图片描述
    图4 加入光耦合器的电路

  4. 使用L293D这样的H桥的方式来驱动步进电机。
    在这里插入图片描述
    图5 使用L293D驱动步进电机

第2章 实验设计

本章节对步进电机驱动实验的软件部分进行设计。

2.1 方案设计

将89C51单片机的四个输出端口用杜邦线分别链接驱动板的IN1,IN2,IN3,IN4,再用外置电源连接驱动板的5-12+接口,并把电源和单片机的地(GND)与驱动板的(-)共线。
电路连接如下图所示:
图6 步进电机实验电路设计方案
在这里插入图片描述

在电路中,步进电机采用了六线四相制连接。

2.2 程序设计

该程序中,步进电机励磁方式采用一相二相励磁交替进行,程序实现了控制步进电机的正反转功能。
电机相序如表4所示:
在这里插入图片描述
表4 程序电机相序表

程序逻辑流程图如下:
在这里插入图片描述

图7 电机驱动程序

电机驱动实验程序代码如下:

#include "reg51.h"  
#define uchar unsigned char  
#define uint unsigned int  
#define out  P2  		// p2输出
sbit pos=P0^0;  		// 按键0控制正转
sbit neg=P0^1;  		// 按键1控制反转
void delayms(uint);  	// 延时函数
/* 
采用一相二相励磁交替进行
相序:
	 0x02 00000010
	 0x06 00000110
	 0x04 00000100
	 0x0c 00001100
	 0x08 00001000
	 0x09 00001001
	 0x01 00000001
	 0x03 00000011
*/

uchar code turn[]={0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03};   
void main(void)   
{  
  uchar i;  // 默认值为0
  out=0x03;	// 初始化 00000011
  while(1)   
  {  
    if(!pos)	// 正转按键按下 pos为0
    {  
      i = i < 8 ? i+1 : 0;  // 顺序取出所有相位
      out=turn[i];  
      delayms(50);  // 延时,控制转速
    } else if(!neg)   // 正转按钮松开,反转按钮按下,pos为1,neg为0
    {  
      i = i > 0 ? i-1 : 7;  // 反序取出所有的相位
      out=turn[i];  
      delayms(50);  // 延时,控制转速
    }  
  }  
}  
/* 延时函数
  通过循环消耗时间
*/
void delayms(uint j)   
{  
  uchar i;  
  for (;j>0;j--)   
  {  
    i=250;  
    while(--i);  
    i=249;  
    while(--i);  
  }  
}  

第3章 实验结果

仿真及结果展示:
本实验通过KEIL把源代码编译成HEX文件,然后将HEX文件直接烧写进89C51芯片,然后使用Proteus电路仿真软件进行实验仿真。
仿真过程:

  1. 通过KEIL把源代码编译成HEX文件
    打开KEIL后,新建一个项目,将之前设计的程序写入,在写好文件后,点击工具栏上的红框标志,选择Output(输出),把Create HEX File 勾上,点击OK,如图8所示

在这里插入图片描述
图8 KEIL设置

然后在工具栏上点击编译按钮,然后就生成了HEX文件。
2. 在Proteus中绘制步进电机实验电路。
仿真电路如下图所示:
在这里插入图片描述

图9 步进电机仿真电路

  1. 将HEX文件直接烧写进89C51芯片
    在这里插入图片描述
    图10将HEX文件直接烧写进89C51芯片

结果展示:
将HEX文件烧写进89C51芯片后,按下仿真启动按钮,开始仿真。如图11所示。
在这里插入图片描述

图11 步进电机仿真运行图

此时,按下D1开关,即可实现电机的正转,按下D2开关,即可实现电机的反转。

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐