




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、51單片機(jī)驅(qū)動步進(jìn)電機(jī)_終極(完整版) 在這里介紹一下用51單片機(jī)驅(qū)動步進(jìn)電機(jī)的方法。 這款步進(jìn)電機(jī)的驅(qū)動電壓12V,步進(jìn)角為 7.5度 . 一圈 360 度 , 需要 48 個脈沖完成!該步進(jìn)電機(jī)有6根引線,排列次序如下:1:紅色、2:紅色、3:橙色、4:棕色、5:黃色、6:黑色。采用51驅(qū)動ULN2003的方法進(jìn)行驅(qū)動。ULN2003的驅(qū)動直接用單片機(jī)系統(tǒng)的5V電壓,可能力矩不是很大,大家可自行加大驅(qū)動電壓到12V。;*;-; 步進(jìn)電機(jī)的驅(qū)動信號必須為 脈沖信號! 轉(zhuǎn)動的速度和脈沖的頻率成正比!; 本步進(jìn)電機(jī)步進(jìn)角為 7.5度 . 一圈 360 度 , 需要 48 個脈沖完成!;-; A組
2、線圈對應(yīng) P2.4; B組線圈對應(yīng) P2.5; C組線圈對應(yīng) P2.6; D組線圈對應(yīng) P2.7; 正轉(zhuǎn)次序: AB組-BC組-CD組-DA組 (即一個脈沖,正轉(zhuǎn) 7.5 度);-;-正轉(zhuǎn)- ORG 0000H LJMP MAIN ORG 0100HMAIN:MOV R3,#144 正轉(zhuǎn) 3 圈共 144 脈沖 START: MOV R0,#00H START1: MOV P2,#00H MOV A,R0MOV DPTR,#TABLE MOVC A,A+DPTRJZ START 對 A 的判斷,當(dāng) A = 0 時則轉(zhuǎn)到 START MOV P2,ALCALL DELAY INC R0DJNZ
3、R3,START1MOV P2,#00H LCALL DELAY1;-反轉(zhuǎn)-MOV R3,#144 反轉(zhuǎn)一圈共 144 個脈沖 START2:MOV P2,#00H MOV R0,#05 START3: MOV A,R0MOV DPTR,#TABLE MOVC A,A+DPTR JZ START2 MOV P2,A CALL DELAY INC R0DJNZ R3,START3 MOV P2,#00HLCALL DELAY1 LJMP MAINDELAY: MOV R7,#40 步進(jìn)電機(jī)的轉(zhuǎn)速 M3: MOV R6,#248 DJNZ R6,$ DJNZ R7,M3RETDELAY1: MOV
4、 R4,#20 2S 延時子程序 DEL2: MOV R3,#200 DEL3: MOV R2,#250 DJNZ R2,$ DJNZ R3,DEL3 DJNZ R4,DEL2 RET TABLE:DB 30H,60H,0C0H,90H 正轉(zhuǎn)表 DB 00 正轉(zhuǎn)結(jié)束DB 30H,90H,0C0H,60H 反轉(zhuǎn)表 DB 00 反轉(zhuǎn)結(jié)束 END 51單片機(jī)控制四相步進(jìn)電機(jī) 拿 到步進(jìn)電機(jī),根據(jù)以前看書對四相步進(jìn)電機(jī)的了解,我對它進(jìn)行了初步的測試,就是將5伏電源的正端接上最邊上兩根褐色的線,然后用5伏電源的地線分別和另外 四根線(紅、蘭、白、橙)依次接觸,發(fā)現(xiàn)每接觸一下,步進(jìn)電機(jī)便轉(zhuǎn)動一個角度,來回
5、五次,電機(jī)剛好轉(zhuǎn)一圈,說明此步進(jìn)電機(jī)的步進(jìn)角度為 360/(4×5)18度。地線與四線接觸的順序相反,電機(jī)的轉(zhuǎn)向也相反。此步進(jìn)電機(jī),則只需分別依次給四線一定時間的脈沖電流,電機(jī)便可連續(xù)轉(zhuǎn)動起來。通過改變脈沖電流的時間間隔,就可以實現(xiàn)對轉(zhuǎn)速的控制;通過改變給四線脈沖電流的順序,則可實現(xiàn)對轉(zhuǎn)向的控制。所以,設(shè)計了如下電路圖:C51程序代碼為: 代碼一#include ; static unsigned int count; static unsigned int endcount; void delay(); void main(void) count = 0; P1_0 =
6、0; P1_1 = 0; P1_2 = 0; P1_3 = 0; EA = 1; /允許CPU中斷 TMOD = 0x11; /設(shè)定時器0和1為16位模式1 ET0 = 1; /定時器0中斷允許 TH0 = 0xFC; TL0 = 0x18; /設(shè)定時每隔1ms中斷一次 TR0 = 1; /開始計數(shù) 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(); goto startrun; /定時器0中斷處
7、理void timeint(void) interrupt 1 TH0=0xFC; TL0=0x18; /設(shè)定時每隔1ms中斷一次 count+; void delay() endcount=2; count=0; dowhile(count; 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
8、 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0; EA = 1; /允許CPU中斷 TMOD = 0x11; /設(shè)定時器0和1為16位模式1 ET0 = 1; /定時器0中斷允許 TH0 = 0xFE; TL0 = 0x0C; /設(shè)定時每隔0.5ms中斷一次 TR0 = 1; /開始計數(shù) do gorun(1,60); while(1); /定時器0中斷處理void timeint(void) interrupt 1 TH0=0xFE; TL0=0x0C; /設(shè)定時每隔0.5ms中斷一次 count+; P1_3 = 1; break; case 6: P1_0 = 0;
9、 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; static unsigned int count; /計數(shù)static int step_index; /步進(jìn)索引數(shù),值為07 static bit turn; /步進(jìn)電機(jī)轉(zhuǎn)動方向static bit
10、 stop_flag; /步進(jìn)電機(jī)停止標(biāo)志static int speedlevel; /步進(jìn)電機(jī)轉(zhuǎn)速參數(shù),數(shù)值越大速度越慢,最小值為1,速度最快 static int spcount; /步進(jìn)電機(jī)轉(zhuǎn)速參數(shù)計數(shù)void delay(unsigned int endcount); /延時函數(shù),延時為endcount*0.5毫秒 void gorun(); /步進(jìn)電機(jī)控制步進(jìn)函數(shù) void main(void) count = 0; step_index = 0; spcount = 0; stop_flag = 0; P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0;
11、 EA = 1; /允許CPU中斷 TMOD = 0x11; /設(shè)定時器0和1為16位模式1 ET0 = 1; /定時器0中斷允許 TH0 = 0xFE; TL0 = 0x0C; /設(shè)定時每隔0.5ms中斷一次 TR0 = 1; /開始計數(shù) turn = 0; speedlevel = 2; delay(10000); speedlevel = 1; do speedlevel = 2; delay(10000); speedlevel = 1; delay(10000); stop_flag=1; delay(10000); stop_flag=0; while(1); /定時器0中斷處理v
12、oid timeint(void) interrupt 1 TH0=0xFE; TL0=0x0C; /設(shè)定時每隔0.5ms中斷一次 count+; spcount-; if(spcount;7) step_index=0; else step_index-; if (step_index<0) step_index=7; 在代碼三中,我將步進(jìn)電機(jī)的運(yùn)轉(zhuǎn)控制放在時間中斷函數(shù)之中,這樣主函數(shù)就能很方便的加入其它任務(wù)的執(zhí)行,而對步進(jìn)電機(jī)的運(yùn)轉(zhuǎn)不產(chǎn)生影響。在此代碼中,不但實現(xiàn)了步進(jìn)電機(jī)的轉(zhuǎn)速和轉(zhuǎn)向的控制,另外還加了一個停止的功能,呵呵,這肯定是需要的。 步進(jìn)電機(jī)從靜止到高速轉(zhuǎn)動需要一個加速的過程
13、,否則電機(jī)很容易被“卡住”,代碼一、二實現(xiàn)加速不是很方便,而在代碼三中,加速則很容易了。在此代碼中,當(dāng) 轉(zhuǎn)速參數(shù)speedlevel 為2時,可以算出,此時步進(jìn)電機(jī)的轉(zhuǎn)速為1500RPM,而當(dāng)轉(zhuǎn)速參數(shù)speedlevel 1時,轉(zhuǎn)速為3000RPM。當(dāng)步進(jìn)電機(jī)停止,如果直接將speedlevel 設(shè)為1,此時步進(jìn)電機(jī)將被“卡住”,而如果先把speedlevel 設(shè)為2,讓電機(jī)以1500RPM的轉(zhuǎn)速轉(zhuǎn)起來,幾秒種后,再把speedlevel 設(shè)為1,此時電機(jī)就能以3000RPM的轉(zhuǎn)速高速轉(zhuǎn)動,這就是“加速”
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建藝考生高考數(shù)學(xué)試卷
- 高一聯(lián)考期末數(shù)學(xué)試卷
- 肌理畫課件兒童創(chuàng)意
- 肉羊的飼養(yǎng)管理技術(shù)
- 肝病的癥狀與診斷方法課件
- 2025年03月浙江嘉興市海寧市人民醫(yī)院招聘1人筆試歷年專業(yè)考點(diǎn)(難、易錯點(diǎn))附帶答案詳解
- 2025年浙江醫(yī)療衛(wèi)生招聘溫州醫(yī)科大學(xué)附屬第二醫(yī)院招聘特殊專業(yè)技術(shù)崗位106人筆試歷年專業(yè)考點(diǎn)(難、易錯點(diǎn))附帶答案詳解
- 食品采購加工培訓(xùn)課件
- 智能城市運(yùn)輸創(chuàng)投項目計劃書
- 2025至2030軌道軸箱行業(yè)市場深度研究與戰(zhàn)略咨詢分析報告
- 《急性呼吸衰竭》課件
- 充電樁售后合同范本
- 互聯(lián)網(wǎng)保險發(fā)展模式-深度研究
- 2025年青藏鐵路集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 中班美術(shù)安全標(biāo)志課件
- 2025四川遂寧發(fā)展投資集團(tuán)限公司及直屬企業(yè)招聘21人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 年中績效總結(jié)報告
- 2024年出版專業(yè)資格考試《出版專業(yè)基礎(chǔ)知識》中級真題及答案
- 2024按摩技師與養(yǎng)生館合作經(jīng)營協(xié)議樣本3篇
- 風(fēng)險管理知到智慧樹章節(jié)測試課后答案2024年秋貴州財經(jīng)大學(xué)
評論
0/150
提交評論