Мой сервопривод не работает плавно

Поэтому я пробовал это несколько раз, и у меня всегда была одна и та же проблема. Когда я пытаюсь запустить пример развертки, сервопривод поворачивается на 180 градусов, но только шагами. Кто-нибудь знает, как это исправить?

Я использую сервопривод Tower Pro Micro Servo 9G SG90

// Развертка
// by BARRAGAN <http://barraganstudio.com>
// Этот пример кода находится в открытом доступе.


#include <Servo.h> 

Servo myservo;  // создаем сервообъект для управления сервоприводом
                // можно создать максимум восемь сервообъектов

int pos = 0;    // переменная для хранения положения сервопривода

void setup() 
{ 
  myservo.attach(9);  // присоединяем сервопривод к контакту 9 к объекту сервопривода
} 


void loop() 
{ 
  for(pos = 0; pos < 180; pos += 1)  // изменяется от 0 до 180 градусов
  {                                  // с шагом в 1 градус
    myservo.write(pos);              // сообщаем сервоприводу перейти в позицию в переменной 'pos'
    delay(15);                       // ждем 15 мс, пока сервопривод не достигнет позиции
  } 
  for(pos = 180; pos>=1; pos-=1)     // переходит от 180 градусов к 0 градусам
  {                                
    myservo.write(pos);              // сообщаем сервоприводу перейти в позицию в переменной 'pos'
    delay(15);                       // ждем 15 мс, пока сервопривод не достигнет позиции
  } 
} 

Видео: http://vidd.me/A40

, 👍5

Обсуждение

это гудение между "шагами"?, @jippie

не просто обычное тиканье на каждом шагу, @Jordan Adams

Вы ничего не говорите нам о настройке (схеме?). Мое предположение, что ему не хватает напряжения., @mikeY

