51單片機之步進電機實驗

1.步進電機圖片

 

2.步進電機介紹

步進電機是將電脈衝信號轉變爲角位移或線位移的開環控制元件。在非超載情況下,電機的轉速、停止的位置只取決於脈衝信號的頻率和脈衝數,而不受負載變化的影響,即給電機加一個脈衝信號,電機則轉過一個步距角。這一線性關係的存在,加上步進電機只有週期性的誤差而無累積誤差等特點,使得步進電機在速度、位置等控制領域的控制操作非常簡單。雖然步進電機應用廣泛,但它並不像普通的直流和交流電機那樣在常規狀態下使用,它必須由雙環形脈衝信號、功率驅動電路等組成控制系統方可使用.因此.用好步進電機也非易事,它涉及機械、電機、電子及計算機等許多專業知識。

3.步進電機分類

(1)永磁式(PM)。一般爲二相,轉矩和體積較小,步距角一般爲7.5°或15°。

(2)反應式(VR)。一般爲三相,可實現大轉矩輸出.步距角一般爲1.5°,但噪聲和振動都很大。在歐美等發達國家20世紀80年代已經淘汰。

(3)混合式(HB)。指混合了永磁式和反應式的優點。它又分爲二相和五相,二相步距角一般爲180°,而五相步距角一般爲0.72°。這種步進電機的應用最爲廣泛。

4.技術指標

    (1)步進電機的靜態指標

    ①相數—電機內部的線圈組數。目前常用的有二相、三相、四相、五相步進電機。電機相數不同,其步距角也不同。一般二相電機的步距角爲0.9°/1.8°,三相爲0.75°/1.5°、五相爲0.36°/0.72°。在沒有細分驅動器時,用戶主要靠選擇不同相數的步進電機來滿足自己步距角的要求.如果使用細分驅動器,則“相數”將變得沒有意義,用戶只需在驅動器上改變細分數,就可以改變步距角。

    ②步距角—表示控制系統每發一個步進脈衝信號,電機所轉動的角度。電機出廠時給出了一個步距角的值,如86BYG250A型電機的值爲0.9°/1.8°(表示半步工作時爲0.9°、整步工作時爲1.8°),這個步距角可稱爲“電機固有步距角”,它不一定是電機實際工作時的真正步距角,真正的步距角和驅動器有關。

    ③拍數—完成一個磁場週期性變化所需脈衝數或導電狀態.或指電機轉過一個步距角所需脈衝數。以四相電機爲例,有四相四拍運行方式,即AB-BC-CD-DA-AB:四相八拍運行方式,即A-AB-B-BC-C-CD-D-DA-A

    ④定位轉矩—電機在不通電狀態下,轉子自身的鎖定力矩(由磁場齒形的諧波以及機械誤差造成).

⑥保持轉矩—步進電機通電但沒有轉動時,定子鎖住轉子的力矩。它是步進電機最重要的參數之一,通常步進電機在低速時的力矩接近保持轉矩。由於步進電機的輸出力矩隨速度的增大而不斷衰減,輸出功率也隨速度的增大而變化,所以保持轉矩就成了衡量步進電機最重要參數之一。比如,當人們說2N·m的步進電機時,在沒有特殊說明的情況下,是指保持轉矩爲2N·m的步進電機。

(2)步進電機的動態指標

①步距角精度—步進電機每轉過一個步距角的實際值與理論值的誤差,用百分比表示:誤差/步距角X100%。不同運行拍數其值不同,四拍運行時應在5%之內,八拍運行時應在15%以內。

②失步—電機運轉時運轉的步數不等於理論上的步數,稱爲失步。

③失調角—轉子齒軸線偏移定子齒軸線的角度.電機運轉必存在失調角,由失調角產生的誤差,採用細分驅動是不能解決的。

最大空載起動頻率—電機在某種驅動形式、電壓及額定電流下,在不加負載的情況下,能夠直接起動的最大頻率。

