Arduino应用——PWM控制直流电机风扇

  • PWM原理
  • 实验器件
  • 功能描述
  • 接线图/原理图
  • 实现代码
  • 结果

最近在使用arduino UNO开发板完成课程小作业。其中一个要求设计一个电风扇控制系统,要求能够通过PWM调节风扇的转速。期间搜索了许多例程和方法,但受限于器件,效果不好。最后融合了两种方法,成功实现控制功能,因此在这里总结出来。

PWM原理

根据arduino官方社区的定义,PWM即脉冲宽度调制,是一种通过数字控制方式获得模拟结果的技术。数字控制用于创建方波,即在on和off之间切换的信号。通过改变信号处于ON状态时间和处于OFF状态时间的比例,这种模式可以模拟板子从Vcc(对UNO是5V)到off(GND,即0V)的所有电压。“ON”的持续时间称为 脉冲宽度。更改或调制脉冲宽度可以获得变化的模拟值。如果用LED灯足够快地重复此开关模式,效果相当于用一个介于0~Vcc之间的稳定电压,控制着LED灯的亮度。

0%占空比的图中,绿线代表固定时间段。如果arduino的PWM频率为500Hz,则该段持续时间或周期为2毫秒。analogWrite()函数的写入范围是0-255,那么analogWrite(255)代表请求100%的占空比(始终打开),而analogWrite(127)则是50%的占空比(一半时间)。

实验器件

器件 数目
Arduino UNO及USB下载线 1
ULN2003 1
大面包板 1
直流电机 1
小风扇 1
4.7kΩ电阻 2
四角按键开关 2
杜邦线 若干


这里在附上这些器件的官方指南和工作原理的说明。

  • ULN2003
    是一种高压大电流的共发射极达林顿晶体管数组集成电路,内含7组达林顿对管,每组对管的电流容量是500mA,输出的电压最高50V。该集成电路还集成了7只共阴极形式连接的续流二极管,用于电感性负载的开关动作的电流续流。ULN2003A常见的封装形式有PDIP、SOIC、SOP或TSSOP。

实际操作时,ULN2003驱动板的IN1连接arduino的数字IO口9,供电口分别连接arduino的5V和gnd口。步进电机驱动部分最上方的接口连接直流电机。

  • 四角按键开关怎么接线
  • 直流电机

    直流电机两端无正负之分。

功能描述

Arduino的板载输出电流是不够的,所以我们得需要借助ULN2003驱动板来实现。
通过加速和减速按键,能够控制负载/电机两端电压,改变电机转速。
PWM频率一定时,脉冲宽度越大,占空比越大,提供给电机的平均电压越大,电机转速就越高。反之脉冲宽度越小,则占空比越小,提供给电机的平均电压越小,电机转速就低。

接线图/原理图

实现代码

代码及注释如下,可供参考。

// 定义引脚
const int buttonPin1 = 7; //定义buttonPin1引脚为7,加速按键
const int buttonPin2 = 2; //定义buttonPin2引脚为8,减速按键
const int motorPin = 9;   //定义motorPin引脚为9,驱动电机int buttonState1 = 0;
int buttonState2 = 0;
int outputValue = 0;
int a1 = 0; //占空比,这里取0-255void setup() {//输入输出状态定义pinMode(buttonPin1, INPUT);pinMode(buttonPin2, INPUT);pinMode(motorPin, OUTPUT);Serial.begin(9600); //定义串口波特率
}void loop() {// 串口监视器打印按键状态和电机转速buttonState1 = digitalRead(buttonPin1);buttonState2 = digitalRead(buttonPin2);Serial.print("加速按钮=");Serial.println(buttonState1);Serial.print("减速按钮=");Serial.println(buttonState2);delay(1000);outputValue=analogRead(motorPin); //outputValue:0~1023Serial.print("output=");Serial.println(outputValue);if(outputValue<=500){if(buttonState1 == HIGH) { //如果加速按键按下a1 += 20; // a1的变化数值可以根据实际需求调整analogWrite(motorPin, a1); //将a的值赋给motorPindelay(1000); //延迟1s} if(buttonState2 == HIGH) { //如果减速按键按下a1 -= 20;analogWrite(motorPin, a1);delay(1000);}}
}

结果

程序烧录到arduino板子上后,打开串口监视器,同时随机按下按键,观察风扇转动情况与串口监视器读数。


总的来说,编程可以实现按键控制风扇转速增加/减小。

  • 但是由于代码本身没有按键去抖动的保护,按下按键后,作用到电机的结果有延迟,或者速度控制不是很稳定。后续可以进一步改进,提高系统稳定性。
  • analogRead()读取到的电机接口状态在0-1023之间,尽管初始化时已经通过analogWrite()将状态设为0,但是一开始读取到的接口状态并非0而是334左右,这意味着一开始作用到电机上的电压约为384/1024*5=1.631V,可能是ULN2003驱动板的作用,这个现象还可以继续深入探索。

