Двигателям постоянного тока с приводом L293D нужна помощь, чтобы начать вращаться

Я настроил эту схему, которая использует микросхему драйвера двигателя L293D для управления двумя двигателями постоянного тока.

LM298D motor driver

Вход +6 В подключен к нерегулируемому источнику питания. Его номинальный ток составляет 500 мА.

Существует соединение между линией заземления Arduino и линией заземления источников питания. Между выводами клемм двигателя подключен параллельный конденсатор емкостью 0,1 мкФ.

В конце двигателей есть колесо, но у них нет коробки передач. Колеса подвешены таким образом, чтобы они могли свободно вращаться.

Исходный код программного обеспечения выглядит следующим образом.

#include <Arduino.h>

unsigned int firstMotorPositive = 8;
unsigned int firstMotorNegative = 7;
unsigned int enableFirstMotor = 9;
unsigned int secondMotorPositive = 5;
unsigned int secondMotorNegative = 4;
unsigned int enableSecondMotor = 3;

void setup()
{
    pinMode(firstMotorPositive, OUTPUT);
    /*  I've changed this part as shown by @timemage  */
    //pinMode(второй двигатель положительный, выходной); // <------
    pinMode(firstMotorNegative, OUTPUT);
    pinMode(enableFirstMotor, OUTPUT);
    pinMode(secondMotorPositive, OUTPUT);
    pinMode(secondMotorNegative, OUTPUT);
    pinMode(enableSecondMotor, OUTPUT);

    // Все двигатели отключены
    digitalWrite(firstMotorPositive, LOW);
    digitalWrite(firstMotorNegative, LOW);
    digitalWrite(secondMotorPositive, LOW);
    digitalWrite(secondMotorNegative, LOW);
}

void turnOnMotors()
{
    // Установите двигатели на максимальную скорость
    // Для ШИМ максимально возможные значения от 0 до 255
    analogWrite(enableFirstMotor, 255);
    analogWrite(enableSecondMotor, 255);


    // Включить цифровую запись двигателя A и
    digitalWrite(firstMotorPositive, HIGH);
    digitalWrite(firstMotorNegative, LOW);
    digitalWrite(secondMotorPositive, HIGH);
    digitalWrite(secondMotorNegative, LOW);
    delay(2000);

    // Отключить
    digitalWrite(firstMotorPositive, LOW);
    digitalWrite(firstMotorNegative, LOW);
    digitalWrite(secondMotorPositive, LOW);
    digitalWrite(secondMotorNegative, LOW);

    analogWrite(enableFirstMotor, 0);
    analogWrite(enableSecondMotor, 0);

}

void speedControl()
{
    digitalWrite(firstMotorPositive, HIGH);
    digitalWrite(firstMotorNegative, LOW);
    digitalWrite(secondMotorPositive, HIGH);
    digitalWrite(secondMotorNegative, LOW);


    analogWrite(enableFirstMotor, 63);
    analogWrite(enableSecondMotor, 63);

    delay(3000);

    analogWrite(enableFirstMotor, 127);
    analogWrite(enableSecondMotor, 127);
    delay(3000);

    analogWrite(enableFirstMotor, 191);
    analogWrite(enableSecondMotor, 191);
    delay(3000);
/*
    analogWrite(enableFirstMotor, 255);
    analogWrite(enableSecondMotor, 255);
    delay(3000);
*/


    // Все двигатели отключены
    digitalWrite(firstMotorPositive, LOW);
    digitalWrite(firstMotorNegative, LOW);
    digitalWrite(secondMotorPositive, LOW);
    digitalWrite(secondMotorNegative, LOW);
    analogWrite(enableFirstMotor, 0);
    analogWrite(enableSecondMotor, 0);
}

void loop()
{

    /*
      turnOnMotors();
      delay(1000);
    */

    speedControl();
    delay(1000);
}

Проблема в том, что им нужна помощь, чтобы начать вращаться. Они начнут вращаться только в том случае, если я сначала физически поверну вал пальцами.

Насколько я знаю, двигатели, используемые в этой схеме, представляют собой два двигателя постоянного тока напряжением 6 вольт.

Когда я измеряю максимальное напряжение между клеммами двигателя, я показываю около 0,5 вольта. Если я поверну вал, то прочитаю около 4,5 вольт.

, 👍0

Обсуждение

вращается ли двигатель при непосредственном подключении к источнику питания?, @jsotola

ДА. Если я подключу двигатели к простой батарее напряжением 1,5 вольта, она начнет вращаться., @Erdem

Я уже пробовал это, но это тоже не помогает., @Erdem

Также возможно, что в проводке есть физические проблемы. Четкое изображение вашей фактической проводки от начала до конца может помочь кому-то что-то заметить., @timemage


3 ответа


1

L2978D - ужасный мотор (я действительно хотел бы, чтобы люди им не пользовались!). Он "биполярный", что означает, что как верхние, так и нижние боковые переключатели H-моста являются транзисторами с биполярным переходом. Это означает, что вы получаете в общей сложности падение напряжения между входами и выходами примерно на 1,4 В.

Чтобы противостоять этому, вы должны обеспечить по крайней мере на 1,4 В больше, чем требуется вашим двигателям для их правильной работы.

,