最大空載運行頻率—電機在某種驅動形式、電壓及額定電流下,電機不帶負載的最高轉速頻率。

運行矩頻特性—電機在某種測試條件下,測得運行中輸出力矩與頻率關係的曲線稱爲運行矩頻特性。它是電機諸多動態曲線中最重要的,也是電機選擇的根本依據,如圖所示。

電機一但選定,電機的靜力矩確定,而動態力矩卻不然.電機的動態力矩取決於電機運行時的平均電流(而非靜態電流),平均電流越大,電機輸出力矩越大.即電機的頻率特性越硬。

  

 

其中.曲線3電流最大或電壓最高;曲線I電流最小或電壓最低,曲線與負載的交點爲負載的最大速度點。要使平均電流大,儘可能提高驅動電壓,或採用小電感大電流的電機。      

④電機的共振點—步進電機均有固定的共振區域,其共振區一般在50r/min-80r/min或在180r/min左右。電機驅動電壓越高,電機電流越大,負載越輕,電機體積越小。則共振區向上偏移,反之亦然。爲使電機輸出電矩大、不失步且整個系統的噪聲降低,一般工作點均應偏移共振區較多。因此,在使用步進電機時應避開此共振區。     

5.步進電機工作原理

步進電機是一種將電脈衝轉換成相應角位移或線位移的電磁機械裝置。它具有快速啓、停能力,在電機的負荷不超過它能提供的動態轉矩時,可以通過輸入脈衝來控制它在一瞬間的啓動或停止。步進電機的步距角和轉速只和輸入的脈衝頻率有關,和環境溫度、氣壓、振動無關,也不受電網電壓的波動和負載變化的影響。因此,步進電機多應用在需要精確定位的場合。  

(1)工作原理

步進電機有三線式、五線式和六線式,但其控制方式均相同,都要以脈衝信號電流來驅動.假設每旋轉一圈需要200個脈衝信號來勵磁,可以計算出每個勵磁信號能使步進電機前進1.8°。其旋轉角度與脈衝的個數成正比。步進電動機的正、反轉由勵磁脈衝產生的順序來控制。六線式四相步進電機是比較常見的,它的控制等效電路如下圖所示。它有4條勵磁信號引線A,/A,B,/B 通過控制這4條引線上勵磁脈衝產生的時刻,即可控制步進電機的轉動.每出現一個脈衝信號,步進電機只走一步。因此,只要依序不斷送出脈衝信號,步進電機就能實現連續轉動。   

 

(2)勵磁方式

步進電機的勵磁方式分爲全步勵磁和半步勵磁兩種。其中全步勵磁又有一相勵磁和二相勵磁之分;半步勵磁又稱一二相勵磁。假設每旋轉一圈需要200個脈衝信號來勵磁,可以計算出每個勵磁信號能使步進電動機前進1.8°。簡要介紹如下。

①一相勵磁—在每一瞬間,步進電機只有一個線圈導通.每送一個勵磁信號,步進電機旋轉1.8,這是三種勵磁方式中最簡單的一種。

其特點是:精確度好、消耗電力小,但輸出轉矩最小,振動較大。如果以該方式控制步進電機正轉,對應的勵磁順序如下表所示。若勵磁信號反向傳送,則步進電機反轉。表中的1和0表示送給電機的高電平和低電平。

 

②二相勵磁—在每一瞬間,步進電動機有兩個線圈同時導通。每送一個勵磁信號,步進電機旋轉1.8。

其特點是:輸出轉矩大,振動小,因而成爲目前使用最多的勵磁方式。如果以該方式控制步進電機正轉,對應的勵磁順序見下表。若勵磁信號反向傳送,則步進電機反轉。

 

  ③一二相勵磁—爲一相勵磁與二相勵磁交替導通的方式。每送一個勵磁信號,步進電機旋轉0.9。

其特點是:分辨率高,運轉平滑,故應用也很廣泛。如果以該方式控制步進電機正轉,對應的勵磁順序見下表。若勵磁信號反向傳送,則步進電機反轉。

 

