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

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

查看原文
使用 Arduino 和电位器的直流电机速度控制

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

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

脉冲宽度调制:

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

% Duty cycle = (TON/(TON + TOFF)) *100

Where, TON = HIGH time of the square wave
       TOFF = 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 的各种项目来了解有关 PWM 的更多信息。

所需材料

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

电路原理图

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

使用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 output
  pinMode(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 HIGH
  delayMicroseconds(c1);   // waits for c1 uS (high time)
  digitalWrite(pwmPin, LOW);  // sets pin 12 LOW
  delayMicroseconds(c2);   // waits for c2 uS (low time)
}

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

使用 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 c2

void 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 c1
  digitalWrite(pwmPin, HIGH); 
  delayMicroseconds(c1);   
  digitalWrite(pwmPin, LOW);
  delayMicroseconds(c2);
}
  • 6
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
倒啤酒是一种艺术,绝对是品尝体验的一部分,特别是当你需要足够的泡沫完美地排列在玻璃的边缘。由于比利时是啤酒之乡,我们决定为两种比利时啤酒(Duvel和Jupiler)制作一个浇注机器人,并根据玻璃瓶和瓶子尺寸制作机器人,作为我们的Master One项目的一部分。这个想法是为两个啤酒品牌建立一个共同的机器人。基于可用性,我们使用以下组件和材料构建机器人。 硬件:Arduino控制器。 结构材料:密度板,有机玻璃 3D打印:解放军 建模软件:Solidworks / Inventor 编码:Fritzing和Arduino 步骤1:所需组件 这一步是关于我们的选择和可用性。在其他条件可能有所不同。 直流电机(2个) 径向球轴承(2个) 轴联轴器(2个) 液晶显示屏(1个) 称重传感器(1个) Arduino Uno(1个) 称重传感器模块(放大器HX711)(1个) H桥电机驱动器(1个) 电位器(2个) 中密度纤维板(五金店) 有机玻璃(五金店) 用于3D打印的PLA卷筒* *如果三维打印机不可用,大部分打印件可以无论如何订购或加工。 步骤2:持有人设计 选择您需要制作的啤酒品牌做一个机器人。(经过简短的讨论后,我们决定与一个温和而非常有名的啤酒Jupiler和一个强烈的啤酒Duvel)。对不同的想法进行头脑风暴,以共同的设置为玻璃和瓶子设计合适的支架。(我们遵循scrum的方法来提出一些创新的设计,并用以下两个设计来完成) 持有人: 在Solidworks中设计了两个瓶子,并通过叠加一个或其他来比较两个瓶子。 概述了组合模型的边界,准备了一个壳,并与它们抵消一些。抓手需要被设计来抓住瓶子(我们的抓手通过将三根触手伸出平面而嵌入支架设计中)。 为支架制作一个合适的连接器,将其与执行器/马达连接起来(在我们的例子中,我们将连接器和支架合并在一起,因为我们用PLA来打印三维) 如果分别设计连接器和支架,最好使用两种不同的材料(最好是金属 - 聚合物组合) 玻璃持有人: Duvel和Jupiler的眼镜也采用了类似的方法。玻璃可能不需要复杂的3D打印外壳,但需要一些东西来阻止其不需要的垂直运动。但是,与瓶架单元中的一样,玻璃架也需要连接器连接到执行器。(我们的玻璃支架的概念只是一个L支撑,用于将玻璃放置在两个通用的合适直径之间,然而,由于我们还需要设计一个连接器,因此我们决定在加工支架组件的其余部分时进行3D打印出有机玻璃) 注意:一般来说,可以使用任何两种不同的瓶子和一杯含酒精或不含酒精的饮料。 步骤3:框架设计和组件/材料选择 框架设计 一旦支架设计完成瓶和玻璃,继续框架设计。准备一个粗略的草图勾画了我们关于自动化啤酒倾倒的粗略想法。现在,自动浇注的一个重要因素是,正确固定轴线并确定瓶子和玻璃杯轴之间的精确距离,以便将啤酒精确地倒入玻璃杯中。但是为此,需要至少放置一个轴,然后通过反复试验重复另一个轴的位置。(在我们的例子中,我们固定了瓶子的轴线,并在其周围设计了一个装配体的框架,甚至可以固定玻璃轴并在其周围工作)。 最好将框架设计成两个部分。这将有助于更轻松的组装。(上半部分由有机玻璃制成,为了使啤酒倾倒得更好,下半部分由中纤板制成,上半部分是一个主要部分支撑啤酒浇注的所有结构部件,下半部分主要是上半部分的支撑,还包含电气和电子部件,并具有电池盒设置,上下半部之间的连接使用2个铰链,这种方式如果需要,我们可以很容易地访问电子。) 组件选择 为了完美地倒入啤酒,玻璃和瓶子同时进行受控运动。这可以通过在连接到电机的轴的帮助下旋转来完成。电机的选择需要通过计算旋转玻璃和瓶子所需的有效扭矩来完成。旋转编码器/电位器需要在闭环中用直流电来控制角度,如果不是伺服电机的话。(我们使用25千克*厘米扭矩的直流电动机在两个轴上连接一个闭环电位器) 与电机和轴一起,轴联轴器,轴承及其支架,电机电机夹的良好支撑也需要设计/采购。(我们采购轴承和轴联轴器,3d印刷轴承座,底座支架,电机夹和电机支架,电位器支架和电位器支架) 步骤4:电路设计和传感器选择 这个项目所需的电气部分是: 1个Arduino UNO板; 2x直流电机(高转矩); [ 电机 ] 1个H桥(L298N); [ H桥 ] 1个适配器AC / DC 220V AC-12V DC; 1个称重传感器(0-10kg); [ 称重传感器 ] 1x称重传感器放大器HX711; [ 称重传感器放大器 ] 2个电位计10kΩ; 1个液晶显示器(16x2); 1x内部集成电路协议I2C; 1个按钮(开始按钮); 1个开/关按钮; 不同颜色的电线。 旋转玻璃和瓶子所需的扭矩是非常高的,所以选择了两个高扭矩,低速度电机,因为我们需要慢慢倒入啤酒。为了控制电机速度和方向,H-Bridge连接到电机

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔚蓝慕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值