使用 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 的基于 Arduino 的 LED 调光器
  • 使用 Arduino 的温控风扇
  • 使用 Arduino 进行直流电机控制
  • 使用 Arduino 和 TRIAC 控制交流风扇速度
  • 您可以通过浏览基于 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);
    }
    
    物联沃分享整理
    物联沃-IOTWORD物联网 » 使用 Arduino 和电位器来控制直流电机的速度

    发表评论