Управление двигателем постоянного тока с помощью Arduino Uno - PullRequest
1 голос
/ 25 марта 2012

У меня есть простая H-мост схема, настроенная по следующей схеме:

Enter image description here

Я пытаюсь управлять небольшим двигателем постоянного тока через этот H-мост с помощью Arduino Uno , но я никогда раньше не программировал ни один из этих контроллеров. Мне нужно, чтобы мотор вращался в разные стороны, когда я нажимаю влево и вправо на клавиатуре. Пока у меня есть этот код:

// 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 , чтобы двигатель оставался включенным, а выходные выводы не были установлены, как я указал.

Как я могу исправить эту проблему?

Ответы [ 3 ]

1 голос
/ 26 марта 2012

Если вы хотите производить ШИМ-выходы, вы должны использовать функцию analogWrite () .

0 голосов
/ 03 января 2016

Объяснение ответа vcc2gnd

Предполагая, что на цепь H-Bridge подается 5 В, PNP включается, когда они имеют 0 В на своей базе.NPN включается, когда у них есть 5v к их базе.Когда транзистор включен (насыщен), он проводит ток.

Когда Q4 и Q1 включены, а другие выключены (отсечка), двигатель вращается в одном направлении.Чтобы иметь это направление, R1, R2, R3, R4 должны иметь 5v, 5v, 0v, 0v соответственно.

0 голосов
/ 14 декабря 2013

Решением вашей проблемы (оставить двигатель в рабочем состоянии) является не ШИМ, а установка состояния штифта в правильной комбинации. Имейте в виду, что код, который вы используете, предназначен для транзисторов с полностью NPN H-Bridge. Ваша схема построена с комбинацией 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);
}

Обратите внимание, что порядок важен. Сначала установите для одной пары значение НИЗКОЕ, а затем для другой - ВЫСОКОЕ, в противном случае вы закоротите цепь между вызовами функций.

Примечание: Вы можете использовать ШИМ с функцией analogWrite () для управления скоростью двигателя, но вам нужно немного изменить схему: установить дополнительный NPN-транзистор перед землей (коллектор на H-мосте, эмиттер на землю), соединить его базу с Штырь Arduino с поддержкой ШИМ через ограничительный резистор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...