Arduino电子制作基础⑤ 驱动电机并实现自动控制

第1篇:让电子元器件动起来!
第2篇:Arduino的准备工作
第3篇:用数字输出来控制LED点亮
第4篇:LED的亮度调节

 

※本翻译文章最初发表于2022年5月12日,现重新编辑后再次发表。

虽然Devices Plus已经介绍过Arduino的多种应用和作品示例,但是了解相关基础知识对于任何项目的构建仍然是非常重要的!
这次,我们将为您介绍Arduino电子制作的基础知识。此次的分享嘉宾是著名的福田和宏老师,他因编写了《有这本书足够!用Arduino开始电子制作 超简单入门教程》等书籍而广为人知。

上一篇中,我们成功地对LED的亮度进行了控制,在本文中,将为大家介绍大电流电机的控制方法。

电机可用来驱动各种设备,例如无人机和汽车。电机是一种电子产品,当连接到电源时可以产生旋转运动。通过给轮胎和螺旋桨安装电机,可以利用电机的旋转来完成移动和上升等动作。

使用Arduino也可以控制电机。与上一篇中介绍过的LED项目一样,您可以通过接通和关断提供给电机的电源来控制电机旋转或停止。通过与其他传感器等器件结合使用,还可以实现比如当障碍物接近时电机停动这样的自动控制。

01

当电源方向反接时,电机会向相反的方向旋转。也可以通过调整流过的电流量来改变转速。基于这些原理,可以实现很多复杂的动作,比如在电机高速旋转时移动,在逐渐减速时停止在期望的目标位置,在遇到障碍物时回头向另一个方向移动。所以在本文中,我们将一起来了解使用Arduino控制电机的方法。

 

目录

  1. 驱动电机需要驱动器
  2. 将电机连接到Arduino
  3. 通过程序控制电机
  4. 改变电机的转速

 

驱动电机需要驱动器

通过Arduino的数字输出,可以在High和Low之间切换,我们曾用来控制LED的闪烁。使用该功能,应该还可以为电机供电。但是,实际上,即使您将电机直接连接到Arduino,电机还是无法运行的。

使电机运行需要大电流。例如,在本次使用的电机“RE-280RA”的情况下,可能会流过1A以上的电流。但是,Arduino的数字输出引脚最多只能承受20mA的电流。如果施加比这更多的电流,Arduino本身可能会损坏。因此,我们需要将电机连接到Arduino的输出引脚并对其进行控制。

11

这里我们使用的是“电机驱动器”。电机驱动器是用来控制电机的电子器件。我们需要准备一个将电机连接到电源以使电机运行的电路,并在其中插入电机驱动器。电机驱动器可通过外部信号导通和关断电机运行电路,并可控制电机的旋转和停止。由于控制信号中几乎不会流过电流,因此即使连接Arduino,也可以毫无问题地控制电机。

12

另外,通过电机驱动器,还可以利用控制信号切换旋转方向。电机驱动器配有两个控制引脚,一个设置为High时正转,另一个设置为High时反转。这使得电机驱动器可以控制电机的正转、反转和停止。

 

将电机连接到Arduino

现在让我们尝试利用Arduino来控制电机。这部分操作将使用以下电子元器件,因此请确保您已经准备好它们。

直流电机

这是电机本体。其中,可以用干电池等的直流电控制的电机称为“直流电机”。这次,我们将使用“RE-280RA”。RE-280RA可施加高达4.5V的电压。

21

电机驱动器

我们将使用电机驱动器来控制电机。驱动器具有根据来自Arduino的信号给电机供电并控制电机转向等功能。
此次我们使用的产品规格如下:

【绝对最大额定值(Ta=25℃)】
电源电压(VCC):18V
电源电压(VM):18V
输出电流(lomax):1A
工作温度范围:-20〜75℃
保存温度范围:-55〜150℃

【推荐工作范围】
电源电压(VCC):6.5〜15V
电源电压(VM):6.5〜15V
输出H电压设置:

编号 引脚名 功能
1 VREF 输出H电压设置引脚
2 OUT2 输出引脚
3 RNF 输出端GND
4 OUT1 输出引脚
5 VM 电源(电机输出端)
6 VCC 电源(小信号端)
7 FIN 控制输入(正)
8 GND GND
9 RIN 控制输入(反)

0.1μF电容器

