Н.В. Клиначев

Моделирование и отладка программного кода цифрового фильтра для восстановления скорости вала редуктосина, резольвера или синусно-косинусного вращающегося трансформатора, чьи сигналы обрабатываются следящим контуром фазовой автоподстройки частоты

Рабочие файлы: [Демодуляция сигналов СКВТ] [Редуктосин Угол Си-код]
[s2z-converter] [ARM Си FOC PMSM СКВТ]

По разным причинам восстановление скорости вала редуктосина, резольвера или синусно-косинусного вращающегося трансформатора сопровождается шумами. В типовом случае, в сравнении с предельно возможной динамикой изменения скорости вала, спектр шума высокочастотный. Что позволяет применить фильтрацию. Можно использовать двух или трехкаскадный КИХ-фильтр скользящего среднего или БИХ-фильтр второго порядка пропускающий низкие частоты. Программная реализация фильтра скользящего среднего затруднений не вызывает, но требует больше памяти (от 80 до 200 слов). Решение получается менее радиационно-стойким. Проектирование цифрового БИХ-фильтра так же выполняется за пять минут. Но определенные знания, практический навык и инструментарий – необходимы. Интегрально, БИХ-фильтр выигрывает лишь чуточку, поэтому при решении обозначенной задачи его применяют редко. Рассмотрим этот вариант.

На чертеже представлена модель специализированной САР демодулирующей сигналы СКВТ / резольвера или редуктосина. Модель является прототипом для программного кода данной системы (язык Си), порядок разработки и отладки которого рассмотрен в другом документе (доступном по ссылке ниже заголовка статьи). В отличие от программы, модель обрабатывает сигналы не в относительных, а в абсолютных величинах. Напомним основные параметры следящей САР. Частота возбуждения информационной машины (блок ВТ на чертеже), 4 кГц. На одном периоде сигнал оцифровывается 8 раз. Что определяет шаг симуляции, 1/32000 сек, и, соответственно, период дискретизации проектируемого цифрового фильтра.

Часть модели, касающаяся разработки фильтра, находиться внутри составного блока ФНЧ2. Прототипом фильтра является колебательное звено. Его параметры легко выбрать, поскольку отражают физические свойства фильтра в численной форме. Чуть ниже в чертеже, звено представлено канонической блок-схемой. Еще ниже – дискретным аналогом. И последний вариант представления – это блок dll, к которому подключен программный код, представленный ниже чертежа (см. листинг в форме ввода данных).

Напомним последовательность разработки цифрового фильтра. На первом этапе формулируют требования: к частотным свойствам фильтра, к показателям качества переходного процесса, к допустимой величине задержки сигнала. После чего синтезируют аналоговый прототип – уточняют коэффициенты полиномов числителя и знаменателя непрерывной передаточной функции, определяются с периодом дискретизации. Третий шаг – Билинейное преобразование – переход от непрерывного прототипа к дискретной передаточной функции. Завершается разработка цифрового фильтра – написанием и отладкой программного кода для ЦВМ.

В качестве аналогового прототипа использовано колебательное звено. Для привода была определена скорость реверса (максимальное приращение угловой скорости вала) $V=dω/dt=i_{дв\;max}·KΦ/J_{min}$. Коэффициент затухания колебательного звена минимизирован так, чтобы отсутствовало перерегулирование в реакции фильтра на подобное входное воздействие. Постоянная времени колебательного звена является одной из причин задержки сигнала в контуре регулирования скорости привода и влияет на его устойчивость. Поэтому она увеличивалась до значения, которое начинало оказывать влияние и ухудшало качество переходного процесса. Последующие шаги очевидны. Гиперссылка на мастер билинейного преобразования (s2z-converter) доступна ниже заголовка данной статьи.

Программа цифрового фильтра – это пять строчек кода, которые должны содержать инструкции для выполнения 8 математических операций. Но если написать их как есть, в соответствии с блок-схемой, то фильтр работать не будет. Во-первых, код должен быть записан так, чтобы его могла исполнить ЦВМ без математического сопроцессора (с целочисленным АЛУ), но при этом, для наглядности, в коде должны присутствовать числа с плавающей точкой. Во-вторых, в целых числах можно закодировать не любое число с плавающей точкой, а лишь принадлежащие диапазону, при оговариваемой величине кванта. Тут следует вспомнить, что цифровые передаточные функции очень чувствительны и становятся неработоспособными при квантовании (при округлении) параметров. Последние – либо за диапазон выходят, либо величина кванта у выбранного (для их хранения) типа данных больше чем требуется. В третьих, обрабатываемый сигнал, как и параметры, должен принадлежать диапазону. В четвертых, сам фильтр, обрабатывая сигнал, не должен уменьшать его амплитуду ниже значения, определяемого требуемым разрешением и квантом выбранного (для исполнения математических операций) типа данных.

Решаются обозначенные задачи прямым и обратным масштабированием сигнала на входе и выходе (в листинге можно отследить операции бинарного сдвига вправо и влево на три разряда, что соответствует усилению и ослаблению сигнала в 8 раз). Пропорциональным изменением коэффициентов числителя и знаменателя дискретной передаточной функции (что сделано мастером на этапе билинейного преобразования). Представлением коэффициентов несколькими множителями (см. масштаб для коэффициента усиления ПФ, (1 << 14)). И соблюдением особого стиля при написании Си-кода (см. кодирование чисел с плавающей точкой макросом _IQ).

Главная цель отладки программы состоит в контроле отсутствия перегрузки мантиссы 32-х разрядного целочисленного АЛУ. В типовом случае, для эмуляции математических операций с плавающей точкой в управляющих программах для электропривода определяется глобальный тип данных: _iq24, _iq22 или _iq20. У первого на дробную часть числа отводиться 24 бита, у второго – 22, у последнего – 20 (старшие биты – это целая часть числа и знак). Работоспособность программы цифрового фильтра сохраняется при любом из названных типов данных.

Чертёж 1

Листинг 1. Программный код dll-блока (javascript)

Выполните серию экспериментов. Меняйте тип данных для кодирования чисел с плавающей точкой (константе GL_Q присваивайте значения 20, 22, 24). Убедитесь в том, что мантисса АЛУ не перегружается и код остается работоспособным. Ознакомьтесь с тем, как нарушается работоспособность фильтра вне устойчивого диапазона типа данных.

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

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

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

2.10.2015