Ачх и фчх фильтров на ардуино

Тема в разделе "Arduino & Shields", создана пользователем kamikADzzzeeeee, 27 апр 2020.

  1. kamikADzzzeeeee

    kamikADzzzeeeee Нерд

    Привет. Нужно снять АЧХ и ФЧХ простенького RC фильтра на ардуино. Программу с задаваемыми параметрами частоты написал(нач. частота, кон. частота, шаг частоты + форма сигнала), использовав генератор на AD9834. Теперь не очень понятно как фиксировать изменение амплитуды и фазы сигнала после прохождения фильтра. Для АЧХ, думаю, нужно использовать аналоговые порты ардуино и считывать с них показания после фильтра (как на рисунке), но не уверен. Для ФЧХ, думаю, нужно использовать детектор нуля с сигнала до фильтра и после и считать время между двумя точками с помощью таймеров, потом каким-нибудь образом перевести время в фазу в градусах. Если кто-нибудь делал что-либо подобное было бы отлично получить схему и код или если я что-то не так думаю тоже прошу указать. Спасибо upload_2020-4-27_21-23-22.png upload_2020-4-27_21-24-16.png
     
    Daniil и Un_ka нравится это.
  2. kamikADzzzeeeee

    kamikADzzzeeeee Нерд

    Вот такие результаты получились на ФНЧ и ФВЧ. Не знаю насколько это правильные результаты, но что-то похожее должно получиться. Шумы скорее всего из за плохих кабелей. Куплю экранированные коаксиальные - попробую с ними. Еще не уверен, что нужно именно так подключать к А0, думаю нужно какие-либо защитные диоды. Так же не уверен, что код на считывание с А0 порта верный. Все приложил снизу
    upload_2020-4-27_22-50-4.png
    upload_2020-4-27_22-51-7.png
    upload_2020-4-27_22-55-47.png
     

    Вложения:

  3. Daniil

    Daniil Гуру

    У вас осциллограф есть?
    Какой сигнал вы подаете от ад9834? Амплитуды гармоник, частоты?
    Теорема Котельникова? Частота дискретизации?
    Если ачх измерить можно, то фчх, на мой взгляд, сложнее.
    Для ачх нужно определить амплитуду. Для этого нужен амплитудный детектор, который будет вносить искажения, или оцифровывать сигнал с частотой дискретизации больше, чем в 2 раза, чем максимальная частота предпологаемого сигнала. Для наглядности я бы рекомендовал раз в 10, а далее мат обработка по поиску максимума.
    Для фчх нужно задаться точкой отсчета, ей может быть исходный сигнал. Нужно находить ноль исходного сигнала и соответствующий ноль прошедшего сигнала (синусоида имеет 3 нуля за период). Как определить "соответствующий"? Нужно сдвигать прошедший сигнал во времени столько, чтоб нули совпали. Для начала я бы отталкивался бы от минимального сдвига из всех.
    Задача очень сложная, требует усидчивости.
    В общем, надо 2 быстрых ацп и крутая мат обработка
     
  4. parovoZZ

    parovoZZ Гуру

    А железо какое используется? И как ищется максимальное значение в потоке с АЦП? Я такую задачу решал на новых тиньках - в них АЦП имеет компаратор.
     
  5. kamikADzzzeeeee

    kamikADzzzeeeee Нерд

    Осциллограф есть, китайский, до примерно 15МГц сигнал виден. С генератора подаю сигнал синусоидальный, прямоугольный и треугольный с частотой от 0 до 37МГц (видео работы программы ссылкой на ЯД), т.к. у модуля DDS AD9834 стоит кварц на 74МГц, вроде. Про амплитудный детектор: я понимаю, что он преобразует переменный сигнал в постоянный, который затем можно подавать на А0 ардуино и считывать его, тем самым мы будем фиксировать изменение амплитуды сигнала? (Похожий проект в котором как я понимаю реализован амплитудный детектор через диоды и конденсаторы)Не очень понял зачем тогда нужен мощный АЦП ведь полученный сигнал будет слабо изменяться по частоте(мб что-то не так понял. лекции по ЦОС были, но предмет я не очень понимал)? А если, например, не использовать амплитудный детектор, а брать несколько отсчетов с порта А0 и выбирать максимальный, то результат будет схожий?
    Про ФЧХ пока читаю теорию и ищу похожие проекты. Фото ардуино и генератора приложил. photo_2020-04-28_22-21-11.jpg
     
  6. kamikADzzzeeeee

    kamikADzzzeeeee Нерд

    Не понял насчет железа. Максимальное значение с АЦП никак не искал, пока просто принимал голый сигнал и переводил его в напряжение по формуле. Как я понял, нужно брать несколько значений с АЦП при заданной частоте, выбирать максимальный, фиксировать его и только затем менять частоту и дальше снова искать максимум?
     
  7. parovoZZ

    parovoZZ Гуру

    я делал
    http://kazus.ru/forums/showthread.php?t=117177
    но решил, что на НЧ сигналах вполне хватает АЦП с частотой квантования 10-50кГц в зависимости от входной частоты.

    Ну конечно.
    http://forum.amperka.ru/threads/Осциллоскоп-в-atmel-studio.17041/
     
  8. Daniil

    Daniil Гуру

    Плохо видно. Я спрашивал в связи с тем, что АЦП ардуины оцифровывает сигнал от 0 до 5 В, если у вас синусоида с амплитудой 1 В, то что покажет АЦП на отрицательных полупериодах? Есть ли "подпорка" в виде постоянной составляющей?
    да, но у детектора есть параметры, которые нужно учитывать (максимальная частота, за которую кондер будет успевать заряжаться и не разряжаться).
    Да, это просто эквивалентная математическая обработка. Если вместо использования детектора вы реализуете всё в цифре, то должны получить тот же результат.
    Что такое "мощный АЦП"?
    Нужно ещё учитывать частоту дискретизации. Если частота входного сигнала будет такой, что при вашей частоте дискретизации вы будете измерять только нули, то что вы получите? - чтобы расширить диапазон измеряемых частот нужно как можно быстрее оцифровывать сигнал. Почитайте тут и ещё предложил бы вам работать не с напряжениями, а с кодами получаемых с АЦП, т.к. работа с целыми числами на ардуино быстрее, чем с флоатами.

    Я к чему веду: перед реализацией устройства нужно оценить динамический диапазон измеряемых величин, а потом придётся установить требования к входному сигналу, если сигнал выходит за требования, то нельзя говорить об измерениях.
     
  9. parovoZZ

    parovoZZ Гуру

    нужен АЦП с дифф. входами либо городить двухполупериодный выпрямитель. По моей ссылке всё есть.
     
    Daniil нравится это.
  10. sslobodyan

    sslobodyan Гик

    Рекомендую обратить свой взор в сторону чипика от Аналоговых Девиц с гордым названием AD8302. Он вам выдаст и отношение амплитуд и отношение фаз двух сигналов.
     
    Daniil нравится это.
  11. kamikADzzzeeeee

    kamikADzzzeeeee Нерд

    Амплитуда сигнала 0,55 В (сам сигнал изменяется 0-0,55 В), частота 0-37 МГц.

    Быстрый АЦП.

    Как я понял чтобы оцифровывать сигнал в полосе частот 0-37МГц АЦП ардуино не хватит. Поэтому мат. обработкой получать АЧХ, думаю, не выйдет.

    Я собрал простейший амплитудный детектор из диода и конденсатора. Диод - Д311А, конденсатор на 2,2мкФ. Кондер подбирал просто смотря по осциллографу выходной сигнал после детектора. Поэтому его номинал, наверное, не точный. Как будет время разберусь с расчетом кондера для амплитудного детектора.

    Полученные АЧХ ФНЧ и ФВЧ фильтров ниже.
    3.PNG 2.PNG
    Выглядит неплохо, но вот в чем вопрос, я прогнал через детектор просто сигнал с генератора без каких либо фильтров и на высоких частотах его амплитуда сама по себе падает в два раза.
    1.PNG
    Как я понимаю это заложено в самой микросхеме AD9834, хотя подобного графика в даташите не нашел, возможно он там в децибелах указан, но я не сравнивал. Поэтому снятые АЧХ будут неверными, так как помимо самих фильтров на амплитуду влияет и микросхема. Подскажите как будет лучше?

    1. Можно просто программно прибавлять нужно значение U(f) (Uп на последнем графике) к напряжению после детектора, думаю, это можно делать и на ПК, чтобы не мучать ардуино.
    2. Поставить после AD9834 усилитель, управляемый PWM сигналом с ардуино по тому же принципу как в 1-ом пункте.
    3. Возможно AD9834 сама умеет ограничивать амплитуду выходного сигнала (но нигде такого не встречал).

    Также сейчас на АЦП опорное напряжение 5 В, можно взять опорное 1,1 В (сигнал всего примерно 0,6 В) тогда шаг измерения напряжения будет меньше - точность выше.

    Еще нашел схему пикового детектора на LMC6482. Попробую ее тоже собрать.
    4.PNG
     
  12. kamikADzzzeeeee

    kamikADzzzeeeee Нерд

    Да, когда гуглил про фазовые детекторы наткнулся на нее. Цена дорогая только (1000 р). Если не найду ничего попроще, то возьму ее и соберу фазовый детектор по схеме из даташита
     
  13. Daniil

    Daniil Гуру

    эта микруха на выходе является источником тока. Ее рекомендуют нагружать 200 Ом, попробуйте зашунтировать вход АЦП таким сопротивлением (при измерении напрямую). А лучше еще и повторитель поставить. И встает вопрос что вы намерили на АЧХ, т.к. фильтр на разных частотах имеет разное сопротивление.

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

    Что-то мне кажется, что 22мкФ это шибко много. Если электролит, то это уже и не конденсатор.

    Рекомендую побаловаться в симуляторах. Ltspice или микрокап. Сегодня они все бесплатны.
    благодарю!
     
  14. kamikADzzzeeeee

    kamikADzzzeeeee Нерд

    Как я понял вы про эти резисторы?
    5.PNG
    На модуле они уже впаяны, вроде.
    111.jpg

    Не очень понял
     

    Вложения:

    • 5.PNG
      5.PNG
      Размер файла:
      101,6 КБ
      Просмотров:
      268
    • 111.jpg
      111.jpg
      Размер файла:
      927,2 КБ
      Просмотров:
      257
  15. Daniil

    Daniil Гуру

    Вы задаёте ток, т.к. микросхема является источником тока на частоте 10кГц с амплитудой 1 мА. Пусть нагрузка 200 Ом (т.е. к микросхеме ничего не подключено), тогда на резисторе будет падать переменное напряжение 200 мВ с частотой 10 кГц. Пусть вы к выходу печатной платы подключили RC-цепочку (10 нФ и 1 кОм), в таком случае сопротивление цепочки равно 1кОм+1/(2pi10кГц10нФ) ~ 2.6 кОм, тогда нагрузкой микросхемы будет уже параллельное соединение 200 Ом и RC-цепочки ~ 186 Ом. Соответственно напряжение на выходе микросхемы(оно же падающее на резисторе 200 Ом (оно же на входе RC-цепочки)) будет 186 мВ с частотой 10 кГц, после чего этот сигнал проходит через RC-цепочку. Если её рассчитать, то коэффициент прохождения на частоте 10 кГц равен ~ 0.85, а значит на напряжение будет 158 мВ, а ожидалось 200*0.85= 170 мВ.

    Т.е. этим расчётом я показал, что нагружать эту микросхему нужно с умом.
    1. Если вам удобно работать с напряжениями (АЦП измеряет напряжения), то нужно обеспечить на входе напряжение - самое простое, что я вижу, это поставить на выходе микросхемы широкополосный повторитель на ОУ, чтобы он ещё и по частоте не влиял.
    2. либо переходить на измерение токов.
    3. Амплитудный детектор имеет не бесконечнобольшое сопротивление, поэтому при измерении напряжения он вносит искажения в сами измерения просто-напросто тем, что он влияет на измеряемую нагрузку, т.е. и тут я вижу решение в виде развязки измеряемой цепи и измерителем в виде широкополосного ОУ.

    При выполнении п. 1 и 2 вы получите аналоговый тракт, который будет меньше восприимчив и меньше влиять на характеристики той цепи, которую вы будете ставить в разрыв этого тракта, а потом купите AD8302;)
     
  16. kamikADzzzeeeee

    kamikADzzzeeeee Нерд

    То есть нужно сделать что-то вроде этого (синим цветом)? Сверху расчет для двух частот приведен.
    6.PNG

    Т.е. повторитель обеспечит стабильное выходное напряжение без влияния нагрузки на величину напряжения? Извините за корявый рисунок, хотел нарисовать в Visio, но как открыл последнюю версию, ужаснулся и сразу закрыл.

    Но я так и не понял как это связано с уменьшением амплитуды сигнала при большой частоте с самого генератора. Т.е. это все из за нагрузки происходит и на самом деле на выходе генератора амплитуда никак не изменяется?

    На всякий случай прогнал сигнал с выхода генератора через осциллограф на разных частотах (без нагрузки).
    1.PNG 2.PNG 3.PNG 4.PNG 5.PNG

    Амплитуда сигнала тоже уменьшается
     
    Последнее редактирование: 4 май 2020
  17. Daniil

    Daniil Гуру

    Всё несколько сложнее, чем я думал.
    Тут они заявляют, что амплитуда может изменяться и рекомендуют применять дополнительный ЦАП.
    Вот как народ справляется: тут и тут.
    Если решать задачу в лоб, то можно поставить ещё один ОУ с детектором, чтобы измерять подаваемый сигнал это поможет и для ФЧХ, и для контроля подаваемой амплитуды.
     
  18. kamikADzzzeeeee

    kamikADzzzeeeee Нерд

    Тут они "Генерируемый сигнал синусоидальной или треугольной формы через восстанавливающий дифференциальный пассивный фильтр 5-го порядка поступает на вход дифференциального усилителя (U5), а оттуда на вход формирователя меандра и на выход устройства. Частота среза (11МГц) и порядок восстанавливающего фильтра были выбраны как компромисс между точностью формы выходного сигнала на верхних частотах, неравномерностью АЧХ и максимальной генерируемой частотой выходного сигнала."
    7.PNG
    Как я понимаю подобный фильтр уже стоит в модуле (оранжевым цветом выделил). К сожалению мой мультиметр не измеряет индуктивность, номиналы я не знаю. Поэтому мне нужно поставить только диф. усилитель на AD8130 с нужным мне усилением и частотой среза (для синусоидального и треугольного сигнала)?
    111.jpg
    Но почему я не могу просто эту погрешность прибавлять к напряжению после детектора?
    1.PNG
     
  19. Daniil

    Daniil Гуру

    Нет, то что у вас это набор пассивных LC-фильтров.
    Можете, поэтому я и предложил добавить ещё один ОУ с детектором на выходе микросхемы. Так у вас получится 2 детектора для измерения мгновенных значений амплитуды и на входе, и на выходе измеряемой цепочки. Брать их отношение и получать безразмерное АЧХ.