首页 > 代码库 > 手把手教你智能硬件开发(六)直流马达

手把手教你智能硬件开发(六)直流马达

第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);
    }
}

/*******************************************************************/
* 版权声明
* 本教程只在CSDN和安豆网发布,其他网站出现本教程均属侵权。

*另外,我们还推出了Arduino智能硬件相关的教程,您可以在我们的网店安豆的杂货铺中购买相关硬件。同时也感谢大家对我们这些码农的支持。

*最后再次感谢各位读者对安豆的支持,谢谢:)
/*******************************************************************/

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

    手把手教你智能硬件开发(六)直流马达