❶ 步進電機單片機控制系統
由於不知道怎麼發圖片,沒有圖片。如果想要你採用我的回答,你發EMAIL到[email protected]我回復你。同時再給你1-2篇關於步進電機驅動的論文和資料。希望對你有所幫助
基於L297/L298晶元步進電機的單片機控制
1 引言
步進電動機是一種將電脈沖信號轉換成角位移或線位移的精密執行元件,由於步進電機具有控制方便、體積小等特點,所以在數控系統、自動生產線、自動化儀表、繪圖機和計算機外圍設備中得到廣泛應用。微電子學的迅速發展和微型計算機的普及與應用,為步進電動機的應用開辟了廣闊前景,使得以往用硬體電路構成的龐大復雜的控制器得以用軟體實現,既降低了硬體成本又提高了控制的靈活性,可靠性及多功能性。市場上有很多現成的步進電機控制機構,但價格都偏高。應用SGS公司推出的L297和L298兩晶元可方便的組成步進電機驅動器,並結合AT89C52單片機進行控制,即可以實現用相對便宜的價格組成一個性能不錯的步進電機驅動電路。
2 工作原理
由於步進電機是一種將電脈沖信號轉換成直線或角位移的執行元件,它不能直接接到交直流電源上,而必須使用專用設備-步進電機控制驅動器 典型步進電機控制系統如圖1所示:控制器可以發出脈沖頻率從幾赫茲到幾十千赫茲可以連續變化的脈沖信號,它為環形分配器提供脈沖序列。環形分配器的主要功能是把來自控制環節的脈沖序列按一定的規律分配後,經過功率放大器的放大加到步進電機驅動電源的各項輸人端,以驅動步進電機的轉動。環形分配器主要有兩大類:一類是用計算機軟體設計的方法實現環分器要求的功能,通常稱軟環形分配器。另一類是用硬體構成的環形分配器,通常稱為硬環形分配器。功率放大器主要對環形分配器的較小輸出信號進行放大.以達到驅動步進電機目的。
圖1 典型步進電機控制框圖
3 硬體組成
文中所控制的步進電機是四相單極式35BY48HJ120減速步進電動機。本文所設計的步進電機控制驅動器的框圖如圖2所示。它由AT89C52單片機、光電耦和器、集成晶元L297和L298組成。AT89C52是美國ATMEL的低電壓、高性能8位CMOS單片機。片內置8K位元組可重復擦寫的
Flash閃速存儲器。256位元組RAM。3個16位定時器.可編程串列UART通道。對完成步進電機的簡單控制已足以勝任。
圖2 本文提出的步進電機控制驅動器框圖
L297是步進電動機控制器(包括環形分配器)。L298是雙H橋式驅動器。它們所組成的微處理器至雙橋式步進電動機的介面如圖3所示。這種方式結合的優點是,需要的元件很少.從而使得裝配成本低,可靠性高和占空間少。並且通過軟體開發。可以簡化和減輕微型計算機的負擔。另外,L297和L298都是獨立的晶元.所以應用是十分靈活的。
L297晶元是一種硬體環分集成晶元.它可產生四相驅動信號,用於計算機控制的兩相雙極或四相單極步進電機 它的心臟部分是一組解碼器它能產生各種所需的相序.這一部分是由兩種輸入模式控制,方向控制(CW/CCW) 和HALF/FULL 以及步進式時鍾CLOCK.它將解碼器從一階梯推進至另一階梯。解碼器有四個輸出點連接到輸出邏輯部分,提供抑制和斬波功能所需的相序。因此L297能產生三種相序信號,對應於三種不同的工作方式:即半步方式(HALF STEP);基本步距(FULL STEP,整步)一相激勵方式;基本步距兩相激勵方式。脈沖分配器內部是一個3bit可逆計數器,加上一些組合邏輯.產生每周期8步格雷碼時序信號,這也就是半步工作方式的時序信號。此時HALF/FULL信號為高電。若HALF/FULL取低電平,得到基本步距工作方式。即雙四拍全階梯工作方式。
L297另一個重要組成是由兩個PWM 斬波器來控制相繞組電流,實現恆流斬波控制以獲得良好的矩頻特性。每個斬波器由一個比較器、一個RS觸發器和外接采樣電阻組成,並設有一個公用振盪器,向兩個斬波器提供觸發脈沖信號。圖3中,頻率f是由外接16腳的RC網路決定的, 當R>10kΩ 時,f=1/0.69RC。當時鍾振盪器脈沖使觸發器置1,電機繞組相電流上升,采樣電阻的R 上電壓上升到基準電壓Uref時,比
較器翻轉,使觸發器復位,功率晶體管關斷,電流下降,等待下一個振盪脈沖的到來。這樣,觸發器輸出的是恆頻PWM信號,調制L297的輸出信號,繞組相電流峰值由Uref確定。L297的CONTROL端的輸入決定斬波器對相位線A、B、C、D或抑制線INH1和INH2起作用。CONTROL為高電平時,對A、B、C、D有控製作用;而為低電平時,則對INH1和INH2起控製作用,從而可對電動機轉向和轉矩進行控制。
L298晶元是一種高壓、大電流雙全橋式驅動器,其設計是為接受標准TTL邏輯電平信號和驅動電感負載的,例如繼電器、圓筒形線圈、直流電動機和步進電動機 具有兩抑制輸入來使器件不受輸入信號影響。每橋的三級管的射極是連接在一起的,相應外接線端可用來連接外設感測電阻。可安置另一輸入電源,使邏輯能在低電壓下工作。L298晶元是具有15個引出腳的多瓦數直插式封裝的集成晶元。
圖3中.AT89C52通過串口經MAX232電平轉換之後與微機相連.接受上位機指令。向L297發出時鍾信號、正反轉信號、復位信號及使能控制等信號。電路中,電阻R13,R15用來調節斬波器電路的參考電壓,該電壓將與通過管腳13,14所反饋的電位的大小比較,來確定是否進行斬波控制,以達到控制電機繞組電流峰值、保護步進電機的目的
由於L297內部帶有斬波恆流電路,繞組相電流峰值由Uref確定。當採用兩片L297通過L298分別驅動步進電機的兩繞組,且通過兩個D/A轉換器改變每相繞組的Uref時,即組成了步進電機細分驅動電路。另外,為了有效地抑制電磁干擾,提高系統的可靠性,在單片機與步進電動機驅動迴路中利用兩個16引腳光電耦合器件TLP521-4組成如圖3所示的隔離電路。其作用是切斷了單片機與步進電動機驅動迴路之間電的直接聯系,實現了單片機與驅動迴路系統地線的分別聯接.防止處於大電流感性負載下工作的驅動電路產生的干擾信號以及電網負載突變產生的干擾信號通過線路串入單片機,影響單片機的正常工作。
4 軟體組成
在該電路中,將P1.0口設為電機開始按鈕,P1.1,P1.2,P1.3為速度選擇按鈕。速度由低到高,P1.4為電機停止按鈕。並設三檔速度的最高速度依次為500pps、1000pps、2000pps 。RXD,TXD 已由MAX232電平轉換接出串口。此外,步進電機其啟動,停止的頻率較低,一般在100-250Hz之間,而最高運行頻率要求較高。通常為1-3kHz,為使其在啟動、運行和停止整個過程中,既不會失步,又能夠盡快精確地達到目標位置,運行速度都要有一個加速一恆速減速的過程。這里採用常用的離散辦法來逼近理想的近似梯形的升降速曲線,如圖5所示。即利用定時器中斷方式來不斷改變定時器裝載值的大小.
本例中.為計算方便,把各離散點的速度所需的裝載值用公式轉化為各自所需的定時時間固化在系統的ROM 中,這里用TH0=(65536-time)/256,TL0=(65536-time)%256來計算裝載值,time表示各階梯所需定時時間。系統在運行中用查表法查出所需的時間,從而大幅度減少佔用CPU的時間,提高系統的相應速度。因此.該程序主要由控制主程序、加減速子程序組成,主程序框圖如圖4所示。
5 結論
本文創新點在於提出應用單片機和L297、L298集成電路構成步進電機控制驅動器。使之具有元件少.可靠性高、占空間少、裝配成本低等優點。通過軟體開發,可以簡化和減輕微型計算機的負擔。另外。在上面提出的在加減速程序中定時器的裝載值用式子計算不精確,這兩條賦值要執行不少的時間.具體做的時候.可直接把初值計算出來或把除號用相加來計算.以達到精確的目的。
❷ 單片機控制步進電動機的運動的原理及單片機程序
51單片步進電機控制原理與控制設計程序
51單片步進電機是數字控制電機,它將脈沖信號轉變成角位移,即給一個脈沖信號,步進電機就轉動一個角度,因此非常適合於單片機控制。步進電機可分為反應式步進電機(簡稱vr)、永磁式步進電機(簡稱pm)和混合式步進電機(簡稱hb)。
51單片步進電機區別於其他控制電機的最大特點是,它是通過輸入脈沖信號來進行控制的,即電機的總轉動角度由輸入脈沖數決定,而電機的轉速由脈沖信號頻率決定。
51單片步進電機的驅動電路根據控制信號工作,控制信號由單片機產生。其基本原理作用如下:
(1)控制換相順序
通電換相這一過程稱為脈沖分配。例如:三相步進電機的三拍工作方式,其各相通電順序為a-b-c-d,通電控制脈沖必須嚴格按照這一順序分別控制a,b,c,d相的通斷。
(2)控制步51單片進電機的轉向
如果給定工作方式正序換相通電,步進電機正轉,如果按反序通電換相,則電機就反轉。
(3)控制51單片步進電機的速度
如果給步進電機發一個控制脈沖,它就轉一步,再發一個脈沖,它會再轉一步。兩個脈沖的間隔越短,步進電機就轉得越快。調整單片機發出的脈沖頻率,就可以對步進電機進行調速。步進電機是機電控制中一種常用的執行機構,它的用途是將電脈沖轉化為角位移,通俗地說:當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度(及步進角)。通過控制脈沖個數即可以控制角位移量,從而達到准確定位的目的;同時通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。
❸ 單片機是怎樣控制電機的
單片機只輸出信號,經過隔離電路,再經過功率開關電路驅動電機。
控制普通的三項非同步電機可以單片機輸出信號經三極體後驅動一個小功率繼電器,由繼電器來驅動交流接觸器,進而控制電機,也可以單片機信號經三極體放大後直接驅動功率繼電器。 方法有很多很多。至於驅動伺服,單片機埠的信號經過光耦隔離後可以直接驅動,伺服驅動器本身需要的驅動信號都是弱電信號。
單片機注意事項
一般在單片機的數據手冊(Datasheet)中都會提到該單片機需要的復位信號的要求。一般復位信號的寬度應為。復位電平的寬度和幅度都應滿足晶元的要求,並且要求保持穩定。還有特別重要的一點就是復位電平應與電源上電在同一時刻發生,即晶元一上電,復位信號就已產生。
不然,由於沒有經過復位,單片機中的寄存器的值為隨機值,上電時就會按PC寄存器中的隨機內容開始運行程序,這樣很容易進行誤操作或進入死機狀態。
❹ 遠程式控制制電機,選擇什麼單片機
單片機控制5個電機是可能的,如果不是同時運動,那麼不用擴展任何資源,IO口足夠用了,比如步進電機,一個步進電機的芹正控制信號可以只有4路,即:A,/嫌缺悔A,B,/B,5個電機公用20個IO口,40芯單片機有32個IO口,所以夠用了。
如果速度不一致而且需要同時運動的話,那麼需要擴展一個8253定時器,採用52單片機,正好有5個定時器,用來控扮謹制速度。
❺ 51單片機控制電機轉速選什麼單片機,急求
80C51最好(1)MCS-51系列晶元採用HMOS工藝,而80C51晶元則採用CHMOS工藝。CHMOS工藝是COMS和HMOS的結合,
(2)80C51晶元具有COMS低功耗的特點。例如8051晶元的功耗為630mW,而80C51的功耗只有120mW,這樣低的功耗,用一粒紐扣電池就可以工作。低功耗對單片機在攜帶型、手提式或野外作業的儀器儀表設備上使用十分有利。
(3)從80C51在功能增強方面分析,主要在以下幾個方面做了增強。首先,為進一步降低功耗,80C51晶元增加了待機和掉電保護兩種工作方式,以保證單片機在掉電情況下能以最低的消耗電流維持。
(4)此外,在80C51系列晶元中,內部程序存儲器除了ROM型和EPROM型外,還有E2PROM型,例如89C51就有4KB E2PROM。並且隨著集成技術的提高,80C51系列片內程序存儲器的容量也越來越大,目前已有64KB的晶元了。另外,許多80C51晶元還具有程序存儲器保密機制,以防止應用程序泄密或被復制。
;
❻ 如何用單片機控制直流電機
通過與單片機相連的按鍵控制直流電機停啟的電路如下圖所示,通過P3.6口按鍵觸發啟動直流電機,P3.7口的按鍵觸發停止直流電機的運行。由圖可知,當P1.0輸出高電平「1」時,NPN型三極體導通,直流電機得電轉動;當P1.0輸出低電平「0」時,NPN型三極體截止,直流電機停止轉動。
通過單片機產生PWM波控制直流電機程序
#include"reg52.h"
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[10]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰數碼管顯示碼(0-9)
sbitxiaoshudian=P0^7;
sbitwei1=P2^4;//數碼管位選定義
sbitwei2=P2^5;
sbitwei3=P2^6;
sbitwei4=P2^7;
sbitbeep=P2^3;//蜂鳴器控制端
sbitmotor=P1^0;//電機控制
sbits1_jiasu=P1^4;//加速按鍵
sbits2_jiansu=P1^5;//減速按鍵
sbits3_jiting=P1^6;//停止/開始按鍵
uintpulse_count;//INT0接收到的脈沖數
uintnum=0;//num相當於占空比調節的精度
ucharspeed[3];//四位速度值存儲
floatbianhuasu;//當前速度(理論計算值)
floatreallyspeed;//實際測得的速度
floatvv_min=0.0;vv_max=250.0;
floatvi_Ref=60.0;//給定值
floatvi_PreError,vi_PreDerror;
uintpwm=100;//相當於占空比標志變數
intsample_time=0;//采樣標志
floatv_kp=1.2,v_ki=0.6,v_kd=0.2;//比例,積分,微分常數
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=20;y>0;y--);
}
voidtime_init()
{
ET1=1;//允許定時器T1中斷
ET0=1;//允許定時器T0中斷
TMOD=0x15;//定時器0計數,模式1;定時器1定時,模式1
TH1=(65536-100)/256;//定時器1值,負責PID中斷,0.1ms定時
TL1=(65536-100)%6;
TR0=1;//開定時器
TR1=1;
IP=0X08;//定時器1為高優級
EA=1;//開總中斷
}
voidkeyscan()
{
floatj;
if(s1_jiasu==0)//加速
{
delay(20);
if(s1_jiasu==0)
vi_Ref+=10;
j=vi_Ref;
}
while(s1_jiasu==0);
if(s2_jiansu==0)//減速
{
delay(20);
if(s2_jiansu==0)
vi_Ref-=10;
j=vi_Ref;
}
while(s2_jiansu==0);
if(s3_jiting==0)
{
delay(20);
motor=0;
P1=0X00;
P3=0X00;
P0=0x00;
}
while(s3_jiting==0);
}
floatv_PIDCalc(floatvi_Ref,floatvi_SpeedBack)
{
registerfloaterror1,d_error,dd_error;
error1=vi_Ref-vi_SpeedBack;//偏差的計算
d_error=error1-vi_PreError;//誤差的偏差
dd_error=d_error-vi_PreDerror;//誤差變化率
vi_PreError=error1;//存儲當前偏差
vi_PreDerror=d_error;
bianhuasu=(v_kp*d_error+v_ki*vi_PreError+v_kd*dd_error);
return(bianhuasu);
}
voidv_Display()
{
uintsu;
su=(int)(reallyspeed*10);//乘以10之後強制轉化成整型
speed[3]=su/1000;//百位
speed[2]=(su00)/100;//十位
speed[1]=(su0)/10;//個位
speed[0]=su;//小數點後一位
wei1=0;//第一位打開
P0=table[speed[3]];
delay(5);
wei1=1;//第一位關閉
wei2=0;
P0=table[speed[2]];
delay(5);
wei2=1;
wei3=0;
P0=table[speed[1]];
xiaoshudian=1;
delay(5);
wei3=1;
wei4=0;
P0=table[speed[0]];
delay(5);
wei4=1;
}
voidBEEP()
{
if((reallyspeed)>=vi_Ref+5||(reallyspeed
{
beep=~beep;
delay(4);
}
}
voidmain()
{
time_init();
motor=0;
while(1)
{
v_Display();
BEEP();
}
if(s3_jiting==0)//對按鍵3進行掃描,增強急停效果
{
delay(20);
motor=0;
P1=0X00;
P3=0X00;
P0=0x00;
}
while(s3_jiting==0);
}
voidtimer0()interrupt1
{
}
voidtimer1()interrupt3
{
TH1=(65536-100)/256;//1ms定時
TL1=(65536-100)%6;
sample_time++;
if(sample_time==5000)//采樣時間0.1ms*5000=0.5s
{
TR0=0;//關閉定時器0
sample_time=0;
pulse_count=TH0*255+TL0;//保存當前脈沖數
keyscan();//掃描按鍵
reallyspeed=pulse_count/(4*0.6);//計算速度
pwm=pwm+v_PIDCalc(vi_Ref,reallyspeed);
if(pwm
if(pwm>100)pwm=100;
TH0=TL0=0;
TR0=1;//開啟定時器0
}
num++;
if(num==pwm)//此處的num值,就是占空比
{
motor=0;
}
if(num==100)//100相當於占空比調節的精度
{
num=0;
motor=1;
}
}
❼ 基於單片機的步進電機控制~ 目前單片機都用什麼型號啊
建議用AT89S52,在線可編程,方便! 並且可兼容C51,C52,價格也便宜!