摘 要:作為混合式步進電機的驅動器,基於L297/298驅動芯片的組合是較為常見的一種。本文較為詳細得論述了基於該種驅動器下混合式步進電機的三種工作模式,給出了相應的單片機接口方案,在該方案中包括了接口的硬件電路與接口的軟件編程。
引言
步進電機是一種將電脈衝轉化為角位移的執行機構。當步進電機驅動器接收到一個脈衝信號,它就驅動步進電機按設定的方向轉動一個固定的角度(即步距角)。通過控制脈衝的個數來控制角位移量,從而達到準確定位的目的;通過控制脈衝頻率來控制電機轉動的速度和加速度,從而達到調速的目的。
步進電機分為三種:永磁式(PM),反應式(VR)和混合式(HB)。永磁式步進電機一般為兩相,轉矩和體積較小,步進角一般為7.5度 或15度;反應式步進電機一般為三相,可實現大轉矩輸出,步進角一般為1.5度,但噪聲和振動都很大;混合式步進電機混合了永磁式和反應式的優點。它分為兩相和五相,兩相混合式步進電機步距角一般為1.8度而五相混合式步進電機步距角一般為 0.72度。其中混合式步進電機的應用最為廣泛。
基於L297/298驅動芯片的兩相雙極性混合式步進電機驅動器(見圖1),採用恆流斬波 圖1:L297/298驅動器方式驅動,每相電流可達2A。其中L297是步進電機控制器,適用於雙極性兩相步進電機或單極性四相步進電機的控制。用L297輸出信號可控制L298雙橋驅動集成電路,用來驅動電 壓最高為46V,總電流為4A以下的步進電機。L297也可用來控制由達林頓管組成的分立電路,以驅動更高電壓,更大電流的步進電機。L297只需要時鐘、方向和模式輸入信號,相位由內部產生,從而減輕了微處理器和程序設計的負擔。L297採用固定斬波頻率的PWM恆流斬波方式工作。L297主要由譯碼器,兩個固定斬波頻率的PWM恆流斬波器以及輸出控制邏輯組成[2]。L298是用來驅動步進電機的集成電路,採用雙全橋接方式驅動,由於是雙極性驅動,步進電機的定子勵磁繞組線圈可以完全利用,使步進電機達到最佳的驅動[3]。
原理
基於L297/298驅動器的混合式步進電機有三種不同的工作模式:即半步模式(HALF STEP)(見圖2)、整步一相勵磁模式(FULL STEP ONE PHASE ON)(見圖3)、整步兩相勵磁模式(FULL STEP TWO PHASE ON)(見圖4)。步進電機工作於半步模式時,其內部定子繞組的勵磁是一相與兩相相間的,此時步進電機每接受一個脈衝,只轉過半個步距角。步進電機工作於半步模式時,步進電機所獲得的轉距較常規值偏小。步進電機工作於整步一相勵磁模式時,其內部定子繞組的勵磁在任何一個時刻都是一相的,此時步進電機每接受一個脈衝,轉過一個步距角。步進電機工作於整步一相勵磁模式時,步進電機獲得常規轉距。步進電機工作於整步兩相勵磁模式時,其內部定子繞組的勵磁在任何一個時刻都是兩相的,此時步進電機每接受一個脈衝,轉過一個步距角。步進電機工作於整步兩相勵磁模式時,步進電機獲得的轉距相對前兩種而言是最大的。
/**********************************************************************/
L297/298芯片混合式步進電機驅動器
簡要說明:
一、 尺寸:71mmX43mmX28mm
二、 主要芯片:L297、L298N
三、 工作電壓:控制信號直流4.5~5.5V;電機電壓直流5V~30V
四、 最大工作電流:2A
五、 額定功率25W
六、特點: 1、具有電源指示。
2、轉速可調
3、抗干擾能力強
4、具有續流保護和過電流保護
5、可單獨控制一台步進電機
6、可控制兩相和四相步進電機
七、提供例程及其學習資料
[實物圖片]
[標注圖片]
[電機控制接線圖]
/****************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar Y=10; //初始化速度
/********************************************************
控制位定義
********************************************************/
sbit shi_neng=P1^0; // 使能控制位
sbit fang_shi=P1^1; // 工作方式控制位
sbit fang_xiang=P1^2;// 旋轉方向控制位
sbit mai_chong=P1^3; // 脈衝控制位
sbit zheng_zhuan=P2^0; // 正轉
sbit fan_zhuan=P2^1; // 反轉
sbit jia_su=P2^2; // 加速
sbit jian_su=P2^3; // 減速
/********************************************************
延時函數
********************************************************/
void delay(uchar i)//延時函數
{
uchar j,k;
for(j=0;j<i;j++)
for(k=0;k<250;k++);
}
/********************************************************
加速函數
********************************************************/
void jia()
{
Y=Y-1;
if(Y<=1){Y=1;}//如果速度值小於等於1,值保持不變
}
/********************************************************
減速函數
********************************************************/
void jian()
{
Y=Y+1;
if(Y>=100){Y=100;}
}
/********************************************************
主函數
********************************************************/
main()
{
shi_neng=1; // 使能控制位
fang_shi=1; // 工作方式控制位
fang_xiang=1;// 旋轉方向控制位
mai_chong=1; // 脈衝控制位
while(1)
{
if(zheng_zhuan==0){fang_xiang=1;}
if(fan_zhuan==0){fang_xiang=0;}
if(jia_su==0){delay(10);while(!jia_su);jia();}
if(jian_su==0){delay(10);while(!jian_su);jian();}
mai_chong=~mai_chong; //輸出時鐘脈衝
delay(Y); //延時(括號內數值越小,電機轉動速度越快)
}
}
/****************************************/