Arduino应用——PWM控制直流电机风扇相关推荐

  1. 【在线仿真】Arduino UNO PWM 控制直流电机转速

    [在线仿真]Arduino UNO PWM 控制直流电机转速 在线仿真 接线说明 通过三极管来驱动直流电机电池正极接电机的一端,电机的另一端接到NPN三极管的集电极,三极管的基极接Arduino 11 ...

  2. 基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频)

    基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频) 仿真图proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0031 ...

  3. 树莓派用c语言pwm控制电机,树莓派学习笔记之PWM控制直流电机转速

    树莓派控制PWM控制电机转速 一.硬件 树莓派 12V直流电机 L298N电机驱动器 220V转12V变压器 二.连线 树莓派与L298N需要共地 L298N驱动模块 树莓派接线 三.树莓派pytho ...

  4. 【小白入门】新西达、好盈电调PWM控制直流无刷电机,以N5065为例

    写在开头,本文为我本人在2023 ROBOCON期间为队伍设计直流无刷电机控制期间的初步所学.希望本文能帮到所有第一次入坑直流无刷电机的小白朋友们,文章纰漏星数,还望各位大佬多多包涵. 一.你可能已有 ...

  5. pwm控制直流电机转速流程图_直流电机的PWM速度控制程序

    * =======直流电机的PWM速度控制程序======== */ /* 晶振采用11.0592M,产生的PWM的频率约为91Hz */ #include #include #define ucha ...

  6. (学习)基于STM32的PWM控制直流电机转速(CubeMX+HAL库)

    使用到的各元件: 1.12V电源一个 2.单片机:STM32F103C8T6 3.直流电机4个 4.电机驱动模块:L298N 5.降压模块两个 6:杜邦线若干 对于直流电机的转动控制如下表 两边电平 ...

  7. pwm控制直流电机转速流程图_Arduino:直流电机PWM调速

    PWM直流电机调速(代码): int i=0; void Forward(); void Back(); void Turn_left(); void Turn_right(); void Speed ...

  8. pwm控制直流电机转速流程图_PWM直流电机转速控制器电路图

    本例电路由LM324和MOS管组成,通过改变输出方波的占空比,使得负载上的平均接通时间从0到100%变化,以达到调整速度的目的. 电路图讲解: 电路中由LM324组成了四个不同的功能模块: 一是由U1 ...

  9. Arduino驱动直流电机风扇

      时隔多年,重拾Arduino,先拿直流电机风扇找一下手感.配套的东西如下图所示:直流电机.控制板.风扇.架子.   装好之后的效果如下图所示.   本文参照参考文献中的示例代码进行测试.参考文献中 ...

最新文章

  1. Data - 深入浅出学统计 - 上篇
  2. na na na na na ~
  3. 【视频课】生成对抗网络经典任务,详解基于GAN的图像生成算法!
  4. 项目管理各管理内部重点
  5. 从入门到放弃,.net构建博客系统(二):依赖注入
  6. [vue] 你有使用过JSX吗?说说你对JSX的理解
  7. KNN实现CIFAR-10数据集识别
  8. 初识云计算:历史、服务、架构
  9. MySQL 传统复制与 GTID 复制原理及操作详解
  10. python3.7.3配置环境变量_配置环境变量切换到python3.7
  11. SharePoint 2010 添加“我的链接”菜单
  12. Pazera Free Audio Extractor 中文版 - 轻松将视频背景音乐/对话音频提取出来的免费软件...
  13. rs485转profinet网关485协议传报文解决方案远创智控
  14. 状态压缩dp学习小记part1
  15. qt移植到arm开发板
  16. excel合并多个工作表_这三个公式,可以帮您合并任意多个Excel工作表
  17. mysql 中间件 atlas_MySQL中间件-Atlas
  18. msgpack-c 官方文档整理翻译之pack
  19. 深思4加密狗有驱无驱转换_可以将内部无线适配器转换为加密狗吗?
  20. 大学计算机说课稿,【实用】信息技术说课稿三篇

热门文章

  1. 超简单利用java实现小游戏剪刀石头布
  2. mysql 数据库中 ,按照字母加数字的字符串排序
  3. C语言条件循环语句执行步骤,C语言中for语句的执行过程是什么?
  4. 基于JAVAEE的网络电子相册管理系统的设计与实现
  5. python 凯利公式_[转载]凯利公式的理解最重要补充(Z)
  6. 2021-2027中国智能网站无障碍访问工具市场现状及未来发展趋势
  7. Spring data JPA 之 Jackson 在实体里面的注解详解
  8. 数据挖掘人员工作领域分为哪几类,各自需要掌握哪些知识?
  9. 现代软件工程_团队项目_阿尔法阶段_团队建设_第一次会议记录
  10. 步入最好的时代 四大新格局引发中国ICT产业蜕变