Аналоговый вход с ацп
Долго пытался осмыслить и переосмыслить сообщение Сергея, но так и не понял, как реализовать обработчик. Наверное всё-таки сказывается возраст. Кстати, PPM имелся в виду многоканальный, т.е. PWM на самом деле?
Да, но в данный момент получилось реализовать протокол ibus. Использую приемник fs-ia10b. Подключил приемник по ibus шине к логическому анализатору, получил блок в 32 байта.
Примерно если разделить по 2 байта шапка: [20 40] [дальше сами каналы] и чек сумма [FD F4] каналы которые не используются [DC 05].
Пример выше сказанного из обработчика который пишу на java:
20 40
DC 05
DB 05
14 04
DF 05
41 04
92 06
DC 05
DC 05
DC 05
DC 05
DC 05
DC 05
DC 05
DC 05
FD F4
Пока так предположительно.
человек спросил как измерить высоту здания с помощью барометра. он ответ получил =)
а насчет этого если подключить тестер к S и GND и перевести аппаратуру в режим pwm можно получать в крайних положения стика почти стабильное напряжение. Чисто теоретически взяв за опорное напряжение одно из положений стика, можно вычислить по разности между двумя входами ацп напряжение и с помощью программы определять его положение по изменению напряжения от опорного и программно выдавать нужное значение для управления двигателем, пользуясь выше упомянутым мной ads1115 и его дифференциальными входами.
Как прием так и последующая генерация ШИМ импульсов- связаны с точным определением длины импульсов, что не всегда возможно при наличии программных прерываний, которые вносят искажения в процедуру.
Прерывания по таймеру для этого и используются, ШИМ - идеальна. А вот что за “аппаратные меры” интересно узнать.
Прерывания по таймеру для этого и используются, ШИМ - идеальна. А вот что за “аппаратные меры” интересно узнать.
теория была
github.com/betaflight/betaflight/blob/…/ibus.c
посмотрите уже как у людей сделано.
Подключил приемник по ibus шине
Пока это все на бумаге- может выглядеть очень красиво.
Но если вы подключите реальную серву к реальной плате- почти наверняка услышите противное з…з…з
Вот это и есть джиттер 😦
ппаратн
Даташит читайте- там про это все написано:)
А вот что за “аппаратные меры” интересно узнать.
Тут, наверное, речь идёт об аппаратном модуле Input Capture (иногда называется по-другому). Идея в том, что он по фронту на входном пине запоминает значение счётчика. Таким образом можно очень точно измерять ширину импульса, поскольку на этот процесс прерывания не влияют. У raspberri таких модулей нет, зато у него очень высокая тактовая частота, поэтому джиттер времени от прихода фронта до собственно исполнения кода обработчика прерывания может быть достаточно небольшим. Т.е. всё равно может обеспечиваться необходимая точность.
Допустим, мы хотим иметь разрешение измерения серdосигнала в 12 бит, т.е. 4096 отсчётов. 1 мс / 4096 = 244 нс. Джиттер должен быть меньше этой величины. Т.е. время до исполнения обработчика не должно превышать 244 нс. Допустим тактовая частота у нас 1 ГГц и мы в среднем исполняем команду за 2 такта. Время исполнения одной команды 2 нс. Таким образом за 244 нс мы можем исполнить 122 команды. Если длина любого обработчика не превышает 122 команды, тогда мы укладываемся. Я сильно сомневаюсь что в Линуксе это возможно. Но идея здесь в том, что можно оценить разрешение, которое мы получим, если будем пользоваться прерыванием по фронту на GPIO.
А вообще тема какая-то психоделическая, OP, кажется, на каких-то своих волнах…
речь идёт об аппаратном модуле Input Capture
Воистину!
Я то в эту проблему воткнулся лет 10 назад, начав вплотную заниматься автопилотом 😃
Причем в Протеусе- все шоколадно, а когда сделал реальную плату- все и зажужжало:(