leoniv.diod.club

Измеритель уровня

Штатный измеритель уровня сигнала магнитофона "Электроника-004" реализован на газоразрядных линейных индикаторах типа ИН-13. Такие индикаторы являлись визитной карточкой ранних моделей магнитофонов "Электроника" и "Олимп".

Для того времени это было прогрессивно - столбики с непрерывно изменяющейся длиной. Но сегодня этот тусклый и размытый индикатор совсем не смотрится на фоне новой светодиодной индикации счетчика ленты.

Индикаторы ИН-13 обладают целым рядом недостатков: низкой яркостью свечения, нечеткой границей светового столба, невысокой точностью. На недостатки измерителей уровня на базе таких индикаторов указано в литературе [1]:

Существуют разные варианты элементов индикации. Это стрелочные приборы, газорязрядные индикаторы, вакуумно-люминесцентные индикаторы, светодиодные и жидкокристаллические индикаторы. Есть и более экзотические варианты, например, "зайчиковые" приборы [1]:

Кроме недостатков самих индикаторов ИН-13 штатный измеритель уровня имеет и другие недостатки. Для подсветки шкалы используются лампочки накаливания, которые имеют невысокую яркость и ограниченный срок службы. Схема управления тоже обладает рядом недостатков. Применяется однополупериодное выпрямление звукового сигнала, что может привести к ошибкам измерения уровня. Постоянная времени интеграции не соответствует принятому стандартом значению, что проявляется в виде занижения показаний по сравнению с образцовыми приборами. Диапазон индицируемых уровней сигнала недостаточно широкий, особенно с учетом перегрузочной способности современных лент.

В конце 80-х годов уже полным ходом для управления аппаратами использовались микроконтроллеры, а наряду с электронными счетчиками на светодиодных индикаторах применялись и светодиодные измерители уровня. Например, их использовал флагманский Akai GX-747. Кстати, вид этого измерителя довольно обманчив - каждый светодиод зеленого цвета разделен на две части и кажется, что это два отдельных светодиода. На самом деле их тут всего 24 на канал.

Наиболее удобно для измерителя уровня использовать готовые светодиодные сборки. Наиболее распространены сборки на 10 элементов, но существуют и на 8, 5 или 4 элемента.

В отличие от измерителя уровня на ИН-13, у которого отсутствует дискретность столбика, измерители на светодиодах могут менять длину столбика лишь дискретно. Чтобы минимизировать этот недостаток, количество элементов в линейках должно быть большим. Если использовать сборки светодиодов с шагом 2.54 мм, то в штатное окно индикатора помещается линейка из 35 элементов. Довольно неплохо, но хотелось бы больше.

Если внимательно посмотреть на дизайн передней панели магнитофона "Электроника-004", то бросается в глаза большое количество пустого места вокруг измерителя уровня.

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

В новом окне можно разместить измеритель с линейками из 50 элементов. Это позволит практически полностью избавиться от эффекта дискретности изменения длины светящегося столбика. Его движения будут такими же плавными, как и для непрерывных столбиков газоразрядного индикатора. Вместе с тем появляется целый ряд преимуществ: яркость существенно выше, граница столбика четкая, сам столбик многоцветный, можно реализовать запоминание пиков и многое другое. Между линейками размещается шкала с многоцветной подсветкой, а снизу - дополнительные трафареты, которые позволяют отображать различные режимы работы магнитофона.

Основными характеристиками измерителей уровня являются время интеграции и время обратного хода. Время интеграции определяет скорость реакции измерителя на быстрые изменения уровня сигнала. Если время интеграции большое (порядка 300 мс), получается измеритель среднего уровня: так называемый VU-meter. Такой измеритель не будет реагировать на короткие пики сигнала, которые могут вызвать перегрузку канала записи-воспроизведения. Поэтому его использование нежелательно. Когда в качестве устройства индикации применялись стрелочные приборы, время интеграции не могло быть сделано маленьким из-за инерционности подвижной системы. Поэтому часто VU-meter комбинировали с более быстродействующим пороговым индикатором пиковых значений на одном или нескольких светодиодах. Применение быстродействующих устройств отображения информации, таких как газоразрядные индикаторы или светодиоды, сняло проблему получения малых времен интеграции и позволило строить пиковые или квазипиковые измерители.

Чаще всего для измерения уровня сигнала в звуковых трактах используют измерители квазипикового уровня. В отличие от настоящих пиковых измерителей (true-peak), которые в теории имеют нулевое время интеграции, для квазипиковых измерителей это время определено стандартами.

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

Время интеграции для квазипиковых измерителей определяется как длительность одиночной тональной посылки частотой 5 кГц, при которой показания достигают -2 дБ (примерно 0.8) от установившегося значения. Такое определение дает ГОСТ 21185-75 и стандарт IEC 60268-10: "...the duration of a burst of sinusoidal voltage of 5000 Hz at reference level which results in an indication 2 dB below reference indication". Этими стандартами для квазипиковых измерителей определяется значение времени интеграции 5 мс. Более ранний ГОСТ определял время интеграции 10 мс, но при этом должен был достигаться уровень -1 дБ, что практически соответствует значениям 5 мс и -2 дБ, т.е. разницы в этих стандартах нет.

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

Время интеграции численно не равно постоянной времени зарядки сглаживающей RC-цепочки. Если на выходе пикового детектора включить RC-цепочку с постоянной времени зарядки 5 мс, то уровень 0.8 будет достигнут за время примерно 20 мс. Моделирование показывает, что уровень 0.8 достигается за 5 мс для цепочки с постоянной времени зарядки примерно 1.25 мс. Т.е. время интеграции составляет примерно 4 tau зарядки RC-цепи.

Что, впрочем, можно прочитать и в книгах [1].

Тем не менее, в штатной схеме магнитофона "Электроника-004" постоянная времени зарядки RC-цепочки близка к 5 мс. Что уже дает увеличенное в 4 раза время интеграции по сравнению со стандартным. Но там ситуация еще хуже - применен однополупериодный выпрямитель, в результате уровень 0.8 достигается за время примерно 40 мс! Вероятно, это и есть причина заметной разницы показаний на реальном музыкальном сигнале штатного измерителя и внешнего измерителя типа RTW 1206N, где время интеграции выдержано точно. Хотя при калибровке на синусоидальном сигнале их показания совпадают.

Кроме времени интеграции квазипиковые измерители имеют еще время обратного хода, которое значительно больше. Это время определяет, как быстро показания будут уменьшаться после снятия сигнала. Если это время сделать маленьким (например, равным времени интеграции), то показания индикатора будут слишком быстро "дергаться", что затруднит их считывание. Для измерителей среднего уровня такой проблемы не стояло из-за их невысокого быстродействия. Там можно было обойтись одной постоянной времени. В быстродействующих квазипиковых измерителях надо искусственно замедлять сброс показаний, чтобы оператор смог считать информацию.

Время обратного хода определяется как время, через которое после снятия сигнала показания индикатора уменьшаются на 20 дБ. Оно тоже не равно постоянной времени разрядки RC-цепи, а составляет примерно 2.3 tau. Значение времени обратного хода также задано стандартами. Оно отличается для индикаторов разного назначения. Для индикаторов первого типа, которые служат для контроля уровня сигнала при его оперативной регулировке (это как раз случай регулировки уровня записи в магнитофоне), время обратного хода должно составлять 1.7±0.3 сек. Соответственно, постоянная времени разрядки RC-цепочки должна быть примерно 740 мс.

Измерители уровня аудиосигнала часто строят на основе аналоговых схем. Конструкция получается довольно громоздкой и содержит довольно сложно реализуемые с хорошей точностью узлы: пиковый детектор, линейно-логарифмический преобразователь. Иногда часть функций перекладывается на микроконтроллер, который чаще всего оцифровывает готовое постоянное напряжение после детектора. Такой способ прост в реализации, но имеет ряд существенных недостатков. Поскольку детектор аппаратный, невозможно менять его тип и характеристики. Детектор только один, что не позволяет сделать комбинированный измеритель (например, среднего + пикового уровня). Для детектирования малых сигналов диодный детектор не подходит по причине плохой линейности, приходится делать активный детектор на ОУ. При этом напряжение смещения ОУ ограничивает динамический диапазон измерителя, и ничего с этим не поделать.

