導航:首頁 > 操作系統 > 51單片機步進電機編程

51單片機步進電機編程

發布時間:2022-07-31 22:42:53

A. 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應該是不需要的),具體的編碼要看電機的拍數; 一旦明白這些,你就可以很容易編寫代碼來控制電機的轉動了,還有在脈沖間你可以設置不同的延時時間來調節電機的轉速。

B. 51單片機控制步進電機硬體圖及C語言編程

在具備步進電機驅動器的條件下,單片機發送一定頻率和數量的脈沖序列可以驅動步進電機,頻率決定速度,脈沖數量決定角位置。因此從控制方式看,大部分步進電機都可以被單片機驅動,它不需要特別外設,幾個單片機引腳便可以控制。

C. 單片機控制步進電動機的運動的原理及單片機程序

51單片步進電機控制原理與控制設計程序
51單片步進電機是數字控制電機,它將脈沖信號轉變成角位移,即給一個脈沖信號,步進電機就轉動一個角度,因此非常適合於單片機控制。步進電機可分為反應式步進電機(簡稱vr)、永磁式步進電機(簡稱pm)和混合式步進電機(簡稱hb)。
51單片步進電機區別於其他控制電機的最大特點是,它是通過輸入脈沖信號來進行控制的,即電機的總轉動角度由輸入脈沖數決定,而電機的轉速由脈沖信號頻率決定。
51單片步進電機的驅動電路根據控制信號工作,控制信號由單片機產生。其基本原理作用如下:
(1)控制換相順序
通電換相這一過程稱為脈沖分配。例如:三相步進電機的三拍工作方式,其各相通電順序為a-b-c-d,通電控制脈沖必須嚴格按照這一順序分別控制a,b,c,d相的通斷。
(2)控制步51單片進電機的轉向
如果給定工作方式正序換相通電,步進電機正轉,如果按反序通電換相,則電機就反轉。
(3)控制51單片步進電機的速度
如果給步進電機發一個控制脈沖,它就轉一步,再發一個脈沖,它會再轉一步。兩個脈沖的間隔越短,步進電機就轉得越快。調整單片機發出的脈沖頻率,就可以對步進電機進行調速。步進電機是機電控制中一種常用的執行機構,它的用途是將電脈沖轉化為角位移,通俗地說:當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度(及步進角)。通過控制脈沖個數即可以控制角位移量,從而達到准確定位的目的;同時通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。

D. 51單片機步進電機原理圖編程

先畫原理圖,再編程。

E. 51單片機, 編一個控制步進電機轉動的程序。

#include <reg51.h> //51晶元管腳定義頭文件
#include <intrins.h>//內部包含延時函數 _nop_();

#define uchar unsigned char
#define uint unsigned int

uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};

/********************************************************/
/*
/* 延時t毫秒
/* 11.0592MHz時鍾,延時約1ms
/*
/********************************************************/
void delay(uint t)
{
uint k;
while(t--)
{
for(k=0; k<125; k++)
{ }
}
}
/********************************************************/
/*
/*步進電機正轉
/*
/********************************************************/
void motor_ffw(uint n)
{
uchar i;
uint j;
for (j=0; j<12*n; j++) //轉1×n圈
{
for (i=0; i<8; i++) //一個周期轉30度
{
P1 = FFW[i]; //取數據
delay(15); //調節轉速
}
}
}
/********************************************************/
/*
/*步進電機反轉
/*
/********************************************************/
void motor_rev(uint n)
{
uchar i;
uint j;
for (j=0; j<12*n; j++) //轉1×n圈
{
for (i=0; i<8; i++) //一個周期轉30度
{
P1 = REV[i]; //取數據
delay(15); //調節轉速
}
}
}
/********************************************************
*
* 主程序
*
*********************************************************/

main()
{
while(1)
{
motor_ffw(5); //電機正轉
delay(5000); //換向延時
//motor_rev(5); //電機反轉
//delay(1000); //換向延時
}
}

/********************************************************/

F. 求51單片機控制步進電機程序

