![]() |
發布時間: 2017-5-17 14:17
正文摘要:就是用的這種86步進電機和驅動器,接線也是按照圖上接的,共地,PUL+接p1.0,DIR+接p1.1,要求上電后延時一段時間電機以一個速度旋轉數圈后,延時一段時間,再以另一個速度反向旋轉數圈,然后循環以上動作,程序最好 ... |
小潤龍 發表于 2017-5-17 17:50 據我現在了解的是控制我的86電機是不需要控制ABCD線圈的吧,只需要兩路,一路脈沖,一路方向,這個程序好像不是吧 |
/************************************************************************************* * 標題: 步進電機試驗一(雙極性步進電機) * * 通過本例程了解步進馬達使用及驅動程序編寫 *; 單相四拍通電驅動時序: *; 正轉: A/ B A B/ * 反轉: B/ A B A/ * * UDN2916電流控制真值表: * I0 I1 輸出電流 * L L 最大 * H L 最大*2/3 * L H 最大*1/3 * H H 0 * **************************************************************************************/ #include "reg52.h" #define speed 2 //Motor sbit PH1 = P1^0; //定義管腳 sbit PH2 = P1^1; sbit I01 = P1^2; sbit I11 = P1^3; sbit I02 = P1^4; sbit I12 = P1^5; void delay(int time); /*************************************** 函數功能:產生單相四拍脈沖控制步進機 **************************************/ void Go() { //A PH1 = 0; //PH1為0 則A線圈為反向電流 I01 = 0; I11 = 0; //以最大電流輸出 PH2 = 0; //PH2為0 則B線圈為反向電流 I02 = 1; I12 = 1; //輸出0 delay(speed); //0 PH1 = 0; //PH1為0 則A線圈為反向電流 I01 = 1; //輸出0 I11 = 1; PH2 = 1; //PH2為1 則B線圈為正電流 I02 = 0; //以最大電流輸出 I12 = 0; delay(speed); //B PH1 = 1; //PH1為1 則A線圈為正向電流 I01 = 0; //以最大電流輸出 I11 = 0; PH2 = 1; //PH2為1 則B線圈為正向電流 I02 = 1; //輸出0 I12 = 1; //// delay(speed); //0 PH1 = 1; //PH1為1 則A線圈為正向電流 I01 = 1; I11 = 1; PH2 = 0; //PH2為0 則B線圈為反向電流 I02 = 0; I12 = 0; delay(speed); } /*******************延時函數****************************/ void delay(int time) { int i,j; for(j=0; j <= time; j++) for(i =0 ; i <= 120; i++); } void main() { while(1) { Go(); //步進電機運行 } } |