roboforum.ru

Технический форум по робототехнике.

Arduino + Servo + джиттер

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Arduino + Servo + джиттер

Сообщение The_0ne » 11 июн 2012, 16:44

Привет всем!
Я сразу к делу, ладно? :oops:

Итак, собрана система инерциальной навигации на ITG3200 и ADXL345. работает, фильтр Калмана прекрасно справляется со своей задачей. Но важно не это.
К системе должны быть подключены несколько серв, которые будут получать команды в зависимости от положения. Для управления используется Servo.h и writeMicroseconds. Но это, видимо, полная фигня, так как сервы постоянно подергиваются с небольшой амплитудой и частотой раз в пару секунд. Ниже ссылка на видео.
http://youtu.be/scNUV0nbCcI
Так как я в программировании микроконтроллеров могу считать себя новичком, хочу спросить совета. Мне кажется что стандартная Servo.h неточно выдерживает скважность, несмотря на идеальные параметры (фиксированная длительность цикла, значения для управляющих импульсов идеальны). Но ведь есть возможность сформировать ШИМ с заданными параметрами "вручную"? но как это сделать я не могу понять.
Помогите, кто чем может, а? Ато я всю голову себе сломал уже)
Буду благодарен за кусок кода, который рулит сервами без "эффекта подергивания".
Спасиииибооо!
The_0ne
 
Сообщения: 7
Зарегистрирован: 11 июн 2012, 16:18

Re: Arduino + Servo + джиттер

Сообщение =DeaD= » 11 июн 2012, 17:04

Штатная библиотека на таймерах, попробуйте рулить сервами напрямую через железный ШИМ, тут скорее всего ваши таймеры для серв пересекаются с уартом и прочим добром. Вот тут есть библиотека для серв на железном ШИМ: http://arduiniana.org/libraries/pwmservo/
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Arduino + Servo + джиттер

Сообщение The_0ne » 11 июн 2012, 17:19

Я пробовал ее использовать, но результат неидеален, хотя лучше, чем с servo.h.
Просто видел на видеозаписях как у некоторых при той-же конфигурации железа все просто идеально)
Хочется так же)
The_0ne
 
Сообщения: 7
Зарегистрирован: 11 июн 2012, 16:18

Re: Arduino + Servo + джиттер

Сообщение =DeaD= » 11 июн 2012, 17:28

Если у вас с железно-ШИМ-библиотекой неидеально, тогда проблему надо искать или у вас в программе, или в питании серв или еще где-то... удалённо будет проблематично.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Arduino + Servo + джиттер

Сообщение Myp » 11 июн 2012, 18:17

не, ардуиновская библиотека держит сервы прекрасно в одном положении
дёргания это что-то ещё.

у тебя там вроде бы приёмник воткнут, а передатчик в этот момент включен?
если включен и рядом то от передатчика на близком расстоянии в сервы запросто помехи идут, попробуй отложить его подальше в угол комнаты.
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Arduino + Servo + джиттер

Сообщение The_0ne » 11 июн 2012, 22:05

=DeaD= писал(а):Если у вас с железно-ШИМ-библиотекой неидеально, тогда проблему надо искать или у вас в программе, или в питании серв или еще где-то... удалённо будет проблематично.

Да, я тоже так подумал. Поэтому попробовал питать сервоприводы не от сетевого БП, а от литий-полимерной батареи. Бестолку.
Скорее всего проблема у меня именно в софте.
Myp писал(а):у тебя там вроде бы приёмник воткнут, а передатчик в этот момент включен?
если включен и рядом то от передатчика на близком расстоянии в сервы запросто помехи идут, попробуй отложить его подальше в угол комнаты.

Поведение сервоприводов не зависит от состояния приемника и передатчика. Тоже на это грешил. Но не подтвердилось.
Спасибо за идеи! Буду разбираться с софтом. Может еще подкинете?))
The_0ne
 
Сообщения: 7
Зарегистрирован: 11 июн 2012, 16:18

Re: Arduino + Servo + джиттер

Сообщение =DeaD= » 11 июн 2012, 22:27

Попробуйте отключить в своём софте всё кроме управления сервами - если сервы будут стоять нормально, значит проблема точно в софте.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Arduino + Servo + джиттер

