專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

51單片機(jī)學(xué)習(xí)之3-步進(jìn)電機(jī)

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年10月20日   【字體:

第八集

講解用移位和或運(yùn)算實(shí)現(xiàn)流水燈的方法《51單片機(jī)復(fù)習(xí)筆記2》里面的代碼。

講解了用函數(shù)的方法實(shí)現(xiàn)流水燈。

 

第九集

一、ULN2003芯片。

用于增強(qiáng)單片機(jī)IO口的驅(qū)動(dòng)能力。

ULN2003是高耐壓、大電流達(dá)林頓陳列,由七個(gè)硅NPN達(dá)林頓管組成。

ULN2003是大電流驅(qū)動(dòng)陣列,多用于單片機(jī)、智能儀表、PLC、數(shù)字量輸出卡等控制電路中。可直接驅(qū)動(dòng)繼電器等負(fù)載。

ULN2003 的每一對(duì)達(dá)林頓都串聯(lián)一個(gè)2.7K 的基極電阻,5V 的工作電壓下它能與TTL CMOS 電路

直接相連,可以直接處理原先需要標(biāo)準(zhǔn)邏輯緩沖器來(lái)處理的數(shù)據(jù)。

ULN2003 工作電壓高,工作電流大,灌電流可達(dá)500mA,并且能夠在關(guān)態(tài)時(shí)承受50V-95的電壓,輸出還可以在高負(fù)載電流并行運(yùn)行。ULN2003 采用DIP—16 SOP—16 塑料封裝。


 

 





 


 
 

一、蜂鳴器

驅(qū)動(dòng)蜂鳴器很簡(jiǎn)單,由于51單片機(jī)的IO口驅(qū)動(dòng)能力還不足以驅(qū)動(dòng)蜂鳴器,所以需要加一個(gè)三極管來(lái)做電子開(kāi)關(guān)控制蜂鳴器。(當(dāng)然也可以用ULN2003)。上面電路圖中其實(shí)不接電阻也可以驅(qū)動(dòng)蜂鳴器,當(dāng)然R26的分支需要去掉。FM接在單片機(jī)的P2^3IO口上并給低電平即可讓蜂鳴器鳴響。
 
 

 

第十集

一、步進(jìn)電機(jī)

 步進(jìn)電機(jī)和我們以前玩的四驅(qū)車(chē)?yán)锩娴鸟R達(dá)是不一樣的。里面的馬達(dá)是連續(xù)旋轉(zhuǎn)的,而步進(jìn)電機(jī)卻是一步一步地轉(zhuǎn)動(dòng),準(zhǔn)確來(lái)說(shuō)是每次只轉(zhuǎn)動(dòng)一個(gè)很小的角度,用手也是轉(zhuǎn)不動(dòng)的。

對(duì)于角位移步進(jìn)電機(jī)可以通過(guò)控制脈沖的個(gè)數(shù)來(lái)控制角位移量(即幾個(gè)脈沖就轉(zhuǎn)動(dòng)幾個(gè)步距角),達(dá)到準(zhǔn)確定位的目的。可以通過(guò)控制脈沖的頻率來(lái)控制步進(jìn)電動(dòng)機(jī)的轉(zhuǎn)動(dòng)速度和加速度達(dá)到調(diào)速的功能。

步進(jìn)電機(jī)按相數(shù)分可分為:?jiǎn)蜗、雙相和多相三種。

 

步進(jìn)電機(jī)的工作原理:(這里是3相步進(jìn)電機(jī))里面的12,3,4是轉(zhuǎn)子,外面的AA1、B、B1、CC1是定子。

 

 

1相勵(lì)磁方式:

 

當(dāng)A相通電時(shí),產(chǎn)生A-A1軸線方向的磁通,并通過(guò)轉(zhuǎn)子形成閉合回路。這時(shí)候A、A1就成了電磁鐵的N、S極。在磁場(chǎng)的作用下,轉(zhuǎn)子總是力圖轉(zhuǎn)到磁阻最小的位置,也就是要轉(zhuǎn)到轉(zhuǎn)子的齒對(duì)齊A、A1極的位置,也就是說(shuō)轉(zhuǎn)子的1、3會(huì)對(duì)著定子的A、A1(圖a);

緊接著B相通電(A、C兩相不通電),轉(zhuǎn)子就會(huì)向順時(shí)針?lè)较蜣D(zhuǎn)42對(duì)齊到定子的B1、B(圖b

緊接著C相通電(A、B兩相不通電),轉(zhuǎn)子就會(huì)向順時(shí)針?lè)较蜣D(zhuǎn)13對(duì)齊到定子的C1、C(圖c

當(dāng)一直重復(fù)著上面的步驟ABC那么轉(zhuǎn)子就會(huì)一直順時(shí)針?lè)较蜣D(zhuǎn)動(dòng)。每轉(zhuǎn)動(dòng)一次都只是轉(zhuǎn)動(dòng)一個(gè)固定的角度,也就是步距角。。當(dāng)重復(fù)的速度越快,那么轉(zhuǎn)動(dòng)的速度也就越快。

這種通電方式是1相勵(lì)磁方式。

 

 

1-2相勵(lì)磁方式:



 

 

