一、設(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)速度與方向,我們在硬件電路中的AT89C52的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
|