一、設計內容與應用資源 1.設計內容: 單片機控制四相步進電機 速度可調,方向可調 速度采用定時器中斷方式來實現 匯編語言編程 2.基本功能: 步進電機正轉 步進電機反轉 步進電機加、減速 定時器中斷控速 3.應用資源: 一片AT89C52 一個四相電機 一片ULN2003A 單片機最小系統 1.設計要求 通過按鍵控制步進電機實現正、反轉和加、減速,并且該實驗實現了共五級調速,加速減速分別兩級,原速自一級,具體計時時間及換速速度見下方第3小點計算可得。 2.設計思路 為實現步進電機速度可調,方向可調的目的,并要用到定時器定時中斷來控制脈沖每變換一次的時間。此實驗設計思路上采用一個定時器,兩個外部中斷,設置8個正反轉控制字存到ROM以查表用,其分別代表步進電機的八拍。通過按鍵判別及定時器T0定時中斷使步進電機按所設置時間依次循環取用數組并每次指針加一便賦給P1,以達到電機按相應速度正、反轉起來的效果。外接外部中斷0、1的按鍵分別控制加速和減速,開啟外部中斷INT0則定時次數減少以增速;開啟外部中斷INT1則定時次數增加以減速。 具體軟硬件設置方面,在使用定時器前要先設定定時器T0的入口地址000BH,設置工作方式為方式1,并設置初值,對其進行初始化。設置外部中斷器INT0的入口地址0003H,外部中斷器INT1入口地址0013H,并對其進行初始化。控制步進電機轉動速度與方向,我們在硬件電路中的AT89C52的P3口連接四個按鈕,分別控制步進電機的加速、減速、正轉、反轉。 (1)正轉 設置R3置1時步進電機正轉,當按下第三個按鈕P3.6時,R3=1,將正轉的查表數值按順序賦給P1口,步進電機正轉。 (2)反轉 按下第四個按鈕P3.7時,R3=0,按反轉查表數值順序賦值給P1口,步進電機反轉。 (3)加速 設置計時次數值R6=150,通過改變循環次數來實現控制步進電機的運轉速度,當按下第一個按鈕P3.2時,程序執行外部中斷T0,R6每次加上30(最多加至210),并重新按新的計時次數循環查表,來實現步進電機的加速。 (4)減速 按下按鈕P3.3時,R6每次減去30(最多減至90),重新按新的計時次數循環查表來實現減速。 3.相關計算過程: 即脈沖間隔時間(轉速變換)計算,由初次間隔時間基礎上對應的轉速設定,TH0=0FEH,TL0=0C0H 
一級轉速:二級: 三級: 四級: 五級: 4.設計意義 步進電機是一種被廣泛使用的感應電機,它的工作原理是當輸入脈沖時,步進驅動器接收到一個脈沖信號,驅動步進電機按設定的方向轉動一個固定的角度。 步進電機廣泛應用在各種自動化控制系統中。隨著現代技術的發展,對步進電機的功能也有了更多的需求,在簡單步進電機的基礎上,增加了改變步進電機轉動方向與增加減少步進電機轉速的功能,擴大了步進電機的使用場合范圍。
三、硬件電路圖 1.最小系統(基礎) 本控制系統比較簡單,不需要多余的外部擴展芯片,因此選用一片AT89C52作為CPU來實現系統控制,對開發設備的要求很低,開發時間也能大大縮短。在單片機外部接上時鐘電路、復位電路和電源組成基本最小系統使其能夠正常運行。 圖1.1最小系統
2.ULN2003 在我們所學習的最小系統之上,我們進行了一定程度上的拓展,我們的目的是步進電機的調速,但是首先要驅動步進電機,但是單片機的管腳輸出電流較小,只有零點幾個毫安,吸納電流也只有十幾個毫安(大多數單片機只有幾個毫安),輸出最高電壓也不會越過5V,由于這個原因很少用單片機直接驅動外設。ULN2003的作用就是把單片機的信號進行(7路)放大,吸納電流可以達到500mA,耐壓能力也提高很多,基本能滿足微型步進電機的驅動電流和電壓,所以大家經常會在單片機輸出口上掛只ULN2003。ULN2003是高壓大電流達林頓晶體管陣列系列產品,具有電流增益高、工作電壓高、溫度范圍寬、帶負載能力強等特點,適應于各類要求高速大功率驅動的系統。 圖1.2 ULN2003 3.電動機 由于沒有在proteus軟件中找到三相步進電機,因此經過了多次試驗后我們選取了仿真效果最好的四相六線電機來進行仿真。 圖1.3四相六線電動機 4.總電路圖 圖1.4 總電路圖
四、數組的使用 用單片機的P1.0,P1.1,P1.2,P1.3分別控制步進電機的A,B,C,D相繞組。四相八拍的通電相依次為A-AB-B-BC-C-CD-D-DA,由此我們可以得到它的控制模型,以二進制和十六進制在表1中給出。 表1四相八拍的正反向運轉數組 五、流程圖    
- ORG 0000H
- LJMP MAIN
- ORG 0003H ;外部中斷0入口
- LJMP TIME0
- ORG 000BH ;定時器中斷入口
- LJMP T0_INT0
- ORG 0013H ;外部中斷1入口
- LJMP TIME1
- ORG 0030H
-
- MAIN:
- MOV TMOD,#01H ;設置T0工作方式為方式1
- MOV TH0,#0FEH ;設置T0初值
- MOV TL0,#0CH
- SETB ET0
- SETB EA
- SETB TR0
-
- SETB EX0
- SETB EX1
- SETB IT0
- SETB IT1
- MOV R0,#10 ;設定計數初值
- MOV R1,#0 ;查表值初始化
- MOV R3,#0 ;正反標志判別位
- MOV R6,#150 ;設定變量計數(次數)值
-
- LOOP: JB P3.6,AAA ;判斷正轉按鍵是否按下
- MOV R3,#0
- AAA:
- JB P3.7,LOOP ;判斷反轉按鍵是否按下
- MOV R3,#1
- SJMP LOOP
-
-
-
- T0_INT0:
- MOV TH0,#0FEH
- MOV TL0,#0CH
- DJNZ R0,RETURN ;判斷計時次數有無到所設定次數值
- MOV A,R6 ;修改計時次數所賦值,達到加減檔效果
- MOV R0,A
- MOV A,R1 ;加減速后重新將表中數值賦給A
- CJNE R3,#1,BBB ;若(R3)不等于1則跳轉到子程序BBB
- MOV DPTR,#Vn_step1 ;若(R3)等于1則向下運行對Vn_step1
- 查詢,指向表首地址
- SJMP CCC
- BBB: MOV DPTR,#Vn_step2 ;對 Vn_step2査詢,指向表首
- 地址
- CCC: MOVC A,@A+DPTR ;取表內數值賦值
- MOV P1,A ;將值通過累加器賦值給P1口
- MOV A,R1 ;初始化累加器
- INC A ;查詢地址加1
- CJNE A,#8,DDD ;若將表內數值査詢到了八次即八拍
- 則向下運行,否則跳轉到DDD子程序
- CLR A ;將累加器清零
-
- DDD: MOV R1,A ;將A中加1后的表內對應數值賦到R1或
- 到達8位后清零的值賦給R1
- RETURN:RETI ;定時器中斷返回
-
- TIME0: ;外部中斷0中斷服務程序——加速按鍵
- CJNE R6,#90,JJJ ;若計時次數沒有減至90,則跳轉
- 到JJJ
- SJMP KKK ;若已經減至90,則中斷返回
- JJJ:
- MOV A,R6 ;將此時計數次數值賦給A
- SUBB A,#30 ;將A中數值減30再賦給
- MOV R6,A ;將A中數值賦給R6當新的計時次數
- KKK: RETI
-
- TIME1: ;外部中斷1中斷服務程序——減速按鍵
- CJNE R6,#210,NNN ;若計時次數沒有增至210,則跳
- 轉到NNN
- SJMP MMM ;若已經增至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
復制代碼
本次對四相(代替三相以達更好效果)步進電機控制系統的設計,要求通過按鍵控制步進電機實現正反轉以及用定時器中斷的方式調節轉速并且使用匯編語言編程。
在編譯的過程中遇到了各種各樣的困難,首先是選擇步進電機,由于軟件中沒有我們需要的三相電動機,所以我們開始了漫長的嘗試道路,最終發現了一個效果最好的四相六線步進電機。其次就是在面對只能正反轉45度的步進電機我們對程序不斷審查,反復查找仿真運行之后發現了一處不妥,改正了之后也只能正反轉85-90度。我們陷入了思維定勢,無法對自己的程序進行糾錯,要是全部推翻重新建立一種思路未嘗不可,但嘗試改變就預示著前功盡棄。在軟件和硬件的無數次聯調修改的情況下都沒有用,所以后面問隊友,經過多次探討和改進,推翻了之前的思路,重新構建了上述設計思路和程序設計。
以上的Word格式文檔51黑下載地址:
02 步進電機說明書.docx
(224.8 KB, 下載次數: 190)
2019-12-28 16:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|