設(shè)A相先通電,轉(zhuǎn)子就會(huì)向順時(shí)針?lè)较蜣D(zhuǎn)1、3對(duì)齊到定子的A、A1(圖a

接著在A相通電的情況下,繼續(xù)給B相通電。這時(shí)B、B1極對(duì)轉(zhuǎn)子2、4產(chǎn)生磁力,但是A,A1繼續(xù)拉住1、3,因此轉(zhuǎn)子會(huì)轉(zhuǎn)到兩個(gè)磁拉力平衡為止(如圖b),從外看來(lái),轉(zhuǎn)子順時(shí)針轉(zhuǎn)動(dòng)了一個(gè)很小的角度。

接著A相斷電,B相繼續(xù)通電。這時(shí)轉(zhuǎn)子順時(shí)針轉(zhuǎn)動(dòng)2、4和定子BB1極對(duì)齊(如圖c)。

接著B相通電的情況下,給C相通電。這時(shí)C、C1極對(duì)轉(zhuǎn)子31產(chǎn)生磁力,而B、B1會(huì)繼續(xù)拉住24,因此轉(zhuǎn)子會(huì)順時(shí)針轉(zhuǎn)動(dòng)一個(gè)小角度(如圖d)。

一直重復(fù)以上步驟AA、BBBCCC、AA.....,一樣可以讓步進(jìn)電機(jī)轉(zhuǎn)動(dòng)起來(lái),其中每一個(gè)步驟通電都會(huì)讓步進(jìn)電機(jī)轉(zhuǎn)動(dòng)一個(gè)角度,這個(gè)角度是1相勵(lì)磁方式角度的一半(1/2),這就是稱為最小步距角。

 



 

這種步進(jìn)電機(jī)叫減速步進(jìn)電機(jī)(里面有減速齒輪),減速比是1/64。

里面減速齒輪轉(zhuǎn)動(dòng)64圈,外面的轉(zhuǎn)子才轉(zhuǎn)動(dòng)1圈。

驅(qū)動(dòng)電壓為5V,步進(jìn)()角度5.625*1/64,采用54相。

線的順序是VCC、A、B、CD。


 

1相勵(lì)磁方式驅(qū)動(dòng)程序代碼:實(shí)現(xiàn)讓步進(jìn)電機(jī)轉(zhuǎn)動(dòng)360°。

 

現(xiàn)在知道步進(jìn)電機(jī)的最小步距角是5.625*1/64  = 0.087890625°

1相勵(lì)磁方式 每通一相電(即每轉(zhuǎn)動(dòng)一次)的角度應(yīng)該是最小步距角的2倍(即 0.087890625°*2=0.17578125)。一個(gè)循環(huán)就是4相: ABCD(即0.17578125*4=0.703125°)。

那么一個(gè)循環(huán)就是0.703125°,要幾個(gè)循環(huán)才能轉(zhuǎn)動(dòng)360°呢?360°/0.703125 = 512個(gè)循環(huán)。
 

下面這份代碼是通過(guò)按位方式給A、B、C、D相輪流通電。
 

#include "reg51.h"

#define uchar unsigned char 

#define uint unsigned int 

 

sbit DA = P1^0;                    // A

sbit DB = P1^1;                    // B

sbit DC = P1^2;                    // C

sbit DD = P1^3;                    // D
 

 

void delay(uint x)

 

{
   
uint y;

   for(;x>0;x--)

    for(y=10;y>0;y--);

 

 

}

void main()

{  

   uint i = 512;

   uchar delayCout = 25;

   while (i--)                // 循環(huán)512次 就轉(zhuǎn)動(dòng)360°的角度。

   {

      DA = 1;                 // A相通電

      delay(delayCout);        // 需要延時(shí)一小段時(shí)間讓硬件反應(yīng)的過(guò)來(lái)

      DA = 0;                 // A相斷電

   

      DB = 1;                 // B相通電

      delay(delayCout);        // 需要延時(shí)一小段時(shí)間讓硬件反應(yīng)的過(guò)來(lái)

      DB = 0;                 // B相斷電

   

      DC = 1;                 // C相通電

      delay(delayCout);         // 需要延時(shí)一小段時(shí)間讓硬件反應(yīng)的過(guò)來(lái)

      DC = 0;                 // C相斷電
 

 

      DD = 1;                 // D相通電

      delay(delayCout);        // 需要延時(shí)一小段時(shí)間讓硬件反應(yīng)的過(guò)來(lái)

      DD = 0;                 // D相斷電

   }

   while(1);                  // 旋轉(zhuǎn)完后就停在這里,避免重復(fù)執(zhí)行main函數(shù)

}

 

上面那份源碼很好理解,下面是按邏輯運(yùn)算實(shí)現(xiàn)的通斷A、BC、D四相:

#include "reg51.h"

#define uchar unsigned char 

#define uint unsigned int 

 

void delay(uint x)

 

{
  
uint y;

 for(;x>0;x--)

    for(y=10;y>0;y--);

 

 

}

void main()

{  

   uint i = 512; 

   uchar Xh;

   uchar delayCout = 25;

 

   while (i--)                        // 循環(huán)512次 就轉(zhuǎn)動(dòng)360°的角度。調(diào)整角度

   {

      Xh = 3;

      P1 = 0x01;                      // P1 == 0000 0001 相當(dāng)于 P1^01  A相通電

      delay(delayCout);                // 延時(shí)一段時(shí)間讓步進(jìn)電機(jī)能反應(yīng)過(guò)來(lái)

      while(Xh--)

      { 

          P1 <<= 1;                    // 第一次循環(huán) 0000 0001<<1 = 0000 0010 相當(dāng)于 P1^1 1同時(shí)將P1^00 A相斷電 B相通
                                            電
每次循環(huán)都會(huì)將1向左移動(dòng)一位
        
delay(delayCout);            // 這里是調(diào)節(jié)切換速度,即轉(zhuǎn)動(dòng)速度

       }

    }

   while(1);                         // 旋轉(zhuǎn)完后就停在這里,避免重復(fù)執(zhí)行main函數(shù)

 

}

 

 

 

 


步進(jìn)電機(jī)主要知道它的工作原理和計(jì)算角度。步進(jìn)電機(jī)最大的方便是可以精確控制轉(zhuǎn)動(dòng)角度和速度。

關(guān)閉窗口

相關(guān)文章