Аналоговый вход с ацп

Skyfreec
blade:

Судя по возрасту- он просто не в курсе схемотехнических тонкостей?
Как прием так и последующая генерация ШИМ импульсов- связаны с точным определением длины импульсов, что не всегда возможно при наличии программных прерываний, которые вносят искажения в процедуру.
Поэтому в архитектуре МК и предусматриваются аппаратные меры, позволяющие этого избежать.
Я в свое время намучился с этим изрядно при разработке АП.
А присутствие в сигнале джиттера- ведет к излишнему расходу батареи и ускоренному износу серв. Хотя:.

Может это и не важно?

Упоминание возраста в наше время не уместно. С генерацией шим вопросов нет, тем более спаял схемку на базе pca9685 для этих целей. Немного переосмыслив сообщения Сергея смог реализовать обработчик. За что ему спасибо.

Vovets
Skyfreec:

Немного переосмыслив сообщения Сергея смог реализовать обработчик

Долго пытался осмыслить и переосмыслить сообщение Сергея, но так и не понял, как реализовать обработчик. Наверное всё-таки сказывается возраст. Кстати, PPM имелся в виду многоканальный, т.е. PWM на самом деле?

Skyfreec
Vovets:

Долго пытался осмыслить и переосмыслить сообщение Сергея, но так и не понял, как реализовать обработчик. Наверное всё-таки сказывается возраст. Кстати, 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

Пока так предположительно.

Skyfreec
RW9UAO:

человек спросил как измерить высоту здания с помощью барометра. он ответ получил =)

а насчет этого если подключить тестер к S и GND и перевести аппаратуру в режим pwm можно получать в крайних положения стика почти стабильное напряжение. Чисто теоретически взяв за опорное напряжение одно из положений стика, можно вычислить по разности между двумя входами ацп напряжение и с помощью программы определять его положение по изменению напряжения от опорного и программно выдавать нужное значение для управления двигателем, пользуясь выше упомянутым мной ads1115 и его дифференциальными входами.

Shavelsky
blade:

Как прием так и последующая генерация ШИМ импульсов- связаны с точным определением длины импульсов, что не всегда возможно при наличии программных прерываний, которые вносят искажения в процедуру.

Прерывания по таймеру для этого и используются, ШИМ - идеальна. А вот что за “аппаратные меры” интересно узнать.

Skyfreec
Shavelsky:

Прерывания по таймеру для этого и используются, ШИМ - идеальна. А вот что за “аппаратные меры” интересно узнать.

теория была

blade
Skyfreec:

Подключил приемник по ibus шине

Пока это все на бумаге- может выглядеть очень красиво.
Но если вы подключите реальную серву к реальной плате- почти наверняка услышите противное з…з…з
Вот это и есть джиттер 😦

Shavelsky:

ппаратн

Даташит читайте- там про это все написано:)

Vovets
Shavelsky:

А вот что за “аппаратные меры” интересно узнать.

Тут, наверное, речь идёт об аппаратном модуле Input Capture (иногда называется по-другому). Идея в том, что он по фронту на входном пине запоминает значение счётчика. Таким образом можно очень точно измерять ширину импульса, поскольку на этот процесс прерывания не влияют. У raspberri таких модулей нет, зато у него очень высокая тактовая частота, поэтому джиттер времени от прихода фронта до собственно исполнения кода обработчика прерывания может быть достаточно небольшим. Т.е. всё равно может обеспечиваться необходимая точность.

Допустим, мы хотим иметь разрешение измерения серdосигнала в 12 бит, т.е. 4096 отсчётов. 1 мс / 4096 = 244 нс. Джиттер должен быть меньше этой величины. Т.е. время до исполнения обработчика не должно превышать 244 нс. Допустим тактовая частота у нас 1 ГГц и мы в среднем исполняем команду за 2 такта. Время исполнения одной команды 2 нс. Таким образом за 244 нс мы можем исполнить 122 команды. Если длина любого обработчика не превышает 122 команды, тогда мы укладываемся. Я сильно сомневаюсь что в Линуксе это возможно. Но идея здесь в том, что можно оценить разрешение, которое мы получим, если будем пользоваться прерыванием по фронту на GPIO.

А вообще тема какая-то психоделическая, OP, кажется, на каких-то своих волнах…

blade
Vovets:

речь идёт об аппаратном модуле Input Capture

Воистину!
Я то в эту проблему воткнулся лет 10 назад, начав вплотную заниматься автопилотом 😃
Причем в Протеусе- все шоколадно, а когда сделал реальную плату- все и зажужжало:(