;//****************************************************************
;//*文件名: StepM FOR 51MCU
;功能: 開關控制步進電機的正轉、反轉和停止。
;接線: 用導線對應連接步進電機模塊的SMA~SMD到CPU模塊的P10~P13,
; 八位邏輯電平輸出的K0~K2對應連接CPU模塊的P15~P17。
;//****************************************************************
;K0——停止
;K1——正轉
;K2——反轉
ORG 0000
LJMP START
ORG 0100H
START:
LOOP: MOV P1,#00H ; 步進電機停止
ORL P1,#0E0H
MOV A,P1
JNB ACC.5,STOP ; 停止
JNB ACC.6,FOR ; 正轉
JNB ACC.7,rev ; 反轉
JMP LOOP ;

FOR: MOV R0, #00H ; 正轉到tab取碼指針初值
for1: MOV A,R0 ; 取碼
MOV DPTR,#TABLE ;
MOVC A,@A+DPTR
JZ LOOP ; 是否到了結束碼00h
CPL A ;把acc反向
MOV P1,A ;輸出到p1開始正轉
CALL DELAY ;轉動的速度
INC R0 ;取下一個碼
JMP FOR1 ;繼續正轉

rev: MOV R0,#0AH ;反轉到tab取碼指針初值
rev1: MOV A,R0
MOV DPTR,#TABLE ;取碼
MOVC A,@A+DPTR
JZ LOOP ;是否到了結束碼00h
CPL A ;把acc反向
MOV P1,A ;輸出到p1開始反轉
CALL DELAY ;轉動的速度
INC R0 ;取下一個碼
JMP REV1 ;繼續反轉

stop:
MOV P1, #00H
JMP LOOP

DELAY: MOV R1,#150 ;步進電機的轉速20ms
D1: MOV R2,#248
DJNZ R2,$
DJNZ R1,D1
RET
TABLE:
db 01h,03h,02h,06h,04h,0ch,08h,09h ;正轉表
db 00 ;正轉結束
db 01h,09h,08h,0ch,04h,06h,02h,03h ;反轉
db 00 ;反轉結束
END

G. 51單片機 編一個控制步進電機轉動的程序

#include <reg51.h> //51晶元管腳定義頭文件
#include <intrins.h>//內部包含延時函數 _nop_();

#define uchar unsigned char
#define uint unsigned int

uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};

/********************************************************/
/*
/* 延時t毫秒
/* 11.0592MHz時鍾,延時約1ms
/*
/********************************************************/
void delay(uint t)
{
uint k;
while(t--)
{
for(k=0; k<125; k++)
{ }
}
}
/********************************************************/
/*
/*步進電機正轉
/*
/********************************************************/
void motor_ffw(uint n)
{
uchar i;
uint j;
for (j=0; j<12*n; j++) //轉1×n圈
{
for (i=0; i<8; i++) //一個周期轉30度
{
P1 = FFW[i]; //取數據
delay(15); //調節轉速
}
}
}
/********************************************************/
/*
/*步進電機反轉
/*
/********************************************************/
void motor_rev(uint n)
{
uchar i;
uint j;
for (j=0; j<12*n; j++) //轉1×n圈
{
for (i=0; i<8; i++) //一個周期轉30度
{
P1 = REV[i]; //取數據
delay(15); //調節轉速
}
}
}
/********************************************************
*
* 主程序
*
*********************************************************/

main()
{
while(1)
{
motor_ffw(5); //電機正轉
delay(5000); //換向延時
//motor_rev(5); //電機反轉
//delay(1000); //換向延時
}
}

/********************************************************/

閱讀全文

與51單片機步進電機編程相關的資料

熱點內容
51單片機匯編語言指令 瀏覽:133
女程序員好難 瀏覽:683
三田壓縮機與電裝 瀏覽:708
重生細胞安卓版沒鍵盤怎麼玩 瀏覽:994
小米nfc手機刷加密卡 瀏覽:290
linux如何下載文件 瀏覽:808
linuxrpm依賴 瀏覽:370
匯率pdf 瀏覽:353
帶分數的演算法思維 瀏覽:115
如何讓伺服器支持asp文件 瀏覽:48
python網站自動簽到腳本 瀏覽:888
程序員和語言框架哪個重要 瀏覽:776
文件伺服器上面有什麼 瀏覽:383
需求不清是程序員面臨的真正挑戰 瀏覽:952
放療有關的演算法 瀏覽:750
java和python交互 瀏覽:648
貴州網路伺服器機櫃雲主機 瀏覽:267
未來番禺程序員待遇 瀏覽:213
安卓安智部落沖突密碼怎麼改 瀏覽:648
http協議單片機 瀏覽:75