Перейти к содержанию
Aviamodelka - форум авиамоделистов-самодельщиков

Бальза Фанера Карбоновые трубки Эпоксидные смолы Карбоновые стержни Латунные трубки Проволока ОВС Ткани

Бальза, Фанера, Карбоновые трубки, Эпоксидные смолы, Карбоновые стержни, Латунные трубки, Проволока ОВС, Ткани, МРД, Клеи

Устранение рывков при движении Сервы


Гость ВитГо

Рекомендуемые сообщения

Приветствую !

 

Я обычно обитаю на смежном форуме (ник одинаковый), и занимаюсь разработкой прошивки для Turnigy, сейчас в поиске информации по следующей проблеме:

 

в действующей прошивке реализован функционал сжатия 4х каналов на стороне аппаратуры для последующей передачи их через 1 канал передатчика-приемника и расшифровки при помощи дешифратора.

удобство очевидно- при помощи 8ми канального приемника мы на модели получаем 7+4=11 каналов (с одним дешифратором) или например 6+4+4=14 (с двумя дешифраторами)

 

дешифратор тоже сделан, но возник интересный момент - дело в том что сервы правильно встают в то или иное положение (в зависимости от длительности заданной в PWM) но зачастую двигаются рывками !

кто-то может подсказать в какую сторону копать ?

может быть кто-то уже решал подобную проблему ?

 

фотографии того что есть прикладываю (если кто захочет увидеть), на размеры дешифратора не смотрите, это отладочная плата :-)

 

На фото аппаратура со значениями каналов:

947d1001c52f.jpg

 

и все это через один, пятый канал приемника:

25a7c5782f6f.jpg

Изменено пользователем Val
Правильно оформление ссылок на ресурсы в сети..
Ссылка на комментарий

Бальза Фанера Карбоновые трубки Эпоксидные смолы Карбоновые стержни Латунные трубки Проволока ОВС Ткани

Бальза, Фанера, Карбоновые трубки, Эпоксидные смолы, Карбоновые стержни, Латунные трубки, Проволока ОВС, Ткани, МРД, Клеи

  • Ответов 14
  • Создана
  • Последний ответ

Топ авторов темы

А серво и двигаются рывками, только мелкими. По расчету выходит, если мне память не изменяет, частота прохождения РРМ "пакетов" около 50 Герц. Соответственно, разделив 50 на 4 получаем рывки в 12 Герц.

 

Разве что цикл поможет, как в сервозамедлителе.

Плюс "повторитель", который передаёт на серву последний полученный на неё сигнал, пока три других сервы получают свои команды и проходит синхрокоманда.

Ссылка на комментарий
сервы правильно встают в то или иное положение (в зависимости от длительности заданной в PWM) но зачастую двигаются рывками!
Я чуть углубю...

Да, у тебя, как минимум, в четыре раза снижается частота регулирования положения сервы. Но это не причина.

Готового ответа у меня нет, давай попробуем анализировать:

Надо рассмотреть два предельных случая:

1) Когда стик движется быстро-быстро. Вот он у тебя был 1мС, а в следующий момент - бац! - и сразу 2мС. Управляющий импульс на серве изменится так же рывком, и серва метнется от края к краю. Но это движение будет равномерным - промежуточных остановок просто нет. Почему остановок нет? Потому, что качалка заведомо не доехала до требуемого значения. Доедет - остановится, и это нормально.

2) Когда стик движется медленно-медленно. Серва без проблем успевает отследить последовательные положения стика. Движение равномерное. Но есть два варианта:

а) Когда качалка успела доехать до заданного текущего положения и остановилась. Промежуточные остановки есть, но они воспринимаются абсолютно нормально. Потому, что это соответствует очень медленному движению стика.

б) Когда качалка не успела доехать до заданного положения и получила новое заданное положение. Но приращение значения заданного положения происходит равномерно и соответствует текущей скорости перемещения качалки (и стика). То есть нет резких ускорений и замедлений в перемещении качалки.

 

А теперь, очевидно, есть некоторый промежуточный случай: серва успевает доехать до заданного положения и остановиться. А в следующее заданное состояние она не успевает доехать. В "черезследующее" - успевает. А в дальнейшее - опять нет. Тогда мы получим на рассмотренном участке две остановки и два рывка.

 

Это очень напоминает погрешность при измерении времени методом заполнения интервала. Ты не можешь измерить интервал только с точностью до длительности периода заполняющей последовательности. Не утверждаю, что у тебя именно так (не зная алгоритм), но, если заполняющий импульс далеко заехал за отметку, то ты получаешь "рывок" - измеренная длительность больше реальной. А в следующем периоде ты точно попал импульсом на отметку, и получил замедление - проехать надо меньше, чем предыдущем рывке.

Ссылка на комментарий

Поводу реализации:

 

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

просто данные об импульсе сервы обновляются с частотой 10 гц..

 

так что с точки зрения управляющего импульса у сервы ничего не меняется... и частота та же.. и длительности те же..

 

в точки зрения дискретности импульса отправляемого на сервы:

 

