Baychi OpenLRS - дружелюбная ЛРС с широкими возможностями )
вообще то длительность импульса по протоколу это определённый стандарт и я думаю не стоит выходить за эти рамки по любой причине…
** Примечание по длительностям импульсов (проценты, градусы и микросекунды)**
Исторически сложилось, что PWM импульсы передают положение стиков РУ и определяют ход сервомашинок, меняясь в пределах от 1000 до 2000 мкс. В большинстве стандартных РУ нейтрали стика и сервомашинки соответствует импульс длительностью 1500 мкс. За -100% хода стика РУ и поворота качалки стандартной машинки на -45-50 градусов, принята длительность 1100 мкс. За +100% и +45-50 градусов - 1900 мкс (+/- 400 мкс от нейтрали). Максимальное изменение импульсов (1000-2000 мкс) таким образом задает диапазон управления -120% - +120% или -60 до +60 градусов поворота качалки сервопривода.
Заметим, что максимальный диапазон представления импульсов в режиме 0 и 1 (стандартный Эксперт) составляет 988-2012 мкс, что эквивалентно -128% … +128% хода стиков РУ.
Futaba использует несколько иные длительности и диапазон. За нейтраль принят импульс длительностью 1520 мкс., за -100% - 1100 мкс, а +100% = 1940 мкс. При этом предельное изменение импульсов от Futaba составляет 880-2160 мкс или +/- 640 мкс относительно нейтрали в 1520 мкс. Следовательно минимальной длительности в 880 мкс соответствует - 160% хода стика (до 80 градусов отклонения качалки сервомашинки от нейтрали), а максимальной 2160 - +160% хода стика или +80 градусов. В протоколе s.bus и режиме передачи 2 (R5=2) кодируется именно такое представление длительностей. PPM сигнал Futaba 750 мкс (12 и более каналов), выдаваемый некоторыми передатчикам Futaba в режиме PPM12 имеет в 2 раза меньшие длительности импульсов.
Обратите внимание что контроль состояния FS в режиме ретранслятора, проверяет нахождения всех каналов в пределе 1000-1999 мкс при PPM подключении. И если хоть один канал будет вне этого диапазона, передатчик прекратит передачу (при R4 = 1). В режиме s.bus длительности каналов не проверяются, критерием FS служит соответствующий флаг в пакетах от источника.
пожалуйста, перенесите обсуждение вашего ардукоптера в соответствующую ветку…
Я только не пойму при чем тут ардукоптер? Вопрос был по прошивке оба раза - как сделать в ФС отсутствие сигнала, и ограничивает ли прошивка значения ППМ. И обсуждать я их буду здесь. Хватит пожалуйста просить переносить темы, а пожалуйста внимательно читайте вопросы.
С первым вопросом Константин уже подсказал. А вот со вторым, не смотря на очень увлекательный экскурс в теорию от Сергея, как то ясности не прибавилось!
Хотя если есть ссылка на Эксперта, как раз с магическим числом 988 - то мои опасения верны, и меньше 988 прошивка не пропускает. А поскольку в аппе я настроил 970, значит прошивка все что ниже 988 просто приравнивает к 988. Но с другой стороны еще в руководстве написано - При установленном бите 1 в регистре 5 на экран постоянно выводятся длительности принятых PPM импульсов в микросекундах (от 880 до 2159, середина = 1500).
Значит все же должно быть 880!
С первым вопросом Константин уже подсказал.
Т.е. хотите сказать, что Константин разобрался, как допилить код, чтобы в режиме ФС было отсутствие сигнала?
Не хочу.
Т.е. хотите сказать, что Константин разобрался, как допилить код, чтобы в режиме ФС было отсутствие сигнала?
Разобраться и допилить - разные вещи. С первым нет проблем, а на второе нет времени…
Если хотите допилить, то смотрите флаг PWM_enable. Достаточно его снимать при входе в ФС и устанавливать при выходе.
Хотя если есть ссылка на Эксперта, как раз с магическим числом 988 - то мои опасения верны, и меньше 988 прошивка не пропускает. А поскольку в аппе я настроил 970,
Если бы я в аппе таки настроил бы 970, знал бы, что это точно мой РРМ, а не сбас, и хотел использовать такой диапазон у себя (а не подсунуть кому-нибудь еще), то заглянул бы в исходники, а там:
- модуль ppmsbus из набора OpenTiny_TX (Александр комментарии не экономил)
…
bool checkPPM(void) // проверка PPM/SBUS на failSafe ретранслятора
{
if(Regs4[4]) { // если проверка разрешена
FSdetect=1;
if(ppmMicroPPM == 255) { // режим SBUS, FS = бит3 в управл. байте
if(sbusPkt[23]&0x8) return false;
} else {
for(byte i=0; i<nchan; i++) {
if(PPM[i] < 1976 || PPM[i] > 4022) return false; // проверяем выход канала за диапазон
}
}
}
FSdetect=0;
return true; // PPM в порядке
}
…
Тогда там где
// проверяем выход канала за диапазон - 1976. Это как раз то “заколдованное” число микросекунд, умноженное на 2.
Если есть желание уменьшить для себя с 988мкс до 970 (или даже еще немножко),
строку
if(PPM[i] < 1976 || PPM[i] > 4022) return false; // проверяем выход канала за диапазон
заменяю на
if(PPM[i] < 1936 || PPM[i] > 4022) return false; // проверяем выход канала за расширенный диапазон 968-2011мкс
и компилирую.
Проверяю и радуюсь 😃, либо, если “что-то пошло не так 😃” слегка огорчаюсь и меняю код на исходный, автор ведь посчитал, что так правильнее…
===========================
Не пойдет такой вариант?
На нескольких теоретиков, все же находится один практик, который не пытается советовать обсуждать все в другой теме, а действительно просто разбирается в проблеме. Я вам за это очень благодарен. Копать код самостоятельно мне сложно. Я бы этого точно не понял.
Теперь появилась ясность. Попробую эти варианты.
А что дальше происходит в коде с данными ппм, если они выходит за диапазон?
А что дальше происходит в коде с данными ппм, если они выходит за диапазон?
в предыдущем сообщении функция bool checkPPM(void) // проверка PPM/SBUS на failSafe ретранслятора
как раз и проверяет, входит ли сигнал в нужный диапазон.
Если входит -
FSdetect=0;
return true; // PPM в порядке
сообщает программе, что это не файлсейв и все в порядке, импульс будет передан по значению на передачу.
Если не входит в диапазон -
FSdetect=1;
if(PPM[i] < 1976 || PPM[i] > 4022) return false;
то это файлсейв (это следует из неглубокого копания только в этом модуле).
Возвращается ответ в модуль OpenTiny_TX, откуда вопрос и задавался,
если глубоко не вдаваться, то после обработки ответа есть строка с комментарием
// нет PPM - нет и передачи
Пока всё, я убежал, удачи 😃
Тут не состыковка с тем фактом, что если у меня есть импульс меньше 988, то все равно все продолжает работать.
bool checkPPM(void) // проверка PPM/SBUS на failSafe ретранслятора
Это штука работает, только если установлен соответствующий регистр. Собственно, это в следующей строке написано:
if(Regs4[4]) { // если проверка разрешена
На нескольких теоретиков, все же находится один практик, который не пытается советовать обсуждать все в другой теме
Значит все же должно быть 880!
если бы ты почитал нормально мой экскурс в историю от Байчи, то наверное пришло бы понимание что в режиме S.bus прошивка прекрасно обрабатывает длительности менее 988…
Если бы ты почитал нормально мой вопрос, то наверное пришло бы понимание, что мне нужен ППМ, а не сбас! 😃
Кстати, экскурс был в теорию, а не в историю. 😃
Это штука работает, только если установлен соответствующий регистр. Собственно, это в следующей строке написано:
Другими словами, на стандартный режим работы это не влияет?
Я предположу, что есть еще алгоритм проверки ППМа.
опять возвращаемся к тому что длительности менее 1000 для PPM это не стандарт и у тебя частный случай извращения с ардупилотом…
в предыдущем сообщении функция bool checkPPM(void) // проверка PPM/SBUS на failSafe ретранслятора
как раз и проверяет, входит ли сигнал в нужный диапазон.
Ну это и указанно в мануале:
Обратите внимание что контроль состояния FS в режиме ретранслятора, проверяет нахождения всех каналов в пределе 1000-1999 мкс при PPM подключении. И если хоть один канал будет вне этого диапазона, передатчик прекратит передачу (при R4 = 1).
Поскольку у меня не режим ретранслятора, то к сожалению, к моему случаю это все не относится.
опять возвращаемся к тому что длительности менее 1000 для PPM это не стандарт
Где это написано?
насколько я понимаю это дело, нет разницы как работает передатчик LRS, через приём сигнала от приёмника или напрямую из аппы… один хрен там подаётся на вход CPPM
у прошивки от Саши нет такого режима как “ретраслятор”, это условное название схемы подключения…
Где это написано?
у Байчи в мануале… исторически сложилось 😃
4 - FS check enable - это условно называется режимом ретранслятора.
Перелопатил интернет, так и не смог найти - каковы физические ограничения по диапазону каналов в ППМ и с чем это связанно?
4 - FS check enable - это условно называется режимом ретранслятора.
ну как бы это всё условно…
этот параметр не говорит о том что его нужно включать только тогда, когда LRS соединена с приёмником а не с аппаратурой…
это как раз тот регистр, который ты можешь смело поставить в единицу, если это требуется для твоей ардуины
Спасибо, я это уже давно понял.
Я пытаюсь выяснить, почему не лезет меньше чем 988. Осталось всего два вопроса:
- 988 это тоже условное ограничение, и можно и меньшие значения передавать, т.е. нет физических ограничений со стороны формата ППМ
- обрезает ли прошивка, все что меньше 988, и где этот код
Я пытаюсь выяснить, почему не лезет меньше чем 988.
Уже бы давно подключили уарт к передатчику и выяснили этот вопрос 😃
Это не так просто в моем случае. Но я уже понял, что выхода нет… 😃
- теоретически думаю можно и меньше передавать, только зачем, если это не используется ни одной аппаратурой?
- выше уже приведён код, который при установленном 4 регистре в единицу и PPM менее 988 (циферка 1976) прекращает передачу
думаю для твоих целей можно попробовать вместо 1976 записать 1980