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

Skyfreec

Добрый день, в научных целях разрабатываю полетный контроллер для коптера на asus tinker board. Проблема заключается в том что в данных типах плат (Asus Tinker Board,Orange pi, Raspberry) нет ни одного аналогового входа, для подключения радио приемника (ibus,sbus не интересуют, только ppm). Возникла мысль реализовать несколько входов на базе ацп ads1115 (4 входа). Есть ли у кого опыт в использовании данного ацп для этих целей? И вообще натолкните в правильном направлении капаю или нет.😃

RW9UAO

в каком направлении капаете пока не ясно.

чтобы захватить 4 сигнала РРМ с помощью 4х канального АЦП вам понадобится 4 интегрирующих цепочки с ФНЧ на ОУ. для расчета параметров понадобится снять временные характеристики - частоту, скважность импульсов.
насчет программной фильтрации не подскажу, возможно хватит скользящего среднего.

blade
Skyfreec:

нет ни одного аналогового входа

А они там- зачем интересно?
Если сигналы, которыми оперирует любой АП- ШИМ?
Надо только задействовать правильные ноги на МК(аппаратный ШИМ), чтобы не получить хлопот с “джиттером”…Про все это написано много- много буков в разделе “полеты по камере-телеметрия, Ардупилот”

Vovets

Зачем АЦП для захвата PPM? На этих же платах есть должны быть пины GPIO. Также должна быть возможность организовать прерывание по изменению уровня на одном из таких пинов. Больше ничего не нужно. Ещё нужно, чтобы уровень сигнала с приёмника соответствовал, т.е. 5 В или 3.3 В. Но это тоже легко решить.

RW9UAO
Vovets:

Зачем АЦП для захвата PPM

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

V_Alex

Бывают ситуации, когда контроллеру не хватает амплитуды сервосигнала. Например, когда напряжение на приемнике существенно ниже напряжения на контроллере. В этом случае согласование и “оцифровку” 4 каналов РРМ проще и дешевле сделать на счетверенном компараторе LM339 с питанием от контроллера.

blade
RW9UAO:

человек спросил как измерить

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

Skyfreec:

в научных целях

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

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 назад, начав вплотную заниматься автопилотом 😃
Причем в Протеусе- все шоколадно, а когда сделал реальную плату- все и зажужжало:(