OrangeRx Open LRS 433MHz TX Module
Вопрос к тем, кто использует OrangeRX с прошивкой KHA (openLRSng).
У вас сервы не дергаются?
У меня это выглядит это как нерегулярные (раз в 2-5 сек) подергивания на один шаг туда-обратно. Для рулевых поверхностей это не особо критично, а вот на пантилте ужасно раздражает.
Сначала я грешил на фиговые сервы HXT900, но с Hitec HS-55 и MD260 все то же самое.
Потом думал на кривой PPM с аппы, но и с выключенной аппой приемник падает в ФС и точно так же дергает сервами.
Помех нет, видео TX выключен, от сервы до приемника проводок 10-15см.
Куда еще порыть?
Куда еще порыть?
Это так называемый “джиттер”. Бороться можно только корректировкой прошивки.
Это так называемый “джиттер”. Бороться можно только корректировкой прошивки.
Сам KHA пишет вот что:
Current features
…
- use timer hardware when possible to avoid jitter
Ковыряю прошивку, пока не могу найти где он выводит PWM…
Меня сильно смущает, что этот вопрос никого не волнует (если верить гуглу). Может приемник бракованый у меня?
Может приемник бракованый у меня?
Наврятли. У меня нет приемников оранж, но есть экспертовские родные и самодельные под 2G. Они почти одинаковы в схемотехнике, но ждиттера нет.
Гляньте осциллографом, на хорошем осцилле легко можно увидеть скачок в десяток микросекунд. Если скачок есть, дело в алгоритме. Заодно прверьте каков период PWM пачек - аналоговые сервы обычно не любят периода отличного от 20 мс. Если на осцилле скачка нет, дело в сервах. Но можно попробовать добавить по 5 мкс в ширины PWM.
Я использую Орандж с экспертовскими прошивками - джиттера или подергиваний нет.
самодельные под 2G
Alex, а вы платки разводили или на ардуину паялись?
Alex, а вы платки разводили или на ардуину паялись?
После ардуиновских экспериментов, развел плату.
Покажите на пальцах глупому - как вывести RSSI? Какие именно контакты ответственны за этот канал? нужно ли прошивать девайс для активации этой функции? Я понял, что по умолчанию, приемник дает информацию в цифровом виде (пакетах) и для подкючения к обычным ОСД с хоббей (Мини ОСД и Тини ОСД) нужно впаивать резистор и конденсатор.
И при перепрошивке - нужно подключиться программатором к 6 пиновому разьему, убрать перемычку с программатора (до подключения) и подать стандартное питание 5.5 вольт на разъем серв?
Покажите на пальцах глупому - как вывести RSSI? Какие именно контакты ответственны за этот канал? нужно ли прошивать девайс для активации этой функции? Я понял, что по умолчанию, приемник дает информацию в цифровом виде (пакетах) и для подкючения к обычным ОСД с хоббей (Мини ОСД и Тини ОСД) нужно впаивать резистор и конденсатор.
И при перепрошивке - нужно подключиться программатором к 6 пиновому разьему, убрать перемычку с программатора (до подключения) и подать стандартное питание 5.5 вольт на разъем серв?
RSSI на самом первом пине. Он даже подписан. 😃
Работает ли в штатной прошивке я не проверял, сразу шил openLRSng. Фильтр очень желателен, иначе RSSI на осд скачет как бешеный.
Прошивка возможна двумя способами: через UART и через ISP программатор. И в том и другом случае питать нужно 5V через серво разъем.
Кроме варианта, когда программатор умеет выдавать 3.3v, что редкость.
Ах это наклейка так смещена… А я подумал, что первый контакт это 1 канал, а последний питание и биндилка.
Это так называемый “джиттер”. Бороться можно только корректировкой прошивки.
KHA ответил так:
Due to lack of timer resources on the atmega328 the PWMs are generated by interrept routine which is prone to interrupt latency (another tinterrupt running e.g. timer).There is not much I can do to make it better however I have something in mind to reduce it but it may have some ill effects so I need to test it throughly.
KHA ответил так:
Ну что сказать… Пусть проверяет.
Видать код у него оптимизирован хуже чем у эксперта. У него ресурсов 328 хватает.
RSSI полета с карбонового планера. Антенна (штатная спиралька) стоит над крылом.
Во-во, на коптерах все еще хуже…
Ну что сказать… Пусть проверяет.
Видать код у него оптимизирован хуже чем у эксперта. У него ресурсов 328 хватает.
Проблема там не в оптимизации кода, а том что используются штатные библиотеки и среда ардуины. Некоторые прерывания и таймера там просто недоступны для программирования, поэтому и возникают иногда случайные задержки. У Эксперта прошивка полностью самостоятельная (у меня под RMILEC тоже) поэтому таких проблем не возникает.
У Эксперта прошивка полностью самостоятельная
Откуда информация? Эксперт начинал с Ардуино, написанное на Си в ардуино работает- прямой доступ к регистрам доступен.
Проблема там не в оптимизации кода, а том что используются штатные библиотеки и среда ардуины. Некоторые прерывания и таймера там просто недоступны для программирования, поэтому и возникают иногда случайные задержки. У Эксперта прошивка полностью самостоятельная (у меня под RMILEC тоже) поэтому таких проблем не возникает.
Не могу согласиться. Если почитаете код, то увидите, что библиотеки ардуины (даже тривиальный analogWrite) там не используются. Вывод PWM реализован на прерываниях и счетчиках атмеги. Просто слегка неоптимально.
Сегодня Kha написал, что внес правки в код, генерирующий PWM и обещает, что серво джиттер теперь “virtually nonexistent” 😃
Проверим 😃
Откуда информация? Эксперт начинал с Ардуино, написанное на Си в ардуино работает- прямой доступ к регистрам доступен.
У Эксперта используется загрузчик не от Ардуино, и при использовании родного загрузчика от Ардуино, ему пришлось отключить WDT на прошивках для Оранж. Отсюда и этот вывод.
Хотя могу и ошибаться т.к. у него тоже раньше были проблемы с джиттером.
В ардуино нет доступа например - к прерыванию от таймера 0. Пока оно обрабатывается запросто может возникнуть задержка в несколько микросекунд. Конечно можно эти проблемы “героически” преодолеть, введя более сложный анализ времени, но кардинально проблема легко решается написанием прошивки в другом компиляторе Си без использования среды Ардуино.
У Эксперта используется загрузчик не от Ардуино,
Загрузчик не причем. Многие пользуясь Ардуино не пользуются загрузчиком.
Или пользуются сторонним.
Реально другой загрузчик у него только в передатчике Тини, с функцией защитой прошивки.
У Эксперта используется загрузчик не от Ардуино,
От Megaload.
при использовании родного загрузчика от Ардуино, ему пришлось отключить WDT на прошивках для Оранж.
Да, потому что родной не поддерживает сторожевика.
т.к. у него тоже раньше были проблемы с джиттером.
Проблемма была в первой версии софта/железа. Сейчас все чисто до длоей микросекунды (100 -150 нс джиттер, удивляюсь, что 10 бит PWM он так и не релизовал).
Насчет кода: по дизассемблеру видно, что Эксперт использовал Си. Но так-же видно что некоторые защиты от копирования ( я ля передатчик Тини, выполнены без учета среды, со вставками на ассемблере).
Многие пользуясь Ардуино не пользуются загрузчиком.
А ка спроецировать вектора прерываний к себе?
А ка спроецировать вектора прерываний к себе?
А зачем? В среде Ардуино пишется программа, получаем hex и грузим в контроллер.
Или я вопрос не понял?
вопрос не понял?
Не силен в тонкостях аурдиновой среды.
Но если во фьюзах включен загрузчик, то вектора прерываний сначала попадают в него, а дальше - как он решит. Некоторые сразу джамп в наш код, некоторые дополнительно обрабатываются, а некоторы вообще не доходят.
Я не знаю, как обеспечить дохождение прерываний в пользовательскую часть, с минимальным временем задержки в аурдиновском варианте.