В последнее время стало возможным всю обработку сигнала производить внутри микроконтроллера, подавая на вход АЦП непосредственно звуковой сигнал. Распространенные микроконтроллеры семейства AVR не слишком хорошо подходят для этой задачи, так как имеют относительно медленный АЦП (максимум 15 кГц при 10-ти разрядах). Более подходящими являются контроллеры STM32.

В цифровой реализации процесс детектирования не вносит ошибки по постоянному напряжению. Поэтому достаточно удалить постоянную составляющую переменного входного сигнала. Тип детектора и значения постоянных времени легко могут быть изменены, что позволяет реализовать несколько режимов работы. Например, измерение среднего уровня (VU), среднеквадратического уровня (RMS), квазипикового уровня (QPPM), настоящего пикового уровня (True Peak). Можно реализовать одновременный вывод средних значений непрерывным столбиком, а пиковых - одиночным горящим сегментом. Для каждого варианта индикации можно независимо задавать время интеграции и обратного хода, а также форму индикации (столбик, точка, обратный ход точки или ее исчезновение и т.д.). Для хранения настроек можно использовать энергонезависимую память. Перекодировку показаний в логарифмический масштаб можно производить по таблице, что позволяет создать шкалу любого вида (например, S-образную с растяжкой интервала вблизи 0 дБ).

Чтобы выбрать подходящие варианты для реализации в измерителе, можно изучить существующие измерители уровня. Современные программы для аудиомастеринга содержат программные реализации различных вариантов измерителя уровня:

Многие из этих вариантов (например, Nordic, BBC, EBU) отличаются лишь выбором опорного уровня. Еще могут быть отличия времени интеграции и обратного хода, но в основном все эти измерители - квазипиковые. Способов привязки шкалы по уровню существует довольно много:

Применительно к аналоговому магнитофону, уровень нуля индикатора привязывается к определенной намагниченности ленты, которая принимается за номинальную. Для бытовых катушечных магнитофонов, работающих на скорости 19.05 см/с она обычно равна 320 нВб/м.

В идеале для каждой конкретной ленты на этапе калибровки должен определяться максимальный уровень записи по критерию заданного уровня нелинейных искажений. Пропорционально этому уровню должен подстраиваться и ноль индикатора. Тогда для любой ленты можно использовать весь доступный динамический диапазон. Но такая сложная процедура калибровки была реализована лишь в редких аппаратах, например, в кассетном BeoCord 9000 фирмы Bang and Olufsen. С цифровым измерителем уровня такую калибровку реализовать проще, сдвиг шкалы можно сделать простым умножением цифровых значений на заданный коэффициент.

Как было сказано выше, для аналогового магнитофона лучше всего подходит квазипиковый измеритель уровня. Как вариант, возможна комбинация VU-измерителя VU и квазипикового, или двух квазипиковых с разными временами интеграции. Измерители среднеквадратических значений больше подходят для оценки уровня громкости и для задач магнитной записи особого смысла не имеют. В современном стандарте ITU-R BS.1770 для измерения уровня громкости (LUFS) используется еще и частотное взвешивание, такой режим работы измерителя может быть полезен при использовании его как отдельного прибора, а не в составе магнитофона.

В магнитофоне тоже иногда используют частотное взвешивание, когда в режиме записи измеритель отображает уровень с учетом частотной коррекции тока записи. Тогда можно видеть, какой запас по перегрузке имеется для конкретного входного сигнала с определенным спектральным составом. Например, так устроен измеритель уровня магнитофона Tandberg TD-20A, на нем имеется надпись "Equalized peak reading":

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

Структура измерителя

Для измерителя уровня с цифровой обработкой сигнала аналоговая часть предельно упрощается. На вход АЦП микроконтроллера подается переменный звуковой сигнал, сдвинутый примерно на 1/2 Vref. С помощью DMA кодами АЦП заполняется буфер в ОЗУ. По прерыванию полуготовности цикла DMA данные считываются и обрабатываются. Первое, что надо сделать с сигналом, это с помощью специального фильтра удалить постоянную составляющую. Дальше производится двухполупериодное выпрямление сигнала, которое сводится к вычислению абсолютного значения. Затем могут следовать вычислители RMS, среднего уровня, квазипикового уровня, пикового уровня. Для каждого из вариантов (кроме true peak) задается время интегрирования с помощью IIR-фильтра 1-го порядка. Все это делается в домене с частотой дискретизации АЦП. Поскольку время обратного хода значительно больше времени интеграции, обработку обратного хода, как и вывода результата измерения, можно делать в более "медленном" домене, допустим, с даунсемплингом в 256 раз.

На структурной схеме показан один стереоканал измерителя. Он имеет две ветки обработки, которые работают параллельно и могут быть использованы для измерения уровня разными способами, например, среднего и пикового.

Чтобы избежать необходимости применения Anti-alias фильтра на входе АЦП, а также чтобы иметь возможность регистрировать короткие пики сигнала, частота дискретизации в первом домене должна быть выбрана довольно высокой. В цифровых трактах проблему пропуска измерителями Inter-Sample Peaks решают минимум учетверенной частотой дискретизации. Для аналогового магнитофона с полосой 20 кГц это соответствует частоте дискретизации порядка 160 кГц, на что вряд ли хватит ресурсов. Поскольку регистрация очень коротких пиков здесь не является необходимой, можно выбрать некую компромиссную частоту дискретизации, скажем, 96 кГц.

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

Принципиальная схема измерителя

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

Сдвиг сигнала необходим по той причине, что встроенный в микроконтроллер АЦП является однополярным, его входной диапазон составляет от 0 до 3.3 В (до напряжения питания VDDA, которое является одновременно опорным напряжением). Сдвиг осуществляется на половину этого напряжения, т.е. на 1.65 В, что задается делителями R154R155 и R156R157. Раздельные делители использованы для предотвращения связи между каналами, ведь резисторный делитель – далеко не идеальный источник напряжения. На графике ниже показана работа входного усилителя. Зеленый график - это выходной сигнал ОУ, красный график - напряжение сдвига, формируемое резисторным делителем.

Дифференциальный съем входного сигнала тоже весьма желателен. Измеритель уровня представляет собой в основном цифровое устройство и питается от «цифрового» источника питания +5 В. Потребляемый ток может быть довольно значительным (это суммарный ток питания всех светодиодов), причем он может меняться во время работы. В результате на подводящих питание проводах будет заметное падение напряжения, в том числе и на проводе земли. Потенциал земли измерителя уровня может прыгать относительно аналоговой земли магнитофона. Если использовать обычный входной усилитель, то падение на земляном проводнике будет приложено к его входу. С дифференциальным усилителем такой проблемы нет. Источник сигнала здесь single ended, а не дифференциальный, поэтому торой вход диффусилителя надо подключить к аналоговой земле источника. Так можно устранить влияние колебаний потенциала земли измерителя.

Если измеритель уровня делать в виде отдельного устройства, то можно реализовать балансные входы с разъемами XLR, как это принято в профессиональной аудиотехнике. На графике ниже видно, что в звуковом диапазоне частот подавление синфазной помехи входным усилителем лучше 50 дБ, хотя в реальности оно будет немного хуже из-за разброса номиналов резисторов. С этой точки зрения лучше было бы применить интегральный диффусилитель, например, типа AD627. Но он более редкий и дорогой по сравнению с обычным ОУ. Тем более, что в реальных условиях эксплуатации подавление синфазной помехи и так будет достаточным.

В этой схемой есть не очень хорошая особенность. Разделительные емкости при работе здесь заряжены примерно до напряжения делителя (1.65 В). Но ток их зарядки проходит через довольно высокоомные резисторы обратной связи (100 кОм), хотя для полезного сигнала эти емкости образуют фильтр совместно с более низкоомными резисторами (10 кОм). Поэтому процесс первоначальной зарядки емкостей будет длиться гораздо дольше постоянной времени фильтра и может занять несколько секунд. В данном случае это не так страшно, потому что фактически усилитель начинает нормально работать через 0.2 – 0.3 сек. Для нормальной работы достаточно, чтобы напряжение на входах ОУ попало в допустимый диапазон. Но еще некоторое время после этого напряжение на входах ОУ продолжает устанавливаться. Для каких-то применений это может оказаться критичным, тогда разделительные емкости придется включить иначе. На графике ниже показан процесс включения усилителя. Красный график - это напряжение сдвига, формируемое резисторным делителем. Синий график - напряжение на входах ОУ. Зеленый график - напряжение на выходе ОУ. Видно, что выходной сигнал приходит в норму намного раньше, чем заканчивается процесс установления постоянного смещения на входах ОУ.

