【问题标题】:Controlling a DC motor with an Arduino Uno使用 Arduino Uno 控制直流电机
【发布时间】:2012-03-25 19:27:33
【问题描述】:

我按照这个原理图设置了一个简单的H-bridge 电路:

我正在尝试使用Arduino Uno 通过这个 H 桥控制小型直流电机,但我以前从未对这些控制器中的任何一个进行过编程。当我在键盘上按左右键时,我需要电机向不同方向旋转。到目前为止,我有这个代码:

// Right Motor

/** Adjust these values for your servo and setup, if necessary **/
int resistor1     =  3;
int resistor2     =  5;
int resistor3     =  6;
int resistor4     =  10;
int moveServo;


void setup() {
    Serial.begin(9600);
    pinMode(resistor1, OUTPUT); // Set servo pin as an output pin
    pinMode(resistor2, OUTPUT);
    pinMode(resistor3, OUTPUT);
    pinMode(resistor4, OUTPUT);
}


void loop() {
  // Wait for serial input
  if (Serial.available() > 0) {
      // Read the incoming byte:
      moveServo = Serial.read();

      // ASCII left = 37, up = 38, right = 39, down = 40
      if (moveServo == 37)
      {
          digitalWrite(resistor4, HIGH);
          digitalWrite(resistor1, HIGH);
      }
  }

但是,我在修改 PWM 时遇到问题,以便电机保持开启状态,并且输出引脚也没有按照我的指定设置。

我该如何解决这个问题?

【问题讨论】:

    标签: arduino


    【解决方案1】:

    如果要产生 PWM 输出,则必须使用 analogWrite() 函数。

    【讨论】:

      【解决方案2】:

      解决您的问题(保持电机运转)的方法不是 PWM,而是以正确的组合设置引脚状态。请注意,您使用的代码适用于全 NPN 晶体管 H 桥。您的电路是用 PNP - NPN 组合构建的,因此控制是不同的(NPN 晶体管在饱和时提供电流,而 PNP 晶体管在饱和时禁止电流)。

      尝试像这样修改您的代码:

      if (moveServo == 37)
      {
          digitalWrite(resistor1, LOW);
          digitalWrite(resistor2, LOW);
          digitalWrite(resistor3, HIGH);
          digitalWrite(resistor4, HIGH);
      }
      else if (moveServo == 39)
      {
          digitalWrite(resistor3, LOW);
          digitalWrite(resistor4, LOW);
          digitalWrite(resistor1, HIGH);
          digitalWrite(resistor2, HIGH);
      }
      

      请注意,顺序很重要。先将一对设置为 LOW,然后再将另一对设置为 HIGH,否则会在函数调用之间短路。

      注意:您可以使用带模拟写入()函数的 PWM 来控制电机速度,但您需要稍微修改您的电路:在接地之前放置额外的 NPN 晶体管(H 桥上的集电极,接地上的发射极),将其基极与通过限流电阻支持 PWM 的 Arduino 引脚。

      【讨论】:

      • NPN transistor is delivering current when saturated while PNP transistor is prohibiting current when saturated 完全不正确。任何双极结型晶体管在饱和时都会提供电流。唯一的区别是 NPN 和 PNP 偏置电路。通过改变偏置电路,我们所做的是使背景使 PNP 晶体管饱和。
      【解决方案3】:

      vcc2gnd的回答说明

      假设 H 桥电路的电压为 5V,当 PNP 的基极电压为 0v 时,PNP 将打开。当 NPN 的基座电压为 5v 时,NPN 就会打开。当晶体管导通(饱和)时,它会传导电流。

      当 Q4 和 Q1 开启而其他关闭(截止)时,电机向一个方向转动。要有那个方向,R1,R2,R3,R4 应该分别给 5v,5v,0v,0v。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-20
        • 1970-01-01
        相关资源
        最近更新 更多