arduino uno и сервопривод
- Войдите на сайт для отправки комментариев
Пт, 14/10/2011 - 18:20
Хотел заставить серву двигаться. Простой код: сервопривод должен повернуться на 180 градусов.
Подключаю вот так: красный провод +5, коричневый gnd, желтый A0.
Когда даю питание (usb) серва в течении доль секунд дергается и все. Пробовал 2 сервопривода, оба ведут себя одинаково.
Заранее спасибо.
Почему А0? серва подключается к любому цыфровому выходу.
Подключаю вот так: красный провод +5, коричневый gnd, желтый A0.
Когда даю питание (usb) серва в течении доль секунд дергается и все. Пробовал 2 сервопривода, оба ведут себя одинаково.
Скорее всего - мощности источника не хватает...
Подключите так:
коричневый провод - gnd
желтый - A0 (а лучше какой нибудь D - например, D4. Не забудьте соответственно изменить программу)
красный провод соедините с плюсом ВНЕШНЕГО источника питания 5-7 В, способного выдавать ток 1-2 А.
и еще одним проводом минус внешнего источника соедините с gnd.
Учитывая попытку подключить серву к A0, думаю будет не лишним если вы приведете тут "Простой код: сервопривод должен повернуться на 180 градусов.".
Попробуйте собрать, выполнить стандартный пример http://arduino.cc/en/Tutorial/Sweep
Так же, если вы не пытаетесь делать ШИМ программно, почитайте тут arduino.ru/Reference/AnalogWrite на каких портах ваша ардуина поддерживает ШИМ (как видидте на A0 не поддерживает ни одна).
Причем тут шим? Для управления сервой шим не нужен.
Берешь любой цифровой выход, запускаешь екземпл серво, меняешь в нем номер выхода на свой.
robocraft.ru/blog/arduino/245.html
>Причем тут шим? Для управления сервой шим не нужен.
Да ну? А что, по вашему подается на управляющий вход сервы? Псалмы? Именно PWM. И он должен "откуда-то братся".
Братся он может либо из "аппаратных пинов", либо нужно "программно". Если апаратно то вам нужно смотреть на каких пинах он бывает.
Что-бы не морочится со всем этим, действительно можно взять библиотеку, которая все эти "нюансы" учтет за нас. Если вы заметили то я тоже посоветовал просто "собрать пример" на Servo Library.
Кстати по вашей ссылке читаем ""На платах, отличных от Mega, использование библиотеки отключает возможность использования analogWrite() (PWM) на пинах 9 и 10...". Наверное это тоже от того что "для управления сервой шим не причем" ;).
Библиотека безусловно удобный путь, но не единственно возможный. Вот почитайте как это бывает без библиотеки robocraft.ru/blog/mechanics/240.html
Какой путь изначально пробовал топик-стартер "библиотека", "аппаратные пины" (analogWrite), или "программно" - неизвестно. Именно поэтому я попросил, первым делом, "привести код".
Да ну? А что, по вашему подается на управляющий вход сервы? Псалмы? Именно PWM. И он должен "откуда-то братся".
Не совсем так.
Я бы даже сказал - в мире Arduino совсем не так. Ибо в мире Arduino PWM (то, что генерируется с использованием функции AnalogWrite) - это пульсирующий сигнал с частотой импульсов около 500 Гц (период 2 мс) с коэффициентом заполнения от 0% до 100%.
А сервоприводы управляются пульсирующим сигналом с частотой импульсов 50 Гц (период 20 мс) и длительностью импульса от 0,9 до 2,1 мс (к-т заполнения примерно 5%-10%).
Так что тот ШИМ-сигнал, который можно сгенерировать на аналоговых выводах ардуины стандартными средствами (AnalogWrite), лежит далеко за диапазоном частот, подходящим для сервомашинок. А посему использование выводов Ax для управления сервомашинкой не имеет тех преимуществ перед выводами Dx, на которые, надо полагать, надеялся топикстартер.
В конечном итоге это все-таки PWM :) . Другое дело, как выяснилось, что сгенерировать для сервы такой PWM "как нужно", аппаратно сложней чем я думал (но думаю все-таки возможно, правда не через AnalogWrite а уже напрямую через порты, руцями настраивать делители и проч. темный лес).
Но, в любом случае, спасибо за разъяснение отличий. Теперь буду лучше понимать область применимости "AnalogWrite".
Большое спасибо за ответы, но проблема не решена.
Я пробовал собрать пример, который показал leshak, но как только я подключал сервопривод к ардуино, как показано на рисунке, светодиодик "on" погасал. Такое ощущение, что поступаемого тока хватало только на сервопривод. Но тк я подключал к usb, то напряжение нормальное.
В общем думаю нужен внешний источник. Что может им послужить? 4АА батарейки потянут?
Заранее спасибо.
В общем думаю нужен внешний источник. Что может им послужить? 4АА батарейки потянут?
Почитайте это.
Добрый день,
простите за ламеркий вопрос - только начинаю осваивать Arduino Mega
1. Подключил контроллер и залил скетч-пример sweep. Но серва не проходит угол 180 град. Градусов 165-170, не больше. Как такое может быть? Как-то можно исправить (Серва 9g с dealextreme.com)
Добрый день,
простите за ламеркий вопрос - только начинаю осваивать Arduino Mega
1. Подключил контроллер и залил скетч-пример sweep. Но серва не проходит угол 180 град. Градусов 165-170, не больше. Как такое может быть? Как-то можно исправить (Серва 9g с dealextreme.com)
у каждой серво свой механический предел движения.
Mastino, спасибо =)
а как узнать пределы (крайние углы поворота)?увеличивать угол, пока не начнет трещать в крайнем положении или перестанет двигаться?
( может угол 0 - это всегда ноль, а противоположное крайнее положение надо искать?
или наоборот 180 - это всегда 180, и противоположное положение надо искать?)
Mastino, спасибо =)
а как узнать пределы (крайние углы поворота)?увеличивать угол, пока не начнет трещать в крайнем положении или перестанет двигаться?
( может угол 0 - это всегда ноль, а противоположное крайнее положение надо искать?
или наоборот 180 - это всегда 180, и противоположное положение надо искать?)
начинай с 90 и по десять градусов иди вверх, если конечная точка будет 160, то начальная 20..и так дале
Mastino, понял спасибо =)
А с кодом не поможете? Чет не хочет мой первый скетч работать =) Вроде слепил его из кусков примеров...
Решил поднять тему, потому как пока не нашел ответ на мучающий меня вопрос. Пытаюсь освоить сервоприводы, подключил, залил скетч из примера, серва двигается, но не 180 градусов а примерно 90. Серва которую применяю фирмы Hitec HC55 ее физичиский ход 0-180 градусов, знаю это не по наслышке, такие у меня стоят на самолете. Может кто подскажет как от нее добиться полного хода. Вот код который я использую:
Решил поднять тему, потому как пока не нашел ответ на мучающий меня вопрос. Пытаюсь освоить сервоприводы, подключил, залил скетч из примера, серва двигается, но не 180 градусов а примерно 90.
http://arduino.ru/Reference/Library/Servo/attach
второй и третий параметры
Спасибо за подсказку, уже читаю.
GND=A0 Вот и всё...
Извиняюсь, не в ту ветку залез...
Решил поднять тему, потому как пока не нашел ответ на мучающий меня вопрос. Пытаюсь освоить сервоприводы, подключил, залил скетч из примера, серва двигается, но не 180 градусов а примерно 90.
http://arduino.ru/Reference/Library/Servo/attach
второй и третий параметры
Leshak говорит истину, если у Вас есть вопросы: "ПОчему серва дергается в крайних положениях?"
Ответ кроется в указание ширины импульса серве. Или минимальный и максимальный градус. По ссылке выше можно посмотреть где и как вписать их. (Спасибо Leshak'у)
И все, кто питает серву от ардуины - ничего не получится. Необходимо доп. питание (как сказано выше 1-2 А). Не забывайте!