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接對沒有,其實很簡單的。。。

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