標(biāo)題: 51單片機(jī)控制步進(jìn)電機(jī)正反轉(zhuǎn)及調(diào)速詳解 附匯編語言程序 [打印本頁]
作者: UNICORN~ 時(shí)間: 2019-12-28 16:15
標(biāo)題: 51單片機(jī)控制步進(jìn)電機(jī)正反轉(zhuǎn)及調(diào)速詳解 附匯編語言程序
一、設(shè)計(jì)內(nèi)容與應(yīng)用資源
1.設(shè)計(jì)內(nèi)容:
單片機(jī)控制四相步進(jìn)電機(jī)
速度可調(diào),方向可調(diào)
速度采用定時(shí)器中斷方式來實(shí)現(xiàn)
匯編語言編程
2.基本功能:
步進(jìn)電機(jī)正轉(zhuǎn)
步進(jìn)電機(jī)反轉(zhuǎn)
步進(jìn)電機(jī)加、減速
定時(shí)器中斷控速
3.應(yīng)用資源:
一片AT89C52
一個(gè)四相電機(jī)
一片ULN2003A
單片機(jī)最小系統(tǒng)
1.設(shè)計(jì)要求
通過按鍵控制步進(jìn)電機(jī)實(shí)現(xiàn)正、反轉(zhuǎn)和加、減速,并且該實(shí)驗(yàn)實(shí)現(xiàn)了共五級(jí)調(diào)速,加速減速分別兩級(jí),原速自一級(jí),具體計(jì)時(shí)時(shí)間及換速速度見下方第3小點(diǎn)計(jì)算可得。
2.設(shè)計(jì)思路
為實(shí)現(xiàn)步進(jìn)電機(jī)速度可調(diào),方向可調(diào)的目的,并要用到定時(shí)器定時(shí)中斷來控制脈沖每變換一次的時(shí)間。此實(shí)驗(yàn)設(shè)計(jì)思路上采用一個(gè)定時(shí)器,兩個(gè)外部中斷,設(shè)置8個(gè)正反轉(zhuǎn)控制字存到ROM以查表用,其分別代表步進(jìn)電機(jī)的八拍。通過按鍵判別及定時(shí)器T0定時(shí)中斷使步進(jìn)電機(jī)按所設(shè)置時(shí)間依次循環(huán)取用數(shù)組并每次指針加一便賦給P1,以達(dá)到電機(jī)按相應(yīng)速度正、反轉(zhuǎn)起來的效果。外接外部中斷0、1的按鍵分別控制加速和減速,開啟外部中斷INT0則定時(shí)次數(shù)減少以增速;開啟外部中斷INT1則定時(shí)次數(shù)增加以減速。
具體軟硬件設(shè)置方面,在使用定時(shí)器前要先設(shè)定定時(shí)器T0的入口地址000BH,設(shè)置工作方式為方式1,并設(shè)置初值,對(duì)其進(jìn)行初始化。設(shè)置外部中斷器INT0的入口地址0003H,外部中斷器INT1入口地址0013H,并對(duì)其進(jìn)行初始化?刂撇竭M(jìn)電機(jī)轉(zhuǎn)動(dòng)速度與方向,我們?cè)谟布娐分械腁T89C52的P3口連接四個(gè)按鈕,分別控制步進(jìn)電機(jī)的加速、減速、正轉(zhuǎn)、反轉(zhuǎn)。
(1)正轉(zhuǎn)
設(shè)置R3置1時(shí)步進(jìn)電機(jī)正轉(zhuǎn),當(dāng)按下第三個(gè)按鈕P3.6時(shí),R3=1,將正轉(zhuǎn)的查表數(shù)值按順序賦給P1口,步進(jìn)電機(jī)正轉(zhuǎn)。
(2)反轉(zhuǎn)
按下第四個(gè)按鈕P3.7時(shí),R3=0,按反轉(zhuǎn)查表數(shù)值順序賦值給P1口,步進(jìn)電機(jī)反轉(zhuǎn)。
(3)加速
設(shè)置計(jì)時(shí)次數(shù)值R6=150,通過改變循環(huán)次數(shù)來實(shí)現(xiàn)控制步進(jìn)電機(jī)的運(yùn)轉(zhuǎn)速度,當(dāng)按下第一個(gè)按鈕P3.2時(shí),程序執(zhí)行外部中斷T0,R6每次加上30(最多加至210),并重新按新的計(jì)時(shí)次數(shù)循環(huán)查表,來實(shí)現(xiàn)步進(jìn)電機(jī)的加速。
(4)減速
按下按鈕P3.3時(shí),R6每次減去30(最多減至90),重新按新的計(jì)時(shí)次數(shù)循環(huán)查表來實(shí)現(xiàn)減速。
3.相關(guān)計(jì)算過程:
即脈沖間隔時(shí)間(轉(zhuǎn)速變換)計(jì)算,由初次間隔時(shí)間基礎(chǔ)上對(duì)應(yīng)的轉(zhuǎn)速設(shè)定,TH0=0FEH,TL0=0C0H

