Официальный сайт компании Arduino по адресу arduino.cc
Быстрое АЦ-ЦА преобразование с минимальной обработкой сигнала
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
День добрый.
На работе стала потихоньку умирать древняя техника на операционных усилителях и вот подумалось мне, что вместо того чтобы наблюдать (безуспешные?) попытки реанимационных работ на электронике, что старше меня, было бы неплохо освоить для себя что-то новенькое и заодно сделать подарок старшему коллеге (тому что принимал участие в разработке этого аналогового монстра когда-то давным-давно)
И для начала хотелось бы оценить возможность выполнения следущего техзадания:
1) считать через АЦП 2 синусных сигнала с амплитудой +/-10В
2) отмасштабировать их
3) вычесть из одного другое
4) взять производную от результата (ну типа заменить синус на косинус)
5) отмасштабировать (возможно и инвертировать тоже)
6) дополнить сигнал рядом тригерных событий - ВКЛ, ВЫКЛ, оффсет...
7) выдать результат через ЦАП (в идеале теперь уже косинусом с амплитудой до +/-10В)
Всё это нужно максимально "аналогово": меньше 10мкс задержки между входом-выходом - это отлично, больше 20мкс - печально и неприемлимо. Ну и разрядность от 16 бит и выше.
Выглядит как задачка для звуковой карты 24бит/192кГц, но не уверен что там от "микрофона" (а их нужно 2 да?) можно взять производную и выдать на "динамик" обработанный сигнал, к тому же, наверняка, под вопросом амплитуда сигнала в +/-10В.
Возможно проще таки будет собрать это решение на отдельных элементах АЦП/ЦАП?
Так как задумывается всё это как подарок "семпаю", то хотелось бы всё сделать своими руками, но, чтобы не сильно затягивать по времени - под мудрым руководством Исполнителя, готового стать ментором для чайника который сегодня вроде как уже перестал путаться в буквах при написании слова arduino
хорошая задумка
вот тут бы и пригодилось "да, можно, железо позволяет" или "нет, забей и думай в другую сторону"..
если несколько упростить задание, то для начала будет "достаточно" даже только считать 2 аналоговых сигнала, вычесть один из другого, а результат выдать с задержкой в 5мс (четверть периода 50Гц)
ясное дело что это не совсем то (вернее совсем не то) что делают ОУ, но в первом приближении для стационарного режима сойдёт
Таки делайте на ОУ. Нахрена вам абдурина? Дань моде?
В какой-то степени - да
Решение на ОУ есть, есть схемы к нему и оно всё даже работает.. до тех пор пока там "что-то" не сдыхает от старости и начинается поиск - где, что и как это вылечить..
Вполне вероятно, что полная замена элементарной базы на современные аналоги решит все эти проблемы.
Возможно, задумаюсь и о таком варианте если в обозримом будущем не отыщется подходящего "цЫфрового" решения
Всё зависит от необходимой быстроты "Быстрого АЦ-ЦА преобразования"
я ж вроде как указал: меньше 10мкс - отлично, дольше 20мкс - неприемлимо.
хотя, в принципе, цифровой части можно "тупить" где-то до 4мс, главное чтоб выход ЦАПа был с точностью до этих самых 10мкс смещен на четверть периода относительно входа
Вот как-то так на примере двух входящих сигналов амплитудой 6 и 4. Выход амплитудой 2 с отставанием на четверть периода.
ТС! Частота сигналов секретная? Время установки после изменения сигналов тоже секретно? Нормализация требует минимум один полный период для расчета коэффициентов. Ну и так далее.
Сама возможность решения и выбор инструментов зависят от ответов.
Да, следует добавить, что 16 бит это ОЧЕНЬ много. Если это требование не аргументировано, то оно кажется взятым "с потолка". Прошу не обижаться. Такие точности (обычно) используются на весьма низких частотах измерений.
На ардуине не сделать ни как. От слова вообще. Цифровая обработка такого уровня требует ПЛМ. Ищите там, но порог входа на несколько порядков выше. Без знаний никак. А время входа больше года при постоянных занятиях. Ну или заказ далеко за 100 000 руб.
1) считать через АЦП 2 синусных сигнала с амплитудой +/-10В
Есть схема входа? И как фильтровать?
2) отмасштабировать их
Как?
3) вычесть из одного другое
4) взять производную от результата (ну типа заменить синус на косинус)
Легко
5) отмасштабировать (возможно и инвертировать тоже)
Как?
6) дополнить сигнал рядом тригерных событий - ВКЛ, ВЫКЛ, оффсет...
А конкретнее?
7) выдать результат через ЦАП (в идеале теперь уже косинусом с амплитудой до +/-10В)
Еще раз производную взять? Импеданс выхода?
хотелось бы всё сделать своими руками, но, чтобы не сильно затягивать по времени
Пайка, изготовление плат есть?
wdrakula,
Первый сигнал - синус 50Гц или 60Гц
Второй - тоже 50/60Гц но с другой амплитудой и не чистый а с гармоническим шумом.
Сигналы нужны в статике, так что время установки не критично.
16 бит взято из справочника Стеля (стеля = потолок), по факту для точности выхода в 0.1% вполне достаточно 12 бит (не так ли?).
nik182,
Обидно, и за адруину, и за ПЛМ, и за 100тыр.
Попытаюсь "урезать осетра" от того что где-то когда-то видел и слышал до самого необходимого но достаточного минимума
rkit,
На счет схемы входа не понял: та что сейчас на ОУ? - есть. Данные источников сигнала тоже могу уточнить.
Фильтровать.. по идее, все что выше 1кГц можно убрать. Но можно и оставить если оно осложнит реализацию.
Масштабирование как входов так и выхода в пределах от 1/10 до х10 (возможно хватит даже 1/4...х4, но это не точно и надо уточнять), но с точностью до 0.1%
ВКЛ-ВЫКЛ на ОУ реализован как аналоговый компаратор и мосфет выключающий разность входов... предполагаю что это "легко" реализуемо через любой другой "медленный" 8ми-битный АЦП.
Оффсет - на выход, на случай если нуль уползёт, но, наверное, можно и без него?
Еще раз производную брать не надо: если на входах синус, то на выходе - косинус (это безотносительно амплитуды, речь только о фазе)
На выходе ожидается ~10..15кОм - параллельно висят 2 приемника по 40кОм и еще что-то высокоомное (не помню точно, надо поднимать документацию)
SMD-пайки хотелось бы избежать (опыт=0), но если без этого совсем никак, то это решаемо. Надеюсь имелось в виду именно это, а не изготовление платы с нуля (начиная с проекитрования и разведения дорожек)
Еще хуже. Задачу внятно опиши, или никто не будет подписываться на работу через "могу уточнить" и "предполагаю". Работа это коммерческий расчет и претензии по недоработкам. По текущей каше слов работать нельзя.
По какому из трёх вопросов это действительно критично?
Умножение выходного сигнала на ноль если сигнал с 8ми-битного АЦП выйдет за лимит?
То что масштабирование будет не х2.23 а х3.09 или х0.78 а не 0.19?
Или что на выходе висит 10кОм вместо 15кОм?
Вообще, в любом случае, огромная благодарность за вопросы - они весьма помогли мне самому понять что требуется от прибора.
Самим вопросом я озадачился буквально вот-вот - еще и суток не прошло как (с тех пор как снова что-то там сгорело)
Однозначно, для уточнения ТЗ надо еще поднять кой какую документацию, "переспать с идеей" ночь-другую...
Но, как я понял, принципиальных препятствий нет и проект в принципе реализуем, верно?
В принципе реализуемо всё. Вопросов встало ещё больше. Насколько стабильна частота входных сигналов? Как уже сказал Влад, нормализовать синус можно если получен полный период. Если это 50 Гц то 20 мс. Цифровая обработка на ардуине займет около 10 мс. Выдачу можно начать не раньше чем через 30 мс. Её можно привязать к началу следующего периода входных сигналов, а это уже 40 мс. И надо помнить, что при этом , что МС занимается оцифровкой, и выдачей и цифровой обработкой. Озвученные Вами времена 10 мкс совершенно не реальны на ардуине, хотя бы по тому, что ацп не может обеспечить поток входных данных по двум каналам с такой точностью. Соответственно производная разности будет иметь огромный шум и ошибки. Есть вариант уйти на процессор stm32f303. Там время оцифровки двух каналов 12 бит около 0.5 мкс полностью аппартно и не занимает процессор. Выдача тоже аппаратная. Время расчёта меньше 800 мкс. Но остаются 20 мс оцифровка периода. Если сигналы стабильны хотя бы несколько периодов то можно придумать алгоритм, где по прошлым периодам расчитываются коэффициенты, которые применяются к текущим входным данным. Тогда встаёт вопрос цифрового фильтра, который всегда вносит задержку, тем больше, чем ниже частота среза. Если фильтр 1 кГц то и задержка будет в этих пределах. Т.е опять упираемся в 1 мс задержки фазы выходного сигнала относительно входного при цифровой обработке.
Моё мнение, что почти всё надо делать на аналоговых МС. Если вставлять процессор, то на задачу стабилизации амплитуды входных сигналов управляя коэффициентом усиления регулируемого операционника и на задачу разных триггеров.
Два вычитания и два умножения это 10 мс? Как всегда написал кучу бреда какого-то с умным видом.
Ты опять переходишь на личности и при этом выглядишь человеком совершенно не в теме. Если я написал глупость, то опиши алгоритм нормализации амплитуды сигналов, которые потом два умножения и вычитания? Сколько алгоритм нормализации займет времени? Это требование ТС. Нормализация. И цифровой фильтр до вычитания и умножения тоже время. Тоже требования ТС. Про них ты забыл или просто не знаешь сколько они занимают время?
Один из сигналов - эталонные 50/60Гц с точностью до 0.05% и "абсолютной" стабильностью.
Второй сигнал - оцифрованный в 1/512 цикла и изрядно измененный первый. Но в статике, по идее, тоже весьма стабилен (плюс, конечно же, шум)
Что критично - попасть выходным сигналом с точность до 10мкс в нужную фазу входного сигнала. Если это будет обработаный сигнал прошлого или даже позапрошлого периода - не критично.
Изначально ни о каких фильтрах речь не шла, по этому уточню: фильтры - минимально необходимые с точки зрения обработки цифрового сигнала.
Нормализация она как - можно при снятии/выдаче сигнала или нужно отдельное действие? Если первое, то тогда вообще "задача в 1 действие" - вычесть сигналы друг из друга. Вот только результат потом нужно придержать и выдать в нужный момент
Ну и плюс умножение на 0 по внешнему условию, но тоже не критичное по времени.
Аналоговые МС - хорошее решение. Наверное. Жаль что с ними у меня так же как и с ардуино - знаю о существовании, но не сильно более того =))
По всей видимости, для этого решения (впрочем как и для чисто аналогового на ОУ) нужно сменить форум.. или это решение можно подвязать к ардуине?
ФАПЧ для инвертора какого-то, что ли?
Нет минимально необходимых фильтров. Есть фильтры разной реализации, но в основе, для подобных задач, свертка входного сигнала на функцию фильтра. Производная без фильтра будет очень сильно шуметь при цифровой обработке.
Непонятно про второй сигнал. Что значит оцифрованный? Как? Выдается оцифрованный в аналоговой форме? По времени понятно - а по амплитуде? Нужно подстраивать или можно один раз измерить и потом долго использовать коэффициент? Выдавать 0 при условии можно без умножения. Картинки из #6 не видно.
rkit,
нет, не оно
nik182,
Это честная производная шумит?
А то ж в этом конкретном случае можно посмотреть амплитуду прошлого периода и потом корень из неё минус квадрат разности входов. Или это по ресурсам неподъёмно?
И, кстати, задержка в 1/4 периода (ну или в 5/4) тоже вполне удовлетворяет требованиям, т.е. производная - не самоцель.
Цель (если совсем полностью абстрагироваться от физической и математической подоплеки и рассматривать только статические состояния когда каждый период "равен" предыдущему) - выдать разность входов с максимально точной задержкой на выход .
Второй сигнал - не готов обсуждать. Он есть. С точностью по фазе до 1/512 периода 50/60Гц. Амплитуда - от +120% до -120% относительно первого.
Интересуют статические режимы, повторяемость периодов где-то на порядок выше запрашиваемой точности в 0.1%. Так что коэффициенты нужно выставить один раз и, если повезет, то никогда больше вообще не трогать. Ну или же что более вероятно - поверять и корректировать раз в 2-3 месяца.
Картинка... там для примера один период двух синусов с амплитудой 6 и 4 и их разность с амплитудой 2 смещённая на 90°
ПС
до понедельника я слабо доступен, как раз заодно проветрюсь и потом на свежую голову гляну чего я понаписал и чего мне присоветовали.
не хочешь просто выложить рабочий кусок схемы на ОУ, который хочешь заменить "цифрой"? ,тогда
Блок схему нарисуй с входными и выходными сигналами, а то ты раз десять уже обьяснял, а у народа все равно вопросы будут...
DIVGENY,
Уже подумывал об этом =))
Микроконтроллер SAM3X8E (Arduino DUE) 12 разрядов. Обработка сигнала АЦП независимо от работы основного контроллера. Результат хранится в буферах.
Фрагмент настройки АЦП. Измеряю и обрабатываю синусоидальные сигналы. Отображаю осциллограммы, вычисляю ток и РМС. Можете "покопать" в этом направлении.