步進電機詳解
電機(俗稱“馬達”)是指依據電磁感應定律實現電能轉換或傳遞的一種電磁裝置。在電路中用字母M表示。它的主要作用是產生驅動轉矩,作爲用電器或各種機械的動力源。發電機在電路中用字母G表示。它的主要作用是利用電能轉化爲機械能,從而帶動比如像水泵之類的設備進行運轉。
電機運行原理
當步進電機切換一次定子繞組的激磁電流時,轉子就旋轉一個固定角度即步距角。步距角一般由切換的相電流產生的旋轉力矩得到,所以需要每相極數是偶數。步進電機通常都爲兩相以上的,當然也有一些特殊的只有一個線圈的單相步進電機。雖說單相,實爲一個線圈產生的磁通方向交互反轉而驅動轉子轉動。實用的步進電機的相數有單相、兩相、三相、四相、五相。
定子繞組:定子每極上套有一個集中繞組,相對兩極的繞組串聯構成一相。相位越多,轉角度越少,步距越精確。
步進電機運行原理
每輸入一個電脈衝,電動機轉動一個角度前進一步。它輸出的角位移與輸入的脈衝數成正比、轉速與脈衝頻率成正比。改變繞組通電的順序,電機就會反轉。所以可用控制脈衝數量、頻率及電動機各相繞組的通電順序來控制步進電機的轉動。
相位不同區別:(例如四相與八相區別)
1)運行方式不同:
四相四八拍運行方式即AB-BC-CD-DA-AB,四相八拍運行方式即 A-AB-B-BC-C-CD-D-DA-A。
2)步距角不同:(對應一個脈衝信號,電dao機轉子轉過的角位移用θ表示。θ=360度)
四拍運行時步距角爲θ=360度/(50*4)=1.8度(俗稱整步),八拍運行時步距角爲θ=360度/(50*8)=0.9度(俗稱半步)。
總結:相位越多,步數角度越小,走位越精確
步進電機驅動原理
步進電機一般由芯片引腳控制,但是芯片引腳釋放的上升沿信號電壓電流都很低,不足以滿足達到令步進電機運動最低要求,所以這時候需要引入媒介驅動器,驅動器原理和三極管原理差不多,都是通過低電流控制高電流操作。
功能演示:
使用ULN2003芯片做驅動,利用STC芯片做觸發,使35YB步進電機運動
代碼參考:
/**************************************************************************************
* 步進電機實驗
*
***************************************************************************************/
#include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
#include<intrins.h> //因爲要用到左右移函數,所以加入這個頭文件
typedef unsigned int u16; //對數據類型進行聲明定義
typedef unsigned char u8;
sbit MOTOA = P1^0;
sbit MOTOB = P1^1;
sbit MOTOC = P1^2;
sbit MOTOD = P1^3;
#define SPEED 200
/*******************************************************************************
* 函 數 名 : delay
* 函數功能 : 延時函數,i=1時,大約延時10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 數 名 : main
* 函數功能 : 主函數
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void main()
{
P1=0X00;
while(1)
{
MOTOA = 1;
MOTOB = 0;
MOTOC = 0;
MOTOD = 0;
delay(SPEED);
MOTOA = 1;
MOTOB = 1;
MOTOC = 0;
MOTOD = 0;
delay(SPEED);
MOTOA = 0;
MOTOB = 1;
MOTOC = 0;
MOTOD = 0;
delay(SPEED);
MOTOA = 0;
MOTOB = 1;
MOTOC = 1;
MOTOD = 0;
delay(SPEED);
MOTOA = 0;
MOTOB = 0;
MOTOC = 1;
MOTOD = 0;
delay(SPEED);
MOTOA = 0;
MOTOB = 0;
MOTOC = 1;
MOTOD = 1;
delay(SPEED);
MOTOA = 0;
MOTOB = 0;
MOTOC = 0;
MOTOD = 1;
delay(SPEED);
MOTOA = 1;
MOTOB = 0;
MOTOC = 0;
MOTOD = 1;
delay(SPEED);
}
}
總結不好多多擔待,文章只單純個人總結,如不好勿噴,技術有限,有錯漏麻煩指正提出。本人QQ:373965070