Сообщение The_0ne » 12 июн 2012, 02:23

Все, исправил. Оказалось что процедура чтения данных с приемника все портила. Ларчик открывался просто)
Вот эта конструкция -
    RC[0] = pulseIn(PPMin1, HIGH, 20000);
все портила. Каким-то образом такой метод портил мне всю малину. Моих знаний пока недостаточно для понимания того как именно, к сожалению.
Кстати, встал еще один вопрос - как читать данные с трех каналов стандартного модельного приемника без PulseIn? Я подозреваю что с помощью таймера, но как именно пока не доходит.
Буду благодарен за рекомендации. А может библиотека какая существует, а я тут велосипед изобретаю?
The_0ne
 
Сообщения: 7
Зарегистрирован: 11 июн 2012, 16:18

Re: Arduino + Servo + джиттер

Сообщение =DeaD= » 12 июн 2012, 11:36

PulseIn подвешивает всё, пока не закончит замерять длину входящего импульса.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Arduino + Servo + джиттер

Сообщение The_0ne » 13 июн 2012, 01:25

Все, разобрался. Всем спасибо!
PWMServo работает идеально! Правда если смириться с тем что нельзя задать значение в микросекундах - только градусы от 0 до 180. Для моих задачь такой точности зватит только на начальном уровне. Буду колупать библиотеку в целях понимания принципов и создания метода под мои нужды.
Для чтения данных с приемника существует два варианта - поканально в ШИМ или с помощью одной ноги в PPM.
Плотненько покурив интернет и, засев, было за изучение таймеров и прерываний, обнаружил что я и правда велик придумываю.
Добрые люди сделали практически то что мне нужно и выложили в общий доступ (эх, пивка бы этому доброму человеку поставить) - http://forum.rcdesign.ru/f87/thread2405 ... ost3000083
Авось кому пригодится.
Вот только это прошлый век, так как производители начинают переходить на цифру (S-Bus от Футыбы, DSM от Спектрума). надо ориентироваться именно на эти системы, ибо ножек у контроллера катастрофически нехватает, да и не комильфо в цифровой век пользовать старый добрый ШИМ)))
Всем счастья, мира и жвачку!
The_0ne
 
Сообщения: 7
Зарегистрирован: 11 июн 2012, 16:18

Re: Arduino + Servo + джиттер

Сообщение terghalin » 13 июн 2012, 12:46

Можно ли этот код использовать для 6-канального пульта? Я так понимаю, для каждого канала приемника нужен цифровой пин с PWM?
terghalin
 
Сообщения: 5
Зарегистрирован: 12 июн 2012, 23:54

Re: Arduino + Servo + джиттер

Сообщение The_0ne » 13 июн 2012, 14:15

В том виде, в котором он представлен в библиотеке нельзя. Там лишь четыре канала обрабатыватся. Но ничто и никто не мешает расширить количество. Только для этого надо будет либо с чужим кодом разобраться, либо свое писать. Второе легче и быстрее.
The_0ne
 
Сообщения: 7
Зарегистрирован: 11 июн 2012, 16:18

Re: Arduino + Servo + джиттер

Сообщение terghalin » 13 июн 2012, 15:36

Навыков написания программ на C не хватает. А так бы написал, да... ;)
В любом случае, мне надо 6 каналов, а Arduino Nano может предложить лишь 5 PWM. :(
terghalin
 
Сообщения: 5
Зарегистрирован: 12 июн 2012, 23:54

Re: Arduino + Servo + джиттер

Сообщение The_0ne » 13 июн 2012, 15:57

5PWM это на выход. А что касается входа, то любой цифровой пин может работать в качестве приемника PWM сигнала. Если я все правильно понял. Сколько их там в Nano?
В инете достаточно информации о том как это реализовать. Если рогами упереться, то понять можно. Изучай работу с прерывааниями и таймерами для атмеги. Я вот через пару недель буду упираться) Но у меня несколько другая задача - мне надо четыре сервопривода подключить, да точность повысить. А может куплю вотт эту штуку и не буду паиться))) http://www.adafruit.com/products/815
The_0ne
 
Сообщения: 7
Зарегистрирован: 11 июн 2012, 16:18


Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3