這是自己用4988步進電機驅動芯片做的,4988芯片一般用在3D打印機上,具有體積小等優點。下面有我的測試程序,希望可以給需要的人提供參考。
單片機源程序如下:
- /***************************************************************
- * 實 驗 名 :步進電機實驗
- * 實驗說明 :電機啟動、停止、正轉、反轉
- * 實驗平臺 :51單片機開發板
- * 連接方式 :pulse接P10 DIR接P11 KYE1接P20 KYE2接P21 KYE3接P22 KYE4接P23 ENABLE接P12 MS1-3接P13-P14
- * 注 意 :本例程使用了中斷定時器,中斷介紹會在下一實驗中說明
- ****************************************************************************/
- #include <reg52.h>
- #include <intrins.h>
- #define FOSC 11059200L //晶振設置,默認使用11.0592M Hz
- //#define FOSC 12000000L //晶振設置,使用12M Hz
- //#define FOSC 24000000L //晶振設置,使用24M Hz
- #define TIME_MS 1 //設定定時時間 ms ,在11.0592M晶振下,不易超過60ms
- //IO接口定義
- sbit pulse = P1^0;//脈沖信號
- sbit Dir = P1^1; //正反轉
- sbit EN = P1^2;
- sbit MS1 = P1^3;
- sbit MS2 = P1^4;
- sbit MS3 = P1^5;
- sbit KEY1 = P2^0; //啟動
- sbit KEY2 = P2^1; //停止
- sbit KEY3 = P2^2; //正轉
- sbit KEY4 = P2^3; //反轉
- //全局變量定義
- unsigned char count=0;
- /*******************************************************************************
- * 函 數 名 :Delayms
- * 函數功能 :實現 ms級的延時
- * 輸 入 :ms
- * 輸 出 :無
- *******************************************************************************/
- void Delayms(unsigned int ms)
- {
- unsigned int i,j;
- for(i=0;i<ms;i++)
- #if FOSC == 11059200L
- for(j=0;j<114;j++);
- #elif FOSC == 12000000L
- for(j=0;j<123;j++);
- #elif FOSC == 24000000L
- for(j=0;j<249;j++);
- #else
- for(j=0;j<114;j++);
- #endif
- }
- /*******************************************************************************
- * 函 數 名 :Timer0Init
- * 函數功能 :定時器0初始化
- * 輸 入 :無
- * 輸 出 :無
- *******************************************************************************/
- void Timer0Init()
- {
- TMOD=0x01; //設置定時器0工作方式為1
- TH0=(65536-FOSC/12/1000*TIME_MS)/256;
- TL0=(65536-FOSC/12/1000*TIME_MS)%256;
- ET0=1; //開啟定時器0中斷
- // TR0=1; //開啟定時器
- EA=1; //打開總中斷
- }
- /*******************************************************************************
- * 函 數 名 :main
- * 函數功能 :主函數
- * 輸 入 :無
- * 輸 出 :無
- *******************************************************************************/
- void main()
- {
- Timer0Init();
- EN=0;
- MS1=0;
- MS2=0;
- MS3=0;
- while(1)
- {
- if(KEY1==0) //判斷是否按下鍵盤
- {
- Delayms(10); //延時,軟件去干擾
- if(KEY1==0) //確認按鍵按下
- {
- TR0=1;
- }
- while(KEY1==0);//按鍵鎖定,每按一次count只加1.
- }
- if(KEY2==0) //判斷是否按下鍵盤
- {
- Delayms(10); //延時,軟件去干擾
- if(KEY2==0) //確認按鍵按下
- {
- TR0=0;
- }
- while(KEY2==0);//按鍵鎖定,每按一次count只加1.
- }
-
- if(KEY3==0) //判斷是否按下鍵盤
- {
- Delayms(10); //延時,軟件去干擾
- if(KEY3==0) //確認按鍵按下
- {
- Dir=0;
- }
- while(KEY3==0);//按鍵鎖定,每按一次count只加1.
- }
-
- if(KEY4==0) //判斷是否按下鍵盤
- {
- Delayms(10); //延時,軟件去干擾
- if(KEY4==0) //確認按鍵按下
- {
- Dir=1;
- }
- while(KEY4==0);//按鍵鎖定,每按一次count只加1.
- }
-
-
- }
- }
- /*******************************************************************************
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
A4988步進電機實驗.rar
(23.64 KB, 下載次數: 811)
2017-6-22 20:46 上傳
點擊文件名下載附件
|