一級(jí)轉(zhuǎn)速:二級(jí):
三級(jí):
四級(jí):
五級(jí):
4.設(shè)計(jì)意義
步進(jìn)電機(jī)是一種被廣泛使用的感應(yīng)電機(jī),它的工作原理是當(dāng)輸入脈沖時(shí),步進(jìn)驅(qū)動(dòng)器接收到一個(gè)脈沖信號(hào),驅(qū)動(dòng)步進(jìn)電機(jī)按設(shè)定的方向轉(zhuǎn)動(dòng)一個(gè)固定的角度。
步進(jìn)電機(jī)廣泛應(yīng)用在各種自動(dòng)化控制系統(tǒng)中。隨著現(xiàn)代技術(shù)的發(fā)展,對(duì)步進(jìn)電機(jī)的功能也有了更多的需求,在簡單步進(jìn)電機(jī)的基礎(chǔ)上,增加了改變步進(jìn)電機(jī)轉(zhuǎn)動(dòng)方向與增加減少步進(jìn)電機(jī)轉(zhuǎn)速的功能,擴(kuò)大了步進(jìn)電機(jī)的使用場合范圍。
三、硬件電路圖
1.最小系統(tǒng)(基礎(chǔ))
本控制系統(tǒng)比較簡單,不需要多余的外部擴(kuò)展芯片,因此選用一片AT89C52作為CPU來實(shí)現(xiàn)系統(tǒng)控制,對(duì)開發(fā)設(shè)備的要求很低,開發(fā)時(shí)間也能大大縮短。在單片機(jī)外部接上時(shí)鐘電路、復(fù)位電路和電源組成基本最小系統(tǒng)使其能夠正常運(yùn)行。
圖1.1最小系統(tǒng)
2.ULN2003
在我們所學(xué)習(xí)的最小系統(tǒng)之上,我們進(jìn)行了一定程度上的拓展,我們的目的是步進(jìn)電機(jī)的調(diào)速,但是首先要驅(qū)動(dòng)步進(jìn)電機(jī),但是單片機(jī)的管腳輸出電流較小,只有零點(diǎn)幾個(gè)毫安,吸納電流也只有十幾個(gè)毫安(大多數(shù)單片機(jī)只有幾個(gè)毫安),輸出最高電壓也不會(huì)越過5V,由于這個(gè)原因很少用單片機(jī)直接驅(qū)動(dòng)外設(shè)。ULN2003的作用就是把單片機(jī)的信號(hào)進(jìn)行(7路)放大,吸納電流可以達(dá)到500mA,耐壓能力也提高很多,基本能滿足微型步進(jìn)電機(jī)的驅(qū)動(dòng)電流和電壓,所以大家經(jīng)常會(huì)在單片機(jī)輸出口上掛只ULN2003。ULN2003是高壓大電流達(dá)林頓晶體管陣列系列產(chǎn)品,具有電流增益高、工作電壓高、溫度范圍寬、帶負(fù)載能力強(qiáng)等特點(diǎn),適應(yīng)于各類要求高速大功率驅(qū)動(dòng)的系統(tǒng)。
圖1.2 ULN2003
3.電動(dòng)機(jī)
由于沒有在proteus軟件中找到三相步進(jìn)電機(jī),因此經(jīng)過了多次試驗(yàn)后我們選取了仿真效果最好的四相六線電機(jī)來進(jìn)行仿真。
圖1.3四相六線電動(dòng)機(jī)
4.總電路圖
圖1.4 總電路圖
四、數(shù)組的使用
用單片機(jī)的P1.0,P1.1,P1.2,P1.3分別控制步進(jìn)電機(jī)的A,B,C,D相繞組。四相八拍的通電相依次為A-AB-B-BC-C-CD-D-DA,由此我們可以得到它的控制模型,以二進(jìn)制和十六進(jìn)制在表1中給出。
表1四相八拍的正反向運(yùn)轉(zhuǎn)數(shù)組
五、流程圖