电容器是可以储存少量电能的电子元件。电机在工作过程中会产生噪声。噪声可能会对其他电子元器件的工作产生不利影响。因此,可以通过在电机的两个引脚上连接电容器来降低噪声。

23

10kΩ(1/4W)电阻器

为了防止流过突发大电流损坏电子元器件,可以使用电阻器来抑制电流。此次,为了能给电机提供指定的电压,我们在Arduino的3.3V引脚上连接了电机驱动器。通常情况下,几乎没有电流流过,但由于在某些情况下可能会有流过大电流的风险,因此连接了一个10kΩ的电阻器以防止流过大电流。这个10kΩ电阻器上印有“棕黑橙金”四色颜色代码。

24

电池

电池扣

我们将使用干电池作为驱动电机的动力源。在这里使用的是可提供9V电压的006P。另外,还会使用电池扣将电池连接到面包板上。

25

26

鳄鱼夹线

电机有引脚,需要连接到面包板。通常是将导线焊接到引脚上。但是如果您使用鳄鱼夹线,只需将鳄鱼夹夹住电机的引脚即可实现接线,可以省去焊接的麻烦。

27

准备好所需组件后,如下所示进行连接。

28

用鳄鱼夹夹住电机引脚,将电机连接到电机驱动器的引脚2和4。注意,在电机工作期间可能会产生噪声,噪声可能会影响其他设备工作,因此,需要将电容器连接到电机的两个引脚来降低噪声。

电机可以由单独准备的电池供电。因此,可以通过将电池连接到电机驱动器的引脚5和3来实现电池供电。

此外,本次使用的电机的供电电压范围为4.5V以内。因此,使用9V电池时,电压过高,可能会损坏电机。因此,请在电机驱动器的引脚1处指定输出至电机的最大电压。本次我们为电机提供3.3V的电压。将Arduino 3.3V电源连接到引脚1并指定最大电压值。电机旋转可以通过电机驱动器的引脚7和9来控制。这意味着需要分别连接到Arduino的引脚5和6,通过Arduino的输出对其进行控制。

 

通过程序控制电机

完成连接后,让我们实际尝试使用程序来控制电机。电机的旋转可以通过Arduino引脚5和6的输出来控制。旋转、停止和旋转方向都可以通过将这两个引脚设置为High或Low来控制。在BA6956AN的情况下,可以进行如下控制:

BA6956AN Connector Connector 7 Connector 9
Connector Connected to Arduino Connector 5 Connector 6
Stop Low Low
Normal Rotation High Low
Inverse Rotation Low High
Breaker High High

要正转时,使引脚5输出High,使引脚6输出Low。将以下程序写入Arduino,电机将开始正转。

const int MT_F = 5;
const int MT_R = 6;

void setup(){
    pinMode( MT_F, OUTPUT );
    pinMode( MT_R, OUTPUT );
}

void loop(){
    degitalWrite( MT_F, HIGH );
    degitalWrite( MT_R, LOW );

    delay( 1000 );
}

在第10行设置了引脚5输出High,在第11行设置了引脚6输出Low。
如果要反转,则需要使引脚5输出Low,使引脚6输出High。
程序如下:

const int MT_F = 5;
const int MT_R = 6;

void setup(){
    pinMode( MT_F, OUTPUT );
    pinMode( MT_R, OUTPUT );
}

void loop(){
    degitalWrite( MT_F, LOW );
    degitalWrite( MT_R, HIGH );

    delay( 1000 );
}

在第10行设置了引脚5输出Low,在第11行设置了引脚6输出High。如果要使电机停止运转,则需要让引脚5和6都输出Low。程序如下。

const int MT_F = 5;
const int MT_R = 6;

void setup(){
    pinMode( MT_F, OUTPUT );
    pinMode( MT_R, OUTPUT );
}

void loop(){
    degitalWrite( MT_F, LOW );
    degitalWrite( MT_R, LOW );

    delay( 1000 );
}

另外,如果引脚5和6都输出High,则会启动制动器,可以让电机在比两个引脚都置Low时更短的时间内停止运转。

 

改变电机的转速

上次,我们通过使用“PWM”这种输出方法成功地改变了LED的亮度。在电机上,也可以通过使用PWM控制来改变转速。通过在短时间内切换High和Low,电机在旋转和停止之间交替切换,转速实际上比正常速度慢。High的时间越长,转速越快;反之High的时间越短,转速越慢。

