摘 要:本文運用AT89C51單片機、鍵盤和LED專用智能控制芯片HD7279A、步進電機環形分配器L297、步進電機驅動器L298N構成了一套步進電機轉臺控制系統,實現單片機識別并輸出顯示鍵盤輸入的數據信息(轉角)并產生連續脈沖控制步進電機轉動,進而帶動轉動臺轉動的任務。
關鍵詞:單片機,步進電機驅動
一、前言
在進行熱對流式加速度傳感器溫度特性研究中,需將傳感器系統放置在一個可在縱向進行三百六十度旋轉的旋轉臺上,并將旋轉臺放入恒溫試驗箱中,利用當旋轉臺旋轉時傳感器敏感面方向感受的重力加速度發生變化這一現象,檢測傳感器的靈敏度的變化。為使測量數據可靠,控制系統采用步進電動機作為驅動,通過控制轉動的步數(角度),使轉動臺轉過一個角度,待傳感器的輸出數據穩定以后即可記錄有關數據。為實現這一功能,研制了用單片機控制的步進電機轉臺。
二、系統的總體設計
步進電動機工作,需要步進電機線圈的勵磁信號,還需要功率放大器根據該信號產生驅動電流。專門為步進電機設計的環形分配器和功率驅動器可以實現這種功能。
通過鍵盤輸入控制信息,包括電機的轉向、轉角等。單片機接收這些信息并產生相應的控制信號傳送給電機控制器;同時單片機還要控制多位數碼管顯示鍵盤所輸入的信息和實際轉動的情況。
根據實際需要,人機交互通過4×4行列式鍵盤和一對4聯LED數碼管來實現;按鍵輸入與LED顯示器由控制芯片HD7279A來控制;單片機選用AT89C51 Flash單片機;由于測量范圍并不要求傾斜角度變化的分度非常細密,選用成本較低的兩相步進電動機42BYG121,其步進角為1.8度,通過半步驅動方式進行細分可獲得0.9度的步進角;環形分配器和電機驅動器選用L297和L298N芯片,由L297將單片機給出的連續脈沖轉換成步進電機所要求的相繞組脈沖序列;再由L298N對相脈沖信號進行放大,驅動步進電機轉動。
最終系統總體方案如圖1所示。
圖1 控制系統結構框圖
系統的工作過程如下:系統利用鍵盤輸入數值,通過HD7279A芯片將輸入的按鍵鍵值傳送到單片機,單片機識別鍵值所代表的是數據還是功能鍵,或者傳送數據經過HD7279A驅動LED數碼管顯示,或者根據輸入數值確定步進電機的轉角,輸出一定的脈沖信號,并由L297轉換成步進電動機各相的相脈沖,經過L298N放大驅動步進電動機,由步進電動機帶動機械部分轉動。
三、主要接口與編程實現
數據輸入與顯示接口芯片采用HD7279A,它是一個具有串行接口的,可同時驅動8位共陰式LED數碼管的智能顯示驅動芯片,該芯片同時還可連接多達64鍵的鍵盤矩陣,單片即可完成LED顯示、鍵盤接口的全部功能。HD7279A內含譯碼器,可直接接受BCD碼或16進制碼,并同時具有2種譯碼方式,此外還具有多種控制指令,如消隱、閃爍、左移、右移、段尋址等。
HD7279A的控制指令分為二大類:純指令和帶有數據的指令。純指令包括測試、移位顯示、復位等,共計六條,對應的控制碼是從0xBF到0xA4;帶數據的指令包括顯示數據、消隱控制、讀出鍵碼等,指令格式是控制字+數據。
用C51編程,實現對HD7279A發送一個字節的指令或數據的例程如下:
void send_byte( unsigned char out_byte){
unsigned char i;
cs=0;
long_delay();
for (i=0;i<8;i++){
if (out_byte&0x80)
dat=1;
else
dat=0;
clk=1;
short_delay();
clk=0;
short_delay();
out_byte=out_byte*2;
}
dat=0;
}
發送帶數據的指令可利用下面的例程來實現:
void write7279(unsigned char cmd, unsigned char dta){
send_byte (cmd);
send_byte (dta);
}
從HD7279A讀出數據的例程如下:
unsigned char read7279(unsigned char command){
send_byte(command);
return(receive_byte());
}
定義有關的命令字如下:
#define CMD_RESET 0xa4
#define DECODE0 0x80
#define DECODE1 0xc8
#define CMD_READ 0x15
#define UNDECODE 0x90
#define BLINKCTL 0x88
……
要控制與HD7279A連接的LED,利用下面的程序行即可實現:
send_byte(CMD_RESET); //復位HD7279A
write7279(BLINKCTL,0xf8); //第1、2、3 位設置為閃爍顯示
write7279(UNDECODE,0X08); //在第1位顯示下劃線
write7279(DECODE0,value); //按0方式解碼顯示數字
write7279(DECODE1,value); //按1方式解碼顯示數字
環形分配器L297的核心是脈沖分配器,它可以產生三種相序信號,對應于三種不同的工作方式:半步方式,一相激勵方式,兩相激勵方式。它接收來自控制器的信號有: CW/ CCW 正/反轉(17腳),HALF/ FULL 半步/基本步距(19腳),STEP 步進脈沖(18腳)。為了在現有硬件基礎上達到最佳的使用效果,步進電機按半步方式運轉,此時L297的工作時序如圖2所示:


系統選用的功率放大器L298N,是一種H型雙極性驅動器,D1~D4四個二極管組成橋式續流回路。使用上述H橋功放,每相繞組必須用一個H橋。L298N為雙H橋高電壓大電流功率集成電路,可用來驅動繼電器、線圈、直流電動機和步進電動機等電感性負載。L297步進電機控制器與L298N雙H橋驅動器組成典型的集成步進電機微控制器。其連接電路如圖3所示。其中8個二極管D1~D8為與L298N芯片及步進電動機連接,組成H橋的續流電路。
四、系統控制的實現
圖4
為了方便控制與編程,按鍵的響應方式采用中斷方式,在有按鍵按下時HD7279將發出一個低電平信號觸發中斷,在中斷處理程序中完成對按鍵的響應,給出相應的顯示和控制。程序框圖如右圖示。
按上述方案實現的步進電機轉臺控制器,能夠方便地輸入轉動角度和轉動方向,在轉動的同時也能準確指示轉過角度和方向,取得了良好的效果。