導航:首頁 > 操作系統 > 單片機步進電機控製程序

單片機步進電機控製程序

發布時間:2024-09-25 21:57:15

『壹』 步進電機的單片機控制

步進電機的單片機控制

通過IO口輸出的具有時序的方波作為步進電機的控制信號,信號經過晶元L298N驅動步進電機;同時,用 4X4的鍵盤來對電機的狀態進行控制,並用數碼管顯示電機的轉速,採用74LS164作為4位單個數碼管的顯示驅動,從單片機輸入信號;

采通過IO口輸出的具有時序的方波作為步進電機的控制信號,信號經過晶元L298N驅動步進電機;同時,用 4X4的鍵盤來對電機的狀態進行控制,並用數碼管顯示電機的轉速,採用74LS164作為4位單個數碼管的顯示驅動

1、對步進電機的控制和驅動,設計中受控電機為四相六線制的步進電機(內阻33歐,步進1.8度,額定電壓12V)

使用L298N晶元驅動電機

L298N晶元可以驅動兩個二相電機(如圖1-1),也可以驅動一個四相電機,輸出電壓最高可達50V,可以直接通過電源來調節輸出電壓;可以直接用單片機的IO口提供信號;而且電路簡單,使用比較方便。 而使用L298N時,可以用L297來提供時序信號,可以節省單片機IO口的使用;也可以直接用單片機模擬出時序信號,由於控制並不復雜,故選用後者。

2、 數碼管顯示電路的設計

串列接法

設計中要顯示4位數字,用74LS164作為顯示驅動,其中帶鎖存,使用串列接法可以節約IO口資源,但要使用SIO,發送數據時容易控制。

二、步進電機控制原理

步進電機是數字控制電機,它將脈沖信號轉變成角位移,即給一個脈沖信號,步進電機就轉動一個角度,因此非常適合於單片機控制。步進電機可分為反應式步進電機(簡稱VR)、永磁式步進電機(簡稱PM)和混合式步進電機(簡稱HB)。

步進電機區別於其他控制電機的最大特點是,它是通過輸入脈沖信號來進行控制的,即電機的總轉動角度由輸入脈沖數決定,而電機的轉速由脈沖信號頻率決定。

步進電機的驅動電路根據控制信號工作,控制信號由單片機產生。其基本原理作用如下:

(1)控制換相順序

通電換相這一過程稱為脈沖分配。例如:三相步進電機的三拍工作方式,其各相通電順序為A-B-C-D,通電控制脈沖必須嚴格按照這一順序分別控制A,B,C,D相的通斷。

(2)控制步進電機的轉向

如果給定工作方式正序換相通電,步進電機正轉,如果按反序通電換相,則電機就反轉。

(3)控制步進電機的速度

如果給步進電機發一個控制脈沖,它就轉一步,再發一個脈沖,它會再轉一步。兩個脈沖的間隔越短,步進電機就轉得越快。調整單片機發出的脈沖頻率,就可以對步進電機進行調速。

三、理論設計

1、步進電機驅動電路

通過L298N構成步進電機的驅動電路,電路圖如圖3-2所示。

通過單片機的IOB8~IOB13對L298N的IN1~IN4口和ENA、ENB口發送方波脈沖信號,2、數碼管顯示電路的設計

數碼管的顯示驅動使用74LS164,通過的IOB0和IOB1口對DATA和CLK發送數據。

3、4x4鍵盤電路

使用了標準的4x4鍵盤,單片機的A口低8位為鍵盤的介面。盡管設計要求中只需要4個鍵對步進電機的狀態進行控制,但考慮到對控制功能的擴展,我們使用了4x4的鍵盤。

『貳』 步進電機用單片機控制轉動

