Гость ВитГо Опубликовано 1 ноября, 2011 Поделиться Опубликовано 1 ноября, 2011 (изменено) Приветствую ! Я обычно обитаю на смежном форуме (ник одинаковый), и занимаюсь разработкой прошивки для Turnigy, сейчас в поиске информации по следующей проблеме: в действующей прошивке реализован функционал сжатия 4х каналов на стороне аппаратуры для последующей передачи их через 1 канал передатчика-приемника и расшифровки при помощи дешифратора. удобство очевидно- при помощи 8ми канального приемника мы на модели получаем 7+4=11 каналов (с одним дешифратором) или например 6+4+4=14 (с двумя дешифраторами) дешифратор тоже сделан, но возник интересный момент - дело в том что сервы правильно встают в то или иное положение (в зависимости от длительности заданной в PWM) но зачастую двигаются рывками ! кто-то может подсказать в какую сторону копать ? может быть кто-то уже решал подобную проблему ? фотографии того что есть прикладываю (если кто захочет увидеть), на размеры дешифратора не смотрите, это отладочная плата :-) На фото аппаратура со значениями каналов: и все это через один, пятый канал приемника: Изменено 1 ноября, 2011 пользователем Val Правильно оформление ссылок на ресурсы в сети.. Ссылка на комментарий
Dimetrio Опубликовано 1 ноября, 2011 Поделиться Опубликовано 1 ноября, 2011 А серво и двигаются рывками, только мелкими. По расчету выходит, если мне память не изменяет, частота прохождения РРМ "пакетов" около 50 Герц. Соответственно, разделив 50 на 4 получаем рывки в 12 Герц. Разве что цикл поможет, как в сервозамедлителе. Плюс "повторитель", который передаёт на серву последний полученный на неё сигнал, пока три других сервы получают свои команды и проходит синхрокоманда. Ссылка на комментарий
Гость EagleB3 Опубликовано 1 ноября, 2011 Поделиться Опубликовано 1 ноября, 2011 сервы правильно встают в то или иное положение (в зависимости от длительности заданной в PWM) но зачастую двигаются рывками!Я чуть углубю... Да, у тебя, как минимум, в четыре раза снижается частота регулирования положения сервы. Но это не причина. Готового ответа у меня нет, давай попробуем анализировать: Надо рассмотреть два предельных случая: 1) Когда стик движется быстро-быстро. Вот он у тебя был 1мС, а в следующий момент - бац! - и сразу 2мС. Управляющий импульс на серве изменится так же рывком, и серва метнется от края к краю. Но это движение будет равномерным - промежуточных остановок просто нет. Почему остановок нет? Потому, что качалка заведомо не доехала до требуемого значения. Доедет - остановится, и это нормально. 2) Когда стик движется медленно-медленно. Серва без проблем успевает отследить последовательные положения стика. Движение равномерное. Но есть два варианта: а) Когда качалка успела доехать до заданного текущего положения и остановилась. Промежуточные остановки есть, но они воспринимаются абсолютно нормально. Потому, что это соответствует очень медленному движению стика. б) Когда качалка не успела доехать до заданного положения и получила новое заданное положение. Но приращение значения заданного положения происходит равномерно и соответствует текущей скорости перемещения качалки (и стика). То есть нет резких ускорений и замедлений в перемещении качалки. А теперь, очевидно, есть некоторый промежуточный случай: серва успевает доехать до заданного положения и остановиться. А в следующее заданное состояние она не успевает доехать. В "черезследующее" - успевает. А в дальнейшее - опять нет. Тогда мы получим на рассмотренном участке две остановки и два рывка. Это очень напоминает погрешность при измерении времени методом заполнения интервала. Ты не можешь измерить интервал только с точностью до длительности периода заполняющей последовательности. Не утверждаю, что у тебя именно так (не зная алгоритм), но, если заполняющий импульс далеко заехал за отметку, то ты получаешь "рывок" - измеренная длительность больше реальной. А в следующем периоде ты точно попал импульсом на отметку, и получил замедление - проехать надо меньше, чем предыдущем рывке. Ссылка на комментарий
Гость ВитГо Опубликовано 2 ноября, 2011 Поделиться Опубликовано 2 ноября, 2011 Поводу реализации: я написал что на сервы импульсы идут с частотой 50 гц.. просто данные об импульсе сервы обновляются с частотой 10 гц.. так что с точки зрения управляющего импульса у сервы ничего не меняется... и частота та же.. и длительности те же.. в точки зрения дискретности импульса отправляемого на сервы: да, наверное вы правы, я вчера вечером сделал программный замедлитель для сервы.. то есть если в первую посылку управляющего импульса получен импульс для сервы в 1000 мкс. а во второй посылке 1500 мкс. то на деле значение импульса сервы каждую ее посылку с частотой 50 гц будет плавно увеличиваться на 15 мкс. в этом случае сервы действительно двигаются медленнее чем обычно (раза в 3), но без заметных рывков.. У меня вопрос такой - а ктото отслеживал какой сигнал выходит с приемника ? нет ли там тоже программного замедления выдачи значения канала ? почему спрашиваю - у меня почему то обновление данных с приемника идет с частотой не 10 гц (1 управляющий импульс +4 канальных) а значительно медленнее.. такое ощущение что 2-3 гц.. не больше !! так получилось что у меня нет осцилографа с памятью не могу проверить приемник... а на моем С1-73 изменяющиеся посылки фиг усмотришь (плюс что у него еще и с синхронизацией проблемы... прибор то 1982 года выпуска..) Я чуть углубю... ... А теперь, очевидно, есть некоторый промежуточный случай: серва успевает доехать до заданного положения и остановиться. А в следующее заданное состояние она не успевает доехать. В "черезследующее" - успевает. А в дальнейшее - опять нет. Тогда мы получим на рассмотренном участке две остановки и два рывка. ... ВОТ !! вот именно такое и происходит !!!!!!! Как в воду глядите !! Ссылка на комментарий
Vic88 Опубликовано 2 ноября, 2011 Поделиться Опубликовано 2 ноября, 2011 Добрый день! Давайте посчитаем. Нормальная серва перекладывается на 60 град. примерно за 0,1 секунды. За это время она успевает переработать 5 кадров от малоканального передатчика или 4 от передатчика с числом каналов 10 и более, т.к. кадр у них длиннее, и производители зачастую снижают частоту повторения до 40 герц,чтобы сохранить достаточную длину кадрового синхроимпульса. Еслм понизить частоту обновления кадров ещё в 4 раза, то получится, что на 60 градусах перекладки серва получит 1 импульс. На следующих 60 градусах она получит следующие (обновлённые) импульсы и побежит занимать новое положение. Вот так, если вкратце. Дополнительно к теме: В моём самодельном сервотестере есть режим проверки максимальной скорости перекладки. В этом режиме серва получает импульсы длиной 1000 мксек в течение 2 секунд, затем в следующие 2 секунды идут импульсы длительностью 2000 мксек без всяких промежуточных значений, и серва с максимальной скоростью и без рывков перекладывается из одного крайнего положения в другое. А есть режим проверки равномерности перекладки. При нём длительность импульса плавно модулируется генератором треугольного напряжения и изменяется в тех же пределах, но 4 секунды нарастает, а потом 4 секунды спадает. В этом режиме уже заметны мелкие рывки аналоговых серв, и это нормально. Если же начинаются рывки с большей амплитудой, то это указывает на перерегулирование её (сервы) обратной связи. С уважением, Виктор. Ссылка на комментарий
Гость ВитГо Опубликовано 2 ноября, 2011 Поделиться Опубликовано 2 ноября, 2011 вот мелкие рывочки меня и напрягают :-( хотелось бы достичь движений без рывков. в общем сегодня вечером попробую ввести переменную ослеживания частоты обновления данных о каналах.. у меня такое ощущение что приемник сглаживает длительности импульсов или как то иным образом их искажает.. (как ? - пока понять не могу) не вериться что обновление с частотой 10 Гц настолько способны увеличить рывки ! а вот частота обновления 2-3 Гц - охотно верю ! просто у меня вывод на экран сделан с главном цикле и осуществляется непрерывно, так вот цифры на экране тоже меняются скачкообразно и на мой взгляд явно не с частотой 10 гц а намного меньше.. раза 2 в секунду... у меня есть в коде проверка правильности полученной пачки - и если пачка не верна то данные о канале не обновляются - то есть потенциально есть кусок кода который может замедлить обновление серв просто потому что он регистрирует ошибки в пакете... - поэтому и задумываюсь - а не искажает ли приемник канальный импульс ? (из за чего моя система проверки просто игнорирует обновление канального импульса для сервы) Ссылка на комментарий
Vic88 Опубликовано 2 ноября, 2011 Поделиться Опубликовано 2 ноября, 2011 у меня есть в коде проверка правильности полученной пачки - и если пачка не верна то данные о канале не обновляются Что значит, неверна? Критерии? Ссылка на комментарий
Гость ВитГо Опубликовано 2 ноября, 2011 Поделиться Опубликовано 2 ноября, 2011 сигнал это 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) выдаются контрольные импульсы передачи сигналов на выходы - у меня к этому выводу подключен светодиод для контроля - если горит - то все ОК, если мигает с частотой заметной глазу - то значит нет дешифрации (скорее всего нет сигнала с приемника) Ссылка на комментарий
Vic88 Опубликовано 2 ноября, 2011 Поделиться Опубликовано 2 ноября, 2011 На мой взгляд, версия о слишком редких импульсах обновления верна. Пять кадров при частоте 50 Гц длятся 20мсекх5=100мсек или 0,1 сек. То есть, при отсутствии помех очередной импульс обновления придёт на серву через это время. А при помехах - через 0,2-0,3 секунды. Этот "огромный" период и заставляет двигаться серву скачками от одной заданной длительности к другой. Допустим, вы перекладываете ручку на передатчике из одного крайнего положения в другое за одну секунду. За это время ваша серва получит только 10 импульсов, определяющих её положение. И она, естественно, будет двигаться десятью дискретными скачками. То есть, пройдет тот же путь, что и без вашего дешифратора, но не за 50 мелких шажков, а за 10 крупных. Такова плата за увеличение числа каналов! Если бы вы сжали десяток дискретных каналов (вкл./выкл.), то эта задержка, в большинстве случаев, не имела бы значения. А вы хотите сжать пропорциональные каналы... И получаете иллюстрацию к частному случаю теоремы Котельникова. С уважением, Виктор. Ссылка на комментарий
Гость ВитГо Опубликовано 2 ноября, 2011 Поделиться Опубликовано 2 ноября, 2011 :-( дискретные каналы не нужны.. нужны именно пропорциональные... Ссылка на комментарий
Гость EagleB3 Опубликовано 2 ноября, 2011 Поделиться Опубликовано 2 ноября, 2011 А есть режим проверки равномерности перекладки. При нём длительность импульса плавно модулируется генератором треугольного напряженияА я в своем сервотестере (на ATMega88) cделал по-другому: я переменным резистором задаю желаемый период перекладки сервы туда-обратно (от 0,52с до 20с). По периоду перекладки считаю количество приращений, которое должен получить управляющим импульс. Дальше определяю величину приращения. После этого остается только при переполнении таймера (работающего в режиме ШИМ с фазово-частотной коррекцией, ICR задает период счета 20мс) определять следующее значение длины импульса и загонять его в OСR этого таймера. В моём самодельном сервотестере есть режим проверки максимальной скорости перекладкиА как выполняется эта проверка, если не секрет? Чисто на глаз? Или есть какой-то измеритель реального времени перекладки качалки от края до края? Ссылка на комментарий
Vic88 Опубликовано 2 ноября, 2011 Поделиться Опубликовано 2 ноября, 2011 А я в своем сервотестере (на ATMega88) Мой - на ИСах таймеров и компараторов. Я, увы, программированием микроконтроллеров не владею... Некому научить... А как выполняется эта проверка, если не секрет? Специального прибора нет, но есть эталонная цифровая серва для вертолётов. Её проверили в магазине и убедились, что она точно перекладывается 90 град. за 0,15 сек. Я включаю на выход тестера две сервы (новую и эталонную) и смотрю, как ходят качалки. Для моих целей вполне достаточно. С уважением, Виктор. Ссылка на комментарий
Гость user777 Опубликовано 7 ноября, 2011 Поделиться Опубликовано 7 ноября, 2011 (изменено) Я, увы, программированием микроконтроллеров не владею... Некому научить... С уважением, Виктор. Хотелось бы уяснить, что именнно вы не умеете- программировать (писать код программы) или просто записать в память микроконтроллера уже готовый код? Если второе, то вам сюда, читайте первую страницу и собирайте программатор, благо все очень понятливо расписано. Изменено 7 ноября, 2011 пользователем user777 Ссылка на комментарий
Vic88 Опубликовано 7 ноября, 2011 Поделиться Опубликовано 7 ноября, 2011 user777 Благодарю за отклик! Вообще-то "некому научить" - это не очень удачная шутка. Если быть точным, то мне не пришлось заниматься микроконтроллерами (МК), поскольку до сего времени я обходился для всех своих поделок классическими ИС. Отсюда - отсутствие мотивации. А литературы у меня хватает, ведь даже журнал "Радио" я выписываю с 62-го года и до сего дня без перерыва. Рано или поздно, наверное, придётся применять МК, в этом случае я с удовольствием воспользуюсь помощью, как вашей, так и других коллег! Прошу прощения за отклонение от темы! С благодарностью и уважением, Виктор. Ссылка на комментарий
Гость ВитГо Опубликовано 19 ноября, 2011 Поделиться Опубликовано 19 ноября, 2011 Прошу прощение за то что пропал - в коммандировке... :-( По поводу моей задачи: выяснилось что приемник может совершенно запросто повторить передачу данных по какому либо каналу и без какого либо предупреждения :-) я так понимаю происходит следующее: приемник получил пакет ppm, дешифровал его, выдал на каналы, потом например по причине плохой связи или еще по какой - но следующий пакет не получил - в этом случае на выходные каналы идут те же длительности которые были в последний раз.. на практике у меня получилось что 8ми канальный приемник Турниги второй версии - очень часто дублирует канальные импульсы... напомню что у меня дешифратор после маркера в 700 мкс ждет 4 канальных импульса для 4х каналов... а в реале может получить два канала переданных дважды :-( по всей видимости придется искать другой алгоритм сжатия каналов для передачи через один физический канал приемника... вот такие вот дела... p.s. а по поводу программирования на МК - я тоже никогда этим не занимался.. но как показывает практика если начать с простого и разбираться неспеша - то можно достигать хороших результатов :-) Ссылка на комментарий
Рекомендуемые сообщения