




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、51單片機驅動步進電機的方法默認分類 2007-08-27 09:06 閱讀6456 評論15 字號: 大大 中中 小小 在這里介紹一下用51單片機驅動步進電機的方法。 這款步進電機的驅動電壓12V,步進角為 7.5度 . 一圈 360 度 , 需要 48 個脈沖完成! 該步進電機有6根引線,排列次序如下:1:紅色、2:紅色、3:橙色、4:棕色、5:黃色、6:黑色。 采用51驅動ULN2003的方法進行驅動。 ULN2003的驅動直接用單片機系統的5V電壓,可能力矩不是很大,大家可自行加大驅動電壓到12V。 ;*;*步進電機的驅動*;-; 步進電機的驅動信號必須為 脈沖信號! 轉動的速度和脈沖
2、的頻率成正比!; 本步進電機步進角為 7.5度 . 一圈 360 度 , 需要 48 個脈沖完成!;-; A組線圈對應 P2.4; B組線圈對應 P2.5; C組線圈對應 P2.6; D組線圈對應 P2.7; 正轉次序: AB組-BC組-CD組-DA組 (即一個脈沖,正轉 7.5 度);-;-正轉-ORG 0000HLJMP MAINORG 0100HMAIN:MOV R3,#144 正轉 3 圈共 144 脈沖START:MOV R0,#00HSTART1:MOV P2,#00HMOV A,R0MOV DPTR,#TABLEMOVC A,A+DPTRJZ START 對 A 的判斷,當 A
3、= 0 時則轉到 STARTMOV P2,ALCALL DELAYINC R0DJNZ R3,START1MOV P2,#00HLCALL DELAY1;-反轉-MOV R3,#144 反轉一圈共 144 個脈沖START2:MOV P2,#00HMOV R0,#05START3:MOV A,R0MOV DPTR,#TABLEMOVC A,A+DPTRJZ START2MOV P2,ACALL DELAYINC R0DJNZ R3,START3MOV P2,#00HLCALL DELAY1LJMP MAINDELAY: MOV R7,#40 步進電機的轉速M3: MOV R6,#248DJNZ
4、 R6,$DJNZ R7,M3RETDELAY1: MOV R4,#20 2S 延時子程序DEL2: MOV R3,#200DEL3: MOV R2,#250 DJNZ R2,$ DJNZ R3,DEL3 DJNZ R4,DEL2 RETTABLE:DB 30H,60H,0C0H,90H 正轉表DB 00 正轉結束DB 30H,90H,0C0H,60H 反轉表DB 00 反轉結束END 51單片機控制四相步進電機拿到步進電機,根據以前看書對四相步進電機的了解,我對它進行了初步的測試,就是將5伏電源的正端接上最邊上兩根褐色的線,然后用5伏電源的地線分別和另外四根線(紅、蘭、白、橙)依次接觸,發現
5、每接觸一下,步進電機便轉動一個角度,來回五次,電機剛好轉一圈,說明此步進電機的步進角度為360/(4×5)18度。地線與四線接觸的順序相反,電機的轉向也相反。此步進電機,則只需分別依次給四線一定時間的脈沖電流,電機便可連續轉動起來。通過改變脈沖電流的時間間隔,就可以實現對轉速的控制;通過改變給四線脈沖電流的順序,則可實現對轉向的控制。所以,設計了如下電路圖:C51程序代碼為:代碼一#include <AT89X51.h> static unsigned int count;static unsigned int endcount;void delay();void mai
6、n(void) count = 0; P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0; EA = 1; /允許CPU中斷 TMOD = 0x11; /設定時器0和1為16位模式1 ET0 = 1; /定時器0中斷允許 TH0 = 0xFC; TL0 = 0x18; /設定時每隔1ms中斷一次 TR0 = 1; /開始計數startrun: P1_3 = 0; P1_0 = 1; delay(); P1_0 = 0; P1_1 = 1; delay(); P1_1 = 0; P1_2 = 1; delay(); P1_2 = 0; P1_3 = 1; delay()
7、; goto startrun; /定時器0中斷處理 void timeint(void) interrupt 1 TH0=0xFC; TL0=0x18; /設定時每隔1ms中斷一次 count+;void delay() endcount=2; count=0; dowhile(count<endcount);將上面的程序編譯,用ISP下載線下載至單片機運行,步進電機便轉動起來了,初步告捷!不過,上面的程序還只是實現了步進電機的初步控制,速度和方向的控制還不夠靈活,另外,由于沒有利用步進電機內線圈之間的“中間狀態”,步進電機的步進角度為18度。所以,我將程序代碼改進了一下,如下:代碼二
8、#include <AT89X51.h> static unsigned int count;static int step_index;void delay(unsigned int endcount);void gorun(bit turn, unsigned int speedlevel);void main(void) count = 0; step_index = 0; P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0; EA = 1; /允許CPU中斷 TMOD = 0x11; /設定時器0和1為16位模式1 ET0 = 1; /定時器0中斷
9、允許 TH0 = 0xFE; TL0 = 0x0C; /設定時每隔0.5ms中斷一次 TR0 = 1; /開始計數 do gorun(1,60); while(1); /定時器0中斷處理 void timeint(void) interrupt 1 TH0=0xFE; TL0=0x0C; /設定時每隔0.5ms中斷一次 count+;void delay(unsigned int endcount) count=0; dowhile(count<endcount);void gorun(bit turn,unsigned int speedlevel) switch(step_index
10、) case 0: P1_0 = 1; P1_1 = 0; P1_2 = 0; P1_3 = 0; break; case 1: P1_0 = 1; P1_1 = 1; P1_2 = 0; P1_3 = 0; break; case 2: P1_0 = 0; P1_1 = 1; P1_2 = 0; P1_3 = 0; break; case 3: P1_0 = 0; P1_1 = 1; P1_2 = 1; P1_3 = 0; break; case 4: P1_0 = 0; P1_1 = 0; P1_2 = 1; P1_3 = 0; break; case 5: P1_0 = 0; P1_1
11、= 0; P1_2 = 1; P1_3 = 1; break; case 6: P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 1; break; case 7: P1_0 = 1; P1_1 = 0; P1_2 = 0; P1_3 = 1; delay(speedlevel); if (turn=0) step_index+; if (step_index>7) step_index=0; else step_index-; if (step_index<0) step_index=7; 改進的代碼能實現速度和方向的控制,而且,通過step_index靜
12、態全局變量能“記住”步進電機的步進位置,下次調用 gorun()函數時則可直接從上次步進位置繼續轉動,從而實現精確步進;另外,由于利用了步進電機內線圈之間的“中間狀態”,步進角度減小了一半,只為9度,低速運轉也相對穩定一些了。但是,在代碼二中,步進電機的運轉控制是在主函數中,如果程序還需執行其它任務,則有可能使步進電機的運轉收到影響,另外還有其它方面的不便,總之不是很完美的控制。所以我又將代碼再次改進:代碼三#include <AT89X51.h> static unsigned int count; /計數static int step_index; /步進索引數,值為07sta
13、tic bit turn; /步進電機轉動方向static bit stop_flag; /步進電機停止標志static int speedlevel; /步進電機轉速參數,數值越大速度越慢,最小值為1,速度最快static int spcount; /步進電機轉速參數計數void delay(unsigned int endcount); /延時函數,延時為endcount*0.5毫秒void gorun(); /步進電機控制步進函數void main(void) count = 0; step_index = 0; spcount = 0; stop_flag = 0; P1_0 = 0;
14、 P1_1 = 0; P1_2 = 0; P1_3 = 0; EA = 1; /允許CPU中斷 TMOD = 0x11; /設定時器0和1為16位模式1 ET0 = 1; /定時器0中斷允許 TH0 = 0xFE; TL0 = 0x0C; /設定時每隔0.5ms中斷一次 TR0 = 1; /開始計數 turn = 0; speedlevel = 2; delay(10000); speedlevel = 1; do speedlevel = 2; delay(10000); speedlevel = 1; delay(10000); stop_flag=1; delay(10000); sto
15、p_flag=0; while(1); /定時器0中斷處理 void timeint(void) interrupt 1 TH0=0xFE; TL0=0x0C; /設定時每隔0.5ms中斷一次 count+; spcount-; if(spcount<=0) spcount = speedlevel; gorun(); void delay(unsigned int endcount) count=0; dowhile(count<endcount);void gorun() if (stop_flag=1) P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 =
16、 0; return; switch(step_index) case 0: /0 P1_0 = 1; P1_1 = 0; P1_2 = 0; P1_3 = 0; break; case 1: /0、1 P1_0 = 1; P1_1 = 1; P1_2 = 0; P1_3 = 0; break; case 2: /1 P1_0 = 0; P1_1 = 1; P1_2 = 0; P1_3 = 0; break; case 3: /1、2 P1_0 = 0; P1_1 = 1; P1_2 = 1; P1_3 = 0; break; case 4: /2 P1_0 = 0; P1_1 = 0; P1
17、_2 = 1; P1_3 = 0; break; case 5: /2、3 P1_0 = 0; P1_1 = 0; P1_2 = 1; P1_3 = 1; break; case 6: /3 P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 1; break; case 7: /3、0 P1_0 = 1; P1_1 = 0; P1_2 = 0; P1_3 = 1; if (turn=0) step_index+; if (step_index>7) step_index=0; else step_index-; if (step_index<0) step_
18、index=7; 在代碼三中,我將步進電機的運轉控制放在時間中斷函數之中,這樣主函數就能很方便的加入其它任務的執行,而對步進電機的運轉不產生影響。在此代碼中,不但實現了步進電機的轉速和轉向的控制,另外還加了一個停止的功能,呵呵,這肯定是需要的。步進電機從靜止到高速轉動需要一個加速的過程,否則電機很容易被“卡住”,代碼一、二實現加速不是很方便,而在代碼三中,加速則很容易了。在此代碼中,當轉速參數speedlevel 為2時,可以算出,此時步進電機的轉速為1500RPM,而當轉速參數speedlevel 1時,轉速為3000RPM。當步進電機停止,如果直接將speedlevel 設為1,此時步進電機將被“卡住”,而如果先把sp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024項目管理考試輔導材料試題及答案
- 廣告策劃中的危機公關處理考核試卷
- 財務數據解讀與應用試題及答案
- 陜西排水帶施工方案
- 針對新形勢的注冊會計師考試變革探討試題及答案
- 2024項目管理專業知識考題試題及答案
- 2024年項目成功的關鍵因素與應對方案試題及答案
- 打井前施工方案怎么寫
- 項目管理專業人士資格考試的備考經驗試題及答案
- 電視機語音助手與智能交互技術考核試卷
- 2025-2030中國建筑智能化工程行業市場發展分析及發展趨勢前景研究報告
- 呵護地球家園點亮綠色希望-2025年4月22日第56個世界地球日主題教育班會 高中主題班會優 質課件
- 網絡安全問題及其防范措施(基礎篇)-國家計算機網絡應急中心
- 橋隧工技能鑒定理論資源高級技師模擬考試題含答案
- 2025-2030中國5G基站建設情況及前景趨勢與投資研究報告
- 話題10 AI人工智能-2025年中考《英語》高頻熱點話題寫作通關攻略
- 2024年上海市工業技術學校招聘筆試真題
- 2025年中國智能可穿戴設備市場深度調研分析及投資前景研究預測報告
- 體育產業智慧場館建設與運營模式創新
- 浙江國企招聘2024寧波慈溪市誠安燃氣服務有限公司招聘10人(二)筆試參考題庫附帶答案詳解
- 部隊網絡安全常識授課
評論
0/150
提交評論