新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于89C55和GAL16V8,MC1413的步進電機驅動器的設計

        基于89C55和GAL16V8,MC1413的步進電機驅動器的設計

        作者: 時間:2012-01-09 來源:網絡 收藏

          引言

          步進電機廣泛應用于對精度要求比較高的運動控制系統中,如機器人、打印機、軟盤驅動器、繪圖儀、機械閥門控制器等。目前,對步進電機的控制主要有由分散器件組成的環形脈沖分配器、軟件環形脈沖分配器、專用集成芯片環形脈沖分配器等。分散器件組成的環形脈沖分配器體積比較大,同時由于分散器件的延時,其可靠性大大降低;軟件環形分配器要占用主機的運行時間,降低了速度;專用集成芯片環形脈沖分配器集成度高、可靠性好,但其適應性受到限制,同時開發周期長、需求費用較高。
          
          和GAL16V8

          是Atmel公司的低電壓,高性能CMOS 8 位單片機,片內含20k bytes的可反復擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數據存儲器(RAM),器件采用Atmel公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統,引腳兼容工業標準 89C51和89C52芯片,采用通用編程方式,片內置通用8位中央處理器和Flash存儲單元,內置功能強大的微處理器的AT可提供許多高性價比的解決方案,適用于多數嵌入式應用系統。

          通用陣列邏輯GAL是美國Lattice公司研制的一種電可擦除的可編程的新型PLD器件。近幾年來,GAL以其高性能、高可靠性、可擦除及輸出邏輯結構可組態等特性和100%的成品率,博得廣大用戶的信賴。它可以用來構成譯碼器、優先級編碼器、多路開關、比較器、移位寄存器、計數器、總線仲裁器等。采用GAL16V8器件對兩相和四相混和式步進電機進行控制,不僅簡化了系統的結構,降低了成本,而且編程靈活方便,提高了系統的可靠性,使系統具有更強的適應性。
          
          硬件設計

          本設計選用GALl6V8為環形脈沖分配器和MC1413(國產型號為5G1413)七路達林頓驅動器陣列。最大驅動電流可以達到500mA.通常應用時是把負載步進電機的一端接到VDD(12V)上,另一端接到輸出引腳上,如16腳。了防止程序進入死循環,增加了外部的硬件看門狗定時器MAX813L,其內部的看門狗定時器監控UP/UC的工作。如果在1.6s內未檢測到其工作,內部的定時器將使看門狗輸出WDO處于低電平狀態,WDO將保持低電平直到在WDI檢測到UP/UC的工作。將WR和WDO連接可使看門狗超時產生復位。具體硬件電路如圖1所示。

        基于89C55和GAL16V8,MC1413的步進電機驅動器的設計

          軟件設計

          通常,步進電機的脈沖控制是由邏輯電路實現的。在計算機控制的系統中,也可以通過編制程序,由擴展I/O口輸出脈沖來決定電機的運行方式、方向及轉速。這種方式電路簡單、控制靈活,但占用CPU的時間過多,每次驅動電機時,PC機都得被占用。GAL器件有多種型號,根據設計的需要,同時從經濟的角度考慮,選用GALl6V8來實現四相混和式步進電機進行控制。使用ABEL語言編程,原碼如下:

        module motor
        title
        Operation of the simulator on devices with
        motor
           DATA I/O Corp. 21 10 2002
           FB1 device 'P16V8R';
           D1,D2,D3,D4 pin 2,3,4,5;
           F1,F2,F3,F4,F5,F6,F7,F8 pin
        19,18,17,16,15,14,13,12;
          equations
           F8 = D1D2D3D4;
           F7 = D1D2D3!D4;
           F6 = D1D2!D3D4;
           F5 = D1D2!D3!D4;
           F4 = D1!D2D3D4;
           F3 = D1!D2D3!D4;
           F2 = D1!D2!D3D4;
           F1 = D1!D2!D3!D4;
        end motor。

          設置軟件陷阱

          當程序進入到非程序區,只要在非程序區設置攔截措施,使程序進入陷阱,然后強迫程序回到初始狀態。如對CPU的RST指令對應的字節碼為 0FFH,如果不用的程序存儲區預先寫入0FFH,則當程序因干擾而“飛”到該區域執行代碼時,就相當于執行1條RST指令,從而達到系統復位的目的。

          程序流程圖如圖2。

        基于89C55和GAL16V8,MC1413的步進電機驅動器的設計

          匯編原碼如下:

          MOV120: MOV R3,#51H
          MOV121: LCALL MOV124 ;12
        行前進程序1
           DJNZ R3,MOV121
           MOV P1,#0H ;電機矢電
          MOV R0,#100
          RD08: LCALLDELY
          DJNZ R0,RD08
          MOV80: MOV R3,#13H
           MOV 2CH,#7 ;8列前進程
        序1
          MOV81: LCALL MOV84
           DJNZ R3,MOV81
           MOV P1,#0H ;電機矢電
           MOVR0,#10H
          RD09: LCALLDELY ;測量單
        孔程序
           DJNZR0,RD09
           SETBET0; 開定時器0
          LCALLCOTP ; 單孔測量程序
          CLRET0;關定時器0
          LCALLQUIT
          INC2DH
          LCALLD10MS ;延時1毫秒
          LCALLD10MS ; 延時1毫秒
          MOV85: MOV R4,#0CH ;8列前
        進程序2
          MOV83: LCALL MOV86
           DJNZ R4, MOV83
           MOV P1,#0H
           MOV R0,#10H
          RD03: LCALLDELY
          DJNZR0,RD03
           SETBET0;開定時器0
          LCALLCOTP;單孔測量程序
          CLR ET0 ;關定時器0
          LCALLQUIT
          INC2DH
          LCALLD10MS;延時1毫秒
          LCALLD10MS
           DJNZ 2CH,MOV85 ;測量,循
        環7次,
           CJNE R7,#1,RD02 ;判斷測量
        是否完畢
           POP07H
          SETB P3.3 ;P3.3=1
        high voltage = 450V
          LCALL BK080 ;測量行列
        完畢,返回初始位置程序
          LCALL BK120
          LCALL LOCKOFF
          RD02: LCALLBK080 ;8列后
        退程序
           MOVR0,#250
          RD0A: LCALLDELY
           LCALL DELY
             DJNZR0,RD0A
          RD01: MOV R5,#0BH
          MOV123: LCALL MOV125 ;12行
        前進程序2
           DJNZ R5,MOV123
           MOV P1,#0H ;電機矢電
           MOVA,R7
          MOV2DH,#0
          INC2EH
          DJNZR7,MOV80 ;循環行數次
          
          結語

          采用此設計的步進電機驅動系統,運動平穩,速度快,控制精度高,該產品已應用于哈爾濱思創生物的單光子分析計數儀的驅動系統。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 兰西县| 文成县| 肥城市| 阿鲁科尔沁旗| 青河县| 竹北市| 广水市| 淳化县| 宜丰县| 罗江县| 平安县| 饶阳县| 清水河县| 赤水市| 紫阳县| 丁青县| 定州市| 大化| 鄂尔多斯市| 罗城| 定安县| 长沙市| 菏泽市| 乌拉特后旗| 南投市| 澄江县| 闽清县| 顺平县| 桃园市| 铁力市| 石阡县| 武清区| 远安县| 叶城县| 福清市| 湖南省| 温泉县| 新河县| 苏尼特右旗| 开封市| 怀化市|