Двигателям постоянного тока с приводом L293D нужна помощь, чтобы начать вращаться
Я настроил эту схему, которая использует микросхему драйвера двигателя L293D для управления двумя двигателями постоянного тока.
Вход +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
Обсуждение3 ответа
L2978D - ужасный мотор (я действительно хотел бы, чтобы люди им не пользовались!). Он "биполярный", что означает, что как верхние, так и нижние боковые переключатели H-моста являются транзисторами с биполярным переходом. Это означает, что вы получаете в общей сложности падение напряжения между входами и выходами примерно на 1,4 В.
Чтобы противостоять этому, вы должны обеспечить по крайней мере на 1,4 В больше, чем требуется вашим двигателям для их правильной работы.
Я переключился на нерегулируемое питание на 7,5 вольт. Я измерил нерегулируемое напряжение с помощью DIMM. Это было около 12,8 вольт. И все же моторы не заводятся. Я тоже пробовал с напряжением 9 вольт. Они также не начинаются с 9 вольт., @Erdem
нет 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
То есть работает так, как и ожидалось. Взгляните на технический паспорт. Вы можете потерять 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
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Как заставить сервопривод вращаться на угол больше 180°
- Почему Adafruit motor shield не крутит моторы?
- Как управлять 6 шаговыми двигателями с помощью Arduino?
- Пропорциональный контроль расхода воды
- L298N Dual Motor Controller Enable Pin имеет питание, но двигатели не работают
вращается ли двигатель при непосредственном подключении к источнику питания?, @jsotola
ДА. Если я подключу двигатели к простой батарее напряжением 1,5 вольта, она начнет вращаться., @Erdem
Я уже пробовал это, но это тоже не помогает., @Erdem
Также возможно, что в проводке есть физические проблемы. Четкое изображение вашей фактической проводки от начала до конца может помочь кому-то что-то заметить., @timemage