天天看點

手把手教你智能硬體開發(六)直流馬達第6節 直流馬達

第6節 直流馬達

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

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

手把手教你智能硬體開發(六)直流馬達第6節 直流馬達

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

6.1 工作原理

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

  1. 将一根磁棒放在金屬罩中間,兩端懸上一個金屬柱子,金屬柱子上面有線圈;
  2. 當線圈通過電流的時候,就能産生磁場,磁棒根據極性改變位置;
  3. 改變電流方向,線圈磁場方向發生調換,磁棒再次根據極性改變位置;
  4. 如此往複,磁棒就旋轉了起來。
手把手教你智能硬體開發(六)直流馬達第6節 直流馬達

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

手把手教你智能硬體開發(六)直流馬達第6節 直流馬達

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

手把手教你智能硬體開發(六)直流馬達第6節 直流馬達

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

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

6.2 連接配接方式

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

為此,可以使用專門的馬達擴充闆,來連接配接使用馬達,

手把手教你智能硬體開發(六)直流馬達第6節 直流馬達

也可以使用內建了轉換電路的馬達子產品,例如風扇馬達子產品,

手把手教你智能硬體開發(六)直流馬達第6節 直流馬達

在此我們選用內建了轉換電路的風扇馬達子產品來講解。

該子產品有4個引腳,

子產品引腳 功能說明
INA 控制接口A
INB 控制接口B
VCC 直流電
GND 接地

因為要調整直流馬達的轉動速度,

INA

INB

最好接到具有

PWM

功能的接口上,通過設定該引腳的級數數,來調節馬達的轉速。這裡,我們将

INA

連接配接到

D9

INB

連接配接到

D8

子產品引腳 連接配接 Arduino擴充闆
INA <–> D9組S引腳
INB <–> D8組S引腳
VCC <–> D8組V引腳
GND <–> D8組G引腳
手把手教你智能硬體開發(六)直流馬達第6節 直流馬達

6.3 代碼設計

首先要初始化

INA

INB

連接配接的接口,讓

Arduino

開發闆擁有向它們輸出的能力,

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

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 =  ; level < +; level++)
    {
        //調整INB上的電壓級數,達到改變風扇轉速的效果
        analogWrite(INB, level);
        delay();
    }
}
           

這裡将調整的級數,調整在了

0~100

。理論上可以調整的級數應該是

0~255

級。但是由于馬達電流負載的原因,設定到進階數時,例如

245級

,會讓開發闆過載。是以可以把最大級數設定的稍微小一點,例如

230級

int INA = ;
int INB = ;

int START_LEVEL = ;
int END_LEVEL = ;

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

void loop() {

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

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

6.4 結果觀察

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

手把手教你智能硬體開發(六)直流馬達第6節 直流馬達

6.5 馬達的反轉

如果想修改馬達旋轉的方向,可以将

INB

設定為低電平LOW,改變

INA

引腳的值,

int INA = ;
int INB = ;

int START_LEVEL = ;
int END_LEVEL = ;

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

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

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

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

本系列課程使用到的Arduino開發闆、擴充闆以及其他相關的傳感器,各位可以根據我們文章中介紹的硬體在淘寶網選購。

您也可以在我們的網店跟我學Arduino程式設計中購買,這些相關硬體都由我們為您把關購買,為大家節省選擇的精力與時間。同時也感謝大家對我們這些碼農的支援。

最後再次感謝各位讀者對

安豆

的支援,謝謝:)

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

繼續閱讀