1. 程式人生 > >手把手教你智慧硬體開發(六)直流馬達

手把手教你智慧硬體開發(六)直流馬達

第6節 直流馬達

馬達是我們經常使用到的電動裝置,它可以將電能轉化成動能,驅動其他東西的運動。聽起來很抽象,舉幾個例子吧。

我們小時候玩的四驅車,帶動輪子轉動的那個小裝置就是馬達;夏天讓風扇旋轉帶給我們涼意,也是馬達的功勞。

根據使用電源的不同,可以將馬達分成直流馬達和交流馬達。我們做智慧硬體使用的基本都是直流馬達,通過馬達來驅動外接裝置運動。

6.1 工作原理

將電能轉化成動能的物理原理,我們在中學已經學過,這裡利用了兩個原理:電磁感應和磁鐵的同性相斥異性相吸。

  1. 將一根磁棒放在金屬罩中間,兩端懸上一個金屬柱子,金屬柱子上面有線圈;
  2. 當線圈通過電流的時候,就能產生磁場,磁棒根據極性改變位置;
  3. 改變電流方向,線圈磁場方向發生調換,磁棒再次根據極性改變位置;
  4. 如此往復,磁棒就旋轉了起來。

一個馬達的外形大致如此,

馬達加上一些結構,與輪胎結合起來就成了輪子

它有兩個接線的地方,一處接正極,另一處就接負極,

  1. 在不超過極限電壓的情況下,對馬達施加的電壓越大,馬達就轉動的越快;
  2. 調轉正負極的連線順序,馬達的旋轉方向也發生調轉;

6.2 連線方式

馬達的正負極不能直接連線到Arduino開發板的引腳上,必須使用一個轉換電路。否則馬達在轉動的過程中可能會產生強大的電流,擊穿開發板上的元器件。

為此,可以使用專門的馬達擴充套件板,來連線使用馬達,

也可以使用集成了轉換電路的馬達模組,例如風扇馬達模組,

在此我們選用集成了轉換電路的風扇馬達模組來講解。

該模組有4個引腳,

模組引腳 功能說明
INA 控制介面A
INB 控制介面B
VCC 直流電
GND 接地

因為要調整直流馬達的轉動速度,INAINB最好接到具有PWM功能的介面上,通過設定該引腳的級數數,來調節馬達的轉速。這裡,我們將INA連線到D9INB連線到D8

模組引腳 連線 Arduino擴充套件板
INA <–> D9組S引腳
INB <–> D8組S引腳
VCC <–> D8組V引腳
GND <–> D8組G引腳

6.3 程式碼設計

首先要初始化INAINB連線的介面,讓Arduino開發板擁有向它們輸出的能力,

//INA使用具有PWM功能的D9引腳
int INA = 9;
//INB使用具有PWM功能的D8引腳
int INB = 8;

void setup() {
    //設定引腳為輸出
    pinMode(INA, OUTPUT);
    pinMode(INB, OUTPUT);
}

INA引腳設定成低電平LOW,改變INB引腳的值,來達到控制馬達轉速的效果,

void setup() {
    //設定引腳為輸出
    pinMode(INA, OUTPUT);
    pinMode(INB, OUTPUT);
    digitalWrite(INA, LOW);
}

void loop() {
    //從0級到100級
    for(int level = 0 ; level < 100+1; level++)
    {
        //調整INB上的電壓級數,達到改變風扇轉速的效果
        analogWrite(INB, level);
        delay(100);
    }
}

這裡將調整的級數,調整在了0~100。理論上可以調整的級數應該是0~255級。但是由於馬達電流負載的原因,設定到高階數時,例如245級,會讓開發板過載。因此可以把最大級數設定的稍微小一點,例如230級

int INA = 9;
int INB = 8;

int START_LEVEL = 0;
int END_LEVEL = 230;

void setup() {
  pinMode(INA, OUTPUT);
  pinMode(INB, OUTPUT);
  digitalWrite(INA, LOW);
}

void loop() {

    //從9級慢慢加速到230級
    for(int level = START_LEVEL ; level < END_LEVEL+1; level++)
    {
        analogWrite(INB, level);
        delay(100);
    }

    //從230級慢慢減速到0級
    for(int level = END_LEVEL; level > START_LEVEL ; level--)
    {
        analogWrite(INB, level);
        delay(100);
    }
}

6.4 結果觀察

馬達開始緩慢的旋轉,越轉越快;達到最快轉速時,又開始減速,直到停止;整個過程周而復始。

6.5 馬達的反轉

如果想修改馬達旋轉的方向,可以將INB設定為低電平LOW,改變INA引腳的值,

int INA = 9;
int INB = 8;

int START_LEVEL = 0;
int END_LEVEL = 230;

void setup() {
  pinMode(INA, OUTPUT);
  pinMode(INB, OUTPUT);
}

void loop() {
    //朝著一個方向旋轉,先加速,再減速
    //INA設定為LOW
    digitalWrite(INA, LOW);
    for(int level = START_LEVEL ; level < END_LEVEL+1; level++)
    {
        //改寫INB的級數
        analogWrite(INB, level);
        delay(100);
    }
    for(int level = END_LEVEL; level > START_LEVEL ; level--)
    {
        //改寫INB的級數
        analogWrite(INB, level);
        delay(100);
    }

    //朝著另一個方向旋轉,先加速,再減速
    //INB設定為LOW
    digitalWrite(INB, LOW);
    for(int level = START_LEVEL ; level < END_LEVEL+1; level++)
    {
        //改寫INA的級數
        analogWrite(INA, level);
        delay(100);
    }
    for(int level = END_LEVEL; level > START_LEVEL ; level--)
    {
        //改寫INA的級數
        analogWrite(INA, level);
        delay(100);
    }
}

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

本系列課程使用到的Arduino開發板、擴充套件板以及其他相關的感測器,各位可以根據我們文章中介紹的硬體在淘寶網選購。
您也可以在我們的網店跟我學Arduino程式設計中購買,這些相關硬體都由我們為您把關購買,為大家節省選擇的精力與時間。同時也感謝大家對我們這些碼農的支援。

最後再次感謝各位讀者對安豆的支援,謝謝:)

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