Мой сервопривод не работает плавно
Поэтому я пробовал это несколько раз, и у меня всегда была одна и та же проблема. Когда я пытаюсь запустить пример развертки, сервопривод поворачивается на 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
@Jordan Adams, 👍5
Обсуждение6 ответов
Похоже, ваш скетч выполняется в замедленном темпе.
Проверьте, не написали ли вы delay(150) и не добавили ли вы дополнительную задержку в свой цикл. Дважды проверьте и, на всякий случай, снова загрузите исправленный скетч.
Изменить: Если возможно, протестируйте с другим сервоприводом и даже с другой платой Arduino.
В электронике, как обычно, в ситуациях, когда схема работает неправильно, и мы не понимаем, почему, обычно работает решение, заключающееся в добавлении развязывающего колпачка между +5V
и ЗЕМЛЯ
.
В вашем случае я бы поставил не менее 220мкФ; это обеспечит две вещи:
- напряжение, используемое для управления сервоприводом, никогда не падает
- напряжение, подаваемое на Arduino через USB, также не падает (что очень плохо скажется на Arduino, возможно, сбросит его)
Электролитические крышки обязательны для каждого любителя электроники (и, конечно, профессионала).
Подробнее о развязывающих конденсаторах можно прочитать в Википедии.
Изменить:
Согласно комментарию @gwideman, кажется, что использование развязывающей емкости выше 10 мкФ в устройстве USB 2.0 нарушит спецификации USB и может повредить хост-контроллер USB на компьютере.
Я не знал об этом ограничении, но я уже использовал развязывающую емкость до 100 мкФ в своих схемах, и у меня никогда не возникало проблем с USB-портом компьютера.
Это может быть связано с дополнительной электроникой на плате Arduino, которая «изолирует» питание USB от контактов Arduino +5V и GND, я не знаю (вероятно, это должно быть темой отдельного вопроса); а может мне просто везло все это время...
У меня было такое же поведение с этим типом сервоприводов. В моем случае это было легче заметить, так как Arduino часто перезагружался, когда сервопривод приближался к границам размаха, поэтому было ясно, что он потребляет слишком много энергии, а USB-порт не может этого обеспечить.
Проблему обычно решает недорогой специализированный преобразователь переменного/постоянного тока 9 В 1 А. Но если вы не можете дождаться его доставки, приобретите USB-зарядное устройство для iPad (в настоящее время оно есть у всех или у соседа/друга, у которого оно есть). Он рассчитан на 10 Вт и не страдает от перепадов напряжения даже при высоких нагрузках. Включите от него свою установку, и если вы увидите, что она работает плавно, вы получите ответ.
Программа неисправна. 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
Подключите клемму +ve питания 9 В к Vin и минусовую землю. поскольку плата arduino не может обеспечить достаточную мощность сервопривода, это обеспечит это сработало для меня и работает просто отлично
Я проверил ваш код, в нем нет ничего плохого. Возможно дело в блоке питания. 1. Не используйте USB для питания сервопривода, он может вызвать скачок тока при быстром движении. 2. Используйте правильный источник питания для сервопривода. Высокий ток и использование большого конденсатора для борьбы с пиковым током.
- Подключение Arduino к сервоприводу с внешним источником питания
- Микро сервопривод не работает с Arduino UNO
- Бесполезная проводка коробки и код
- 6 + 1 двигательей подключенных к arduino uno?
- Почему loop() останавливается?
- Почему сервопривод не перемещается по углам должным образом
- поворот позиционного серводвигателя более чем на 180 градусов
- Использование MCP23017 для управления сервоприводами
это гудение между "шагами"?, @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