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

本文介绍了如何使用Arduino UNO通过脉宽调制(PWM)和电位器来控制直流电机的速度。PWM是一种控制电压或功率的技术,通过改变脉冲的占空比来调节电机转速。在项目中,电位器用于调整PWM信号的占空比,从而改变电机速度。文章详细阐述了PWM的工作原理,并提供了电路图和代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用 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);
}
### 使用电位器通过Arduino控制直流电机调速 #### 连接硬件组件 为了实现这一功能,需要连接几个主要部件:电位器Arduino板以及直流电机。通常情况下,还需要一个电机驱动模块来安全有效地调节电机速度。 - **电位器**用于提供可变电阻信号给Arduino模拟输入端口。 - **Arduino**读取来自电位器的ADC值并将其转换成适合控制电机速度的形式。 - **电机驱动电路**接收来自Arduino的指令以调整实际供给到直流电机上的功率水平。 #### 编写Arduino代码 编写一段简单的Arduino草图(sketch),该程序会周期性地查询当前电位器的位置,并据此改变PWM输出至电机控制器的比例因子,从而达到变速的效果[^1]。 ```cpp // 定义引脚分配 const int potPin = A0; // 电位器连接到A0 const int motorCtrlPin = 9; // PWM 输出到电机控制端子 void setup() { pinMode(motorCtrlPin, OUTPUT); // 设置为输出模式 } void loop() { int sensorValue = analogRead(potPin); // 获取电位器读数 float voltage = sensorValue * (5.0 / 1023.0); // 将其转化为电压 // 计算新的PWM占空比比例(假设最大PWM=255) int pwmDutyCycle = map(sensorValue, 0, 1023, 0, 255); // 应用新计算得到的PWM设置 analogWrite(motorCtrlPin, pwmDutyCycle); delay(10); // 延迟一段时间再重复循环 } ``` 这段代码展示了基本的工作流程——从电位器获取数据并通过`map()`函数重新映射这些数值以便于应用到PWM接口上;最后利用`analogWrite()`命令发送相应的脉宽调制波形去影响电机转速。 #### 调整参数优化性能 对于某些特定应用场景可能还需进一步微调上述方案中的各项配置项,比如更改PWM刷新间隔或者自定义伺服库内的定时器预分频系数等操作均有助于改善最终效果[^3].
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蔚蓝慕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值