Как вариант, можно просто уменьшить емкость разделительных конденсаторов C8 – C11, так как частота среза получилась излишне низкой: на частоте 20 Гц ослабление составляет всего 0.1 дБ. Применять тут керамические конденсаторы нежелательно из-за микрофонного эффекта, лучше использовать танталовые электролиты.

Полную схему измерителя уровня можно посмотреть в файле meter50_sch.pdf. В качестве опорного напряжения АЦП используется напряжение питания аналоговой части микроконтроллера (VDDA). Формируется это напряжение с помощью стабилизатора U16 типа LP2951A-3.3. Развязку аналогового и цифрового питания микроконтроллера осуществляет дроссель L1 вместе с блокировочными конденсаторами. Аналоговое напряжение питания снимается непосредственно с выхода стабилизатора, цифровое - после дросселя (согласно рекомендациям фирмы Analog Devices для mixed-signal IC).

Для хранения таблиц и настроек служит микросхема EEPROM U18 типа 24C16. Переключать пресеты можно с помощью перемычек JP1 и JP2. Пресеты загружаются с помощью сервисной программы через разъем XP1 порта UART. Для подключения к компьютеру можно использовать любой переходник USB-TTL. Через этот же порт возможно загружать и прошивку микроконтроллера, если включить питание с установленной перемычкой JP3 (BOOT). Отладку программы микроконтроллера можно вести через разъем XP5, куда выведены сигналы отладочного интерфейса SWD.

Светодиодные линейки и отдельные светодиоды подключены к выходам сдвиговых регистров U1 - U14, включенных цепочкой и подключенных к порту SPI микроконтроллера. Индикация - статическая, чтобы избежать помех. Один из выходных сигналов регистров используется для управления ключом VT1, который позволяет отключать светодиоды подсветки шкалы.

Кроме светодиодных линеек измеритель содержит дополнительные трафареты, которые подсвечиваются светодиодами. Они могут использоваться для индикации различных режимов работы магнитофона. Для управления ими требуется связь с блоком управления. Она осуществляется по интерфейсу RS-485 через разъем XP2.

Чтобы выровнять яркость всех элементов индикации (линеек, шкалы и трафаретов), требуется регулировка. Она может осуществляться программно, или с помощью потенциометров R180 и R181. Программная регулировка может происходить двумя способами - с помощью PWM или с помощью встроенных ЦАП микроконтроллера. Если используются ЦАП, то вместо подстроечных резисторов R180 и R181 надо установить перемычки. Если используется PWM, то резисторы R180 и R181 не устанавливаются. Для сглаживания PWM служит ФНЧ 3-го порядка, выполненный на ОУ U20. С его выходов управляющие сигналы поступают на регулируемые стабилизаторы U21 и U22 типа LM1117. Выходное напряжение VCC1 используется для питания линеек, а VCC2 - для питания подсветки и трафаретов.

На разъемы XP6 и XP7 может поступать выходное напряжение встроенных ЦАП микроконтроллера. Эти выходы могут использоваться для построения измерителя уровня на основе стрелочных индикаторов. Благодаря цифровой обработке сигнала становится возможным отображать квазипиковый уровень, хотя и с некоторой задержкой из-за инерционности подвижной системы. Инерционность тоже можно частично скомпенсировать, добавив программное "форсирование". Шкала стрелочных приборов может иметь любую градуировку, зависимость задается таблично, как и для светодиодного варианта измерителя.

На этом аппаратная часть измерителя уровня заканчивается, все остальное происходит внутри микроконтроллера.

ADC и DMA

Первым делом надо оцифровать входной сигнал и поместить его в буфер в ОЗУ. Этим будет заниматься встроенный 12-разрядный аналого-цифровой преобразователь (АЦП) и контроллер прямого доступа к памяти (DMA). Измеритель уровня предназначен для стереофонического аппарата, значит он должен содержать два независимых канала. Оцифрованный сигнал надо поместить в отдельный массив для каждого входа. Периферия STM32 способна это сделать без участия процессора благодаря наличию DMA.

АЦП STM32 имеет множество режимов работы. Например, есть «регулярные» и «инжектированные» каналы. Смысл в том, что тут можно формировать группы каналов, когда логический автомат будет по очереди делать преобразования в нескольких каналах и сохранять результат. Отличие «регулярных» и «инжектированных» каналов состоит в том, что в первом случае результаты сохраняются в одном регистре, а во втором случае – в отдельных регистрах для каждого канала. Второй вариант удобней, зато у него количество каналов ограничено, их всего 4. Но здесь надо всего 2, поэтому данное ограничение несущественно и можно использовать «инжектированные» каналы.

Для настройки группы инжектированных каналов имеется регистр JSQR, где двумя битами кодируется количество каналов в группе (в данном случае два), а еще 4 группы по 5 битов кодируют номера входов АЦП, задействованных в группе. Причем если задействованы всего 2 канала, то их надо указывать не в группах JSQ1и JSQ2, а в группах JSQ3 и JSQ4. Как будто работают каналы 3 и 4 группы. Тем не менее, данные надо брать с регистров JDR1 и JDR2, а не JDR3 и JDR4. Точно так же для смещения кода АЦП надо использовать регистры JOFR1 и JOFR2, а не JOFR3 и JOFR4.

Запуск преобразования надо делать строго с частотой дискретизации, для чего используется таймер TIM2 и его событие TRGO. Событие TRGO настроено так, что оно возникает по событию Update. Чтобы преобразования велись циклически, включен SCAN mode. Частота дискретизации выбрана 96 кГц, т.е. период равен 10.4 мкс. За это время АЦП должен успеть сделать 2 преобразования. Время, затрачиваемое АЦП, состоит из двух этапов: выборки сигнала и процесса преобразования. Процесс преобразования длится 12.5 тактов. В данном случае вместо максимальной частоты APB2 / 2 = 12 МГц выбрана APB2 / 4 = 6 МГц, так как времени достаточно: преобразование займет чуть больше 2 мкс. Остальное время можно потратить на выборку.

Значение времени выборки является довольно критичным, оно накладывает ограничения на допустимое выходное сопротивление источника сигнала для АЦП. И что неожиданно, на значение допустимой емкости на входе АЦП. В данном случае оказалось возможным использовать длительность выборки 13.5 тактов. В итоге полное преобразование будет длиться 13.5 + 12.5 = 26 тактов.

Интервал запусков должен быть больше длины последовательности хотя бы на один такт АЦП, поэтому здесь интервал будет (26 + 26 + 1) * 1/6 [МГц] = 8.83 мкс. В период дискретизации 10.4 мкс это вписывается, причем без особого простоя АЦП.

По концу преобразования АЦП есть возможность запускать цикл DMA, который будет перекладывать данные из регистров в память. С АЦП связан всего один канал DMA, поэтому данные можно забирать только с одного регистра («регулярных» каналов при этом может быть задействовано несколько) и складывать их в один массив. Если работает несколько каналов, то в массиве данные будут перемешаны, что неудобно для обработки.

Чтобы брать данные с двух регистров «инжектированных» каналов и сохранять их в разных массивах, потребуются два канала DMA. Но они не могут запускаться событием конца преобразования АЦП, что логично – невозможно понять, в каком именно канале закончилось преобразование. Но раз запуск преобразования производится таймером, то по этому же таймеру можно запускать и DMA. Ведь АЦП – это логический автомат, время преобразования для него известно и постоянно. Осталось назначить два канала DMA и определить для них моменты времени, когда данные АЦП точно будут готовы.

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

К сожалению, скорость ЦАП слишком низкая, чтобы наблюдать столь быстрые процессы. Сигнал несколько затянут, но все можно понять. Период дискретизации составляет 10.4 мкс, это чуть больше 10 клеток на экране. Видно, что первый канал заканчивает преобразование чуть раньше середины экрана, а второй – чуть раньше конца экрана. Т.е. канал DMA для первого канала можно запускать в середине периода дискретизации, для второго – в конце.

DMA используется в циклическом режиме, каждый канал работает со своим массивом в памяти. В результате в каждом из массивов обновляются данные для своего входного канала АЦП. Остается вовремя их оттуда забирать для дальнейшей обработки. По флагу заполнения половины буфера обрабатывается первая часть данных, по флагу заполнения всего буфера – вторая. Флаги опрашиваются в основном цикле. Размер буфера выбран таким, что на заполнение его половины уходит как раз один период дискретизации "медленного" домена.

