單片機步進電機_第1頁
單片機步進電機_第2頁
單片機步進電機_第3頁
單片機步進電機_第4頁
單片機步進電機_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、大連理工大學本科設計報告題目: 步進電機轉速控制系統(tǒng)設計 步進電機轉速控制系統(tǒng)設計一、 設計要求使用步進電機作為被控制對象;由ZLG7290做人機對話平臺;利用單片機的P1(8位)和P3(部分口線)構造系統(tǒng)。利用ZLG7290的鍵盤控制直流電機,也可以利用ADC模塊(與電位器配合),利用電位器控制轉速;利用ZLG7290的8位LED數碼管顯示電機轉向、轉速參數顯示。二、 設計分析及系統(tǒng)方案設計系統(tǒng)分析: 程序為無限循環(huán)結構。先調用A/D轉換程序,再調用BCD轉換程序,利用ZLG7290不斷顯示數碼管的數字,中斷程序包括鍵盤輸入電機旋轉方向,電位器控制電機轉速。算法描述:1)30H-37H(DA

2、TA1):顯示緩沖區(qū),裝載待顯示的字形碼,實驗中只用到4個數碼管,分別是30H,31H,34H,35H,不需要的32H,33H,36H,37H賦熄滅碼#00H。不斷調用WRNBYT子程序將數據寫入ZLG7290的10H-17H,顯示數據。2)單雙八拍相序放在20H-27H中,高四位都賦F,這樣不會影響低四位步進電機相序節(jié)拍信號的輸出,為接下來中斷控制方向和轉速做準備。3)設定定時器T1定時方式1,TH1和TL1賦初值#00H(TH1原始為#00H),A/D轉換的數據傳送給TH1,每當T1定時時間到時,通過P1口的低四位(P1.0-P1.3)發(fā)出步進電機的一個相序節(jié)拍,定時時間的改變就可改變電機

3、轉動的速度。4)拆分子程序。將累加器A中的數據拆分為兩個四位16進制數并查表,為顯示方向和電機速度做準備。5)中斷服務程序INT_7290,2A-2D裝載從ZLG7290的00H單元開始讀出的連續(xù)4個字節(jié)數據,其中2BH中的就是鍵值。當S1或S2鍵按下時,利用ZLG7290的/INT信號引發(fā)單片機的一個中斷,取鍵值后調用拆分查表程序將方向顯示在數碼管上。其中S1鍵按下電機逆時針轉動,S2鍵按下電機順時針轉動。6)控制轉速子程序T1_INT,將A/D轉換結果送給累加器A,低四位清零后送給定時器高八位,判斷方向位,利用CJNE命令,若方向位是1則執(zhí)行接下來的語句,若不是則跳轉到LOOP11,再判斷

4、時候等于2,若是則執(zhí)行下來的語句,若不是則跳轉到DO,不做任何操作,即電機停止轉動。7)A/D轉換子程序,將轉換結果送3FH中,再經過數據濾波,采集256次相加再取高8位數據即為平均值送3EH中。8)BCD轉換子程序,將3EH中數據與#0F0相與,取出高四位,再半字節(jié)交換,寄存器B中送10,相除后A中為十位數,B中為個位數,在此調用拆分子程序查表的相應字形碼后送30H,31H顯示。三、系統(tǒng)電路圖四、 外圍接口模塊硬件電路功能描述步進電機是一種將脈沖信號變換成相應角位移或線位移的電磁裝置,當有脈沖輸入時步進電機一步一步的轉動,每給一個脈沖信號,就轉過一定的角度。步進電動機的角位移量和輸入脈沖的個

5、數嚴格成正比,在時間上與輸入脈沖同步,因此只要控制輸入脈沖的數量、頻率及電動機繞組通電的相序,便可獲得所需的轉角、轉速及轉動方向。ZLG7290B:ZLG7290B是數碼管動態(tài)顯示驅動、鍵鍵盤掃描管理芯片。能夠驅動8位共陰極結構的LED數碼管或64位獨立的LED,同時還能掃描管理多達64個按鍵(S1-S56、F0-F7)的掃描識別。本實驗用到了4個數碼管顯示方向和速度,兩個按鍵S1,S2控制方向的改變。TLC549是被廣泛應用的CMOS8位A/D轉換器。該芯片有一個模擬輸入端口,三態(tài)的數據串行輸出接口可以方便地和微處理器或外圍設備連接。TLC549僅僅使用輸入/輸出時鐘和芯片選擇信號控制數據。