很簡單,看你的意思,你應該已經有了與之配套的【步進電機驅動器】,那就可以用單片機I/O口控制了,一路輸出CP脈沖信號,一路輸出DIR方向信號,電源接好後,連通電路,就OK了。
簡單的C51調試程序:一個大的FOR循環里包含:
【C P脈沖信號】:可以用一個有限的FOR循環(循環時間可控制在幾秒鍾左右),里邊加個有限的FOR延時(這個要小到幾分之一或幾十分之一秒),然後再對CP埠取反;這樣,單片機上電後,就會不斷地延時,輸出脈沖波了。
【DIR方向信號】:可以在上述的CP脈沖信號的有限FOR循環結束後,停幾秒,再對DIR埠取反; 這樣,你的步進電機通電後就會在幾秒鍾內正轉,停轉幾秒鍾後再反轉了,如此往復不斷。

『叄』 51單片機步進電機正反轉程序

單片機控制步進電機,我想你說的是兩相步進電機,一般是控制其相序分配的順逆從而控制正反轉,一般而言,步進電機相序分配你可以做成一個數組比如step[]={0x03,0x06,0x0c,0x09},這樣來說可以假設P0口是步進電機控制口,那麼可以按如下方式來控制: while(1) { for(i=0;i<4;i++) { if(fx==1)P0=step[i]; //正向 else P0=step[3-i]; //反向 delay(x); //x大小決定電機速度。
根據電機相數買個驅動器。然後用單片機產生脈沖來控制電機的轉動以及正反轉。單片機產生脈沖的方法和單片機控制流水燈是一樣的。ULN2003D 是驅動步進電機的驅動晶元,主要是匹配電機所需的電流。 由於是四相電機,步進電機之所以可以轉動就需要給相繞組提供連續的脈沖,所以需要4個埠來控制四相繞組的工作狀態(P15應該是不需要的),具體的編碼要看電機的拍數; 一旦明白這些,你就可以很容易編寫代碼來控制電機的轉動了,還有在脈沖間你可以設置不同的延時時間來調節電機的轉速。

『肆』 一個關於單片機控制步進電機的C語言程序 想請高人幫我把每一步都注釋出來

C語言程序源代碼
#include <REGX51.H> // 51寄存器定義
#include "intrins.h"
#define control P1 //P1_0:A相,P1_1:B相,P1_2:C相,P1_3:D相
#define discode P0 //顯示代碼控制埠
#define uchar unsigned char //定義無符號型變數
#define uint unsigned int
sbit en_dm=P3^0; //顯示代碼鎖存控制
sbit en_wk=P3^1; //位控鎖存控制
uchar code corotation[4]= {0x03,0x06,0x0c,0x09};//電機正轉
uchar code rollback[4]={0x0c,0x06,0x03,0x09}; //電機反轉
uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顯示欄位
uint code Levspeed[5]={500,400,300,200,100};//電機速度等級
uchar Hscan,speedcount;//Hscan行掃描,speedcount 速度等級計數
uint uu; //頻率計數
uint step,setstep; //step:電機步伐計數,setstep:手動設置電機步伐
uint speed=500; //電機初始速度
uchar count;
uchar flag[5];
uchar butcount; //按鍵次數
//****************************************
//flag[0] 正轉標志
//flag[1] 反轉標志
//flag[2] 加速標志
//flag[3] 減速標志
//flag[4] 設置標志
//****************************************
Delay1mS(unsigned int tt) //延時1ms 「Delay1mS」延時子程序,用循環語句延時。
{
unsigned char i;
while(tt--)
for(i=113;i>0;i--);
}
keyscan() //鍵盤掃描 「keyscan」鍵盤掃描子程序,用於尋找是否有按鍵按下。
{
P2=0xf0; //把oxfe賦值給P2口 //將按鍵控制口置於未按鍵的狀此譽態.單片機輸出//口假設不是按鍵按下狀態.
if(P2!=0xf0) //如果P2口的值不等於0xfe //檢查是否有按鍵按下.如果有,處理{}內的事
{ //有按鍵按下.
Delay1mS(150);//調用延時函數//有按鍵按下,避開無效讀碼值的時間.,或者是脈沖長度
Hscan=0xfe; //將Hscan賦值,初始拍運遙控值是要置高電平的.
P2=Hscan; //
while((Hscan&0x10)!=0) //檢查X10口是否森賀段有鍵按下。未按下是1,
//在這顯示出你的按鍵口是P2_4.即檢查P2_4是高電平,無//鍵按下,低電平有鍵按下。
{
P2=Hscan;
if((P2&0xf0)!=0xf0) //檢查按鍵脈沖是否是變化,
return P2;
else Hscan=(Hscan<<1)|0x01; //這里在存碼值,應該是遙控輸入。將碼值存入Hscan
//這里是讀取碼值的關鍵,如果來的脈沖不管是高電平//還是低電平,靠左移一位保存脈沖的狀態值.
}
}
else return 0;
}
key_val() //按鍵處理函數 //這里是讀取將存好的碼值進行處理.看是什麼代碼值
{
uchar key;
key= keyscan(); //這里是讀取碼值並存放在key里
switch(key) //這里是對比讀取的碼值
{
case 0xee: //按鍵『7』 //讀取的碼值=0xEE,則是按鍵「7」的代碼
//while(P2==0xee);
setstep=setstep*10+7; //步伐數 //這里是輸入」setstep +7」 步伐數對比讀取的碼值, //setstep原來可能是有數字的。
step=setstep;
butcount++; //計數,看輸入拉幾個數字
if(butcount>=5) //輸入的數字超過5個就置0,無效
{
butcount=0;
setstep=0;
}
break;
case 0xde: //按鍵『8』 //讀取的碼值=0xdE,則是按鍵「8」的代碼
//其他同」7」
//while(P2==0xde);
setstep=setstep*10+8;
butcount++;
step=setstep;
if(butcount>=5)
{
butcount=0;
setstep=0;
}
break;
case 0xbe: //按鍵『9』 //同上」7」
//while(P2==0xbe);
setstep=setstep*10+9;
butcount++;
step=setstep;
if(butcount>=5)
{
butcount=0;
setstep=0;
}
break;
case 0x7e: //按鍵『正轉 //正轉按鍵識別
while(P2==0x7e); //等待按鍵松開//一值按住電機是不轉的,放開後才轉.有檢查//P2口的狀態值
flag[0]=0xff; //開啟正轉標志,關閉反轉//置正轉標志.
flag[1]=0x00; //清除反轉標志.
butcount=0;
speedcount=0;
speed=500; //置電機的轉速.
if(!flag[4]) step=0;
TR0=1;
break;
case 0xed: //按鍵『4』 //同上」7」
while(P2==0xed);
setstep=setstep*10+4;
butcount++;
step=setstep;
if(butcount>=5)
{
butcount=0;
setstep=0;
}
break;
case 0xdd: //按鍵『5』 //同上」7」
//while(P2==0xdd);
setstep=setstep*10+5;
step=setstep;
butcount++;
if(butcount>=5)
{
butcount=0;
setstep=0;
}
break;

閱讀全文

與單片機步進電機控製程序相關的資料

熱點內容
惠利app是什麼 瀏覽:777
游戲埠讀取伺服器失敗怎麼弄 瀏覽:878
linux修復mbr 瀏覽:128
磁碟格式化基本命令 瀏覽:578
程序員掉入異世界 瀏覽:954
andlua畫質助手源碼 瀏覽:577
winrar解壓格式怎麼看 瀏覽:147
qt編程入門pdf 瀏覽:599
php中是根據指針查的數據嗎 瀏覽:276
安卓手機驅動為什麼不能提取通用 瀏覽:708
轉行程序員失敗的人 瀏覽:728
延遲命令方塊 瀏覽:499
某視頻網站為什麼安卓可以投屏 瀏覽:651
伺服器解釋器在哪個文件夾 瀏覽:95
app督促服務在哪裡 瀏覽:992
命令與征服3語音 瀏覽:999
用紙片和怎麼才能做一個解壓球 瀏覽:476
vim顯示命令 瀏覽:294
程序員給老婆送手機 瀏覽:84
胖子程序員視頻 瀏覽:142