AT89C55和GAL16V8簡(jiǎn)介
AT89C55是Atmel公司的低電壓、高性能8位單片機(jī),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),引腳兼容工業(yè)標(biāo)準(zhǔn)89C51和89C52芯 片。AT89C55有40個(gè)引腳,32個(gè)外部雙向I/O端口,同時(shí)內(nèi)含2個(gè)外中斷口,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,2個(gè)讀寫口線, 片內(nèi)時(shí)鐘電路。AT89C55采用兩種軟件控制其進(jìn)入省電睡眠模式的靜態(tài)邏輯工作閑置方式設(shè)計(jì),可以用RAM、定時(shí)/計(jì)數(shù)器、串行口和外部中斷喚醒睡眠狀 態(tài)而繼續(xù)工作,在睡眠模式下,RAM被凍結(jié),其他功能全部停止,直至下個(gè)外中斷觸發(fā)或硬件復(fù)位方可開始運(yùn)行。特別是可反復(fù)擦寫的Flash存儲(chǔ)器可有效地 降低開發(fā)成本。
通用陣列邏輯GAL(Generic Array Logic)是美國(guó)Lattice公司研制的一種電可擦除的PLD器件,可以用來(lái)構(gòu)成譯碼器、優(yōu)先級(jí)編碼器、多路開關(guān)、比較器、移位寄存器、計(jì)數(shù)器、總線 仲裁器等。采用GAL16V8器件對(duì)兩相和四相混和式步進(jìn)電機(jī)進(jìn)行控制,不僅簡(jiǎn)化了系統(tǒng)的結(jié)構(gòu),降低了成本,而且編程靈活方便,提高了系統(tǒng)的可靠性,使系 統(tǒng)具有更強(qiáng)的適應(yīng)性。
硬件設(shè)計(jì)
本設(shè)計(jì)選用GALl6V8為環(huán)形脈沖分配器,ULN2003(國(guó)產(chǎn)型號(hào)為5G1413)是七路達(dá)林頓驅(qū)動(dòng)器陣列,是個(gè)集電極開路(OC)輸 出的反向器.最大驅(qū)動(dòng)電流可以達(dá)到500mA。通常應(yīng)用時(shí)是把負(fù)載步進(jìn)電機(jī)的一端接到VDD(12V)上,另一端接到輸出引腳上,如16腳。為了防止程序 進(jìn)入死循環(huán),增加了外部的硬件看門狗定時(shí)器MAX813L,其內(nèi)部的看門狗定時(shí)器監(jiān)控UP/UC的工作。如果在1.6s內(nèi)未檢測(cè)到其工作,內(nèi)部的定時(shí)器將 使看門狗輸出WDO處于低電平狀態(tài),WDO將保持低電平直到在WDI檢測(cè)到UP/UC的工作。將WR和WDO連接可使看門狗超時(shí)產(chǎn)生復(fù)位。采用兩片 ULN2003分別驅(qū)動(dòng)X、Y方向的步進(jìn)電機(jī)。具體硬件電路如圖1所示。
圖1 硬件驅(qū)動(dòng)電路圖
軟件設(shè)計(jì)
步進(jìn)電機(jī)的脈沖控制通常是由邏輯電路實(shí)現(xiàn)的。在計(jì)算機(jī)控制的系統(tǒng)中,也可以通過(guò)編制程序,由擴(kuò)展I/O口輸出脈沖來(lái)決定電機(jī)的運(yùn)行方式、方 向及轉(zhuǎn)速,但這種方式占用CPU的時(shí)間過(guò)多。GAL器件有多種型號(hào),根據(jù)設(shè)計(jì)的需要,同時(shí)從經(jīng)濟(jì)的角度考慮,選用GALl6V8來(lái)實(shí)現(xiàn)四相混和式步進(jìn)電機(jī) 進(jìn)行控制。使用ABEL語(yǔ)言編程,源碼如下。
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 = D1&D2&D3&D4;
F7 = D1&D2&D3&!D4;
F6 = D1&D2&!D3&D4;
F5 = D1&D2&!D3&!D4;
F4 = D1&!D2&D3&D4;
F3 = D1&!D2&D3&!D4;
F2 = D1&!D2&!D3&D4;
F1 = D1&!D2&!D3&!D4;
end motor。
設(shè)置軟件陷阱
當(dāng)程序進(jìn)入到非程序區(qū),只要在非程序區(qū)設(shè)置攔截措施,使程序進(jìn)入陷阱,然后強(qiáng)迫程序回到初始狀態(tài)。如對(duì)CPU的RST指令對(duì)應(yīng)的字節(jié)碼為 0FFH,如果不用的程序存儲(chǔ)區(qū)預(yù)先寫入0FFH,則當(dāng)程序因干擾而“飛”到該區(qū)域執(zhí)行代碼時(shí),就相當(dāng)于執(zhí)行1條RST指令,從 而達(dá)到系統(tǒng)復(fù)位的目的。程序流程如圖2所示。
圖2 軟件程序流程
匯編原碼如下
MOV120: MOV R3,#51H
MOV121: LCALL MOV124 ;12行前進(jìn)程序1
DJNZ R3,MOV121
MOV P1,#0H ;電機(jī)失電
MOV R0,#100
RD08: LCALL DELY
DJNZ R0,RD08
MOV80: MOV R3,#13H
MOV 2CH,#7 ;8列前進(jìn)程序1
MOV81: LCALL MOV84
DJNZ R3,MOV81
MOV P1,#0H ;電機(jī)失電
MOV R0,#10H
RD09: LCALL DELY;測(cè)量單孔程序
DJNZ R0,RD09
SETB ET0;開定時(shí)器0
LCALL COTP; 單孔測(cè)量程序
CLR ET0 ;關(guān)定時(shí)器0
LCALL QUIT
INC 2DH
LCALL D10MS;延時(shí)1ms
LCALL D10MS;延時(shí)1ms
MOV85: MOV R4,#0CH;8列前進(jìn)程序2
MOV83: LCALL MOV86
DJNZ R4, MOV83
MOV P1,#0H
MOV R0,#10H
RD03: LCALL DELY
DJNZ R0,RD03
SETB ET0;開定時(shí)器0
LCALL COTP;單孔測(cè)量程序
CLR ET0 ;關(guān)定時(shí)器0
LCALL QUIT
INC 2DH
LCALL D10MS;延時(shí)1ms
LCALL D10MS
DJNZ 2CH,MOV85;測(cè)量,循環(huán)7次,
CJNE R7,#1,RD02 ;判斷測(cè)量是否完畢
POP 07H
SETB P3.3 ;P3.3=1 high voltage = 450V
LCALL BK080 ;測(cè)量行列完畢,返回初始位置程序
LCALL BK120
LCALL LOCKOFF
RD02: LCALL BK080;8列后退程序
MOV R0,#250
RD0A: LCALL DELY
LCALL DELY
DJNZ R0,RD0A
RD01: MOV R5,#0BH
MOV123: LCALL MOV125 ;12行前進(jìn)程序2
DJNZ R5,MOV123
MOV P1,#0H;電機(jī)矢電
MOV A,R7
MOV 2DH,#0
INC 2EH
DJNZ R7,MOV80;循環(huán)行數(shù)次
結(jié)論
采用此設(shè)計(jì)的步進(jìn)電機(jī)驅(qū)動(dòng)系統(tǒng)具有運(yùn)動(dòng)平穩(wěn)、速度快、控制精度高等優(yōu)點(diǎn),已應(yīng)用于單光子分析計(jì)數(shù)儀的驅(qū)動(dòng)系統(tǒng)。
評(píng)論
查看更多