6、本實驗中通過電位器將連續(xù)的模擬的電阻值經過TLC549轉換成8為二進制數字信號。五、 主程序中主要變量定義變量名稱RAM單元/寄存器功能DATA130H顯示緩沖區(qū)首地址20H相序首地址28HA/D轉換數據濾波求和中的高八位29HA/D轉換數據濾波求和中的低八位2AH-2DH讀出的ZLG7290de 00H-03H數據存放地址2EH相序循環(huán)次數8FX2FH控制轉向標志3CH相序列表中最后一個相序地址3DH相序列表中第一個相序地址3EH濾波結果存放地址3FHA/D轉換結果存放地址六、系統(tǒng)軟件中各個子程序的功能描述子程序名稱入口參數出口參數功能 描述CFR3、R4R3、R4將數據拆分為兩位16進制數

7、查表得對應字形碼INT_7290R0、R7、R2、R3、R4R3、R4顯示電機轉動方向T1_INT3FHA控制電機轉動速度ADZH無A模擬信號轉換為數字信號BCD_CONTAR3、R416進制數轉換為10進制數DELAYR0、R1R0、R1延時子程序使顯示穩(wěn)定RDADDR0,R2,R3,R4,R7R0到R0+7多字節(jié)讀操作WRNBYTR0,R2,R3,R7無多字節(jié)寫操作STA無無I²C啟動信號STOP無無I²C停止信號MACK無無發(fā)送I²C應答信號MNACK無無發(fā)送I²C非應答信號CACK無F0I²C應答檢測WRBYTA無I²C發(fā)送一

8、個字節(jié)RDBYT無R2I²C接收一個字節(jié)七、主程序程序流程圖T1定時時間到/INT0主程序入口TL1賦初值#00HTH 1賦AD轉換結果讀出ZLG7290B內部00H-03H的數據于2A-2D中對ZLG7290B復位開INT0,T1中斷NFX=#01?設定T1工作方式和初值NY取鍵值、拆分查表建立相序表FX=#02?逆時針轉相序加1送顯示緩沖區(qū)Y建立變量緩沖區(qū)停止順時針轉相序減1RETIAD轉換模塊INT_7290中斷服務子程序BCD轉換模塊調WRNBYT寫入數據到ZLG7290的顯示緩沖區(qū)NDJNE 3EHMOV 3EH,#08HMOV 3DH,#20HMOV 3CH,#27H延時

9、子程序Y主程序流程圖DORETIT1_INT中斷服務子程序八、程序清單;#ADC模塊連線#DATBITP3.3CLKBITP3.4CSBITP3.5;#鍵盤控制模塊連線#SDABITP1.4SCLBITP1.5 WSLAEQU070HRSLAEQU071HFXEQU2FH;將控制轉向標志放在2FH單元DATA1EQU30H;變量緩沖區(qū)的首地址;*ORG8000HLJMP8100HORG8003HLJMPINT_7290;控制轉向的中斷服務程序ORG801BHLJMPT1_INT;控制轉速的中斷服務程序;*; 初始化部分 ;*ORG8100HSTART: MOVSP,#60HCLRP1.7 ;7

10、290復位LCALLDELAYSETBP1.7SETBEA ;開INT0中斷SETBEX0SETBIT0 ;觸發(fā)極性為下降沿 SETBET1;開T1中斷SETBTR1MOVTMOD,#10H;設定定時器T1工作方式及初值MOVTH1,#00HMOVTL1,#00HMOV3DH,#20HMOV3CH,#27HMOV2EH,#08HMOVFX,#00HMOV20H,#0F8H;相序放在20H27H中MOV21H,#0FCHMOV22H,#0F4HMOV23H,#0F6HMOV24H,#0F2HMOV25H,#0F3HMOV26H,#0F1HMOV27H,#0F9H;*MOV 34H,#0DAH M