Я переключился на нерегулируемое питание на 7,5 вольт. Я измерил нерегулируемое напряжение с помощью DIMM. Это было около 12,8 вольт. И все же моторы не заводятся. Я тоже пробовал с напряжением 9 вольт. Они также не начинаются с 9 вольт., @Erdem


0

нет pinMode(firstMotorNegative, ВЫВОД)

Ну, вот хотя бы начало:

pinMode(firstMotorPositive, OUTPUT);
pinMode(secondMotorPositive, OUTPUT); // <------
pinMode(enableFirstMotor, OUTPUT);
pinMode(secondMotorPositive, OUTPUT);
pinMode(secondMotorNegative, OUTPUT);
pinMode(enableSecondMotor, OUTPUT);

Вы никогда не устанавливаете firstMotorNegative в значение OUTPUT и, вероятно, намеревались сделать это во второй строке этого отрывка.

Первыймоторнегативный плавающий или вытянутый высоко

Контакты AVR GPIO вводятся при включении питания. Запись в регистр ПОРТОВ, что и делает digitalWrite, приобретает другое значение, когда вводится режим PIN-кода. То есть он включает или отключает подтягивающие внутренние резисторы. Другими словами, ваш digitalWrite(firstMotorNegative, HIGH); и digitalWrite (firstMotorNegative, LOW); эффективно переключаются между pinMode(firstMotorNegative, INPUT_PULLUP) и pinMode (firstMotorNegative, INPUT_PULLUP) соответственно.

Таким образом, ваш L293D видит, что этот сигнал либо слабо повышается, либо плавает. Во время плавающего состояния, в частности, может возникнуть проблема, когда вы делаете:

// Включить цифровую запись двигателя A и
digitalWrite(firstMotorPositive, HIGH);
digitalWrite(firstMotorNegative, LOW);

... поскольку вы отключаете подтягивание здесь, "отрицательный" вывод является входным/ плавающим, а не надежно НИЗКИМ. Таким образом, он может периодически интерпретироваться как ВЫСОКИЙ на уровне L293D, и в этом случае пока это происходит, движения нет.

,

Спасибо, я отредактировал код, как вы и предлагали. Но практически никакой разницы нет., @Erdem

@Erdem Позже я снова поищу другие проблемы и обновлю это, если найду что-то, в чем я достаточно уверен, является проблемой., @timemage


0

То есть работает так, как и ожидалось. Взгляните на технический паспорт. Вы можете потерять 1,8 вольта на каждом выходном выводе. Поскольку вы находитесь в конфигурации моста, теперь вы теряете 3,6 Вольта. Теперь предположим, что ваша мощность составляет 6 В постоянного тока с пульсацией 1 вольт. Это увеличивает падение напряжения через драйвер, поэтому, округляя его, вы теряете 4 вольта от источника питания (не считая потери проводки) перед запуском, то есть при условии, что напряжение не падает. Два простых решения: использовать источник питания с большим напряжением или перейти на мостовое устройство MOSFET.

,

Спасибо за предложения. У меня есть регулируемый адаптер постоянного тока, который обеспечивает нерегулируемое напряжение 1,5 В, 3 В, 4,5 В, 6 В, 7,5 В, 9 В и 12 В с током до 500 мА. Я постепенно переключился с 6 вольт на 12 вольт. Но двигатели не вращаются. Это меня смущает, так как один из двигателей с прикрепленным небольшим колесом начинает вращаться только от батареи напряжением 1,5 вольта, но не вращается с внешним адаптером постоянного тока. Я переключил адаптер постоянного тока на 6 В и измерил нерегулируемое напряжение с помощью DIMM. Это было около 17 вольт. Разве это не огромное напряжение для такого маленького игрушечного двигателя постоянного тока?, @Erdem

Лучше всего использовать регулируемый источник питания с достаточной мощностью, чтобы ваша нагрузка работала с некоторой экономией. Нерегулируемый источник питания имеет пульсации, величина которых зависит от выбранной конструкции и компонентов. Не зная вашего цифрового преобразователя и вашего адаптера, я могу только догадываться, но попробуйте измерить выходное напряжение в диапазоне переменного тока, оно должно быть почти нулевым. Если вы получаете значение, это грубое приближение к вашему содержанию переменного тока., @Gil

Я использую тип пера [Mastech MS8211D] (http://www.mastech-group.com/products.php?cate=120&PNo=245 ) мультиметр. Я переключил нерегулируемый адаптер постоянного тока на 6 вольт. Я выбрал переменный ток и использовал функцию max для измерения максимального напряжения. Это довольно интересно, потому что он считывает максимальное напряжение как 5,1 вольт переменного тока. Также напряжение постоянного тока составляло около 10,5 вольт., @Erdem

Я думаю, нам нужно вернуться к началу и попросить вас перейти по этой ссылке https://www.electronics-tutorials.ws / Он преподает основы электроники. Пока вы учитесь, приобретите регулируемый источник питания напряжением 10 или 12 вольт мощностью 2 ампера и более. Если вы участвуете в этом для длинного зала, приобретите лабораторный блок питания, который стоит около 60 долларов на ebay, возможно, в качестве рождественского подарка. Единственная общая нить - это источник питания, который вы используете. Также получите экран двигателя Arduino с полевыми транзисторами. Это должно избавить вас от неизвестного и помочь вам начать работу., @Gil