步进电机有四相(A-B-C-D)
正向转动思路为A→B→C→D
反向转动思路为D→C→B→A
通过给每一相轮流供电,实现电机轴的360度转动
、、以下代码可直接复制使用:
#include <reg52.h>
#define uchar unsigned char //宏定义 把unsigned char简写为uchar
#define uint unsigned int // 把unsigned int 简写为uint
uint i,j; //定义全局变量,执行电机for循环转动时间需要用到
sbit A1 = P1^0; //定义给步进电机四相连接的IO口
sbit B1 = P1^1;
sbit C1 = P1^2;
sbit D1 = P1^3;
#define Coil_A {A1=1;B1=0;C1=0;D1=0;} //A相通电,其它相断电
#define Coil_B {A1=0;B1=1;C1=0;D1=0;} //B相通电,其它相断电
#define Coil_C {A1=0;B1=0;C1=1;D1=0;} //C相通电,其它相断电
#define Coil_D {A1=0;B1=0;C1=0;D1=1;} //D相通电,其它相断电
#define Stop {A1=0;B1=0;C1=0;D1=0;} //全部断电,停止
uchar Speed=5; //整体调速,数字越小速度越快,而力矩也越小
void Delay(uint xms) //延时函数 12.000MHz Delay(1)=1ms
{ //延时程序 用烧录软件计算出来的 在另外一章有写
uchar i, j;
while(xms--)
{
i = 2;
j = 239;
do { while (--j); }
while (--i);
}
}
void corotation(void) //正转 子程序 A——D
{
Coil_A
Delay(Speed);
Coil_B
Delay(Speed);
Coil_C
Delay(Speed);
Coil_D
Delay(Speed);
}
void reversal(void) //反转 子程序 D——A
{
Coil_D
Delay(Speed);
Coil_C
Delay(Speed);
Coil_B
Delay(Speed);
Coil_A
Delay(Speed);
}
void main() //主程序
{
Delay(30); //启动前先缓冲一个30ms
while(1) //不断循环
{
for(i=0;i<500;i++) //正转1圈(大概位置,步进电机需要编码盘才能测得比较准一点)
corotation(); //调用正转子函数
Stop //停止
Delay(1000); //延时1s
for(j=0;j<500;j++) //反转1圈(大概位置)
reversal(); //调用反转子函数
Stop //停止
Delay(1000); //延时1s
}
}
接线图↓:
源代码地址↓
源码地址
延时函数的生成↓
利用烧录软件生成延时函数 新手学习
更多步进电机资料↓
ULN2003驱动步进电机28BYJ-48
扩展内容
A4988驱动模块驱动四线步进电机