28BYJ-48五线四相步进电机驱动(解决为啥抖动但是转不起来)

首先我用的单片机是普中51单片机开发板中的一款,而且由於单片机接口信号不够大需要通过ULN2003(集成7对达林顿管的芯片)放大(相当于一个功率放大电路)再连接到相应的电机接口
在这里插入图片描述
在这里插入图片描述
按照这样去接:红线接电源5V,橙色电线接P1.3口,黄色电线接P1.2口,粉色电线接P1.1口,蓝色接P1.0口(生产厂家可能把那几根线的顺序搞错了,拆开端子排插,将杜邦线取出来按照上面顺序重新接);
28BYJ-48五线四相步进电机驱动可以在不同的通电方式下运行,常见的通电方式① 单(单相绕组通电)四拍(A-B-C-D-A);② 双(双相绕组通电)四拍(AB-BC- CD-DA-AB-);③ 八拍(A-AB-B-BC-C-CD-D-DA-A);
我自己写的一个程序:

#include"reg51.h"
//按照双四拍:AB--BC--CD--DA--AB进行通电
typedef unsigned int u16;
typedef unsigned char u8;

sbit motorA = P1^0;
sbit motorB = P1^1;
sbit motorC = P1^2;
sbit motorD = P1^3;


void delay(u16 i)
{
   while(i--);
}

void main()
{
   u8 i;
   motorA = 0;
   motorB = 0;
   motorC = 0;
   motorD = 0;//因为P1口管脚复位初始默认高电平(内外都接有上拉电阻),本人先将四相电位置低电平
   while(1)
   {
		for(i = 1;i < 10; ++i)//用for循环实现几秒以上的延时函数,用while循环不能实现
		{
		motorA = 1;
		motorB = 1;
		delay(10);
		}           //AB通电1ms
		motorA = 0;
		motorB = 0; //AB关电
		for(i = 1;i < 10; ++i)
		{
		motorB = 1;
		motorC = 1;
		delay(10);
		}//BC通电1ms
		motorB = 0;
		motorC = 0;	 //BC关电
		for(i = 1;i < 10; ++i)
		{
		motorC = 1;
		motorD = 1;
		delay(10);//CD通电1ms
		}
		motorC = 0;
		motorD = 0;//CD关电
		for(i = 1;i < 10; ++i)
		{
		motorD = 1;
		motorA = 1;
		delay(10);//DA通电1ms
		}
		motorD = 0;
		motorA = 0;//DA关电
        //while(1); //防止程序跑飞
   }
}

**

结论:

转不转跟延迟函数delay()中填的时间没有关系,主要还在于通电的相的顺序和VCC接对没有,其实很简单的。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章