Baychi OpenLRS - дружелюбная ЛРС с широкими возможностями )

Plohish

вообще то длительность импульса по протоколу это определённый стандарт и я думаю не стоит выходить за эти рамки по любой причине…

** Примечание по длительностям импульсов (проценты, градусы и микросекунды)**

Исторически сложилось, что 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 служит соответствующий флаг в пакетах от источника.

пожалуйста, перенесите обсуждение вашего ардукоптера в соответствующую ветку…

Shuricus

Я только не пойму при чем тут ардукоптер? Вопрос был по прошивке оба раза - как сделать в ФС отсутствие сигнала, и ограничивает ли прошивка значения ППМ. И обсуждать я их буду здесь. Хватит пожалуйста просить переносить темы, а пожалуйста внимательно читайте вопросы.

С первым вопросом Константин уже подсказал. А вот со вторым, не смотря на очень увлекательный экскурс в теорию от Сергея, как то ясности не прибавилось!

Хотя если есть ссылка на Эксперта, как раз с магическим числом 988 - то мои опасения верны, и меньше 988 прошивка не пропускает. А поскольку в аппе я настроил 970, значит прошивка все что ниже 988 просто приравнивает к 988. Но с другой стороны еще в руководстве написано - При установленном бите 1 в регистре 5 на экран постоянно выводятся длительности принятых PPM импульсов в микросекундах (от 880 до 2159, середина = 1500).

Значит все же должно быть 880!

max809
Shuricus:

С первым вопросом Константин уже подсказал.

Т.е. хотите сказать, что Константин разобрался, как допилить код, чтобы в режиме ФС было отсутствие сигнала?

тигромух
max809:

Т.е. хотите сказать, что Константин разобрался, как допилить код, чтобы в режиме ФС было отсутствие сигнала?

Разобраться и допилить - разные вещи. С первым нет проблем, а на второе нет времени…

Если хотите допилить, то смотрите флаг PWM_enable. Достаточно его снимать при входе в ФС и устанавливать при выходе.

LaPart
Shuricus:

Хотя если есть ссылка на Эксперта, как раз с магическим числом 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мкс
    и компилирую.
    Проверяю и радуюсь 😃, либо, если “что-то пошло не так 😃” слегка огорчаюсь и меняю код на исходный, автор ведь посчитал, что так правильнее…
    ===========================
    Не пойдет такой вариант?
Shuricus

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

Теперь появилась ясность. Попробую эти варианты.

А что дальше происходит в коде с данными ппм, если они выходит за диапазон?

LaPart
Shuricus:

А что дальше происходит в коде с данными ппм, если они выходит за диапазон?

в предыдущем сообщении функция bool checkPPM(void) // проверка PPM/SBUS на failSafe ретранслятора
как раз и проверяет, входит ли сигнал в нужный диапазон.
Если входит -

LaPart:

FSdetect=0;
return true; // PPM в порядке

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

Если не входит в диапазон -

LaPart:

FSdetect=1;

LaPart:

if(PPM[i] < 1976 || PPM[i] > 4022) return false;

то это файлсейв (это следует из неглубокого копания только в этом модуле).

Возвращается ответ в модуль OpenTiny_TX, откуда вопрос и задавался,
если глубоко не вдаваться, то после обработки ответа есть строка с комментарием
// нет PPM - нет и передачи
Пока всё, я убежал, удачи 😃

Shuricus

Тут не состыковка с тем фактом, что если у меня есть импульс меньше 988, то все равно все продолжает работать.

тигромух
LaPart:

bool checkPPM(void) // проверка PPM/SBUS на failSafe ретранслятора

Это штука работает, только если установлен соответствующий регистр. Собственно, это в следующей строке написано:

if(Regs4[4]) { // если проверка разрешена

Plohish
Shuricus:

На нескольких теоретиков, все же находится один практик, который не пытается советовать обсуждать все в другой теме

Shuricus:

Значит все же должно быть 880!

если бы ты почитал нормально мой экскурс в историю от Байчи, то наверное пришло бы понимание что в режиме S.bus прошивка прекрасно обрабатывает длительности менее 988…

Shuricus

Если бы ты почитал нормально мой вопрос, то наверное пришло бы понимание, что мне нужен ППМ, а не сбас! 😃

Кстати, экскурс был в теорию, а не в историю. 😃

тигромух:

Это штука работает, только если установлен соответствующий регистр. Собственно, это в следующей строке написано:

Другими словами, на стандартный режим работы это не влияет?

Я предположу, что есть еще алгоритм проверки ППМа.

Plohish

опять возвращаемся к тому что длительности менее 1000 для PPM это не стандарт и у тебя частный случай извращения с ардупилотом…

Shuricus
LaPart:

в предыдущем сообщении функция bool checkPPM(void) // проверка PPM/SBUS на failSafe ретранслятора
как раз и проверяет, входит ли сигнал в нужный диапазон.

Ну это и указанно в мануале:

Обратите внимание что контроль состояния FS в режиме ретранслятора, проверяет нахождения всех каналов в пределе 1000-1999 мкс при PPM подключении. И если хоть один канал будет вне этого диапазона, передатчик прекратит передачу (при R4 = 1).

Поскольку у меня не режим ретранслятора, то к сожалению, к моему случаю это все не относится.

Plohish:

опять возвращаемся к тому что длительности менее 1000 для PPM это не стандарт

Где это написано?

Plohish

насколько я понимаю это дело, нет разницы как работает передатчик LRS, через приём сигнала от приёмника или напрямую из аппы… один хрен там подаётся на вход CPPM
у прошивки от Саши нет такого режима как “ретраслятор”, это условное название схемы подключения…

Shuricus:

Где это написано?

у Байчи в мануале… исторически сложилось 😃

Shuricus

4 - FS check enable - это условно называется режимом ретранслятора.

Перелопатил интернет, так и не смог найти - каковы физические ограничения по диапазону каналов в ППМ и с чем это связанно?

Plohish
Shuricus:

4 - FS check enable - это условно называется режимом ретранслятора.

ну как бы это всё условно…
этот параметр не говорит о том что его нужно включать только тогда, когда LRS соединена с приёмником а не с аппаратурой…
это как раз тот регистр, который ты можешь смело поставить в единицу, если это требуется для твоей ардуины

Shuricus

Спасибо, я это уже давно понял.
Я пытаюсь выяснить, почему не лезет меньше чем 988. Осталось всего два вопроса:

  • 988 это тоже условное ограничение, и можно и меньшие значения передавать, т.е. нет физических ограничений со стороны формата ППМ
  • обрезает ли прошивка, все что меньше 988, и где этот код
тигромух
Shuricus:

Я пытаюсь выяснить, почему не лезет меньше чем 988.

Уже бы давно подключили уарт к передатчику и выяснили этот вопрос 😃

Shuricus

Это не так просто в моем случае. Но я уже понял, что выхода нет… 😃

Plohish
  1. теоретически думаю можно и меньше передавать, только зачем, если это не используется ни одной аппаратурой?
  2. выше уже приведён код, который при установленном 4 регистре в единицу и PPM менее 988 (циферка 1976) прекращает передачу

думаю для твоих целей можно попробовать вместо 1976 записать 1980