> 文档中心 > 【51单片机】 ULN2003模块 驱动步进电机(5线)正反转 代码以及接线图(简单教学,一看就会)

【51单片机】 ULN2003模块 驱动步进电机(5线)正反转 代码以及接线图(简单教学,一看就会)

步进电机有四相(A-B-C-D)
正向转动思路为A→B→C→D
反向转动思路为D→C→B→A
通过给每一相轮流供电,实现电机轴的360度转动
、、以下代码可直接复制使用:

#include    #define uchar unsigned char  //宏定义 把unsigned char简写为uchar#define uint unsigned int    //把unsigned int 简写为uintuint  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_ADelay(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驱动模块驱动四线步进电机

狗狗宠物资料大全