Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 如何做智能硬件開發 -- 直流馬達

如何做智能硬件開發 -- 直流馬達

編輯:關於Android編程

第6節 直流馬達

馬達是我們經常使用到的電動裝置,它可以將電能轉化成動能,驅動其他東西的運動。聽起來很抽象,舉幾個例子吧。我們小時候玩的四驅車,帶動輪子轉動的那個小裝置就是馬達;夏天讓風扇旋轉帶給我們涼意,也是馬達的功勞。

\

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

6.1 工作原理

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

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

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

\

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

\

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

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

6.2 連接方式

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

為此,可以使用專門的馬達擴展板,來連接使用馬達,

\

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

\

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

該模塊有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.3 代碼設計

首先要初始化INA與INB連接的接口,讓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);
    }
}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved