Продвинутые аналоговые фильтры: теория и практика

17 сентября 2018

Существенным недостатком базовых аналоговых фильтров, то есть, таких, как простой RC-фильтр, является то, что крутизна их АЧХ не превышает 6 дБ на октаву (удвоение частоты). Во многих задачах хотелось бы иметь более крутую АЧХ, и в тогда применяют другой дизайн фильтров. О таких «продвинутых» фильтрах мы и поговорим сегодня.

Теория

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

Фильтры делят на фильтры Баттерворта, фильтры Бесселя и фильтры Чебышева:

АЧХ фильтров Баттерворта, Бесселя и Чебышева

Фильтры Баттерворта используются чаще всего. Они имеют максимально плоскую полосу пропускания и куда более крутой переход между полосой пропускания и полосой подавления, чем у RC-фильтров. Фильтры Чебышева имеют еще более крутой переход, однако их полоса пропускания имеет рябь. Насколько сильной будет эта рябь выбирается при дизайне фильтра. Наконец, фильтры Бесселя интересны тем, что имеют наиболее линейную фазо-частотную характеристику (ФЧХ, то есть, как АЧХ, только для фазы сигнала, а не амплитуды). Далее мы сосредоточимся на фильтрах Баттерворта, как наиболее популярных.

Насколько крутой будет АЧХ фильтра зависит от количества используемых в нем полюсов (pole, в первом приближении — числа катушек и конденсаторов). Пример для фильтра Баттерворта нижних частот:

Фильтры Баттерворта первого, второго, и так далее порядка

Если в фильтре используется N полюсов, говорят, что это фильтр N-го порядка.

Как и в прошлом посте о фильтрах, обе иллюстрации были позаимствованы из потрясающей книги Practical Electronics for Inventors, 4th Edition, которую я крайне рекомендую к прочтению (есть перевод на русский язык). Книга подробно описывает, как производить выбор компонентов для фильтров Баттерворта нижних частот, верхних частот, полосно-пропускающих (двух типов — с широкой и узкой полосой пропускания), а также полосно-подавляющих. Алгоритм этот не сложный, в стиле «посмотрите в табличку, умножьте, поделите, переставьте местами, и вот перед вами все номиналы». Поскольку каждый раз выполнять этот алгоритм вручную — медленно и чревато ошибками, я заскриптовал все это хозяйство на Python. Поэтому сам алгоритм я здесь описывать не буду. Заинтересованные читатели могут обратиться к книге или коду скрипта.

Пользоваться скриптом очень просто. Допустим, нам нужен band-pass фильтр 3-го порядка, пропускающий частоты от 100 МГц до 110 МГц:

$ ./filtergen.py -f1 100000000 -f2 110000000 -p 3 -t band-pass

Band-pass narrow-band filter:

              L2     | |
=> --+----+--CCCCC---| |---+----+--- ...etc...
     |    |          | |   |    |
     |    |                |    |
   -----  C              -----  C
C1 -----  C           C3 -----  C
     |    C                |    C
     |    |                |    |
    GND  GND              GND  GND

C1 = 318.31 pF, in parallel with 7.23 nH
C3 = 318.31 pF, in parallel with 7.23 nH
L2 = 1.59 uH, in series with 1.45 pF

Вообще, существует множество калькуляторов фильтров. Например, есть бесплатная и открытая программа Qucs, которая умеет рассчитывать фильтры Баттерворта, Чебышева и Бесселя, а также активные фильтры, аттенюаторы, и многое другое. Имеется встроенный симулятор. Стоит однако отметить, что интерфейс программы требует привыкания. Пример ее использования можно посмотреть в видео Rapid Prototyping RF Filters with Tape & QUCS.

Еще есть программа Elsie. Это закрытая программа, но распространяется она бесплатно. Работает Elsie только под Windows, но может быть запущена в Wine под Linux или CrossOver под MacOS. Интересна программа тем, что помимо классических фильтров умеет рассчитывать и довольно необычные, например, capacitor-coupled filters. Как и Qucs, Elsie имеет встроенный симулятор.

Практика

Было решено спаять что-нибудь не слишком сложное, и рассчитанное на частоту где-то до 25 МГц. Дело в том, что я еще не созрел до покупки анализатора спектра. Поэтому протестировать фильтр я могу только при помощи генератора сигналов и осциллографа, а мой генератор сигналов MHS-5200A умеет выдавать сигналы с частотой не более 25 МГц. В теории, вместо анализатора спектра можно было бы воспользоваться RTL-SDR и генератором шума, но от этого способа у меня остались исключительно неприятные воспоминания.

В итоге я остановился на следующем фильтре высоких частот:

$ ./filtergen.py -f 7750000 -p 2 -t high-pass

High-pass filter:

      C1       C3
      | |      | |
=> ---| |--+---| |--- ...etc...
      | |  |   | |
           C
           C L2
           C
           |
          GND

C1 = 290.43 pF
L2 = 726.07 nH

На всякий случай фильтр был проверен в KiCad, как мы это делали в прошлом посте для RC-фильтров. Схема:

Схема самодельного фильтра Баттерворта

