roboforum.ru

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

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

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

tallarna » 03 апр 2011, 00:37

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

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

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

Angel71 » 03 апр 2011, 00:39

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

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

tallarna » 03 апр 2011, 00:43

т.е. фактически вскрывать сервы и колдовать?

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

Angel71 » 03 апр 2011, 00:46

т.е. фактически зависит от ситуации и понимания + и - каждого из вариантов.

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

tallarna » 03 апр 2011, 01:16

Кстати, можно поподробнее про калибровку серв, для "продвинутых начинающих"? Физический смысл, процедура проведения...
Гугление не помогает

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

HarryStar » 03 апр 2011, 08:38

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

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

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

tallarna » 03 апр 2011, 11:11

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

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 знака после запятой

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

tallarna » 03 апр 2011, 12:42

получается, мы фактически принимаем сервы линейными и калибруем их по-отдельности, приводя их к "общему знаменателю" - к нужному углу target_angle
есть смысл учитывать дополнительно еще и нелинейность самих серв (точнее, их потенциометров)? или эта ошибка пренебрежимо мала и эффект от ее коррекции не сравним с усилиями на ее (линеаризации) реализацию?

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

setar » 03 апр 2011, 12:50

не к общему, а каждую к своему
а линейность серв - она гарантируется производителем, обычно 5%
этого достаточно для наших задач


Rambler\'s Top100 Mail.ru counter