Управлять другими сервоприводами с помощью общего сервокода Arduino?
Я пытаюсь управлять MG996R, используя код для типичного сервопривода (SG90)
Я использовал внешний блок питания, 5В, 2А
Я подключил сигнальную линию сервопривода к слоту Arduino 7,
положительный сервопривод к положительному внешнему источнику питания,
заземление сервопривода на заземление внешнего источника питания,
оставив питание Arduino и заземление неподключенными.
Я попробовал следующий код.
у SG90 работает, а у MG996R вообще не двигается.
#include <Servo.h>
Servo myservo;
void setup()
{
myservo.attach(7); // контакт 7 - это сервопривод управления
}
void loop()
{
for (int pos=0; pos<=60; pos++)
{
myservo.write(pos);
delay(15);
}
}
Это потому, что для разных сервоприводов нужен разный код?
@Kevin, 👍1
Обсуждение4 ответа
Лучший ответ:
Они работают с одним и тем же управляющим сигналом, поэтому один и тот же код должен работать для них обоих
Вы должны убедиться, что заземление сервопривода соединено с заземлением Arduino и заземлением источника питания (заземление источника питания для положительного напряжения питания, заземление Arduino для сигнальной линии)
Я думаю, что SG90 работал даже без подключения заземления Arduino из-за разницы в конструкции.
Но вы всегда должны подключать заземление сервопривода к заземлению Arduino.
Комментарий @jsotola является ответом, поэтому я просто процитирую его здесь:
Два сервопривода используют один и тот же управляющий сигнал... если один работает, то и другой тоже должен работать... перепроверьте соединения питания и заземления... убедитесь, что заземление сервопривода подключено к заземлению Arduino... подтвердите что блок питания остается на уровне 5 В под нагрузкой ... измерьте напряжение при попытке перемещения сервопривода ... если напряжение держится на уровне 5 В, то подозревается сервопривод
Кроме того, убедитесь, что вы используете контакт, установленный с помощью myservo.attach()
. В вашем комментарии указан контакт 9, но в вашем коде указан контакт 7, что сбивает с толку. Этот код использует контакт 7 в качестве сервосигнала:
myservo.attach(7); //контакт 9 - это один управляющий сервопривод
Я заметил на сайте производителя MG996R, что его рабочее напряжение составляет от 4,8 В до 6,6 В. В.
Ваша проблема может заключаться в том, что напряжение (на двигателе) ниже минимального напряжения 4,8 В.
Попробуйте подключить двигатель к напряжению 6 В.
Также убедитесь, что вы тестируете двигатель без нагрузки, подключенной к выходу.
Рабочий ток (рабочий ток для MG996R (~650 мА) выше, чем у SG90 (~220 мА), но определенно хорош для мощности 5 В, 2 А. Если нет механической нагрузки на серводвигатель. , двигатель не ограничен током питания.
MG996R — мощнейший зверь. рекомендуется перепроверить напряжение питания, а также попробовать с источником питания выше ~ 5 В.
PS: Код определенно хорош. Вот симуляция кода, который вы разместили, который отлично работает с эмулятором
- Tower Pro MG996R сервопривод с высоким крутящим моментом 180 °, управляющий с помощью Arduino
- Как заставить сервопривод вращаться на угол больше 180°
- Пповорот сервопривода на 90 градусов
- Как синхронно управлять двумя сервоприводами?
- Ошибка "Servo" does not name a type
- Библиотека плавного сервоуправления
- Подключение Arduino к сервоприводу с внешним источником питания
- Мой сервопривод не работает плавно
два сервопривода используют один и тот же управляющий сигнал... если один работает, то и другой тоже должен работать... перепроверьте соединения питания и заземления... убедитесь, что заземление сервопривода подключено к заземлению Arduino... убедитесь, что питание питание остается на уровне 5 В под нагрузкой ... измерьте напряжение при попытке переместить сервопривод ... если напряжение держится на уровне 5 В, то сервопривод подозревается, @jsotola
нет причин иметь цикл for ... все, что вам нужно, это
myservo.write(45);
delay(1000);
myservo.write(135);
delay(1000);
... сервопривод будет переключаться между этими двумя углами, @jsotola