11、OV 35H,#0FCH;用34H、35H顯示FLAG;用30H31H顯示ADC轉換結果MOVDATA1+7,#00H;熄滅MOVDATA1+6,#00H;熄滅MOVDATA1+3,#00H;熄滅MOVDATA1+2,#00H;*;向7290B寫入數據;*LOOP:LCALLADZH;數據濾波LCALLBCD_CONT;轉換成十進制MOVR7,#08HMOVR2,#10HMOVR3,#WSLAMOVR0,#DATA1LCALLWRNBYT;調顯示子程序LCALLDELAY ;使顯示穩(wěn)定 SJMPLOOP ;*LEDSEG:DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0

12、E4H;0-7的字形碼DB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH;8-F的字形碼DB0FAH,1EH,12H,00H;a,t,= 和熄滅碼;*;拆分程序(將A中的數據拆分為兩個四位16進制數并查表);( 結果在R4、R3中 ) ;*CF:PUSH02H ;將A中的數據拆分為兩個四位16進制數并查表PUSHDPH PUSHDPLMOVDPTR,#LEDSEGMOVR2,AANLA,#0FHMOVCA,A+DPTRMOVR3,AMOVA,R2SWAPAANLA,#0FHMOVCA,A+DPTRMOVR4,APOPDPLPOPDPHPOP02HRET ;*; 中斷服務程

13、序 INT_7290:(INT0),顯示FLAG值;*INT_7290:PUSH00HPUSH02HPUSH03HPUSH04HPUSH07HPUSHACCPUSHPSWMOVR0,#2AH;狀態(tài)數據區(qū)首址MOVR7,#04H;取狀態(tài)數據個數MOVR2,#00H ;內部數據首地址MOVR3,#WSLA;取器件地址(寫)MOVR4,#RSLA;取器件地址(讀) LCALLRDADD;讀出7290的00H-03H數據存于2AH-2DH NOP;設定一個斷點,以觀察讀出的4個數據MOVFX,2BH;取健值,存放在2BH內MOVA,FX;顯示FLAGLCALLCF;拆分、查表MOVDATA1+4,R3

14、MOVDATA1+5,R4POPPSWPOPACCPOP07HPOP04HPOP03HPOP02HPOP00HRETI;*; 中斷服務程序 改變轉向;*T1_INT:PUSH00HPUSH01HMOVR0,3DHMOVR1,3CHMOVTL1,#00HMOVA,3FHANLA,#0F0HMOVTH1,ALOOP1:MOVA,FXCJNEA,#01H,LOOP11;若FLAG=02H則跳轉到LOOP11,左循環(huán),逆時針MOVA,R0MOVP1,AINC3DHSJMPLOOP12LOOP11: CJNEA,#02H,DOMOVA,R1MOVP1,ADEC3CHLOOP12:DJNZ2EH,DO;一

15、個相序周期完成MOV2EH,#08HMOV3DH,#20HMOV3CH,#27HDO:POP01HPOP00HRETI;#ADC的相關子程序#ADZH: PUSH00HPUSH02HLOOP2:MOV R2,#0FFHLCALLTLC549_ADCMOVA,3FHMOV29H,AMOV28H,#00H;放累加和高八位的內存單元28H清0LOOP20:LCALLTLC549_ADCCLRCADDA,29HMOV29H,A;29H放低位MOVA,#00HADDCA,28HMOV28H,A;28H放高位DJNZR2,LOOP20MOV3EH,A;將數據濾波的結果放在3EH中POP02HPOP00HR

16、ETTLC549_ADC:PUSH07HCLRACLRCLKMOVR7,#08HCLRCSLOOP3: SETBCLKMOVC,DATRLCACLRCLKDJNZR7, LOOP3MOV3FH,A;將ADC轉換的結果放在3FH中SETBCSCLRCLKPOP07HRET;*BCD_CONT: PUSH07HPUSH06HPUSH05HPUSH02HMOVA,3EH ANL A,#0F0H SWAP AMOVB,#0AH;B中放入10DIVABMOVR6,A;R6中得十位數 MOVR5,B;R5中得個位數MOVA,R6LCALLCF;調拆分子程序(入口A出口R4,R3-字形碼)MOVDATA1+