Я настроил его точно так, как показано в [примере развертки](http://arduino.cc/en/Tutorial/sweep), @Jordan Adams

Мой единственный совет: убедитесь, что Arduino получает достаточно энергии, и проверьте соединения. Подумайте о внешнем питании, если вы не используете USB., @Anonymous Penguin

Какое максимальное входное напряжение?, @Jordan Adams

Какой блок питания вы используете? USB, адаптер питания, батарея... Пожалуйста, укажите характеристики (напряжение, максимальный ток...), @jfpoilpret

В настоящее время USB от моего MacBook, поэтому я бы предположил, что 5 В, @Jordan Adams

Вы проверили, что ваш Arduino работает на правильной частоте? Это можно легко сделать, просто загрузив обычный скетч мигания и проверив период мигания светодиода на выводе 13. Если все в порядке, попробуйте тот же блинк-скетч, но добавьте библиотеку Servo и myservo.attach(); (без вызова myservo.read()), чтобы увидеть, влияет ли присутствие сервопривода на частоту. ., @jfpoilpret

Я видел разочаровывающе ступенчатое поведение аналогичного дешевого сервопривода с совершенно другим микроконтроллером. Не исключайте низкого качества. Как правило, вы не должны использовать USB (или что-либо, что проходит через Arduino) для питания сервоприводов. http://www.thebackshed.com/Forum/forum_posts.asp?TID=5611&PN=9&TPN=3 Кажется, предполагается, что разные частоты кадров могут дать лучшие результаты., @Chris Stratton

@chris-stratton Будет ли батарея на 9 В более подходящим источником питания?, @Jordan Adams

Батареи № 9 В не следует использовать для сильноточных приложений. А без импульсного регулятора вы бы потратили почти половину своей (ограниченной и относительно дорогой) мощности в виде тепла в линейном регуляторе., @Chris Stratton

Полный удар в темноте, но пока ничего не работает: изменить задержку на что-то более медленное (может быть, 150)? Ваш сервопривод может потреблять мало энергии и не хочет надежно двигаться., @Anonymous Penguin

Справедливости ради, лучше сервопривод не "шагать"? Попробуйте установить его «от 0 (задержка 1 секунда) до 180 (задержка 1 секунда) до 0 ...», это должно дать относительно плавное движение., @Paul

6 ответов


0

Похоже, ваш скетч выполняется в замедленном темпе.

Проверьте, не написали ли вы delay(150) и не добавили ли вы дополнительную задержку в свой цикл. Дважды проверьте и, на всякий случай, снова загрузите исправленный скетч.

Изменить: Если возможно, протестируйте с другим сервоприводом и даже с другой платой Arduino.

,

2

В электронике, как обычно, в ситуациях, когда схема работает неправильно, и мы не понимаем, почему, обычно работает решение, заключающееся в добавлении развязывающего колпачка между +5V и ЗЕМЛЯ.

В вашем случае я бы поставил не менее 220мкФ; это обеспечит две вещи:

  • напряжение, используемое для управления сервоприводом, никогда не падает
  • напряжение, подаваемое на Arduino через USB, также не падает (что очень плохо скажется на Arduino, возможно, сбросит его)

Электролитические крышки обязательны для каждого любителя электроники (и, конечно, профессионала).

Подробнее о развязывающих конденсаторах можно прочитать в Википедии.

Изменить:

Согласно комментарию @gwideman, кажется, что использование развязывающей емкости выше 10 мкФ в устройстве USB 2.0 нарушит спецификации USB и может повредить хост-контроллер USB на компьютере.

Я не знал об этом ограничении, но я уже использовал развязывающую емкость до 100 мкФ в своих схемах, и у меня никогда не возникало проблем с USB-портом компьютера.

Это может быть связано с дополнительной электроникой на плате Arduino, которая «изолирует» питание USB от контактов Arduino +5V и GND, я не знаю (вероятно, это должно быть темой отдельного вопроса); а может мне просто везло все это время...

,

1

У меня было такое же поведение с этим типом сервоприводов. В моем случае это было легче заметить, так как Arduino часто перезагружался, когда сервопривод приближался к границам размаха, поэтому было ясно, что он потребляет слишком много энергии, а USB-порт не может этого обеспечить.

Проблему обычно решает недорогой специализированный преобразователь переменного/постоянного тока 9 В 1 А. Но если вы не можете дождаться его доставки, приобретите USB-зарядное устройство для iPad (в настоящее время оно есть у всех или у соседа/друга, у которого оно есть). Он рассчитан на 10 Вт и не страдает от перепадов напряжения даже при высоких нагрузках. Включите от него свою установку, и если вы увидите, что она работает плавно, вы получите ответ.

,

-1

Программа неисправна. 1) Ни один сервопривод не может отреагировать на команду за 15 миллисекунд. Задержка должна быть больше 500 миллисекунд (0,5 секунды). 2) Циклы for не предназначены для совместной работы. 1-й цикл передает значение 181 во второй цикл, который должен начинаться со значения 180. 2-й цикл передает значение -1 обратно в первый цикл, который должен начинаться со значения 0.

,

Скажите, пожалуйста, что неверно в моем анализе цикла for. Могла бы помочь., @Electronicalifragilistic

В этом есть несколько довольно серьезных недоразумений - заданная задержка только между самыми мелкими приращениями, фактическое время развертки составляет 2,7 секунды, что вполне в пределах возможностей сервопривода. Использование задержки в 20 мс (возможно, с большими приращениями для компенсации) действительно больше соответствовало бы типичной частоте обновления сервоприводов, но это не то, что вы рекомендуете. Также ваш анализ циклов for неверен., @Chris Stratton

Содержимое цикла for выполняется только в том случае, если условие истинно, поэтому в сервопривод записываются только те условия, которые ему удовлетворяют. Оба цикла for инициализируют свою переменную., @Chris Stratton


0

Подключите клемму +ve питания 9 В к Vin и минусовую землю. поскольку плата arduino не может обеспечить достаточную мощность сервопривода, это обеспечит это сработало для меня и работает просто отлично

,

0

Я проверил ваш код, в нем нет ничего плохого. Возможно дело в блоке питания. 1. Не используйте USB для питания сервопривода, он может вызвать скачок тока при быстром движении. 2. Используйте правильный источник питания для сервопривода. Высокий ток и использование большого конденсатора для борьбы с пиковым током.

,