roboforum.ru

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

Как делать правильно синхронизацию серв?

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Re: Как делать правильно синхронизацию серв?

Сообщение tallarna » 03 апр 2011, 00:37

Но, кстати, ответа на исходный вопрос пока еще не было - как их синхронизировать?
Предположим, я выставил обе сервы в положение 1500 и соединил их качалки "навстречу" друг другу и корпуса жестко.
Что теперь делать?
Хватит ли просто на одну серву послать 1000, на другую 2000, чтобы повернуть ее в одну сторону?
Или нужно учитывать еще что-либо?

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

Re: Как делать правильно синхронизацию серв?

Сообщение Angel71 » 03 апр 2011, 00:39

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

Re: Как делать правильно синхронизацию серв?

Сообщение tallarna » 03 апр 2011, 00:43

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

Re: Как делать правильно синхронизацию серв?

Сообщение Angel71 » 03 апр 2011, 00:46

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

Re: Как делать правильно синхронизацию серв?

Сообщение tallarna » 03 апр 2011, 01:16

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

Re: Как делать правильно синхронизацию серв?

Сообщение HarryStar » 03 апр 2011, 08:38

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

После чего учитывая полученные данные вносим поправки в сигнал управления сцепленными сервами.
Аватара пользователя
HarryStar
 
Сообщения: 995
Зарегистрирован: 15 ноя 2010, 13:56
Откуда: Нижний Новгород
прог. языки: С, С++, РНР

Re: Как делать правильно синхронизацию серв?

Сообщение tallarna » 03 апр 2011, 11:11

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

Re: Как делать правильно синхронизацию серв?

Сообщение setar » 03 апр 2011, 12:03

я бы сделал так

каждая серва имеет следующие переменные (можно завести талички в проге на все серы сразу)
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 знака после запятой
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Как делать правильно синхронизацию серв?

Сообщение tallarna » 03 апр 2011, 12:42

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

Re: Как делать правильно синхронизацию серв?

Сообщение setar » 03 апр 2011, 12:50

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

Пред.

Вернуться в Новичкам или основы основ роботостроения.

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

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