使用 Arduino 和电位器控制直流电机速度

查看原文

使用 Arduino 和电位器的直流电机速度控制

直流电机是机器人和电子项目中使用最多的电机。对于控制直流电机的速度,我们有多种方法,例如可以根据温度自动控制速度, 但在本项目中将使用PWM方法来控制直流电机的速度。在这个 Arduino 电机速度控制项目中,可以通过旋转电位器的旋钮来控制速度。

脉冲宽度调制:

什么是脉宽调制? PWM是一种可以控制电压或功率的技术。如果您使用 5 V来驱动电机,那么电机将以一定速度运动,现在如果我们将施加的电压降低 2 意味着我们将 3 伏施加到电机上,那么电机速度也会降低。该概念在项目中用于使用 PWM 控制电压。我们已经在本文中详细解释了 PWM。还要检查这个电路,其中 PWM 用于控制 LED 的亮度: 1 瓦 LED 调光器。

% Duty cycle = (TON/(TON + TOFF)) *100Where, TON = HIGH time of the square waveTOFF = LOW time of square wave

现在如果图中的开关在一段时间内连续闭合,那么电机将在这段时间内连续打开。如果开关在 10ms 的周期内闭合 8ms 并打开 2ms,则电机仅在 8ms 时间内开启。现在超过 10ms 的平均终端时间 = 开启时间/(开启时间 + 关闭时间),这称为 占空比 ,为 80% (8/ (8+2)),所以平均输出电压将是电池电压的 80%。现在人眼无法看到电机开启 8 毫秒和关闭 2 毫秒,因此看起来直流电机以 80% 的速度旋转。

在第二种情况下,开关在 10ms 的时间内关闭 5ms 并打开 5ms,因此输出端的平均端电压将为电池电压的 50%。假设电池电压为 5V,占空比为 50%,则平均端电压为 2.5V。

在第三种情况下,占空比为 20%,平均端电压为电池电压的 20%。

我们在许多项目中都使用了 Arduino 和 PWM :

  • 使用 PWM 的基于 Arduino 的 LED 调光器
  • 使用 Arduino 的温控风扇
  • 使用 Arduino 进行直流电机控制
  • 使用 Arduino 和 TRIAC 控制交流风扇速度

您可以通过浏览基于 PWM 的各种项目来了解有关 PWM 的更多信息。

所需材料

  • Arduino UNO
  • 直流电机
  • 晶体管 2N2222
  • 电位器 100k ohm
  • 电容 0.1uF
  • 面包板
  • 跳线

电路原理图

使用 PWM进行 Arduino 直流电机速度控制 的电路图如下所示:

代码和解释

最后给出了使用电位器控制 Arduino 直流电机的完整代码。

在下面的代码中,我们初始化了变量 c1 和 c2,并为电位器输出分配了模拟引脚 A0,为“pwm”分配了第 12个引脚。

int pwmPin = 12;
int pot = A0;
int c1 = 0;
int c2 = 0;

现在,在下面的代码中,将引脚 A0 设置为输入,将 12(PWM 引脚)设置为输出。

void setup(){pinMode(pwmPin, OUTPUT); // declares pin 12 as outputpinMode(pot, INPUT);  // declares pin A0 as input
}

现在,在*void loop() 中,我们正在使用AnalogRead(pot) 读取模拟值(来自 A0),*并将其保存到变量 c2。然后,从 1024 中减去 c2 值并将结果保存在 c1 中。然后将 PWM 引脚设为 Arduino HIGH 的第 12位,然后在 c1 值的延迟后将该引脚设为低电平。同样,在值 c2 的延迟之后,循环继续。

从 1024 中减去模拟值的原因是,Arduino Uno ADC 具有 10 位分辨率(因此整数值从 0 - 2^10 = 1024 值)。这意味着它将 0 到 5 伏特之间的输入电压映射为 0 到 1024 之间的整数值。因此,如果我们将输入 anlogValue乘以 (5/1024),则我们得到输入电压的数字值。在此处了解 如何在 Arduino 中使用 ADC 输入。

void loop()
{c2= analogRead(pot);c1= 1024-c2;           digitalWrite(pwmPin, HIGH); // sets pin 12 HIGHdelayMicroseconds(c1);   // waits for c1 uS (high time)digitalWrite(pwmPin, LOW);  // sets pin 12 LOWdelayMicroseconds(c2);   // waits for c2 uS (low time)
}

使用 Arduino 控制直流电机的速度

在这个电路中,为了控制直流电机的速度,我们使用了一个 100K 欧姆的电位器来改变 PWM 信号的占空比。100K欧姆电位器连接到Arduino UNO的模拟输入引脚A0,直流电机连接到Arduino的第12引脚(即PWM引脚)。Arduino程序的工作非常简单,因为它从模拟引脚A0读取电压。模拟引脚上的电压通过使用电位器来改变。在做了一些必要的计算之后,占空比会根据它进行调整。

例如,如果我们将 256 值输入模拟输入,那么 HIGH 时间将为 768ms (1024-256) 而 LOW 时间将为 256ms。因此,它仅表示占空比为 75%。我们的眼睛看不到如此高频的振荡,看起来电机以 75% 的速度持续开启。这就是我们如何 使用 Arduino 执行电机速度控制

代码

int pwmPin = 12; // assigns pin 12 to variable pwm
int pot = A0; // assigns analog input A0 to variable pot
int c1 = 0;   // declares variable c1
int c2 = 0;   // declares variable c2void setup()  // setup loop
{pinMode(pwmPin, OUTPUT); pinMode(pot, INPUT);
}void loop()
{c2= analogRead(pot); c1= 1024-c2;         // subtracts c2 from 1000 ans saves the result in c1digitalWrite(pwmPin, HIGH); delayMicroseconds(c1);   digitalWrite(pwmPin, LOW);delayMicroseconds(c2);
}

使用 Arduino 和电位器控制直流电机速度相关推荐

  1. Arduino驱动L298N控制直流电机的正反转和调速

    Arduino驱动L298N控制直流电机的正反转和调速 一.前言 二.产品参数 三.驱动直流电机 三.接线图 四.程序 五.实验结果 总结 一.前言 本模块使用ST公司的L298N作为主驱动芯片,具有 ...

  2. Arduino开发板控制直流电机

    在本篇文章中,我们将学习到如何使用Arduino开发板控制直流电机.我们将看看控制直流电机的一些基本技术,然后列举两个例子,通过例子我们将学习到如何使用L298N驱动器和Arduino开发板控制直流电 ...

  3. 可编程手机蓝牙App控制直流电机速度

    我们将通过 Android 应用程序 (app) 介绍直流电机速度控制.对于该项目,该应用程序安装在智能手机设备中,该设备使用蓝牙向控制直流电机速度的电路发送命令. 此 Android 应用程序具有引 ...

  4. 直流电机 matlab,使用MATLAB和Arduino开发板进行直流电机控制

    在本篇文章中,我们将主要介绍如何使用MATLB和Arduino开发板控制直流电机.如果您是初次使用MATLAB软件,建议您先学习如何使用MATLAB实现简单的LED闪烁. 创建用于控制直流电机的MAT ...

  5. 基于arduino控制带编码器直流电机速度

    基于arduino控制带编码器直流电机速度 模块:带减速的直流电机(减速比1:120),霍尔编码器(每圈13个信号单相)arduino UNO,TB6612FNG,3.7V电源 编码器连接在直流电机输 ...

  6. 使用Arduino控制直流电机

    使用Arduino控制直流电机 ARDUINO的 经过**迪利普·拉贾(Dilip Raja)** 2015年6月7日7 在本教程中,我们将使DC电动机与Arduino UNO相连,并使用PWM(脉冲 ...

  7. 【 使用 Arduino 和 L293D 电机驱动器 IC 控制直流电机】

    使用 Arduino 和 L293D 电机驱动器 IC 控制直流电机 前言 用微控制器控制直流电机 L293D电机驱动IC L293D 电机驱动器 IC 引出线 L293D电机驱动IC常见问题解答 A ...

  8. Arduino教程-09.L298N控制直流电机(避障小车)

    目录 3.1 电机 3.2 控制直流电机 PWM – 控制速度 H桥 – 控制转动方向 L298N 电机驱动芯片 技术规格 L298N 电机驱动器模块引脚排列 电源引脚 输出引脚 方向控制引脚 速度控 ...

  9. inovance变频器说明书参数设置_变频器控制电机速度时,面板调速如何切换为电位器调速...

    若你我之间有缘,关注作者又何妨? 两情若是久长时,又岂在朝朝暮暮. 大家好!我是江郎,一个快要"才尽"的维修工. 引言 什么是数控? 说白了就是计算机数字技术控制机床工作. 那么, ...

最新文章

  1. 戴森要搞能爬楼梯的吸尘器,两项专利设计现已提交
  2. 搭建通用性多用户后台-思路
  3. Android SoundPool.play方法的音量与系统音量的关系
  4. 25.智能指针.rs
  5. Asp.Net Core 中IdentityServer4 授权流程及刷新Token
  6. ida调试linux程序,MAC使用IDA PRO远程调试LINUX程序
  7. multiprocessing python_一行 Python 代码实现并行
  8. SQL server 增删改查语句
  9. pytorch测试用例(查看tensor维度)
  10. 类构造函数(Constructor)单冒号:用法
  11. 【笔记】VUE学习笔记
  12. PHPObject v1.51(Flash Remoting for PHP developers)
  13. 网课查题接口 搜题公众号对接题库教程 (附赠题库接口)
  14. 大数据离线分析之企业实战分享
  15. 值得收藏的UmiJS 教程
  16. tornado、flask、c++zmq-req-rep记录
  17. Eureka自我保护模式——难点重点
  18. 5款宝藏浏览器插件推荐,每一个都真香,一定要看到最后
  19. cpu插槽类型 产品参数解释
  20. java实现给手机发短信验证码

热门文章

  1. 中北c语言程序设计,中北大学软件学2013届C语言程序设计实训题目.doc
  2. java annotation class,Java Class类 isAnnotation()方法及示例
  3. 关于CND与真实IP
  4. 测试环境搭建-5:设备的驱动程序未被安装解决方法
  5. 请假系统jsp mysql_[源码和文档分享]基于JSP和MYSQL数据库实现的请假管理系统
  6. 网工知识角|例行维护检查华为设备,这10个常用命令你必须掌握
  7. 傲慢与偏见 中英版
  8. 微信朋友圈输入框加发送测试用例总结
  9. 我所热衷的编程生涯 连载(11)
  10. 解决zeal文档下载不上的办法