版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、目錄1. 設(shè)計課題名稱及要求。2. 設(shè)計思想和實施方案論述,給出硬件電路原理圖并分析。3. 典型程序模塊及典型編程技巧分析。4. 課程設(shè)計中遇到的問題及解決方法。5. 程序清單和程序注釋,相關(guān)流程圖。6. 收獲與體會。7. 參考文獻(xiàn)。 小型步進(jìn)電機(jī)控制系統(tǒng)設(shè)計一、 設(shè)計的題目名稱及要求設(shè)計題目:小型步進(jìn)電機(jī)控制系統(tǒng)設(shè)計。設(shè)計要求:(1)、分別用C語言和匯編語言編程完成硬件接口功能設(shè)計;(2)、基于80x86微機(jī)接口硬件電路設(shè)計調(diào)試;(3)、控制功能要求:小鍵盤給定分段速度,數(shù)碼管顯示當(dāng)前步進(jìn)電機(jī)啟動與停止、方向、速度信息;二、實驗設(shè)備PC機(jī)一臺(裝有TDPIT軟件)、唐都AEDK8688ET實
2、驗箱。三、設(shè)計的思想和實施方案1.步進(jìn)電機(jī)運(yùn)行方式的控制步進(jìn)電機(jī)的轉(zhuǎn)速與輸入脈沖頻率成正比,頻率越大,轉(zhuǎn)速越高,四相步進(jìn)電機(jī)有雙四拍,雙八拍,雙六拍等方式。實驗平臺可連接的步進(jìn)電機(jī)為四項八拍電機(jī),電壓為DC12V。為了實現(xiàn)對各繞組按一定方式輪流加電,需要一個循環(huán)脈沖分配器,這里采用軟件實現(xiàn)。將相序表存放于內(nèi)存區(qū),再設(shè)置一個地址指針。當(dāng)?shù)刂芬来?1(或-1)時,可從表中取出通電代碼,再輸出到步進(jìn)電機(jī),產(chǎn)生一定的運(yùn)行方式。2.信號的輸入與輸出8255內(nèi)部包含3個8位的輸入輸出端口A、B和C,端口A和端口B都可以用作一個8位的輸入口或8位的輸出口,端口C既可以作為一個8位的輸入口或8位的輸出口,又可
3、以作為兩個4位的輸入輸出口(C口上半部分和C口下半部分)使用,還可以配合A口和B口工作,分別用來產(chǎn)生A口和B口的輸出控制信號和輸入A口和B口的端口狀態(tài)信號。8255A內(nèi)部結(jié)構(gòu)圖8255 ABC口都工作于方式0,A口低四位接鍵盤及數(shù)碼管顯示單元的X1X4; B口接數(shù)碼管的A、B、C、D、E、F、G和DP,以使數(shù)碼管顯示電機(jī)的轉(zhuǎn)向和轉(zhuǎn)速;C口低四位接鍵盤及數(shù)碼管顯示單元的Y1Y4; C口高四位接步進(jìn)電路的驅(qū)動電路,使電機(jī)轉(zhuǎn)動起來。8255的A口高四位本次課程設(shè)計沒有用到。3.步進(jìn)電機(jī)的速度控制:采用軟件延時的方法,每發(fā)射一個脈沖的間隔中插入數(shù)個延時單元。速度共分為9級,對應(yīng)鍵盤的9個按鍵??梢詫﹄?/p>
4、機(jī)進(jìn)行方向的改變,并停止電機(jī)運(yùn)行。初始設(shè)計時采用了8254作為計數(shù)單元,但在實際操作過程中因其過于不穩(wěn)定,多次出現(xiàn)死機(jī)狀況,難以調(diào)試故改用軟件延時的方法。4.鍵盤及數(shù)碼管顯示單元: 鍵盤的輸入左下角9格作為級數(shù)的設(shè)置,第四列第四行為停止鍵,4.3為設(shè)置負(fù)方向,4.2為設(shè)置負(fù)方向,初始運(yùn)行時系統(tǒng)默認(rèn)正方向。 鍵盤最上面一行應(yīng)為沒有使用所以在程序中屏蔽。四、硬件電路原理圖如上圖示:該原理圖涉及到系統(tǒng)總線、可編程外圍接口芯片8255、鍵盤及數(shù)碼管顯示單元和步進(jìn)電機(jī)及其驅(qū)動電路8255的D0D7 依次接系統(tǒng)總線的XD0XD7,A1和A0依次接系統(tǒng)總線的XA3和XA2;WR和RD 依次接系統(tǒng)總線上的XI
5、OW和XIOR;8255的CS接系統(tǒng)總線的IOY0;8255的A口低四位PA0PA4依次接小鍵盤的X1X4(列);C口低四位PC0PC3分別接小鍵盤的Y1Y4(行); C口高四位PC4PC7依次接驅(qū)動電路的A、B、C和D;B口PB0PB7分別接數(shù)碼管的A、B、C、D、E、F、G和DP;A口高四位沒用到。五、典型程序模塊及典型編程技巧分析 1.主函數(shù)主函數(shù)主要是完成鍵盤輸入的處理以及綜合調(diào)用各子函數(shù),以完成對四項八拍步進(jìn)電機(jī)轉(zhuǎn)速和轉(zhuǎn)向的控制,并在PC機(jī)及數(shù)碼管上實時顯示電機(jī)的轉(zhuǎn)速和轉(zhuǎn)向。本次設(shè)計的電機(jī)轉(zhuǎn)速分為19個檔次。鍵盤右下角9格對應(yīng)9檔,右側(cè)一列底部鍵為停止,上面兩格分別為正向和負(fù)向。當(dāng)選
6、擇負(fù)向時,數(shù)碼管左一會顯示“-”,正則為0,左四數(shù)碼管會顯示級數(shù)。2.RUNP、RUNN此子函數(shù)用來控制不進(jìn)電機(jī)的運(yùn)行,設(shè)了一個大循環(huán)每次循環(huán)都會發(fā)送一個脈沖,延時設(shè)計在循環(huán)之中。對應(yīng)的電平發(fā)送順序存放在TTABLE中。RUNP中對其正向讀取,RUNN中則對其負(fù)向讀取,以實現(xiàn)方向的變換。延時部分考慮到數(shù)碼管的顯示問題,數(shù)碼管顯示所需延時遠(yuǎn)小于不進(jìn)電機(jī)調(diào)速所需延時。故以DIS作為延時函數(shù),嵌套與每個大循環(huán)中,這樣即使CPU在控制電機(jī)的運(yùn)行也能保證數(shù)碼管有足夠的顯示亮度。3.CCSCAN此子函數(shù)用來掃描小鍵盤是否有鍵按下。通過8255的C口高四位,使X1X4(列)全選通,然后由8255的C口低四位
7、判斷各列所對應(yīng)的行是否有鍵安下,無任何鍵按下則C口低四位讀入的全是“1”,若有鍵按下則C口低四位讀入的對應(yīng)行是“0”,其余全是“1”,經(jīng)取反(NOT)后掃描小鍵盤的子程序CCSCAN的功能變?yōu)?若小鍵盤無鍵按下則AL寄存器數(shù)據(jù)為“0”; 若小鍵盤有鍵按下則AL寄存器數(shù)據(jù)為非“0”.4.PUTBUF保存小鍵盤輸入的信息于DS:3000-3004中。5.DIS將CUNSHU子函數(shù)中保存下的電機(jī)轉(zhuǎn)向和轉(zhuǎn)速值送到數(shù)碼管上顯示。6. CLEAR將00H分別送入A口(驅(qū)動LED燈)和B口(驅(qū)動數(shù)碼管)便可實驗此功能7.DALLY、DALLY1這是兩個延時時間不同的延時子函數(shù),可供別的程序調(diào)用以實現(xiàn)較好的顯
8、示和操作效果。DALLY主要用于補(bǔ)償控制轉(zhuǎn)數(shù)時DIS函數(shù)延時不夠。 DALLY1在數(shù)碼管顯示中調(diào)用,避免數(shù)碼管變換太快,導(dǎo)致顯示信息的混疊。同時在電機(jī)的控制中也作為延時的一部分。 六、課程設(shè)計中遇到的問題及解決方法 1.在使用8253時容易死機(jī)如前所訴,在實際調(diào)制的過程中,單補(bǔ)調(diào)試時每次運(yùn)行到調(diào)用8253就會出現(xiàn)死機(jī)。具體原因很難說得清楚,有的是同一個程序換臺機(jī)子運(yùn)行就會死機(jī),有的是同一臺機(jī)子同一個程序運(yùn)行多次就會死機(jī)。最后不得不因為時間緊張,放棄使用硬件延時。2.數(shù)碼管看不到示數(shù)或數(shù)碼管看上去全亮因為不進(jìn)電機(jī)的速度調(diào)節(jié)主要靠延時的多少來完成,而8086的運(yùn)行只處于單線程,無法同時運(yùn)行多個子程
9、序。故在運(yùn)行時,若轉(zhuǎn)數(shù)較慢所需延時時間較長,則數(shù)碼管顯示較暗。因此,如前所述我采用了將DIS顯示模塊作為延時嵌套如運(yùn)行控制程序的方法以保證數(shù)碼管的顯示。調(diào)用了數(shù)碼管顯示程序而卻看不到數(shù)碼管有示數(shù),這主要是調(diào)用數(shù)碼管顯示子函數(shù)的頻率不夠高,可以把數(shù)碼管顯示子函數(shù)換個位置,或者是多調(diào)用幾次就可以解決了。至于數(shù)碼管好像是全亮,情況正好相反,是數(shù)碼管顯示子函數(shù)調(diào)用的頻率過高,把數(shù)碼管顯示子函數(shù)換個位置,或者是在關(guān)鍵位置調(diào)用一下延時函數(shù)就可以解決了。還有,DIS和CLEAR成對調(diào)用可使數(shù)碼管有個較好的顯示效果。七、實驗程序的流程圖;*根據(jù)查看端口資源修改下列符號值* IOY0 EQU 0E000H ;片
10、選IOY0對應(yīng)的端口始地址;* MY8255_A EQU IOY0+00H*4 ;8255的A口地址 MY8255_B EQU IOY0+01H*4 ;8255的B口地址 MY8255_C EQU IOY0+02H*4 ;8255的C口地址 MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址;* STACK1 SEGMENT STACK DW 256 DUP(?)STACK1 ENDS DATA SEGMENT TTABLE DB 10H,30H,20H,60H,40H,0C0H,80H,90H ;存放脈沖對應(yīng)碼字 DTABLE DB 3FH,06H,5BH,4F
11、H,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,40H ETABLE DB 1FH,2FH,3FH,4FH,5FH,6FH,7FH,8FH,9FH B DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX BUFFER: MOV SI,3000H ;建立緩沖區(qū),存放要顯示的鍵值 MOV AL,00H ;初始將存儲區(qū)都設(shè)為0 MOV SI,AL ;第一個存儲區(qū)用來存放正負(fù)方向 MOV SI+1,AL MOV SI+2,AL MOV SI+3
12、,AL MOV SI+4,AL ;存放所需速度 MAIN: MOV DX,MY8255_MODE ;定義8255工作方式 MOV AL,81H ;工作方式0,A口和B口為輸出 OUT DX,AL BEGIN: CALL DIS ;顯示刷新 CALL CLEAR ;清屏 CALL CCSCAN ;掃描按鍵 JNZ GETKEY1 ;有鍵按下則跳置GETKEY1 MOV AH,1 ;判斷PC鍵盤是否有按鍵按下 INT 16H JZ BEGIN ;無按鍵則跳回繼續(xù)循環(huán),有則退出 MOV AX,4C00H ;結(jié)束程序退出 INT 21H GETKEY1: CALL DIS ;顯示刷新 CALL DAL
13、LY1 CALL DALLY1 CALL CLEAR ;清屏 CALL CCSCAN ;再次掃描按鍵 JNZ GETKEY2 ;有鍵按下則跳置GETKEY2 JMP BEGIN ;否則跳回開始繼續(xù)循環(huán) GETKEY2: MOV CH,0FEH MOV CL,00H ;設(shè)置當(dāng)前檢測的是第幾列 COLUM: MOV AL,CH ;選取一列,將X1X4中一個置0 MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C ;讀Y1Y4,用于判斷是哪一行按鍵閉合 IN AL,DX L2: TEST AL,02H ;是否為第2行 JNZ L3 ;不是則繼續(xù)判斷 MOV AL,07
14、H ;設(shè)置第2行第1列的對應(yīng)的鍵值 JMP KCODE L3: TEST AL,04H ;是否為第3行 JNZ L4 ;不是則繼續(xù)判斷 MOV AL,04H ;設(shè)置第3行第1列的對應(yīng)的鍵值 JMP KCODE L4: TEST AL,08H ;是否為第4行 JNZ NEXT ;不是則繼續(xù)判斷 MOV AL,01H ;設(shè)置第4行第1列的對應(yīng)的鍵值 KCODE: CMP CL,03H ;如果是第四列的就轉(zhuǎn)到控制操作部分 JZ CONTROL JMP INSTALL CONTROL: CMP AL,01H ;先比較是否是0鍵,不是在進(jìn)行方向控制 JZ ZERO JMP DIRECTION ZERO:
15、 MOV AL,00H MOV DI,3004H CALL PUTBUF JMP LALA DIRECTION: CMP AL,04H ;判斷是否為負(fù)向 JZ NAGTIVE MOV AL,00H MOV DI,3003H CALL PUTBUF JMP LALA NAGTIVE: MOV AL,10H MOV DI,3003H CALL PUTBUF JMP LALA INSTALL: ADD AL,CL ;將第1列的值加上當(dāng)前列數(shù),確定按鍵值 MOV DI,3004H CALL PUTBUF ;保存按鍵值 JMP LALA NEXT: INC CL ;當(dāng)前檢測的列數(shù)遞增 MOV AL,CH
16、 TEST AL,08H ;檢測是否掃描到第4列 JZ MODE ;是則跳回到開始處 ROL AL,1 ;沒檢測到第4列則準(zhǔn)備檢測下一列 MOV CH,AL JMP COLUM LALA: PUSH AX KON: CALL DIS ;顯示刷新 CALL CLEAR ;清屏 CALL CCSCAN ;掃描按鍵,判斷按鍵是否彈起 JNZ KON ;未彈起則繼續(xù)循環(huán)等待彈起 POP AX MODE: MOV SI,3004H ;判斷是否停止 MOV AL,SI CMP AL,00H JZ INTERMEDIUM ;是,則跳轉(zhuǎn)至存儲子程序 JMP RUN ;否,則繼續(xù) INTERMEDIUM: JM
17、P BUFFER RUN: MOV SI,3003H MOV AL,SI CMP AL,00H JZ FORWARD JMP BACKWARD FORWARD: CALL RUNP JMP GETKEY2 BACKWARD: CALL RUNN JMP GETKEY2;*RUN FORWARD* RUNP PROC NEAR ;正向控制 A1P: MOV B,SP MOV BX,OFFSET TTABLE MOV CX,0008H ;因為8拍設(shè)置8個循環(huán) A2P: MOV AL,BX MOV DX,MY8255_C OUT DX,AL MOV SI,3004H MOV DI,SI AND DI
18、,00FFH PUSH BX CASTE: PUSH DI CALL DIS CALL DALLY CALL CLEAR CALL CCSCAN JNZ EXIT POP DI CMP DI,0 JZ NDEC DEC DI CMP DI,0 JNZ CASTE NDEC: POP BX INC BX LOOP A2P MOV AH,1 ;判斷是否有按鍵按下 INT 16H JZ A1P ;無按鍵則跳回繼續(xù)循環(huán),有則退出 MOV AX,4C00H ;結(jié)束程序退出 INT 21H EXIT: MOV SP,B RET RUNP ENDP;*RUN BACKWARD* RUNN PROC NEAR
19、 ;負(fù)向控制 A1N: MOV B,SP MOV BX,OFFSET TTABLE ADD BX,07H ;電機(jī)控制字符從最后一位開始取,以實現(xiàn)反向旋轉(zhuǎn) MOV CX,0008H A2N: MOV AL,BX MOV DX,MY8255_C OUT DX,AL MOV SI,3004H MOV DI,SI AND DI,00FFH PUSH BX CASTE1: PUSH DI CALL DIS CALL DALLY CALL CLEAR CALL CCSCAN JNZ EXIT POP DI CMP DI,0 JZ NDEC DEC DI CMP DI,0 JNZ CASTE NNDEC:
20、POP BX DEC BX LOOP A2N MOV AH,1 ;判斷是否有按鍵按下 INT 16H JZ A1N ;無按鍵則跳回繼續(xù)循環(huán),有則退出 MOV AX,4C00H ;結(jié)束程序退出 INT 21H EXITN: MOV SP,B RET RUNN ENDP;* CCSCAN PROC NEAR ;掃描是否有按鍵閉合子程序 MOV AL,00H MOV DX,MY8255_A ;將4列全選通,X1X4置0 OUT DX,AL MOV DX,MY8255_C IN AL,DX ;讀Y1Y4 NOT AL AND AL,0EH ;取出Y1Y4的反值 RET CCSCAN ENDP;* CL
21、EAR PROC NEAR ;清除數(shù)碼管顯示子程序 MOV DX,MY8255_B ;段位置0即可清除數(shù)碼管顯示 MOV AL,00H OUT DX,AL RET CLEAR ENDP;*DISPLAY* DIS PROC NEAR PUSH CX PUSH AX ;以緩沖區(qū)存放的鍵值為鍵值表偏移找到鍵值并顯示 MOV SI,3000H MOV DL,0F7H MOV AL,DL AGAIN: PUSH DX MOV DX,MY8255_A OUT DX,AL ;設(shè)置X1X4,選通一個數(shù)碼管 MOV AL,SI ;取出緩沖區(qū)中存放鍵值 MOV BX,OFFSET DTABLE AND AX,0
22、0FFH ADD BX,AX MOV AL,BX ;將鍵值作為偏移和鍵值基地址相加得到相應(yīng)的鍵值 MOV DX,MY8255_B OUT DX,AL ;寫入數(shù)碼管ADp CALL DALLY1 INC SI ;取下一個鍵值 POP DX MOV AL,DL TEST AL,01H ;判斷是否顯示完? JZ OUT1 ;顯示完,返回 ROR AL,1 MOV DL,AL JMP AGAIN ;未顯示完,跳回繼續(xù) OUT1: POP AX POP CX RET DIS ENDP;*SAVE INPUT INFORMATION* PUTBUF PROC NEAR ;保存鍵值子程序 MOV SI,30
23、05H MOV AH,01H MOV SI,AH MOV SI,DI MOV SI,AL MOV SI,3004H MOV AH,SI MOV AL,AH AND AH,0F0H AND AL,0FH MOV SI-3,AH MOV SI-4,AL RET PUTBUF ENDP;*HARDWARE DELAY*;*SOFTWARE DELAY* DALLY PROC NEAR ;軟件延時子程序 PUSH CX PUSH AX MOV CX,000FH D1: MOV AX,000FH D2: DEC AX JNZ D2 LOOP D1 POP AX POP CX RET DALLY ENDP DALLY1 PROC NEAR ;軟件延時子程序 PUSH CX MOV CX,0FFFH D3: MOV AX,00AFH D4: DEC AX JNZ D4 LOOP D3 POP CX RET DALLY1 ENDP CODE ENDS END ST
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年物流運(yùn)輸合同范本
- 2024年標(biāo)準(zhǔn)款項分配具體合同范本版
- 2025版高考數(shù)學(xué)一輪總復(fù)習(xí)專題檢測11.4抽樣方法與總體分布的估計
- 2024-2025學(xué)年度陜西省西安市藍(lán)田縣大學(xué)區(qū)聯(lián)考高一第一學(xué)期12月月考?xì)v史試題
- 2024-2025學(xué)年度山東省聊城市第二中學(xué)高一第一學(xué)期12月月考?xì)v史試題
- 2024版二手房買賣合同范本與交易合同法律效力3篇
- 2024年二零二四年度土地租賃及智能制造產(chǎn)業(yè)合作協(xié)議范本3篇
- 六盤水師范學(xué)院《SAP企業(yè)培訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年度煤炭供應(yīng)及運(yùn)輸服務(wù)合同2篇
- 2024年度加工承攬合同的加工物描述與質(zhì)量要求3篇
- 語文修改語病-三年(2022-2024)高考病句試題真題分析及 備考建議(課件)
- 中國抗癌協(xié)會胰腺癌患者科普指南2024(完整版)
- 齊魯名家談方論藥 知到智慧樹網(wǎng)課答案
- 2023人工智能基礎(chǔ)知識考試題庫(含答案)
- 小學(xué)語文跨學(xué)科學(xué)習(xí)任務(wù)群的設(shè)計
- 《敬廉崇潔》的主題班會
- 國家開放大學(xué)電大《計算機(jī)應(yīng)用基礎(chǔ)(本)》終結(jié)性考試試題答案(格式已排好)任務(wù)一
- 增值稅預(yù)繳稅款表電子版
- 學(xué)生學(xué)習(xí)評價量表模板
- 高中數(shù)學(xué)必修1課程綱要
- 農(nóng)民工工資支付檢查表
評論
0/150
提交評論