0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Arduino提供的PWM控制功能入门(2)

冬至子 来源:乐文好墨 作者:乐文好墨 2023-10-31 16:37 次阅读

上回我们用 PWM 控制了一盏 LED 灯的亮度,实现了渐明渐暗的效果。今天就来用 PWM 控制一个直流电机的转速,实现逐渐加速,减速的效果。为了能清除看到效果,笔者还专门用拙劣的手工做了一个纸风车,粘到电机转轴上。下面就来动手做实验。

实验器材:

  1. Arduino Uno R3 芯片 x1
  2. Adafruit 电机驱动板(Motor Shield)V1 型 x1
  3. 直流电机 x1
  4. 电线 x2
  5. USB 数据线 x1
  6. PC x1

实验器材一览如下:

图片

注意事项:

Adafruit 电机驱动板是设计成兼容 Arduino Uno R3 芯片的,可以直接堆叠在 Arduino 上连接。

驱动板上的 jumper(在标注 PWRJMP,意为 power jumper 的位置)是用来决定 Arduino 和驱动板是否独立供电的。如果盖上 jumper,则驱动板由 Arduino供电;如果拔掉jumper,则驱动板独立供电。

驱动板若要独立供电,电源接标注 EXT_PWR(意为 external power)的 2 个接口。注意不要接反正负极,否则会烧坏驱动板甚至 Arduino!驱动板上LED 灯亮,表示驱动板供电正常。

实验原理:

PWM 全称 Pulse Width Modulation,它的原理,简而言之,是通过产生持续时间长短不一的数字脉冲,来模拟连续变化的电平(“捏造”模拟信号)。注意芯片上的标识, pin 号旁边有 ~ 符号的表示该 pin 支持 PWM。(更详尽的原理以后再做整理)

实验步骤:

1.连接硬件

首先将 Adafruit 电机驱动板直接堆叠插在 Arduino 板上,注意数字引脚对数字引脚,模拟引脚对模拟引脚,就可以很容易安装好。效果如图:

图片

b. Arduino 板用 USB 数据线接 PC。这时候 Arduino 和驱动板都有供电,2 个板子上的 LED 灯常亮;

c. 2 条电线穿进电机的 2 个脚,打个小结固定一下,连接顺序现在来说随意。这里提一下电线的准备,用剪刀剪出合适大小的电线后,用剪刀在电线的 2 端各去掉半个手指头长度的包皮,让导线头裸露;

d. 2 条电线另外一端接驱动板上标注 M3(意为 Motor 3)的 2 个脚。用 3 mm 十字螺丝刀拧松 2 个脚的螺丝,把电线放进去 2 只脚的压片下,然后拧紧螺丝,效果如图:

图片

2.下载安装电机驱动库

要用代码控制 Adafruit 电机驱动板,可以使用 Adafruit 提供的库函数,轻松上手。

然后打开 Arduino IDE,在菜单里,点击“项目”->“加载库”->“添加一个新 ZIP 库”,然后选择刚刚下载的 ZIP 压缩包就可以了。

3.编写程序

#include < AFMotor.h >

// 因为电机装在驱动板的 M3 位置,所以第一个参数是 3
// 第 2 个参数是 PWM 频率,如果电机接在 M1-M2 位上,则参数可选
// MOTOR12_64KHZ
// MOTOR12_8KHZ
// MOTOR12_2KHZ 
// MOTOR12_1KHZ
// 如果电机接在 M3-M4 位上,则参数可选
// MOTOR34_64KHZ
// MOTOR34_8KHZ
// MOTOR34_1KHZ
AF_DCMotor motor(3, MOTOR34_64KHZ);

void setup() {
    // 选择串口 Baud 率
    Serial.begin(9600);
    Serial.println("Motor test!");
}

void loop() {
    Serial.println("tick");
    // 设置电机向前运转
    motor.run(FORWARD);
    // 不断加速
    for (int i = 0; i < 255; i++) {
        motor.setSpeed(i);
        // 等待 0.1 s 让电机充分加速
        delay(100);
    }
    // 让电机恒速运转 10 s
    delay(10000);
    // 不断减速
    for (int i = 255; i > 0; i--) {
        motor.setSpeed(i);
        // 等待 0.1 s 让电机充分减速
        delay(100);
    }

    Serial.println("tock");
    // 释放电机,不运转
    motor.run(RELEASE);
    // 停转 1 s
    delay(1000);

    Serial.println("tack");
    // 设置电机向后运转
    motor.run(BACKWARD);
    // 不断加速
    for (int i = 0; i < 255; i++) {
        motor.setSpeed(i);
        // 等待 0.1 s 让电机充分加速
        delay(100);
    }
    // 让电机恒速运转 10 s
    delay(10000);
    // 不断减速
    for (int i = 255; i > 0; i--) {
        motor.setSpeed(i);
        // 等待 0.1 s 让电机充分减速
        delay(100);
    }

    Serial.println("tock");
    // 释放电机,不运转
    motor.run(RELEASE);
    // 停转 1 s
    delay(1000);
}

烧录到 Arduino 芯片上,可以看到电机按照我们设计的一样,先正向加速运转,然后恒速转动 10 秒,然后减速运转,停顿 1 秒,然后反向加速运转,恒速转动 10 秒,然后减速运转,停顿 1 秒,周而复始。