Фильтр рассчитывается на конкретный импеданс источника сигнала и нагрузки (в данном случае, 50 Ом и там и там), отсюда в схеме два лишних резистора.

Результат SPICE-симуляции:

Результат симуляции фильтра Баттерворта

Симуляция показывает -6 дБ в полосе пропускания вместо ожидаемых 0 дБ, потому что она не игнорирует резисторы, как следовало бы делать в данном случае. Если мы рассмотрим схему без фильтра, то оставшиеся резисторы образуют делитель напряжения. То есть, если мы будем передавать сигнал напрямую от источника с импедансом 50 Ом на нагрузку с импедансом 50 Ом, то на нагрузке увидим 0.5 амплитуды исходного сигнала, или те самые -6 дБ. Таким образом, настоящая АЧХ будет сдвинута на 6 дБ вверх по сравнению с тем, что нам показывают. В остальном же все похоже на правду. Заметьте, что наклон АЧХ даже у такого простого фильтра составляет 12 дБ на октаву.

Замерив десяток конденсаторов на 300 пФ я нашел один, имеющий емкость ровно 290 пФ (помним, что у любых электронных компонентов есть погрешность). Катушки на 726.07 нГн у меня, естественно, не было, поэтому было решено смотать ее самостоятельно.

Для этого я воспользовался онлайн-калькулятором на coil32.ru. Калькулятор, кстати, оказался очень точным. Он мне так понравился, что я решил передрать используемый в нем алгоритм в скрипт на Python, а то вдруг сайт будет лежать:

$ ./coilcalc.py -d1 0.6 -d2 1.6 -c 7 -i 0.72607
Input:
    Carcass diameter:                 7.000000 mm
    Wire diameter without insulation: 0.600000 mm
    Wire diameter with insulation:    1.600000 mm
    Target inductance:                0.726070 uH
Output:
    Number of turns:                  17.718000
    Winding length:                   28.348800 mm

Таким образом, для моего провода (одножильный 22 AWG), используемого каркаса (я использовал элементы держалки «третья рука») и требуемой индуктивности калькулятор насчитал 17.7 витков.

В итоге был спаян такой фильтр:

Самодельный фильтр Баттерворта верхних частот

Следующий шаг заключался в экспериментальном измерении АЧХ с помощью генератора сигналов и осциллографа. Тут важно учесть следующее:

  • Для получения осмысленных результатов все должно соединяться исключительно коаксиальными кабелями с импедансом 50 Ом. То есть, никаких «крокодилов» — их импеданс совсем не 50 Ом, и это портит измерение. На осциллографе в свойствах канала опция Probe должна стоять в 1X.
  • Для согласования импедансов к осциллографу должен быть подключен T-образный BNC-коннектор, к которому подключена нагрузка на 50 Ом, и непосредственно кабель, идущий к фильтру или генератору сигналов.
  • У моего генератора сигналов есть известный дефект — амплитуда сигнала падает с ростом частоты. Поэтому перед измерением АЧХ фильтра необходимо замерить «baseline» генератора сигналов.
  • Амплитуда, видимая на осциллографе, также падает с ростом частоты, потому что полоса пропускания осциллографа ограничена.
  • Как было объяснено выше, при подключении генератора к осциллографу на осциллографе мы должны видеть примерно половину от амплитуды сигнала, заданной на генераторе.
  • Если вы покупаете дешевые кабели / адаптеры / переходники, например, на eBay, вам может попасться бракованный товар. Если вместо ожидаемых данных вы видите какую-то ерунду, попробуйте заменить кабель. Мне один кабель пришлось выкинуть, потому что он ни на что не годился.

С учетом вышесказанного я аккуратно записал все цифры в LibreOffice и получил такой график:

Экспериментально измеренная АЧХ фильтра

Все в полном соответствии нашим ожиданиям! Согласно сырым данным, аттенюация в 3 дБ приходится на 7.75 МГц, в точности как было указано в аргументах скрипта. В полосе пропускания аттенюация не превышает 0.3 дБ, что очень даже неплохо. Согласно видео Practical RF Filter Design and Construction, снятом devttys0, потери энергии главным образом приходятся на катушки (из-за их низкой добротности по сравнению с конденсаторами), и типично в полосе пропускания можно видеть аж до -3 дБ. Помимо прочего, в этом видео интересно рассказывается об экранировании применительно к фильтрам.

Заключение

Как видите, в том, чтобы паять фильтры Баттерворта, нет абсолютно ничего сложного. Секрет успеха заключается в том, чтобы использовать номиналы компонентов, как можно более близкие к расчетным. В качестве домашнего задания предлагаю вам спаять любой фильтр Баттерворта и сравнить его реальное поведение с расчетным.

Исходники к этой заметке вы найдете в этом репозитории на GitHub. Как всегда, буду рад любым вопросам и дополнениям.

Дополнение: По теме фильтров вас могут заинтересовать статьи Об изготовлении полосно-пропускающих фильтров, Рассчитываем, моделируем и паяем диплексер, Эллиптические фильтры нижних частот и Учимся делать кварцевые полосовые фильтры. Более экзотические фильтры вы найдете в статье Режекторные фильтры из коаксиального кабеля и далее по ссылкам.

Метки: .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.