roboforum.ru

Технический форум по робототехнике.
Текущее время: 03 дек 2024, 17:28

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Как делать правильно синхронизацию серв?
СообщениеДобавлено: 03 апр 2011, 00:37 
Не в сети
Аватара пользователя

Зарегистрирован: 01 апр 2011, 20:37
Сообщения: 35
Откуда: Германия
прог. языки: Любые алгоритмические
Но, кстати, ответа на исходный вопрос пока еще не было - как их синхронизировать?
Предположим, я выставил обе сервы в положение 1500 и соединил их качалки "навстречу" друг другу и корпуса жестко.
Что теперь делать?
Хватит ли просто на одну серву послать 1000, на другую 2000, чтобы повернуть ее в одну сторону?
Или нужно учитывать еще что-либо?

PS. ОС по потребляемому току им устроить, что-ли? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как делать правильно синхронизацию серв?
СообщениеДобавлено: 03 апр 2011, 00:39 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
чтоб не дёргались поможет только замеры потенциометров. не всегда подходит, но можно запоминать последнии положения серв. 1000 и 2000 это замечательно, только про калибровку серв не стоит забывать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как делать правильно синхронизацию серв?
СообщениеДобавлено: 03 апр 2011, 00:43 
Не в сети
Аватара пользователя

Зарегистрирован: 01 апр 2011, 20:37
Сообщения: 35
Откуда: Германия
прог. языки: Любые алгоритмические
т.е. фактически вскрывать сервы и колдовать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как делать правильно синхронизацию серв?
СообщениеДобавлено: 03 апр 2011, 00:46 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
т.е. фактически зависит от ситуации и понимания + и - каждого из вариантов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как делать правильно синхронизацию серв?
СообщениеДобавлено: 03 апр 2011, 01:16 
Не в сети
Аватара пользователя

Зарегистрирован: 01 апр 2011, 20:37
Сообщения: 35
Откуда: Германия
прог. языки: Любые алгоритмические
Кстати, можно поподробнее про калибровку серв, для "продвинутых начинающих"? Физический смысл, процедура проведения...
Гугление не помогает


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как делать правильно синхронизацию серв?
СообщениеДобавлено: 03 апр 2011, 08:38 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
Вот один из вариантов: 3 этапа.
1) Подаем на них положение центр (1500), соединяем качалки
2) Подаем на одну 1000, на другую 2000. После этого если они повернулись и ничего не жужжит и ток потребления маленький - все ок. Если нет - подбираем чтоб было так. Например 996 и 2011 получилось. Тут для удобства настройки надо подключить экранчик и 4 кнопки, ну или как то так.
3) Подаем наоборот 2000 и 1000 и добиваемся того же эффекта.

После чего учитывая полученные данные вносим поправки в сигнал управления сцепленными сервами.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как делать правильно синхронизацию серв?
СообщениеДобавлено: 03 апр 2011, 11:11 
Не в сети
Аватара пользователя

Зарегистрирован: 01 апр 2011, 20:37
Сообщения: 35
Откуда: Германия
прог. языки: Любые алгоритмические
то есть фактически нужна еще линеаризационная таблица, т.к. сервы могут быть и не совсем линейны
в простейшем случае, если принять, что обе линейны, но по-разному - результат калибровки будет в виде 2 коэффициентов в формуле y = a * x + b
и опять же, для калибровки нужна ОС по обоим потребляемым токам, ну или как минимум по одному из них
короче, без бутылки, т.е. без специальной техники не разберешься...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как делать правильно синхронизацию серв?
СообщениеДобавлено: 03 апр 2011, 12:03 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 04 окт 2004, 12:58
Сообщения: 10989
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко
я бы сделал так

каждая серва имеет следующие переменные (можно завести талички в проге на все серы сразу)
servo_zero_pwm - сигнал соответствующий нулю (это не всегда 1500)
servo_min_pwm - сигнал соответствующий минимальному углу наклона
servo_min_angle - минимальный угол
servo_max_pwm - сигнал максимального угла
servo_max angle - максимальный угол

сама калибровка следующая:
  1. серы развязываются механически , чтобы они были независимы
  2. на серву подается сигнал pwm (1500) и устанавливаются качалки близко к требуемому положению нуля
  3. на качалку крепится какой либо вспомогательный удлиннитель для более точного определения угла на большем расстоянии от центра.
    Разумеется удлинитель не должен сам вносить искажения или сдвиг от направления задаваемого качалкой, тогда лучше вообще без него. я использовал щечку плеча манипулятора
  4. изменением сигнала на серву добиваемся точного нуля градусов (изменение pwm -> 0 angle), запоминаем переменную servo_zero_pwm
  5. далее сняв сигнал с серы устанавливаем механически максимально возможный угол, замеряем его, заполняем переменную servo_max_angle
  6. подав сигнал на серву добиваемся повторения максимального угла (без натяга от упора в ограничители !). Запоминаем полученное значение управляющего сигнала (servo_max_pwm)
  7. пункты 5-6 повторяются для минимума
  8. и весь процесс калибровки (пункты 2-7) повторяются для всех серв. Разумеется сервы которые мы будем синхронизировать должны иметь одинаковые значения углов servo_max_angle и servo_min_angle

далее идет математика
заданный угол в значениях pwm:
target_pwm=target_angle*((servo_max_pwm - servo_min_pwm)/(servo_max_angle - servo_min_angle)) + servo_zero_pwm

видно что параметр ((servo_max_pwm - servo_min_pwm)/(servo_max_angle - servo_min_angle)) нет смысла вычислять каждый раз,
его нужно посчитать и сохранить как калибровачный коэффициент (тип float).

в итоге в результате калибровки для каждой сервы мы имеем пару значений : servo_zero_pwm (unsignet int) и некий коэффициент (float)

эта методика работает и на встречных осях серв, когда направление одной из них перевернуто. Все будет учтено автоматически, мы лишь получим отрицательный коэффициент и всё должным образом посчитается по тем же формулам:

target_pwm=target_angle*k + servo_zero_pwm

обычно коэффициент равен 10 - 12 с точностью 2-3 знака после запятой


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как делать правильно синхронизацию серв?
СообщениеДобавлено: 03 апр 2011, 12:42 
Не в сети
Аватара пользователя

Зарегистрирован: 01 апр 2011, 20:37
Сообщения: 35
Откуда: Германия
прог. языки: Любые алгоритмические
получается, мы фактически принимаем сервы линейными и калибруем их по-отдельности, приводя их к "общему знаменателю" - к нужному углу target_angle
есть смысл учитывать дополнительно еще и нелинейность самих серв (точнее, их потенциометров)? или эта ошибка пренебрежимо мала и эффект от ее коррекции не сравним с усилиями на ее (линеаризации) реализацию?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как делать правильно синхронизацию серв?
СообщениеДобавлено: 03 апр 2011, 12:50 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 04 окт 2004, 12:58
Сообщения: 10989
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко
не к общему, а каждую к своему
а линейность серв - она гарантируется производителем, обычно 5%
этого достаточно для наших задач


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO