新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于proteus的步進電機控制

        基于proteus的步進電機控制

        作者: 時間:2016-11-26 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/201611/321751.htm

        ;---------------------------------------

        D10ms:

        ……

        ;---------延時程序,鍵盤處理中調用

        KEYPROC:

        MOVA,B;獲取鍵值

        JBACC.2,StartStop;分析鍵的代碼,某位被按下,則該位為1

        JBACC.3,KeySty

        JBACC.4,UpSpd

        JBACC.5,DowSpd

        AJMPKEY_RET

        StartStop:

        SETB StartEnd;啟動

        AJMPKEY_RET

        KeySty:

        CLR StartEnd;;停止

        AJMPKEY_RET

        UpSpd:

        INC SPEED;

        MOVA,SPEED

        CJNEA,#MaxSpd,K1;到了最多的次數?

        DECSPEED;是則減去1,保證下次仍為該值

        K1:

        AJMPKEY_RET

        DowSpd:

        DEC SPEED

        MOVA,SPEED

        CJNEA,#MinSPD,KEY_RET;不等(未到最小值)返回

        MOV SPEED,#MinSpd+1;是則加1,保證下次仍為該值

        KEY_RET:

        RET

        KEY:

        ……獲取鍵值的程序

        RET

        DjZd: ;定時器T1用于電機轉速控制

        PUSH ACC

        PUSH PSW

        MOV A,Speed

        SUBB A,#MinSpd ;減基準數

        MOV DPTR,#DjH

        MOVC A,@A+DPTR

        MOV TH1,A

        MOV A,Speed

        SUBB A,#MinSpd

        MOV DPTR,#DjL

        MOVC A,@A+DPTR

        MOV TL1,A

        MOV A,DjCount

        CPL A

        ORL P1,A

        MOV A,DjCount

        JNB ACC.7,d_Next1

        JMP d_Next2

        d_Next1:

        MOV DjCount,#11110111B

        d_Next2:

        MOV A,DjCount

        RL A

        MOV DjCount,A ;回存

        ANL P1,A

        POP PSW

        POP ACC

        RETI

        DjH: DB 76,82,89,95,100,106,110,115,119,123,12……

        DjL: DB 0,236,86,73,212,0,214,96,163,165

        ……

        DISP:;顯示程序

        POP PSW

        POP ACC

        ……

        RETI

        BitTab: DB 7Fh,0BFH,0DFH,0EFH,0F7H,0FBH

        DISPTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH

        END

        3、程序分析

        本程序主要由鍵盤程序、顯示器程序、步進電機驅動程序三部份組成,主程序首先初始化各變量,將顯示器的高3位消隱,步進電機驅動的各引腳均輸出高電平,然后調用鍵盤程序,并作判斷,如果有鍵按下,則調用鍵盤處理程序,否則直接轉下一步。下一步是將當前的轉速值轉換為BCD碼,送入顯示緩沖區;接著判斷StartEnd這個位變量,是“1”還是“0”,如果是“1”,則開啟定時器T1,否則關閉定時器T1,為防止關閉時某一相線圈長期通電,因此,在關閉定時器T1時,將P1.0~P1.3均置高。至此,主程序的工作即結束。這里為簡便起見,這里沒有做高位“0”消隱的工作,即如果速度為10轉/分,則顯示值“010”,讀者可以自行加入相關的代碼來處理這一工作。

        步進電機的驅動工作是在定時器T1的中斷服務程序中實現的,由前述分析,每次的定時時間到達以后,需要將P1.0~P1.3依次接通,程度中用了一個變量DjCount來實現這一功能,在主程序初始化時,該變量被賦予初值11110111B,進入到定時中斷以后,將該變量取出送ACC累加器,并在累加器中進行左移,這樣,該數值就變為1110 1111,然后將該數與P1相“與”,此時,P1.4即輸出低電平,第二次進入中斷時,先將該數取反,成為0001 0000,然后將該數與P1相“或”,這樣,P1.4即輸出高電平,關斷了相應的線圈,然后將該數重新取出,并作左移,即 1110,1111右移成為1101 1111,將該數與P1相“與”,這樣P1.5即輸出低電平,依次類推,P1.7~P1.4即循環輸出低電平。當這一數據變為0111 1111后,需要作適當的改動,將數據重新變回 1111 0111,進行第二次循環,相關代碼,請讀者自行分析。

        定時時間又是如何確定的呢?這里用的是查表的方法,首先用Excel計算得出在每一種轉速下的TH值和TL值,然后,分別放入DjH和DjL表中,在進入T1中斷程序之后,將速度值變量Speed送入累加器ACC,然后減去基數25,使其基數從0開始計數,然后分別查表,送入TH1和TL1,實現重置定時初值的目的。

        看完這一部份內容以后,請讀者自行完成以下工作:

        1、更改程序,將S1定義為“啟動/停止”,而S2定義為“方向”,按下S2,切換電機旋轉方向。

        2、更改程序,要求轉速從1到100。

        3、更改程序,實現首位無效零消隱。


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 蓝田县| 北海市| 荆门市| 新昌县| 年辖:市辖区| 托克逊县| 常德市| 邢台市| 泰来县| 浑源县| 饶阳县| 泰顺县| 遂昌县| 青田县| 临朐县| 武川县| 屯留县| 甘肃省| 泸定县| 乐平市| 进贤县| 泽普县| 清镇市| 兴城市| 隆德县| 吴旗县| 湖州市| 吴忠市| 理塘县| 嘉义县| 怀远县| 来宾市| 富川| 安平县| 永丰县| 寻乌县| 浦江县| 松江区| 独山县| 洪雅县| 富蕴县|