使用 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);
}
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