本帖最后由 57185490 于 2023-1-15 12:38 編輯
52單片機+a8944驅動控制2相4線步進電機 按鍵控制正反轉 A8944 “ENABLE 啟動”空懸 ,接電后(由于低電平屬于啟動)所以按鍵無操作,電機也有電流持續升溫,時間長就燒電機(已經燒了一個,但正反轉運行正常)!所以必須接單片機拉高電平,只有按鍵操作拉低電平再轉動,松開按鍵停止啟動(無電流,避免電機持續發熱) 現在“ENABLE”接的單片機P1^1, 問題出現啦~~~1:正轉按鍵按下(P2_0)高電平3.9v拉低到0v,運行!但松開按鍵電平還是低電平 2:反轉按鍵按下(P2_1)高電平只能拉低到1.7v,無法運行!松開按鍵,電平恢復到3.9v ENABLE=1和ENABLE=0 放到這個程序的任何位置都這樣~~哪里出問題了? while 不用“y” (就是取消“y”這個操作,只用ENABLE=1和ENABLE=0 來啟動和停止,也是這種情況) 這個是程序: #include <reg51.h> #define uchar unsigned char unsigned int y ; /**********************????****************/ void Delay(unsigned int xms) //@12.000MHz Delay(1)=1ms { unsigned char i, j; while(xms--) { i = 2; j = 239; do {while (--j);} while(--i); } } void delay1(unsigned int b)//可忽略,閑著無聊加個延時~~~ { uchar g; for(;b>0;b--) { g=250; while(--g); g=249; while(--g); } } /***********************************************/ sbit DIR=P2^0; // sbit STEP=P2^1; // sbit P2_0=P2^2; // sbit P2_1=P2^5; sbit ENABLE=P1^1; void step(void) { STEP=0; //脈沖 Delay(1); // Delay(1)=1ms STEP=1; Delay(1); } void UP_dj(void) //正轉 { DIR=0; //正轉 step(); if(P2_0==1)// 按鍵松開,電機停止 delay1(10);// 延時,防按鍵誤操作 if(P2_0==1) { y=0;//while循環程序停止 } } void DN_dj(void) //反轉 { DIR=1; //反轉 step(); if(P2_0==1) // 按鍵松開,電機停止 delay1(10); // 延時 ,防按鍵誤操作 if(P2_0==1) { y=0; } } void main() //??? { ENABLE=1; y=1; while(y) { if(P2_0==0) //?????????? delay1(10); if(P2_0==0) { ENABLE=0; UP_dj(); //正轉 } if(P2_1==0) //?????????? delay1(10); if(P2_1==0) { ENABLE=0; DN_dj(); //反轉 } } }
|