DC removal filter

Первой операцией является удаление из сигнала постоянной составляющей. Это надо сделать перед тем, как подавать сигнал на детектор. Для детектора не имеет значения, постоянный сигнал на входе, или переменный. Все попадет на выход. При динамическом диапазоне измерителя порядка 60 дБ даже такая маленькая постоянная составляющая, как 0.1% шкалы АЦП, может сравниться по величине с полезным сигналом и исказить его. На практике постоянная составляющая гораздо больше. Входная схема сдвига уровня лишь примерно сдвигает сигнал на половину шкалы АЦП. Схема использует резисторы с точностью 1%, плюс имеются другие погрешности.

Устранение постоянной составляющей в массиве данных АЦП является распространенной задачей, когда ведется цифровая обработка сигналов. Простейшим фильтром, который подавляет постоянную составляющую, является дифференциатор. Он имеет один нуль на нулевой частоте. Коэффициент передачи для постоянного тока равен нулю (что и требуется), а с повышением частоты коэффициент передачи растет. Для дискретной реализации дифференциатора его разностное уравнение имеет следующий вид:

y(n) = x(n) – x(n-1)

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

Схематически АЧХ дифференциатора показана на рисунке ниже (рис. A). Такой ход АЧХ не устраивает, так как в рабочем диапазоне частот коэффициент передачи будет меняться. Нам же надо получить линейную АЧХ, и только ниже некоторой частоты среза надо иметь спад. Очевидно, что для этого требуется добавить полюс на желаемой частоте среза. Сделать это можно последовательным соединением дифференциатора и звена ФНЧ 1-го порядка (его АЧХ показана на рис. B). Совместная АЧХ будет иметь нужный вид (рис. C).

Такое звено ФНЧ 1-го порядка в подобных применениях часто называют «интегратор с утечкой» (leaky integrator). Потому что в аналоговом варианте такой интегратор реализуется добавлением резистора параллельно емкости, через который она будет медленно разряжаться. Для дискретной реализации разностное уравнение идеального интегратора приведено ниже:

y(n) = y(n-1) + x(n)

Чтобы ввести утечку, надо накопленное значение умножить на некоторый коэффициент меньше единицы:

y(n) = A*y(n-1) + x(n), 0 < A < 1

Это простейший IIR-фильтр нижних частот, так его тоже можно называть. Название «интегратор с утечкой» применяют для подчеркивания того, что этот фильтр применяется несколько необычным образом – рабочая полоса частот лежит в полосе заграждения. Обычно ФНЧ применяют по-другому, в качестве рабочей используют полосу пропускания. Но это лишь особенности терминологии, которые сути не меняют.

Частота среза здесь должна быть выбрана низкой по сравнению с частотой дискретизации, а это означает, что коэффициент A должен быть близким к единице. Частоту среза можно вычислить по формуле:

f = (1 - A)*Fs/2*pi, или A = 1 – 2*pi*f/Fs, где Fs – частота дискретизации.

Общее разностное уравнение для фильтра будет иметь следующий вид:

y(n) = x(n) – x(n-1) + A*y(n-1)

Фактически это IIR-фильтр верхних частот первого порядка. Он эквивалентен дифференцирующей RC-цепочке.

Такой фильтр имеет один нуль и один полюс. Если изобразить их на z-плоскости, то нуль будет лежать в точке z = 1, а чуть левее его на оси будет лежать полюс.

Звуковая полоса частот начинается с 20 Гц. Но частоту среза желательно сделать ниже, чтобы в звуковой полосе не появлялся заметный фазовый сдвиг. Данный фильтр не является фазо-линейным, поэтому составляющие сигнала разных частот будут задержаны на разное время. Результат их сложения даст другую форму сигнала, пиковый уровень будет искажен. Существуют фазо-линейные FIR-фильтры верхних частот, но для получения хорошей линейности АЧХ в полосе пропускания при низкой частоте среза они требуют очень много вычислительных ресурсов. Есть вариант фильтра для удаления постоянной составляющей на основе MAF (moving average filter). Вычислительных ресурсов он тратит не очень много, но для получения высокого отношения частоты дискретизации к частоте среза требуется большой расход памяти.

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

Сдвиг фазы на частоте 20 Гц составляет около 17 градусов, что можно считать вполне приемлемым. На более детальном графике ниже показана ФЧХ (вверху) и АЧХ (внизу) в диапазоне частот 20 Гц – 2 кГц.

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

Еще одна проблема, более коварная, связана с ошибками округления. Для частоты среза фильтра 5 Гц при частоте дискретизации 96 кГц значение коэффициента A = 0.999673. Чтобы провести вычисления с таким коэффициентом с хорошей точностью, требуется переходить к повышенной разрядности. Обратный переход будет представлять собой квантование с более крупным шагом, что приводит к появлению ошибки, или шума квантования. В результате действия такой ошибки в фильтре на выходе может появиться паразитная постоянная составляющая, которая даже больше той, которую подавляем. Такая ошибка может сделать фильтр неработоспособным. Как показала практическая проверка, без коррекции ошибки реквантования фильтр на самом деле не работает.

В данном случае АЦП 12-разрядный, входные и выходные отсчеты с запасом помещаются в 16-разрядные целые числа со знаком. Запас тут необходим для защиты от переполнения. Умножение будет делаться в 32-разрядной сетке. Тогда при переходе от 32-разрядного промежуточного результата к 16-разрядному будет возникать ошибка квантования. В одной из публикаций предлагается дополнить фильтр формирователем спектра шума квантования путем ведения обратной связи по ошибке.

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

    static const double POLE = 0.999673;
    static const int32_t A = (int32_t)(UINT16_MAX * POLE);
    static int32_t acc = 0;
    static int16_t xx = 0;
    static int16_t yy = 0;

    x = Input;
    acc = LO_W(acc) + A * yy;
    yy = x - xx + HI_W(acc);
    xx = x;
    Output = yy;

Квантование происходит путем отбрасывания младшей половины 32-разрядного числа. Отброшенное значение - это ошибка квантования. Исходное число - знаковое, но ошибка всегда имеет положительное значение. Например, если у положительного числа младшие разряды заменить нулями, число уменьшится, для коррекции ошибки надо будет добавить некоторое положительное число. Если у отрицательного числа младшие разряды заменить нулями, число станет по модулю большим, оставаясь отрицательным. Это означает, что для коррекции ошибки снова надо будет добавить некоторое положительное число. Поэтому ошибку можно извлечь из исходного 32-разрядного числа, просто обнулив старшую его половину вместе со знаковым разрядом.

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

Первая проверка - просто связка АЦП-ЦАП с прямым выводом в ЦАП кодов АЦП. На вход АЦП подается смещение на половину шкалы и сигнал с выхода генератора. Вот так выглядит сигнал 5 кГц на выходе ЦАП:

Для проверки фильтра постоянной составляющей надо подать на вход более низкочастотный сигнал, так как ФВЧ с частотой среза 5 Гц на сигнал 5 кГц влияния оказывать практически не будет. Для наглядности я подал на вход меандр частотой 20 Гц. Вот так он выглядит на выходе ЦАП без фильтра:

Если теперь включить в фильтр, картина получается такая:

Получается типичная форма сигнала для дифференцирующей RC-цепочки. Чтобы убедиться в правильности работы фильтра, надо сравнить форму с полученной на модели. Данный фильтр имеет аналоговый прототип, его модель в PSpice дает идентичный результат:

Если менять постоянное смещение на входе АЦП, то нулевая линия на выходе ЦАП на мгновение уходит, затем снова возвращается на место. Фильтр работает как положено. Входные данные, поступающие с АЦП, имеют разрядность 12 бит. После фильтра данные имеют такую же разрядность. Чтобы рассчитать этот фильтр, процессор тратит около 1.4 мкс.

Детектор

Детектор – это самая простая часть обработки. Когда из сигнала исключена постоянная составляющая, задача сводится к вычислению абсолютного значения. Работу детектора тоже проверил с помощью ЦАП.

Даже при частоте дискретизации 96 кГц сигнал 20 кГц выглядит так себе. Но если на осциллографе включить более медленную развертку, четко видна синусоидальная огибающая.

На выходе детектора сигнал принимает только положительные значения, поэтому знаковый разряд всегда равен нулю. Данные на выходе детектора становятся 11-разрядными.

Время интеграции

Для получения заданного времени интеграции выходной сигнал детектора необходимо сгладить с помощью фильтра. Постоянная времени может быть задана произвольно, для примера можно взять значение для стандартного квазипикового измерителя по ГОСТ 21185-75 или IEC 60268-10.

Сглаживающий фильтр – это не простой ФНЧ, а более сложный фильтр с разными постоянными времени заряда и разряда. Заряд должен происходить быстро, чтобы обеспечить заданное время интеграции измерителя.

По ГОСТ 21185-75 показания должны достигать уровня -2 дБ за время 5 мс после начала вспышки тестового сигнала 5 кГц. Это не значит, что постоянная времени RC-цепочки должна быть 5 мс. На самом деле требуется постоянная времени примерно 1.25 мс. Разностное уравнение фильтра имеет следующий вид:

y(n) = y(n-1) + A*(x(n) - y(n-1)), где A = 0.0083 для Fs = 96 кГц

Этот фильтр включается только при нарастании сигнала, на спаде сигнал удерживается на прежнем уровне. За спад сигнала будет отвечать отдельный фильтр. Фактически, тут работают два IIR-фильтра, которые формируют время интеграции для индикации среднего (или квазипикового) значения, которое отображается столбиками, и пикового значения, которое отображается одиночным горящим сегментом - точкой. Для получения необходимой точности вычислений, накопление производится в 32-разрядных аккумуляторах. Коэффициенты фильтров 16-разрядные без знака. Они определяются как A = 65536 / 96000 / tau.

Для начала можно протестировать этот фильтр с одинаковыми временами заряда и разряда. Чтобы получить тестовый сигнал, используется полевой ключ, который модулирует сигнал 5 кГц с частотой 20 Гц. Ключ в паузе подавляет сигнал не полностью, но это не имеет особого значения.

На выходе фильтра наблюдается типичная для ФНЧ форма сигнала. За 5 мс сигнал как раз достигает требуемого уровня, постоянная времени совпала с расчетной.

Обработка в "медленном" домене

Время обратного хода измерителя в стандарте определено как 1.7 секунды до падения уровня на 20 дБ. Для этого нужна постоянная времени фильтра примерно 740 мс. Это слишком большое время, чтобы его обрабатывать в домене 96 кГц. Поэтому дальнейшая обработка ведется в "медленном" домене. Уменьшенная частота дискретизации формируется как частота заполнения массивов по 256 точек данными АЦП, т.е. 96000 / 256 = 375 Гц. Это вполне подходящая частота дискретизации для данного фильтра, для 740 мс коэффициент фильтра получается равным 0.0036, что вполне приемлемое значение.

Обработка в "медленном" домене начинается с масштабирования сигнала, которое необходимо для выравнивания показаний столбиков и точек на стационарном сигнале при разных постоянных времени интеграции и обратного хода. Выходной 11-разрядный код предыдущих фильтров умножается на масштабирующие коэффициенты. На выходе получается максимальный код 10000, именно такой диапазон используется в таблице перекодировки. После умножения на коэффициенты код ограничивается на уровне примерно на 10% выше выбранного максимального кода. При максимальных значениях коэффициентов усиление равно 32 (примерно +30 дБ). Использовать это усиление можно для сдвига шкалы при необходимости более точного измерения малых сигналов.

Время срабатывания

У измерителей уровня имеются целых 4 динамических характеристики:

Время интеграции и время возврата (обратного хода) понятны. Переброс указателя – это характеристика стрелочных приборов, для светодиодной линейки не актуально. А вот время срабатывания вполне актуально.

Для безынерционных приборов искусственно формируют баллистику, подобную стрелочным приборам. Увеличение времени прямого хода при этом не должно увеличивать время интеграции измерителя. Короткие импульсы сигнала по-прежнему должны отображаться правильно. Для этого детектор должен «ждать», пока показания достигнут измеренного значения, и лишь потом запускать обратный ход. В промышленных аналоговых измерителях (например, ИУ-12) для этого применялись довольно сложные схемы.

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

Для формирования времени срабатывания используются два IIR-фильтра, которые работают в "медленном" домене. Выходной код этих фильтров непосредственно связан с показаниями измерителя. Для получения нужной точности вычислений, накопление производится в 32-разрядных аккумуляторах. Как и фильтры времени интеграции, эти фильтры работают только при нарастании сигнала. Коэффициенты фильтров 16-разрядные без знака. Они определяются как A = 65536 / 375 / tau.

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

Время удержания и обратного хода

Выше было сказано, что фильтры интеграции работают только при нарастании сигнала. Они могут лишь увеличивать выходной код. За спад сигнала отвечают специальные фильтры, которые воздействуют на аккумуляторы фильтров интеграции. Они включаются после окончания интервала срабатывания. Поскольку спад сигнала происходит медленно, эти фильтры работают в "медленном" домене. Коэффициенты фильтров 16-разрядные без знака. Они определяются как A = 65536 / 375 / tau.

Спад сигнала фильтров интеграции еще не означает спад показаний измерителя. Показания связаны с фильтрами срабатывания и могут иметь некоторое время удержания, когда после пика сигнала показания остаются неизменными. Это время задается с помощью специальных коэффициентов, которые вычисляются по формуле A = 375 * t_hold. Если задать нулевое значение, удержание показаний осуществляться не будет, сразу после окончания интервала срабатывания будет начинаться обратный ход.

Когда заканчивается время удержания, начинается обратный ход измерителя. Для этого используются фильтры обратного хода. Эти фильтры воздействуют на аккумуляторы фильтров срабатывания. Фильтры работают в "медленном" домене. Коэффициенты фильтров обратного хода 16-разрядные без знака. Они определяются как A = 65536 / 375 / tau. Этой постоянной времени определяется время обратного хода измерителя.

Отдельное формирование обратного хода для фильтров срабатывания позволяет использовать уменьшенное время обратного хода для фильтров интеграции, что уменьшает влияние промежутка времени между пиками сигнала на показания измерителя. А такое влияние есть - если пики сигнала на входе измерителя повторяются чаще, то показания увеличиваются (несмотря на то, что величина самих пиков остается неизменной). Это связано с тем, что к моменту начала очередного пика фильтр интеграции не успел полностью "разрядиться", новый рост его выходного сигнала начинается с более высокого начального значения. В результате за время действия пика он сможет достичь большего значения, чем в случае редко повторяющихся пиков.

Когда у фильтра разные постоянные времени интеграции и обратного хода, величина выходного сигнала будет зависеть от соотношения этих времен. Если эти времена были бы одинаковыми, это был бы простой усредняющий фильтр, на выходе которого было бы среднее значение сигнала (для синуса это 0.637 от пикового значения). Если увеличивать время обратного хода по отношению к времени интеграции, выходной сигнал будет увеличиваться и в пределе станет равным пиковому значению входного сигнала, когда отношение времени обратного хода к времени интеграции станет бесконечным. Аналогичная ситуация и с обычным аналоговым детектором со сглаживающим фильтром. Ниже приведен график зависимости выходного напряжения такого детектора от соотношения резисторов зарядки и разрядки конденсатора фильтра. Только тут надо учитывать, что оба резистора всегда работают и образуют делитель, поэтому при равных номиналах выходной сигнал уменьшен вдвое.

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

Максимальное значение измеренного сигнала может запоминаться и некоторое время удерживаться. Для запоминания используются аккумуляторы максимального значения. Время удержания задается с помощью коэффициентов, которые вычисляются по формуле A = 375 * t_hold. Если задать нулевое значение, удержания показаний не будет, сразу после пика сигнала будет начинаться обратный ход.

Когда время удержания заканчивается, начинается обратный ход максимальных значений. Фильтр обратного хода воздействует на аккумуляторы максимальных значений. Он работает в "медленном" домене. Постоянные времени обратного хода определяются коэффициентами, которые вычисляются по формуле A = 65536 / 375 / tau.

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

Обработка сигнала производится одинаково для среднего (или квазипикового) значения, которое отображается столбиками, и для пикового значения, которое отображается одиночным горящим сегментом - точкой. Разница определяются лишь значениями коэффициентов.

Для стандартного квазипикового измерителя задается tau интеграции 1.25 мс (нарастание 5 мс до -2 дБ), tau обратного хода 739 мс (спад до -20 дБ за 1700 мс), tau срабатывания 43 - 87 мс (нарастание 100 - 200 мс до -1 дБ), время удержания - 0 мс.