最后,为了更加明显的看到电机的转动,笔者给小电机安上了一个粗糙的纸风车,效果如下:

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 直流电机
    +关注

    关注

    35

    文章

    1689

    浏览量

    69860
  • 电机驱动
    +关注

    关注

    60

    文章

    1154

    浏览量

    86214
  • PWM控制
    +关注

    关注

    7

    文章

    189

    浏览量

    26155
  • Arduino
    +关注

    关注

    186

    文章

    6453

    浏览量

    185803
收藏 人收藏

    评论

    相关推荐

    如何在设计中使用Arduino的模拟功能

    。 每个 PWM 输出的 490 Hz(大约)方波的占空比经过编程后,能提供一个大小为 0 至 5 V、周期为 256 毫秒、增量为 2 毫秒的等效 RMS 电压(图 1)。 Arduino
    的头像 发表于 03-08 08:47 7780次阅读
    如何在设计中使用<b class='flag-5'>Arduino</b>的模拟<b class='flag-5'>功能</b>

    第42期《Arduino入门》善假篇 05:舵机的PWM控制原理#硬声创作季

    PWM控制舵机Arduino
    电子学习
    发布于 :2022年10月28日 21:01:43

    Arduino入门

    Arduino入门欢迎来到Arduino的世界入门所需Arduino Nano板介绍Arduino
    发表于 01-21 09:52

    ArduinoPWM控制代码

    如果你需要一个具体的代码示例,我可以为你提供一个ArduinoPWM控制代码。Arduino是一款常用的开源电子原型平台,它
    发表于 09-21 08:57

    arduino入门教程 非常适合入门

    arduino入门教程 非常适合入门
    发表于 09-21 09:20 67次下载
    <b class='flag-5'>arduino</b><b class='flag-5'>入门</b>教程 非常适合<b class='flag-5'>入门</b>

    Arduino实践中科学逻辑的应用和VVVV入门教程

    彩色POV,相机红外遥控器,玩转arduino控制器-PWM控制电机转速实验,通过网页远程配置及固件更新等资料
    发表于 11-01 10:51 19次下载
    <b class='flag-5'>Arduino</b>实践中科学逻辑的应用和VVVV<b class='flag-5'>入门</b>教程

    arduino 舵机控制pwm控制小车冲突解决资料下载

    电子发烧友网为你提供arduino 舵机控制pwm控制小车冲突解决资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料
    发表于 04-09 08:51 2次下载
    <b class='flag-5'>arduino</b> 舵机<b class='flag-5'>控制</b>与<b class='flag-5'>pwm</b><b class='flag-5'>控制</b>小车冲突解决资料下载

    Arduino入门版使用教程.pdf

    Arduino入门版使用教程.pdf
    发表于 02-14 10:29 0次下载

    Arduino入门

    电子发烧友网站提供Arduino入门板.zip》资料免费下载
    发表于 07-18 14:46 2次下载
    <b class='flag-5'>Arduino</b><b class='flag-5'>入门</b>板

    ARDUINO PWM太阳能充电控制

    电子发烧友网站提供ARDUINO PWM太阳能充电控制器.zip》资料免费下载
    发表于 08-01 10:21 13次下载
    <b class='flag-5'>ARDUINO</b> <b class='flag-5'>PWM</b>太阳能充电<b class='flag-5'>控制</b>器

    如何使用Arduino生成的PWM控制交流风扇的速度

    在这个项目中,我们将演示使用 TRIAC 的 Arduino 交流风扇速度控制。这里使用交流信号的相位控制方法来控制交流风扇的速度,使用 Ardui
    的头像 发表于 08-18 16:26 1.1w次阅读
    如何使用<b class='flag-5'>Arduino</b>生成的<b class='flag-5'>PWM</b>来<b class='flag-5'>控制</b>交流风扇的速度

    Arduino PWM控制的对称电源

    电子发烧友网站提供Arduino PWM控制的对称电源.zip》资料免费下载
    发表于 11-01 14:22 0次下载
    <b class='flag-5'>Arduino</b> <b class='flag-5'>PWM</b><b class='flag-5'>控制</b>的对称电源

    Arduino Uno入门

    电子发烧友网站提供Arduino Uno入门.zip》资料免费下载
    发表于 11-21 09:24 5次下载
    <b class='flag-5'>Arduino</b> Uno<b class='flag-5'>入门</b>

    带有Arduino入门套件的秒表

    电子发烧友网站提供《带有Arduino入门套件的秒表.zip》资料免费下载
    发表于 11-22 11:59 0次下载
    带有<b class='flag-5'>Arduino</b><b class='flag-5'>入门</b>套件的秒表

    Arduino提供PWM控制功能入门(1)

    今天来学习一下 Arduino 提供PWM 控制功能,它可以用来控制电机转速,LED 明亮等
    的头像 发表于 10-31 16:32 1895次阅读
    <b class='flag-5'>Arduino</b><b class='flag-5'>提供</b>的<b class='flag-5'>PWM</b><b class='flag-5'>控制</b><b class='flag-5'>功能</b><b class='flag-5'>入门</b>(1)