17、1,R3MOVA,R5LCALLCF;調拆分子程序(入口A出口R4,R3-字形碼)MOVDATA1+0,R3POP02HPOP05HPOP06HPOP07HRET DELAY:PUSH00HPUSH01HMOVR0,#00HDELAY1:MOVR1,#00HDJNZR1,$DJNZR0,DELAY1POP01HPOP00HRET;*;通用的I2C通訊子程序;相關子程序WRBYT、STOP、CACK、STA;*WRNBYT:PUSHPSWPUSHACCWRADD:MOVA,R3;取外圍器件地地址(包含r/w=0)LCALLSTA;發(fā)送起始信號S LCALLWRBYT;發(fā)送外圍地址LCALLCAC

18、K;檢測外圍器件的應答信號JBF0,WRADD;如果應MOVA,R2LCALLWRBYT;發(fā)送內部寄存器首地址LCALLCACK;檢測外圍器件的應答信號JBF0,WRADD;如果應答不正確返回重來 WRDA:MOVA,R0LCALLWRBYT;發(fā)送外圍地址LCALLCACK;檢測外圍器件的應答信號JBF0,WRADD;如果應答不正確返回重來INCR0DJNZ R7,WRDALCALLSTOP POPACCPOPPSWRET ;*;通用的I2C通訊子程序(多字節(jié)讀操作);入口參數R7字節(jié)數;;R0目標數據塊首地址;R2從器件內部子地址;;R3器件地址(寫);R4器件地址(讀);相關子程序WRBY

19、T、STOP、CACK、STA、MNACK ;*RDADD: PUSHPSW;從PCF8563的02H單元讀入7個參數PUSHACC;存放于20H-26H單元RDADD1:LCALLSTA MOVA,R3;取器件地址(寫)LCALLWRBYT;發(fā)送外圍地址LCALLCACK;檢測外圍器件的應答信號JBF0,RDADD1;如果應答不正確返回重來MOVA,R2;取內部地址LCALLWRBYT;發(fā)送外圍地址LCALLCACK;檢測外圍器件的應答信號JBF0,RDADD1;如果應答不正確返回重來LCALLSTAMOVA,R4;取器件地址(讀)LCALLWRBYT;發(fā)送外圍地址LCALLCACK;檢測外

20、圍器件的應答信號JBF0,RDADD1;如果應答不正確返回重來RDN:LCALLRDBYT MOVR0,ADJNZR7,ACKLCALLMNACKLCALLSTOPPOPACCPOPPSWRETACK:LCALLMACKINCR0SJMPRDN ;(3)I2C各個信號子程序;*;啟動信號子程序S ;*STA:SETBSDA;啟動信號SSETBSCLNOP;產生4.7US延時NOPNOPNOPNOPCLRSDANOP;產生4.7US延時NOPNOPNOPNOP CLRSCLRET ;*;停止信號子程序P ;*STOP:CLRSDA ;停止信號PSETBSCLNOP;產生4.7US延時NOPNOP

21、NOPNOPSETBSDANOP;產生4.7US延時NOPNOPNOPNOPCLRSCLCLRSDARET ;*;應答信號子程序 MACK;*MACK:CLRSDA;發(fā)送應答信號ACKSETBSCLNOP;產生4.7US延時NOPNOPNOPNOPCLRSCLSETBSDARET;*;非應答法信號子程序MNACK;*MNACK:SETBSDA;發(fā)送非應答信號NACKSETBSCLNOP;產生4.7US延時NOPNOPNOPNOPCLRSCLCLRSDARET;*;應答檢測子程序CACK;*CACK:SETBSDA;應答位檢測子程序SETBSCL CLRF0MOVC,SDA;采樣SDAJNCCE

22、ND;應答正確時轉CENDSETBF0;應答錯誤時F0置一CEND:CLRSCLRET;*;發(fā)送一個字節(jié)子程序WRBYT;*WRBYT:PUSH06HMOVR6,#08H;發(fā)送一個字節(jié)子程序 WLP:RLCA ;(入口參數A)MOVSDA,CSETBSCLNOP;產生4.7US延時NOPNOPNOPNOPCLRSCLDJNZR6,WLPPOP06HRET;*;接收一個字節(jié)子程序RDBYT ;*RDBYT: PUSH06HMOVR6,#08H;接收一個字節(jié)子程序RLP:SETBSDASETBSCL; *NOP;!產生大于15微秒的延時!NOP ;注意這是專門為ZLG7290NOP ;添加的20微秒延時部

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論