Для пикового измерителя задается tau интеграции 0 мс, tau срабатывания 0 - 87 мс, время удержания порядка 2000 мс, tau обратного хода от 0 мс (точка исчезает сразу) до 739 мс (точка плавно спадает за 1700 мс до уровня -20 дБ). Для полного отключения пиковой индикации можно задать масштабирующий коэффициент уровня, равный нулю.

Режим VU

Раньше самым распространенным типом измерителя был VU. Для возможности сравнения показаний со старыми приборами было бы полезно такой режим иметь. Для измерителя VU стандарт определяет одинаковые постоянные времени заряда и разряда 300 мс. На первый взгляд кажется, что эта задача решается просто - достаточно выбрать нужные постоянные времени интеграции и обратного хода. Однако для измерителей VU стандарт определяет время 300 мс как то, за которое показания достигают значения 99% от установившегося, а дальше следует выброс от 1 до 1.5%. Раньше это обеспечивалось механической подвижной системой измерительного прибора. Чтобы повторить это электрически, требуется ФНЧ 2-го порядка с частотой среза 2.1 Гц и добротностью 0.62. Это что-то между фильтрами Бесселя и Баттерворта. Посчитать аналоговый прототип удалось с помощью программы FilterPro, которая позволяет задавать добротность звеньев фильтра. А вот для расчета такого цифрового фильтра подходящего софта найти не смог.

Если посмотреть схемы VU-измерителей, где применяется аналоговый детектор, то после него обязательно устанавливают ФНЧ 2-го порядка с указанными характеристиками. Например, его можно найти в datasheet на LM3916. Там этот фильтр выполнен на основе структуры MFB:

Похожая схема использована и в измерителе уровня из журнала «Everyday Practical Electronics», March 2009:

С другой стороны, не очень хочется вводить лишний фильтр, который нужен только в режиме VU. Лучше без него обойтись. Чтобы получить схожую баллистику измерителя, используя фильтр 1-го порядка, можно попытаться подобрать постоянную времени. Если потребовать установления до 99% за 300 мс, как этого требует стандарт, то понадобится тау 65 мс (красный график).

Видно, что скорость нарастания выходного сигнала такого фильтра сильно завышена, измеритель будет сильно завышать показания для коротких вспышек сигнала. Можно подобрать переходную характеристику в среднем похожую на стандартную для VU. Для этого потребуется тау примерно 130 мс (синий график). Тогда за 300 мс будет достигаться значение лишь 90%, но в целом поведение измерителя будет весьма близким к VU. Хотя в этом случае не совсем корректно заявлять, что измеритель поддерживает режим VU, но на практике отличие показаний будет незначительным.

Дополнительные фильтры

Цифровая обработка сигнала позволяет реализовать дополнительные режимы работы измерителя, кроме измерения пикового и квазипикового уровня.

Возможно отображение среднеквадратического (RMS) уровня. Но как было сказано выше, это актуально для оценки уровня громкости, а для аналогового магнитофона в этом особого смысла нет. Реализация такого режима возможна, но это может потребовать применения микроконтроллера с более высоким быстродействием.

Более современные алгоритмы измерения уровня громкости (в LUFS) используют два взвешивающих фильтра 2-го порядка, коэффициенты которых приведены в стандарте ITU-R BS.1770-4. При необходимости такие фильтры тоже можно реализовать.

Еще один режим с частотным взвешиванием – это реализация коррекции, подобной АЧХ УЗ магнитофона. Тогда можно видеть реальную перегрузочную способность с учетом спектрального состава сигнала. Взвешивающий фильтр может иметь некую усредненную характеристику канала записи.

Еще одной дополнительной функцией измерителя может быть выделение сигнала 3-ей гармоники и измерение ее уровня. Это позволит определить максимальный уровень записи для конкретной магнитной ленты. Для реализации этой функции понадобятся полосовые цифровые фильтры.

Табличное задание шкалы

Результатом цифровой обработки входного сигнала являются два числа (для каждого из стереоканалов): это текущее значение сигнала для индикации столбиком и для индикации точкой. Эти числа обновляются с частотой дискретизации "медленного" домена, т.е. 375 Гц. С такой частотой происходит и вывод на светодиоды. Номинальный диапазон чисел от 0 до 10000. Они представляют величину сигнала в линейном масштабе. В то же время шкала измерителя может быть нелинейной. Часто ее делают логарифмической, или еще более сложной, например, S-образной с растянутой зоной вблизи значения 0 дБ.

Для задания произвольной шкалы используется таблица. Она общая для двух каналов и содержит количество элементов, равное числу светодиодов в линейке. Каждое значение в таблице соответствует порогу включения соответствующего сегмента линейки. Сегмент включается, если код сигнала становится больше этого значения. Для каждого сегмента задан уровень срабатывания в dB с дискретностью 0.01 dB. Т.е. в таблицу заносятся значения уровней в dB, умноженные на 100. Значения в таблице должны быть монотонными. Последний элемент таблицы - это максимальный уровень. Разница максимального и минимального уровней может быть до 80 dB. Все уровни ниже -80 dB относительно максимального уровня считаются минус бесконечностью. Такой уровень может быт задан для первого сегмента линейки, чтобы он постоянно горел.

Вывод значений

Светодиодные линейки подключены к выходам сдвиговых регистров типа 74HC595, которые включены в цепочку и загружаются через порт SPI. Используется аппаратный SPI микроконтроллера STM32. Поскольку обмен тут однонаправленный, используется режим transmit-only. В таком режиме имеются особенности проверки окончания передачи. Вот цитата из документации: «During discontinuous communications, there is a 2 APB clock period delay between the write operation to SPI_DR and the BSY bit setting. As a consequence, in transmit-only mode, it is mandatory to wait first until TXE is set and then until BSY is cleared after writing the last data». Таким образом, анализируя только флаг BSY, можно ошибочно сформировать сигнал LOAD в начале передачи последнего байта, а не после ее окончания. Поэтому обязательно нужна проверка флага TXE.

  while(!(SPI1->SR & SPI_SR_TXE));
  while(SPI1->SR & SPI_SR_BSY);

Здесь используется очень длинная цепочка регистров сдвига, каждый из которых нагружен на светодиоды. Только в линейках имеется 100 светодиодов, не считая подсветки и дополнительных трафаретов. При загрузке новых данных в регистры по сигналу LOAD одновременно может переключаться большое количество выходов регистров, что может привести к появлению помехи на линиях управления регистрами. В данном случае эта помеха имеет вид короткого положительного импульса в момент появления фронта сигнала LOAD. Наиболее чувствительной к этому оказывается линия тактового сигнала SCLK, помеха может вызвать лишний сдвиг и искажение информации. Чтобы избежать влияния помехи на эту линию, используется режим работы SPI CPHA = 1 и CPOL = 1, когда в конце передачи данных на линии SPI устанавливается ВЫСОКИЙ уровень.

Для удобства разводки печатной платы сегменты индикаторов подключены к регистрам хаотично. Это потребовало дополнительных усилий в программной части. Пришлось создать большой массив констант и наполнить его структурами в виде пар чисел «Номер регистра – номер выхода». При необходимости зажечь сегмент с номером N, из этого массива по индексу N берется пара чисел - номер регистра и номер выхода, к которому подключен этот сегмент. Сначала формируется копия содержимого всех регистров в памяти, потом она загружается в регистры.