- ORG 0000H
- LJMP MAIN
- ORG 0003H ;外部中斷0入口
- LJMP TIME0
- ORG 000BH ;定時(shí)器中斷入口
- LJMP T0_INT0
- ORG 0013H ;外部中斷1入口
- LJMP TIME1
- ORG 0030H
-
- MAIN:
- MOV TMOD,#01H ;設(shè)置T0工作方式為方式1
- MOV TH0,#0FEH ;設(shè)置T0初值
- MOV TL0,#0CH
- SETB ET0
- SETB EA
- SETB TR0
-
- SETB EX0
- SETB EX1
- SETB IT0
- SETB IT1
- MOV R0,#10 ;設(shè)定計(jì)數(shù)初值
- MOV R1,#0 ;查表值初始化
- MOV R3,#0 ;正反標(biāo)志判別位
- MOV R6,#150 ;設(shè)定變量計(jì)數(shù)(次數(shù))值
-
- LOOP: JB P3.6,AAA ;判斷正轉(zhuǎn)按鍵是否按下
- MOV R3,#0
- AAA:
- JB P3.7,LOOP ;判斷反轉(zhuǎn)按鍵是否按下
- MOV R3,#1
- SJMP LOOP
-
-
-
- T0_INT0:
- MOV TH0,#0FEH
- MOV TL0,#0CH
- DJNZ R0,RETURN ;判斷計(jì)時(shí)次數(shù)有無到所設(shè)定次數(shù)值
- MOV A,R6 ;修改計(jì)時(shí)次數(shù)所賦值,達(dá)到加減檔效果
- MOV R0,A
- MOV A,R1 ;加減速后重新將表中數(shù)值賦給A
- CJNE R3,#1,BBB ;若(R3)不等于1則跳轉(zhuǎn)到子程序BBB
- MOV DPTR,#Vn_step1 ;若(R3)等于1則向下運(yùn)行對(duì)Vn_step1
- 查詢,指向表首地址
- SJMP CCC
- BBB: MOV DPTR,#Vn_step2 ;對(duì) Vn_step2査詢,指向表首
- 地址
- CCC: MOVC A,@A+DPTR ;取表內(nèi)數(shù)值賦值
- MOV P1,A ;將值通過累加器賦值給P1口
- MOV A,R1 ;初始化累加器
- INC A ;查詢地址加1
- CJNE A,#8,DDD ;若將表內(nèi)數(shù)值査詢到了八次即八拍
- 則向下運(yùn)行,否則跳轉(zhuǎn)到DDD子程序
- CLR A ;將累加器清零
-
- DDD: MOV R1,A ;將A中加1后的表內(nèi)對(duì)應(yīng)數(shù)值賦到R1或
- 到達(dá)8位后清零的值賦給R1
- RETURN:RETI ;定時(shí)器中斷返回
-
- TIME0: ;外部中斷0中斷服務(wù)程序——加速按鍵
- CJNE R6,#90,JJJ ;若計(jì)時(shí)次數(shù)沒有減至90,則跳轉(zhuǎn)
- 到JJJ
- SJMP KKK ;若已經(jīng)減至90,則中斷返回
- JJJ:
- MOV A,R6 ;將此時(shí)計(jì)數(shù)次數(shù)值賦給A
- SUBB A,#30 ;將A中數(shù)值減30再賦給
- MOV R6,A ;將A中數(shù)值賦給R6當(dāng)新的計(jì)時(shí)次數(shù)
- KKK: RETI
-
- TIME1: ;外部中斷1中斷服務(wù)程序——減速按鍵
- CJNE R6,#210,NNN ;若計(jì)時(shí)次數(shù)沒有增至210,則跳
- 轉(zhuǎn)到NNN
- SJMP MMM ;若已經(jīng)增至210,則中斷返回
- NNN:
- MOV A,R6
- ADD A,#30
- MOV R6,A
- MMM: RETI
- Vn_step1: DB 01H,03H,02H,06H,04H,0CH,08H,09H
- Vn_step2: DB 09H,08H,0CH,04H,06H,02H,03H,01H
-
- END
復(fù)制代碼
本次對(duì)四相(代替三相以達(dá)更好效果)步進(jìn)電機(jī)控制系統(tǒng)的設(shè)計(jì),要求通過按鍵控制步進(jìn)電機(jī)實(shí)現(xiàn)正反轉(zhuǎn)以及用定時(shí)器中斷的方式調(diào)節(jié)轉(zhuǎn)速并且使用匯編語言編程。
在編譯的過程中遇到了各種各樣的困難,首先是選擇步進(jìn)電機(jī),由于軟件中沒有我們需要的三相電動(dòng)機(jī),所以我們開始了漫長的嘗試道路,最終發(fā)現(xiàn)了一個(gè)效果最好的四相六線步進(jìn)電機(jī)。其次就是在面對(duì)只能正反轉(zhuǎn)45度的步進(jìn)電機(jī)我們對(duì)程序不斷審查,反復(fù)查找仿真運(yùn)行之后發(fā)現(xiàn)了一處不妥,改正了之后也只能正反轉(zhuǎn)85-90度。我們陷入了思維定勢,無法對(duì)自己的程序進(jìn)行糾錯(cuò),要是全部推翻重新建立一種思路未嘗不可,但嘗試改變就預(yù)示著前功盡棄。在軟件和硬件的無數(shù)次聯(lián)調(diào)修改的情況下都沒有用,所以后面問隊(duì)友,經(jīng)過多次探討和改進(jìn),推翻了之前的思路,重新構(gòu)建了上述設(shè)計(jì)思路和程序設(shè)計(jì)。
以上的Word格式文檔51黑下載地址:
02 步進(jìn)電機(jī)說明書.docx
(224.8 KB, 下載次數(shù): 190)
2019-12-28 16:14 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者: danpianji22 時(shí)間: 2020-9-27 12:47
這個(gè)程序我那個(gè)單片機(jī)板子用不了啊
作者: windone 時(shí)間: 2021-12-15 15:03
感覺有用,但是我是兩相四線
作者: 莫攸 時(shí)間: 2022-11-5 16:25
太棒了,有原理圖就更好了
作者: 饅頭寶寶 時(shí)間: 2023-3-17 02:59
太好了,正好用得上
作者: woshitomge 時(shí)間: 2023-3-18 22:41
不錯(cuò)的資料,謝謝樓主分享!
作者: dbkdz 時(shí)間: 2023-4-29 23:52
ULN2003發(fā)熱量大,建議用幾分錢一個(gè)的MOS FET,型號(hào)2N10 用四只即可?刂菩Ч萓LN2003好。尤其是控制DC24V的四相步進(jìn)電機(jī),2003不行的。太燙了。 樓主什么時(shí)候可寫編控制2相的步進(jìn)電機(jī)文章來呢?我想學(xué)習(xí)。
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |