8051 微控制器与步进电机的接口
在本节中,我们将了解如何将步进电机连接到英特尔8051 微控制器。在讨论接口技术之前,我们将了解什么是步进电机以及它们的工作原理。
步进电机
步进电机用于将电脉冲转换为机械运动。在某些磁盘驱动器、点阵打印机和其他一些不同的地方,都使用了步进电机。使用步进电机的主要优势在于位置控制。步进电机通常具有永磁转子,并被定子包围。
普通电机轴可以自由旋转,但步进电机轴以固定的可重复增量旋转。
步进电机的一些参数:
步进角 - 步进角是指当一个脉冲作为定子的输入时,转子旋转的角度。此参数用于确定步进电机的位置。
每转步数 - 这是完整旋转所需的步进角数。因此,公式为 360° / 步进角。
每秒步数 - 此参数用于测量每秒覆盖的步数。
RPM - RPM 是每分钟转数。它测量旋转频率。通过此参数,我们可以测量一分钟内的旋转次数。
RPM、每转步数和每秒步数之间的关系如下所示:
Steps per Second = rpm x steps per revolution / 60
8051 微控制器与步进电机的接口
我们使用 8051 的 P0 端口连接步进电机。这里使用了 ULN2003。这基本上是一个高电压、大电流达林顿晶体管阵列。每个 ULN2003 都有七个 NPN 达林顿对。它可以提供高电压输出,并带有共阴极钳位二极管,用于切换感应负载。
单极性步进电机以三种模式工作。
波驱动模式 - 在此模式下,一次只激励一个线圈。因此,所有四个线圈依次激励。此模式产生的转矩小于全步驱动模式。
下表显示了不同绕组中输入状态的顺序。
步数 | 绕组 A | 绕组 B | 绕组 C | 绕组 D |
---|---|---|---|---|
1 | 1 | 0 | 0 | 0 |
2 | 0 | 1 | 0 | 0 |
3 | 0 | 0 | 1 | 0 |
4 | 0 | 0 | 0 | 1 |
全步驱动模式 - 在此模式下,同时激励两个线圈。此模式产生更大的转矩。这里的功耗也较高。
下表显示了不同绕组中输入状态的顺序。
步数 | 绕组 A | 绕组 B | 绕组 C | 绕组 D |
---|---|---|---|---|
1 | 1 | 1 | 0 | 0 |
2 | 0 | 1 | 1 | 0 |
3 | 0 | 0 | 1 | 1 |
4 | 1 | 0 | 0 | 1 |
半步驱动模式 - 在此模式下,交替激励一个和两个线圈。首先激励一个线圈,然后激励两个线圈。这基本上是波和全步驱动模式的组合。它增加了电机的旋转角度。
下表显示了不同绕组中输入状态的顺序。
步数 | 绕组 A | 绕组 B | 绕组 C | 绕组 D |
---|---|---|---|---|
1 | 1 | 0 | 0 | 0 |
2 | 1 | 1 | 0 | 0 |
3 | 0 | 1 | 0 | 0 |
4 | 0 | 1 | 1 | 0 |
5 | 0 | 0 | 1 | 0 |
6 | 0 | 0 | 1 | 1 |
7 | 0 | 0 | 0 | 1 |
8 | 1 | 0 | 0 | 1 |
电路图如下:我们使用的是全步驱动模式。
示例
#include<reg51.h> sbit LED_pin = P2^0; //set the LED pin as P2.0 void delay(int ms){ unsigned int i, j; for(i = 0; i<ms; i++){ // Outer for loop for given milliseconds value for(j = 0; j< 1275; j++){ //execute in each milliseconds; } } } void main(){ int rot_angle[] = {0x0C,0x06,0x03,0x09}; int i; while(1){ //infinite loop for LED blinking for(i = 0; i<4; i++){ P0 = rot_angle[i]; delay(100); } } }
广告