да, наверное вы правы, я вчера вечером сделал программный замедлитель для сервы.. то есть если в первую посылку управляющего импульса получен импульс для сервы в 1000 мкс. а во второй посылке 1500 мкс. то на деле значение импульса сервы каждую ее посылку с частотой 50 гц будет плавно увеличиваться на 15 мкс.

в этом случае сервы действительно двигаются медленнее чем обычно (раза в 3), но без заметных рывков..

 

У меня вопрос такой - а ктото отслеживал какой сигнал выходит с приемника ?

нет ли там тоже программного замедления выдачи значения канала ?

 

почему спрашиваю - у меня почему то обновление данных с приемника идет с частотой не 10 гц (1 управляющий импульс +4 канальных) а значительно медленнее.. такое ощущение что 2-3 гц.. не больше !!

 

так получилось что у меня нет осцилографа с памятью не могу проверить приемник... а на моем С1-73 изменяющиеся посылки фиг усмотришь (плюс что у него еще и с синхронизацией проблемы... прибор то 1982 года выпуска..)

 

Я чуть углубю...

...

 

А теперь, очевидно, есть некоторый промежуточный случай: серва успевает доехать до заданного положения и остановиться. А в следующее заданное состояние она не успевает доехать. В "черезследующее" - успевает. А в дальнейшее - опять нет. Тогда мы получим на рассмотренном участке две остановки и два рывка.

...

 

ВОТ !! вот именно такое и происходит !!!!!!!

 

Как в воду глядите !!

Ссылка на комментарий

Добрый день!

Давайте посчитаем. Нормальная серва перекладывается на 60 град. примерно за 0,1 секунды. За это время она успевает переработать 5 кадров от малоканального передатчика или 4 от передатчика с числом каналов 10 и более, т.к. кадр у них длиннее, и производители зачастую снижают частоту повторения до 40 герц,чтобы сохранить достаточную длину кадрового синхроимпульса. Еслм понизить частоту обновления кадров ещё в 4 раза, то получится, что на 60 градусах перекладки серва получит 1 импульс. На следующих 60 градусах она получит следующие (обновлённые) импульсы и побежит занимать новое положение. Вот так, если вкратце.

Дополнительно к теме:

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

А есть режим проверки равномерности перекладки. При нём длительность импульса плавно модулируется генератором треугольного напряжения и изменяется в тех же пределах, но 4 секунды нарастает, а потом 4 секунды спадает. В этом режиме уже заметны мелкие рывки аналоговых серв, и это нормально. Если же начинаются рывки с большей амплитудой, то это указывает на перерегулирование её (сервы) обратной связи.

С уважением,

Виктор.

Ссылка на комментарий