对于电机而言,通过PWM来输出想要旋转的方向的控制引脚,并使另一个引脚始终保持在Low的状态。正转时,通过PWM输出引脚5 并使引脚6保持在Low状态。反转时,通过PWM输出引脚6,并使引脚5保持在Low状态。下面是控制正转速度的程序:

const int MT_F = 5;
const int MT_R = 6;

void setup(){
    pinMode( MT_F, OUTPUT );
    pinMode( MT_R, OUTPUT );
}

void loop(){
    analogWrite( MT_F, 128 );
    analogWrite( MT_R, 0 );

    delay( 1000 );
}

在程序中,在第10行设置为向引脚5输出PWM比率的一半(最大为255),在第11行使引脚6保持在Low状态。当您改变第10行的数字时,速度也会随之改变。但是,如果High小于某个特定的比率,电机将不会旋转。如果减小该值电机不旋转,就请尝试指定更高的值。您可以通过逐渐增加或减少引脚5输出的值来逐渐改变速度。在接下来的程序中,转速将从停止状态逐渐提高,当达到最大值时,速度将会逐渐降低并最终停止运转。

const int MT_F = 5;
const int MT_R = 6;

void setup(){
    pinMode( MT_F, OUTPUT );
    pinMode( MT_R, OUTPUT );
}

void loop(){
    int speed;
    
    analogWrite( MT_F, 0 );
    analogWrite( MT_R, 0 );
    
    speed = 0;
    while( speed <= 255 ){
        analogWrite( MT_F, speed );
        delay( 100 );
        speed = speed + 5;
    }
    
    delay( 5000 );

    speed = 255;
    while( speed >= 0 ){
        analogWrite( MT_F, speed );
        delay( 100 );
        speed = speed - 5;
    }

    delay( 5000 );

}

在本文中,我们了解了通过Arduino控制LED和电机等电子产品的方法。下一篇将为您介绍如何通过Arduino确认开关的状态。

※希望了解更多有关电机驱动器基础知识的读者朋友,欢迎访问ROHM官网的“R课堂”!

 

 

本系列连载的内容

第1篇:让电子元器件动起来!
第2篇:Arduino的准备工作
第3篇:用数字输出来控制LED点亮
第4篇:LED的亮度调节
第5篇:驱动电机并实现自动控制(本文)
第6篇:读取开关状态
第7篇:用模拟输入来读取电压
总结:Arduino电子制作基础知识总结! 基于微控制器的电子制作基础之基础篇

福田和宏
福田和宏

作家,居住在日本札幌。喜欢撰写有关电子创作、电脑、Linux、智能手机等方面的文章。在为“Raspberry Pi Magazine”和“日经Linux”供稿。著有《这本书足够!Raspberry Pi超简单入门教程》(SOTECHSHA)、《学习各种电子元器件的控制!Arduino电子创作 实战教程》(SOTECHSHA)、《Arduino实用入门》(技术评论出版社)等书籍。 目前,创办了“札幌电子工艺部”(https://sapporo-elec.com/),这里汇集了众多电子创作发烧友,大家使用各自的电子技能创作各种作品。任何人都可以参加,也期待您的加入!

相关文章

  1. Arduino电子制作基础⑦ 用模拟输入来读取电压

  2. Arduino电子制作基础⑥ 读取开关状态

  3. 11_2

    Arduino电子制作基础④ 调节LED的亮度

  4. 01

    Arduino电子制作基础③ 用数字输出来控制LED点亮

  5. 01-1

    Arduino电子制作基础② Arduino的准备工作

  6. 01_new

    Arduino电子制作基础①让电子元器件动起来!

  7. 795316b92fc766b0181f6fef074f03fa

    从历史到使用方法的全面了解!人气微控制器开发板Arduino究竟是何方神圣?

TECH INFO

  • Sugiken老师的电机驱动器课堂
  • 重点必看
  • 技术分享
  • Arduino入门指南

基础知识

  • Si功率元器件
  • IGBT功率元器件
  • 热设计
  • 电路仿真
  • 开关噪声-EMC
  • AC/DC
  • DC/DC
  • 电机
  • 传递函数

工程技巧


Sugiken老师的电机驱动器课堂

PICK UP

PAGE TOP