Arduino UNO сбрасывается при управлении сервоприводом

Я пытаюсь управлять двумя сервоприводами одновременно, используя Arduino UNO и Arduino Motor Shield. Мои сервоприводы модифицированы, чтобы они могли работать с постоянным движением.

Когда я отправляю первый заказ myservoP.write(180);(полная скорость), он работает нормально; однако, когда я пытаюсь приказать моему сервоприводу изменить направление ( myservoP.write(0);), мой Arduino немедленно дает сбой и перезагружается.

Сначала я думал, что это может быть проблема с питанием, но после тестирования с помощью моей программы (перечисленной ниже) я начинаю думать, что это проблема с буфером или памятью. Без задержек Arduino вылетает примерно через 10 итераций. С задержкой (10) он рухнет примерно через 90 итераций. С задержкой (20) Arduino может повторить полный цикл 5 раз, от начала до конца. С 6-й попытки снова вылет.

Вот мой код:

#include <Servo.h> 

Servo myservoL;  
Servo myservoP;
int i; 

void setup() 
{ 
 delay(2000);
 myservoL.attach(9);   // attaches the servo on pin 9 to the servo object 
 myservoP.attach(10);  // attaches the servo on pin 10 to the servo object 
 Serial.begin(9600);
} 
void loop() 
{ 
  for(i=180; i>=0; i--)
  {
    delay(20);
    Serial.println(i);
    myservoP.write(i);
    myservoL.write(i);
  }
  for(i=0; i<=190; i++)
  {
    delay(20);
    Serial.println(i);
    myservoP.write(i);
    myservoL.write(i);
  }
Очевидным тестом будет запуск программы без подключенного сервопривода. Если это предотвратит сбой, вероятно, виноваты электрические помехи или нагрузка питания от сервопривода. Но если он все еще падает, возможно, это ошибка в вашей программе.
Хорошо. Итак, я проверил, и я МОГУ использовать два сервопривода одновременно. И я запускаю свою тестовую программу без сервоприводов, и она не падает. Итак, это электрическое... Я должен выяснить, как проверить, что вызывает проблему... Спасибо за помощь, ребята.
Возможно, вы захотите найти внешний источник питания для сервоприводов или, по крайней мере, не запускать их от USB через Uno.
Я на самом деле подключил 4 АА лучше, и этого все еще недостаточно.
Дааа. 4 батареи достаточно. Мне пришлось что-то накрутить с контактами сервопривода Arduino, потому что, когда я подключил свой сервопривод к обычному 5v и GND на плате и подал сигнал на обычный цифровой контакт, он начал работать! (Конечно, эти 4 батареи я подключил к внешнему источнику питания на плате Arduino Morot Shield.)

Ответы (3)

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

Попробуйте использовать два отдельных блока батарей: один для питания Arduino, а другой для питания двигателей (не забудьте соединить заземление двух блоков батарей вместе).

попробуйте увеличить время задержки до 5000 вместо 20, чтобы сервоприводам требовалось достаточно времени для завершения вращения:

#include <Servo.h> 

 Servo myservoL;  
 Servo myservoP;
 int i; 

 void setup() 
 { 
 delay(2000);
 myservoL.attach(9);   // attaches the servo on pin 9 to the servo object 
 myservoP.attach(10);  // attaches the servo on pin 10 to the servo object 
 Serial.begin(9600);
  } 
void loop() 
 { 
for(i=180; i>=0; i--)
 {
   delay(5000 );
  Serial.println(i);
   myservoP.write(i);
   myservoL.write(i);
    }
    for(i=0; i<=190; i++)
    {
    delay(5000 );
     Serial.println(i);
    myservoP.write(i);
    myservoL.write(i);
     }

Дополнение к ответу Нейта: если вы хотите сохранить одну батарею как для двигателей, так и для Arduino, вам следует ограничить ток, потребляемый сервоприводами, путем некоторого замедления перед изменением направления, например, половинной скорости через 20 мс, 0 об/мин после еще 20 мс, прежде чем изменить направление. Если вы меняете направление обоих двигателей одновременно, вы должны задержать один из них, скажем, на 20 мс, чтобы еще больше снизить пиковый ток.

Прежде чем вы это сделаете, вы можете контролировать напряжение питания arduino, предпочтительно с «осциллографом, установленным на «одиночный», триггерным нисходящим наклоном ~ 4,5 В. Это должно сказать вам, если питание Arduino падает, когда двигатели меняют направление.