вот мелкие рывочки меня и напрягают :-(

хотелось бы достичь движений без рывков.

 

в общем сегодня вечером попробую ввести переменную ослеживания частоты обновления данных о каналах..

у меня такое ощущение что приемник сглаживает длительности импульсов или как то иным образом их искажает.. (как ? - пока понять не могу) не вериться что обновление с частотой 10 Гц настолько способны увеличить рывки ! а вот частота обновления 2-3 Гц - охотно верю !

 

просто у меня вывод на экран сделан с главном цикле и осуществляется непрерывно, так вот цифры на экране тоже меняются скачкообразно и на мой взгляд явно не с частотой 10 гц а намного меньше.. раза 2 в секунду...

 

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

Ссылка на комментарий

сигнал это 5 пачек импульсов PPM

 

в первой пачке вместо одного из каналов (пусть будет канал 5) идет маркер, длинной 750 мкс.

во второй пачке вместо канала 5 идет длительность канала 1

в третьей пачке - длительность канала 2

в четвертой пачке - длительность канала 3

в пятой пачке - длительность канала 4

 

потом все сначала - маркер, и опять 4 пачки с каналами

 

так вот, когда я получаю маркер, я проверяю счетчик полученных каналов, и если вижу что с момента получения последнего маркера я не получил 4 канала в последующих пачках - то я считаю считанные данные каналов неверными.. и следовательно информацию о длительностях канальных импульсов на выход дешифратора не выдаю...

 

исходники проекта для студии вот ->MULTI_D.RAR

 

Комментарии к коду внутри....

 

 

 

Схема описана мною так (сегодня дома нарисую на листочке, сфоткаю и завтра выложу)

 

Использована AtMega16 частота по внешнему кварцу на 16 Мгц

 

PORTB - алфавитно цифровой дисплей, в реальном устройстве его не будет, но его наличие на этапе разработки реально очень помогает!

по пинам сигналы дисплея подключены следующим образом (в скобках номер физического вывода для АТМЕГА16 в корпусе DIP40)

Подключение дисплея:

E - PORTB.0 (1)

RW - PORTB.1 (2)

RS - PORTB.2 (3)

D4-D7 - PORTB.4 (5)-PORTB.7 (8)

вывод PORTB.3 - свободный и не используется

Еще раз повторюсь - дисплей используется со стандартным интерфейсом для алфавитно цифровых HD44780

 

Кварц на 16 МГц подключен к выводам 12, 13 меги, стандартно кварц и пара кондеров

 

Сигнальный выход приемника подключен на ножку INT1/PD3 (17)

 

Сигнал для серв снимается с выводов PA0-PA3 (40, 39, 38, 37)

 

При работе дешифратора на PA7 (33) выдаются контрольные импульсы передачи сигналов на выходы - у меня к этому выводу подключен светодиод для контроля - если горит - то все ОК, если мигает с частотой заметной глазу - то значит нет дешифрации (скорее всего нет сигнала с приемника)

 

Ссылка на комментарий

На мой взгляд, версия о слишком редких импульсах обновления верна.

Пять кадров при частоте 50 Гц длятся 20мсекх5=100мсек или 0,1 сек. То есть, при отсутствии помех очередной импульс обновления придёт на серву через это время. А при помехах - через 0,2-0,3 секунды. Этот "огромный" период и заставляет двигаться серву скачками от одной заданной длительности к другой.

Допустим, вы перекладываете ручку на передатчике из одного крайнего положения в другое за одну секунду. За это время ваша серва получит только 10 импульсов, определяющих её положение. И она, естественно, будет двигаться десятью дискретными скачками. То есть, пройдет тот же путь, что и без вашего дешифратора, но не за 50 мелких шажков, а за 10 крупных. Такова плата за увеличение числа каналов! Если бы вы сжали десяток дискретных каналов (вкл./выкл.), то эта задержка, в большинстве случаев, не имела бы значения. А вы хотите сжать пропорциональные каналы... И получаете иллюстрацию к частному случаю теоремы Котельникова.

С уважением,

Виктор.

 

Ссылка на комментарий
А есть режим проверки равномерности перекладки. При нём длительность импульса плавно модулируется генератором треугольного напряжения
А я в своем сервотестере (на ATMega88) cделал по-другому: я переменным резистором задаю желаемый период перекладки сервы туда-обратно (от 0,52с до 20с). По периоду перекладки считаю количество приращений, которое должен получить управляющим импульс. Дальше определяю величину приращения. После этого остается только при переполнении таймера (работающего в режиме ШИМ с фазово-частотной коррекцией, ICR задает период счета 20мс) определять следующее значение длины импульса и загонять его в OСR этого таймера.

 

В моём самодельном сервотестере есть режим проверки максимальной скорости перекладки
А как выполняется эта проверка, если не секрет? Чисто на глаз? Или есть какой-то измеритель реального времени перекладки качалки от края до края?
Ссылка на комментарий
А я в своем сервотестере (на ATMega88)

Мой - на ИСах таймеров и компараторов. Я, увы, программированием микроконтроллеров не владею... Некому научить...

А как выполняется эта проверка, если не секрет?

Специального прибора нет, но есть эталонная цифровая серва для вертолётов. Её проверили в магазине и убедились, что она точно перекладывается 90 град. за 0,15 сек. Я включаю на выход тестера две сервы (новую и эталонную) и смотрю, как ходят качалки. Для моих целей вполне достаточно.

С уважением,

Виктор.

Ссылка на комментарий
Я, увы, программированием микроконтроллеров не владею... Некому научить...

С уважением,

Виктор.

Хотелось бы уяснить, что именнно вы не умеете- программировать (писать код программы) или просто записать в память микроконтроллера уже готовый код? Если второе, то вам сюда, читайте первую страницу и собирайте программатор, благо все очень понятливо расписано.

Изменено пользователем user777
Ссылка на комментарий

user777

Благодарю за отклик!

Вообще-то "некому научить" - это не очень удачная шутка. Если быть точным, то мне не пришлось заниматься микроконтроллерами (МК), поскольку до сего времени я обходился для всех своих поделок классическими ИС. Отсюда - отсутствие мотивации. А литературы у меня хватает, ведь даже журнал "Радио" я выписываю с 62-го года и до сего дня без перерыва.

Рано или поздно, наверное, придётся применять МК, в этом случае я с удовольствием воспользуюсь помощью, как вашей, так и других коллег!

Прошу прощения за отклонение от темы!

С благодарностью и уважением,

Виктор.

Ссылка на комментарий
  • 2 недели спустя...

Прошу прощение за то что пропал - в коммандировке... :-(

 

По поводу моей задачи:

выяснилось что приемник может совершенно запросто повторить передачу данных по какому либо каналу и без какого либо предупреждения :-)

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

 

на практике у меня получилось что 8ми канальный приемник Турниги второй версии - очень часто дублирует канальные импульсы...

 

напомню что у меня дешифратор после маркера в 700 мкс ждет 4 канальных импульса для 4х каналов... а в реале может получить два канала переданных дважды :-(

по всей видимости придется искать другой алгоритм сжатия каналов для передачи через один физический канал приемника...

 

вот такие вот дела...

 

p.s. а по поводу программирования на МК - я тоже никогда этим не занимался.. но как показывает практика если начать с простого и разбираться неспеша - то можно достигать хороших результатов :-)

Ссылка на комментарий

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

×
  • Создать...