6.步進電機的驅動

步進電機的驅動可以選用專用的電機驅動模塊,如L298, FF5754等,這類驅動模塊接口簡單,操作方便,它們既可驅動步進電機,也可驅動直流電機。除此之外,還可利用三極管自己搭建馭動電路。不過這樣會非常麻煩,可靠性也會降低。另外,還有一種方法就是使用達林頓驅動器ULN2003,該芯片單片最多可一次驅動八線步進電機,當然如果只有四線或六線制的也是沒有問題的。

首先我們看一下電路原理圖

 本實驗採用四線雙極性步進電機,該電機與TC1117連接如上圖所示,M_IN爲單片機控制口,M_OUT爲電機接入口,其中M_IN分別控制步進電機的相序A,B.

TC1117芯片工作邏輯真值表:

開發板上使用的 4線雙極性步進電機,其有兩相A,B,每個繞組有兩根線,A+和A-B+和 B-,運行方式可以是A+ —A-—B+—B-,如果想換個方向運行,可以是 A- —A+—B—B+。

步進電機的四個引腳A+、A-、B+、B-分別連接到OUA、OUTB、OUTC、OUTD四個引腳

 

實際物理連接圖如下:

 

 

示例程序爲:

 

   #include "reg52.h"
   
   typedef unsigned char u8;
   typedef unsigned int u16;

   sbit MOTOA = P1^0; //A+引腳
   sbit MOTOB = P1^1; //A-引腳
   sbit MOTOC = P1^2; //B+引腳
   sbit MOTOD = P1^3; //B-引腳

   #define SPEED 60000

   void delay(u16 i) //延時函數
   {
   while(i --);
   }

   void main()
   {

   P1 = 0x00; //電機處於待機狀態
   while(1)
   {
   MOTOA = 1; //A+狀態
   MOTOB = 0;
   MOTOC = 1;
   MOTOD = 1;
   delay(SPEED); //延時

   MOTOA = 0; //A-狀態
   MOTOB = 1;
   MOTOC = 1;
   MOTOD = 1;
   delay(SPEED); //延時

   MOTOA = 1; //B+狀態
   MOTOB = 1;
   MOTOC = 1;
   MOTOD = 0;
   delay(SPEED); //延時

   MOTOA = 1; //B-狀態
   MOTOB = 1;
   MOTOC = 0;
   MOTOD = 1;
   delay(SPEED); //延時

   }
   }




 

上例程序驅動步進電機的方向爲: A+ —A-—B+—B-,

如果想換個方向運行,也就是 A- —A+—B—B+,可以使用以下程序:

   #include "reg52.h"
   
   typedef unsigned char u8;
   typedef unsigned int u16;

   sbit MOTOA = P1^0; //A+引腳
   sbit MOTOB = P1^1; //A-引腳
   sbit MOTOC = P1^2; //B+引腳
   sbit MOTOD = P1^3; //B-引腳

   #define SPEED 60000

   void delay(u16 i) //延時函數
   {
   while(i --);
   }

   void main()
   {

   P1 = 0x00; //電機處於待機狀態
   while(1)
   {
   MOTOA = 0; //A-狀態
   MOTOB = 1;
   MOTOC = 1;
   MOTOD = 1;
   delay(SPEED); //延時

   MOTOA = 1; //A+狀態
   MOTOB = 0;
   MOTOC = 1;
   MOTOD = 1;
   delay(SPEED); //延時

   MOTOA = 1; //B-狀態
   MOTOB = 1;
   MOTOC = 0;
   MOTOD = 1;
   delay(SPEED); //延時

   MOTOA = 1; //B+狀態
   MOTOB = 1;
   MOTOC = 1;
   MOTOD = 0;
   delay(SPEED); //延時

   }
   }




如果想兩個方向輪流運行,可以將上面兩個程序結合在一塊使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章