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

来源:互联网 发布:highcharts 3d.js 编辑:程序博客网 时间:2024/04/27 20:10

第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编程中购买,这些相关硬件都由我们为您把关购买,为大家节省选择的精力与时间。同时也感谢大家对我们这些码农的支持。

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

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

3 0
原创粉丝点击