const Seg_t SegsL[SEGS][CHANS] =
{
  { {U1,  Q2}, /*сегмент L01*/ {U1,  Q7}, /*сегмент R01*/ },
  { {U1,  Q1}, /*сегмент L02*/ {U1,  Q6}, /*сегмент R02*/ },
  { {U2,  Q0}, /*сегмент L03*/ {U2,  Q4}, /*сегмент R03*/ },
  { {U2,  Q3}, /*сегмент L04*/ {U2,  Q5}, /*сегмент R04*/ },
  { {U2,  Q2}, /*сегмент L05*/ {U2,  Q7}, /*сегмент R05*/ },
  { {U2,  Q1}, /*сегмент L06*/ {U2,  Q6}, /*сегмент R06*/ },
  { {U3,  Q0}, /*сегмент L07*/ {U3,  Q4}, /*сегмент R07*/ },
  { {U3,  Q3}, /*сегмент L08*/ {U3,  Q5}, /*сегмент R08*/ },

  ................................и т.д.

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

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

Пресеты

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

Конструкция измерителя

Конструктивно измеритель состоит из двух печатных плат - платы индикации и платы процессора.

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

На плате процессора установлен микроконтроллер, входной усилитель, стабилизатор напряжения +3.3 В, микросхема энергонезависимой памяти, микросхема интерфейса RS-485, а также два регулируемых стабилизатора для регулировки яркости линеек и подсветки шкалы. Установка яркости может производится как программно, так и с помощью подстроечных резисторов. В случае программного управления яркостью возможно использование встроенных ЦАП или ШИМ. При использовании ШИМ он сглаживается с помощью активных ФНЧ, светодиоды всегда питаются постоянным током. Еще два подстроечных резистора служат для регулировки уровня входного сигнала. На другой стороне платы размещен разъем питания, входной разъем, а также разъемы порта связи с компьютером и порта RS-485. Дополнительно могут быть установлены разъемы аналоговых выходов для управления стрелочными индикаторами. Еще на плате имеются штырьки отладочного разъема SWD, а также штырьки для установки джампера BOOT и джамперов выбора пресета.

Между собой платы соединяются с помощью разъема XS1 (PLS/PBS), имеющего 10 контактов. С другой стороны платы установлен аналогичный разъем на 6 контактов, он несет только функцию крепления, никаких электрических соединений он не делает. Платы скрепляются с помощью четырех резьбовых стоек М3 высотой 10.5 - 12 мм.

При монтаже платы индикации надо обратить особое внимание на корпуса светодиодных линеек. Они установлены на плате без зазора, поэтому любая неровность корпуса не позволит их установить ровно. Дело в том, что шаг сегментов матриц ровен 2.54 мм. В ряд установлено 5 матриц по 10 сегментов каждая. Между отверстиями для крайних выводов соседних матриц на плате сделано расстояние ровно 2.54 мм, иначе будет заметен «сбой» шага сегментов. Если измерить длину корпуса матрицы, то в верхней части она в точности равна 25.4 мм, а вот ближе к выводам корпус немного расширяется. Вероятно, компаунд внутри при затвердевании несколько увеличивает объем. Расширение незначительное, но в некоторых случаях торцы матриц надо слегка обработать плоским напильником.

Каждую линейку можно собрать из индикаторов нескольких цветов. Например, можно установить сначала 30 зеленых сегментов, затем 10 желтых, затем 10 красных. Цвета можно выбирать произвольно. Можно сделать всю линейку одноцветной. Если используются матрицы разных цветов свечения, то заранее надо подобрать ограничительные резисторы для каждого вида матриц, чтобы визуально яркость свечения была одинаковой. Сделать это можно с помощью внешнего источника питания 3.3 - 5 В. В моем случае для зеленых матриц понадобились резисторы 270 Ом, для желтых и красных - 560 Ом. С другими типами матриц номиналы могут быть другими.

Светодиоды подсветки шкалы, которые установлены между линейками - любые в корпусе 3528. Их цвет тоже можно выбирать произвольно. Я применил такие же цвета свечения, как и у матриц. Для этих светодиодов тоже необходимо подобрать ограничительные резисторы, чтобы выровнять яркость. В моем случае для зеленых светодиодов понадобились резисторы 1 кОм, для желтых - 390 Ом, для красных - 560 Ом. Светодиоды желательно брать из одной партии, иначе их яркость может отличаться.

Аналогичная ситуация и со светодиодами подсветки трафаретов. Их цвета тоже можно выбирать произвольно, ограничительные резисторы нужны такие же, как и для светодиодов подстветки такого же цвета.

Сверху на печатную плату индикации устанавливается рассеиватель в виде многослойной конструкции из листового пластика. Один из вариантов выполнен из молочного оргстекла толщиной 2 мм. С помощью лазерной резки изготавливаются 4 детали, которые потом собираются стопкой и склеиваются. Чертежи деталей можно скачать внизу страницы.

Три нижних слоя имеют сквозные прямоугольные отверстия в зоне подсветки шкалы и для транспарантов. Два нижних слоя привинчиваются винтами к плате, а в двух верхних слоях отверстия для винтов сделаны по размеру их шляпки, которая в них утапливается.

Самый верхний слой имеет прорези только для светодиодных линеек. Для светодиодов подсветки и транспарантов он работает в роли рассеивателя.

Осталось сверху установить маску шкалы, закрепив ее по углам тонким двухсторонним скотчем. Маска изготавливается с помощью фотовывода. Рисунок маски можно скачать внизу страницы. Маска имеет прозрачные полоски для линеек, высота которых чуть меньше высоты сегментов индикаторов. Благодаря этому верхний и нижний край линеек получается идеально ровным, даже если матрицы не очень ровно впаяны в плату и "пляшут" по высоте. Надписи трафаретов пока окончательно не определены. Часть маски над трафаретами можно заменить отдельно, ее даже можно напечатать на струйном принтере. Измеритель с установленной маской показан на фото в самом начале этой страницы.

Как вариант, маску можно изготовить методом лазерной гравировки пленки Rowmark LaserLIGHTS S61 (черный/белый) или подобной. Белая основа пленки хорошо работает в роли рассеивателя.

В передней панели магнитофона для установки нового измерителя уровня требуется увеличить размер окна. Чертеж нового окна приведен на рисунке ниже.

Вырезать новое окно несложно. Можно просверлить по контуру ряд отверстий, затем надфилем их объединить, затем выровнять контур широким плоским напильником. При наличии фрезерного станка работа существенно упрощается.

Стекло измерителя уровня изготавливается из дымчатого огстекла толщиной 3 мм (в крайнем случае - 2 мм). По контуру фрезеруется ступенька на половину толщины стекла. Размеры стекла указаны на чертеже нового окна. Как вариант, можно применить прозрачное стекло и тонировочную автомобильную пленку. Если нет возможности отфрезеровать ступеньку, стекло можно просто вклеить в окно. Единственное, в этом случае не будут закрыты неровности реза.

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

Доработку передней панели магнитофона одобряют далеко не все. Но в данном случае доработка не затрагивает надписей и не меняет стиль аппарата. Новое окно измерителя уровня делает панель магнитофона более привлекательной.

Для сравнения - фото примерно с тем же ракурсом, но для панели со старым измерителем уровня:

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

Еще один недостаток рассеивателя - свет проникает с торца стекол, что нежелательно. Сквозь щели передней панели возле разъемов и регуляторов он может быть виден. Лучше внутренние слои рассеивателя изготовить из непрозрачного материала, например, черного акрила. Можно взять материал 2 мм (тогда будут 3 слоя) или 3 мм (тогда будут 2 слоя). Из молочного оргстекла толщиной 2 мм изготавливается только самый верхний слой.

Торец верхнего рассеивающего стекла все равно будет светиться. Чтобы уйти от этого, рассеиватели можно сделать только над зоной подсветки шкалы и над трафаретами. Все остальное сделать непрозрачным. Такой вариант я тоже изготовил на фрезерном станке. Хотя его вполне можно сделать и с помощью лазерной резки. В качестве материала взял коричневый полистирол толщиной 2 мм (черный найти не удалось). Три нижних слоя имеют сквозные вырезы для подсветки и трафаретов.

Эти три слоя склеиваются и в них запрессовываются гайки. Можно обойтись и без гаек, если для сборки использовать саморезы. Или вместо гаек можно вклеить винты. Вообще, конструкция здесь может варьироваться в зависимости от желания и возможностей. В самом нижнем слое вырезаются пазы в тех местах, где на плате установлены разъемы.

Четвертый слой, который раньше играл роль рассеивателя, здесь выполняется тоже из непрозрачного пластика. В нем делаются посадочные места для двух пластин из молочного оргстекла. Таким образом, полупрозрачные рассеиватели будут лишь внутри непрозрачной пластиковой конструкции, свет наружу выходить нигде не будет. Не считая самой шкалы, конечно. Стенки отверстий для трафаретов и боковые стенки зоны подсветки шкалы можно покрасить отражающей серебристой краской. Сверху можно сделать еще один слой в виде тонкой рамки. Вырез в ней примерно на 1 мм меньше размера окна в передней панели. В эту рамку вкладывается пленка шкалы, а к краям рамки можно приклеить стекло, которое может не иметь ступеньки.

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

Внешний вид магнитофона с таким индикатором, конечно, будет похуже.

Сервисная программа

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

Главное меню содержит следующие пункты:

File

  • Open Preset... - загрузка данных пресета из файла.
  • Save Preset... - запись данных пресета в файл.
  • Exit - выход из программы.

Device

  • Connect... - устанавливает связь с измерителем.
  • Disconnect - отключает связь.
  • Read Params - чтение данных пресета из измерителя.
  • Write Params - запись данных пресета в измеритель.
  • Save to EEPROM - сохранение данных пресета в EEPROM измерителя.
  • Load Defaults - загрузка данных пресета по умолчанию (в EEPROM их не сохраняет).
  • Settings - открывает окно настроек.

В окне настроек есть несколько параметров. "Auto connect" - после запуска или разрыва связи программа будет пытаться подключиться автоматически. "Auto load parameters" - при установлении связи данные пресета будут автоматически считываться программой из измерителя. "Update rate" - период обновления значений в статусной строке.

Table

  • Fill - заполнение выделенного диапазона ячеек таблицы одним значением.
  • Interpolate - интерполяция выделенного диапазона ячеек таблицы: ячейки заполняются значениями с постоянным шагом, который вычисляется по крайним выделенным ячейкам.

Пункты меню таблицы есть и в контекстном меню, которое вызывается нашатием правой кнопки мыши на таблице.

Help

  • About... - информация о программе.

Большинство пунктов меню продублированы кнопками на панели инструментов. Все Кнопки, как и другие компоненты программы, имеют всплывающие подсказки.

В верхней части показана блок-схема измерителя. На некоторых блоках размещены поля ввода параметров. Здесь вводятся значения tau фильтров.

Ниже показан график, где схемотически изображена реакция измерителя на вспышку входного сигнала. Здесь вводятся значения времени интеграции, срабатывания, спада, обратного хода. Эти значения связаны с tau простыми отношениями: время интеграции в 4 раза больше tau, все остальные времена - в 2.3 раза. Это связано с определениями стандарта, о которых говорилось выше.

Значения Scale, Hold, MaxHold на блок-схеме и на графиках совпадают.

Для включения отображения линеек (Bar), максимальных значений линеек (Max Bar), пиков сигнала (Peak), максимальных значений пиков (Max Peak) имеются чек-боксы.

Справа размещена таблица, которая позволяет задавать шкалу. Как и другие параметры, таблица сохраняется в пресете и для каждого пресета может быть своя. Для редактирования таблицы надо сделать двойной щелчок на ее строчке или нажать Enter. Откроется окно редактирования строки таблицы. В нем можно задать цвет светодиодов (он должен совпадать с цветом установленных на плате линеек), включить или выключить отображение в программе уровня для данного сегмента, а также задать значение уровня в dB. Это же окно вызывается через пункт меню Fill. Перед этим можно выделить мышкой целый диапазон строчек таблицы и задать для него нужные параметры. Например, если надо задать только цвет группе строк, то для остальных параметров можно выбрать "Not Changed". Цвет и признак включения подписи не сохраняется в пресете. Он хранится в общем ini-файле программы.

В нижней части окна расположены линейки, которые выводятся в реальном времени. Это копия шкалы измерителя. Ниже расположена панель управления.

Preset - позволяет выбрать номер пресета. На плате измерителя есть джамперы выбора пресета. Если их переставить, программа считает новый пресет и покажет параметры для него. То же самое будет, если пресет переключить из программы. Надо отметить, что приоритет у джамперов, если их переставить или выключить/включить питание измерителя, пресет будет установлен согласно джамперам.

Чек-боксы 0 - 9 и Scale включают светодиоды трафаретов и подсветку шкалы. Дальше выбирается способ управления яркостью: OFF - минимальная яркость, VR - регулировка с помощью подстроечных резисторов, DAC - регулировка с помощью ЦАП (вместо подстроечных резисторов должны стоять перемычки, или резисторы должны стоять на максимуме), PWM - регулировка с помощью ШИМ (этот способ дает помехи на АЦП, поэтому не рекомендуется). Значение яркости задается отдельно для линеек (Meter) и для подсветки шкалы и трафаретов (Scale). Все эти параметры тоже сохраняются в пресете.

Чек-бокс Stat позволяет включить отображение статистики (максимального уровня за все время работы измерителя). Сброс статистики производится кнопкой "R".

Default - загрузка значений по умолчанию для данного пресета. Дублирует одноименный пункт меню. В EEPROM значения не сохраняет.

Save to EEPROM - сохранение данных пресета в EEPROM. Дублирует одноименный пункт меню. Если, например, открыть файл пресета, он будет загружен в измеритель, но для сохранения в EEPROM надо нажать эту кнопку.

В статусной строке слева выводится состояние связи. Когда порт не открыт, выводится "OFF LINE". Когда устройтво подключено, выводится "ON LINE: Meter V1.0 (COM6)" (номер версии и номер порта, разумеется, могут быть другими). Если порт был открыт, но устройство не подключено, то в случае включенной опции "Auto Connect" программа будет постоянно пытаться подключиться, при этом отображается "CONNECTING...". Если требуется работать без подключени, то порт лучше закрыть, иначе интерфейс может подтормаживать.

Правее в статусной строке выводятся уровни сигнала в dB в форме цифр с разрешением 0.01 dB. Сначала идут значения для столбиков левого и правого каналов (BarL и BarR), затем их максимальные значения (MaxBarL и MaxBarR), затем пиковые значения (PeakL и PeakR), затем максимальные пиковые значения (MaxPeakL и MaxPeakR). Если отображение какого-то значения отключено, то оно не выводится.

Пресеты по умолчанию

Preset 1 - стандартный квазипиковый измеритель, время интеграции 5 мс, время срабатывания 100 мс, время удержания 20 мс, время обратного хода 1700 мс. Точка работает как пиковый (true peak) измеритель, время интеграции 0 мс, время срабатывания 100 мс, время удержания 1000 мс, время обратного хода 600 мс.

Preset 2 - стандартный квазипиковый измеритель, время интеграции 5 мс, время срабатывания 100 мс, время удержания 20 мс, время обратного хода 1700 мс. Точка отображает максимальные значения столбиков, время удержания 1000 мс, время обратного хода 600 мс.

Preset 3 - имитация штатного измерителя уровня магнитофона "Электроника-004", tau интеграции 12 мс (постоянная времени RC-цепи у него около 6 мс и однополупериодный выпрямитель), tau обратного хода 1500 мс. Точка не используется.

Preset 4 - имитация измерителя Dorrough 40-A2, tau интеграции и спада 300 мс. Точка работает как пиковый (true peak) измеритель, время интеграции 0 мс, tau срабатывания 10 мс, время удержания 25 мс, tau обратного хода 300 мс. Дополнительно используется удержание пиков еще одной точкой, время 2000 мс, обратного хода нет.

История версий прошивки

VERSION 1.00

+ Первый релиз. Связь с компьютером не поддерживается. В измеритель загружен один пресет с параметрами по умолчанию.
+ Столбик работает как стандартный квазипиковый измеритель с временем интеграции 5 мс, временем срабатывания 100 мс, временем удержания 20 мс, временем обратного хода 1700 мс.
+ Точка работает как пиковый (true peak) измеритель с временем интеграции 0 мс, временем срабатывания 100 мс, временем удержания 1000 мс, временем обратного хода 600 мс.
+ Регулировка яркости - только с помощью подстроечных резисторов.

VERSION 1.01

+ Реализована связь с компьютером.
+ Реализованы пресеты.
+ Регулировка яркости всеми возможными способами.

Links:
  1. А. В. Никонов. Измерители уровня звуковых сигналов. "Радио и связь", 1981.
  2. Демонстрационное видео на Youtube
  3. Демонстрационное видео сервисной программы на Youtube
Downloads:
meter50_sch.pdf (354 kB) - принципиальная схема (50 элементов).
meter35_sch.pdf (265 kB) - принципиальная схема (35 элементов).
meter50_pcb.pdf (471 kB) - печатная плата (50 элементов).
meter35_pcb.pdf (341 kB) - печатная плата (35 элементов).
meter_scale.pdf (16 kB) - рисунок шкалы индикатора.
meter_corel.zip (609 kB) - чертеж рассеивателя и шкалы (Corel Draw 11, pdf).
meter_pcad.zip (901 kB) - файлы разводки плат (PCAD 2006, Gerber, Bom).
meter_source.zip (271 kB) - прошивка, исходный текст (C++ IAR EWARM, hex).
meter_soft.zip (943 kB) - сервисная программа (C++ Builder 6, exe).
Ридико Леонид Иванович www.leoniv.diod.club e-mail: wubblick@yahoo.com