УДК 004.421
А. О. Синюхин, С. В. Орлов, А. Е. Яковлев, А. С. Ревенко
РЕАЛИЗАЦИЯ ПРОГРАММНОГО ГЕНЕРАТОРА СИГНАЛОВ РАЗЛИЧНОЙ ФОРМЫ НА БАЗЕ МИКРОКОНТРОЛЛЕРА СЕМЕЙСТВА STM32F10X
Представлен принцип реализации генератора периодических сигна-
--лов произвольной формы с применением микроконтроллера STM32F10x,
76 который был использован авторами исследования при создании опытно-
го образца устройства электростимулятора. Генератор позволяет формировать импульсы прямоугольной, трапециевидной, пилообразной и синусоидальной форм в достаточно широком диапазоне частот, при этом минимально загружая ядро микроконтроллера. Программный генератор сигналов может быть использован и при создании других устройств, таких как драйверы двигателей, а также находить применение в лабораторных целях.
This paper describes the principle of building an arbitrary waveform generator based on the STM32F10x MCU family. This generator was successfully applied by the authors of the study in the development of the electostimula-tion device. Waveform generator allows to generate impulses of square, trapezoidal, sawtooth and sinusoidal shape in a wide frequency range, creating minimal computational load on the core of MCU. Software signal waveform generator can also be applied in creating other electonical devices such as motor drivers or can be used as laboratory signal source.
Ключевые слова: генератор формы импульсов, широтно-импульсная модуляция, микроконтроллер, таблица поиска, передискретизация.
Keywords: waveform generator, pulse-wide modulation, microcontroller, lookup table, resampling.
Развитие микроэлектроники и уменьшение размеров микросхем открыли новые возможности применения цифровых электронных устройств в медицине. Особое внимание заслуживают погружные устройства — импланты импульсных генераторов тока. Применение имплан-тов импульсных генераторов тока ознаменовало новое направление в функциональной нейрохирургии и хирургии боли. Основные принципы работы погружных импульсных генераторов — это теория «входных ворот», или теория контроля афферентного потока на входе, предложенная канадскими учеными Р. Мельзак и Д. П. Уолл. В настоящее время в мире управляемые импланты импульс-генераторы выпускаются несколькими крупными компаниями: Medtronic, St. Jude Medical, Boston Scientific. Применение этих устройств позволяет без медикаментов (или с минимальным их количеством) снимать спастику и боль у пациентов. Необходимо отметить необычайно высокую стоимость данных
© Синюхин А.О., Орлов C.B., Яковлев А.Е., Ревенко A.C., 2019
Вестник Балтийского федерального университета им. И. Канта.
Сер.: Физико-математические и технические науки. 2019. № 3. С. 76-83.
приборов наряду с активным ростом рынка использования нейромоду-ляции. В настоящее время в России серийное производство приборов данного класса отсутствует при высокой потребности населения в подобных операциях, что актуализирует подобную тематику исследований.
В основе большой группы приборов электростимуляции лежит центральный блок — генератор сигналов, необходимый для формирования электрических импульсов с заданными параметрами. В данной работе описан принцип создания генератора сигналов на базе микроконтроллера STM32F103C8. Генератор был реализован в рамках опытной работы по созданию электростимулятора. Выбор микроконтроллера был обусловлен популярностью и невысокой стоимостью, наличием богатого набора аппаратной периферии, а также тем фактом, что архитектура ARM Cortex-M3 предусматривает легкую поддержку операционных систем реального времени, что позволяет запускать несколько псевдопараллельных процессов [1].
В основу генератора сигналов положен принцип, основывающийся на широтно-импульсной модуляции (далее ШИМ) [4]. Последовательность прямоугольных импульсов с предварительно рассчитанными коэффициентами заполнения (duty cycle) пропускается через сглаживающий фильтр, в результате чего на выходе фильтра формируется уровень сигнала, пропорциональный уровню заполнения. Коэффициенты заполнения рассчитываются и заносятся в таблицу, хранимую в памяти SRAM микроконтроллера. Для прямоугольного, пилообразного и трапециевидного типов импульсов последовательность коэффициентов заполнения для одного периода (или полупериода) может быть легко рассчитана непосредственно перед началом генерации, поскольку периодические функции, представляющие эти формы сигналов, являются кусочно-линейными. Для генерации синусоидальных импульсов используется подход, основанный на передискретизации таблично заданной функции. Опишем этот случай подробнее. Отметим, что отказ от прямого использования тригонометрических функций объясняется отсутствием у микроконтроллера аппаратной поддержки чисел с плавающей точкой, вследствие чего расчет значений функции sin(t)
является длительной и ресурсозатратной операцией, что недопустимо в системе реального времени, которой является устройство электростимулятора.
Рассмотрение метода проведем в наиболее общем виде для произвольной периодической функции ft) с периодом T, принимающей неотрицательные значения. Требование неотрицательности объясняется тем фактом, что напряжение на выходе линии GPIO микроконтроллера не может менять полярность, однако это ограничение может быть легко снято, если использовать две линии и производить смену полярности посредством H-моста.
Разобьем интервал [0, T] на N равных частей, образующих интервалы [ti,ti+1 ] с шагом At = t¡+1 -t¡. Осуществим дискретизацию функции
77
Д^, заменив ее ступенчатой функцией, принимающей на каждом интервале [[, Ь{+1 ] значение Wi. Потребуем выполнения следующего условия:
'1+1
J f (t) dt = wl At.
(1)
78
Физический смысл его в том, что средние значения напряжения идеального и дискретизированного сигнала должны совпадать на каждом интервале дискретизации. На рисунке 1 приведен пример идеального и дискретизированного посредством ШИМ-сигналов, в качестве исходного идеального сигнала выбрана функция + 1)/2.
0.8 0.6
0.2 0
PW1V modi deal ilatec signa
\
у \
\ \ /
..... 4 /
п/1
Зл/2
Рис. 1. Модуляция сигнала посредством ШИМ
Подбирая частоту ШИМ так, чтобы период модуляции совпадал с периодом дискретизации Д^ получим
wl АI = dlUы АI, (2)
где di — коэффициент заполнения; Ulvl — напряжение логической единицы цифрового выхода.
Выразим из формулы (2) коэффициент заполнения, подставим Wi, выраженный из формулы (1), и получим
Uv
J Í7 (t) dt
UM At
(3)
Перейдем к вопросу реализации процесса генерации формы сигнала посредством ШИМ на микроконтроллере. Микроконтроллеры семейства STM32F10x обладают несколькими аппаратными таймерами, с возможностью генерации ШИМ на линиях GPIO, указанных в технической документации [2]. Для этого таймером используется значения двух следующих регистров: ARR (Auto Re load Register) и CCR (Capture/Compare Register). Значение ARR определяет количество тактов счета, по прошествии которых происходит переполнение и последующее обнуление счетчика с генерацией прерывания или события, а CCR — ко-
личество тактов, после которых происходит переключение состояния ШИМ-выхода с логического нуля в единицу или наоборот, в зависимости от настройки полярности [3]. При заданном значении ARR коэф-фиент заполнения регулируется изменением CRR и выражается формулой dt = CCR / ARR . Произведем подстановку di в (3), выразив CCRi, и получим
J t'+1 f (t )dt
CCR, = ARR—-. (4)
i иы At K '
Таким образом, при необходимости получить сигнал, заданный функцией f(t), достаточно произвести расчет массива величин CCRi и записать их в энергонезависимую память микроконтроллера. Расчет по формуле (4) целесообразно производить на персональном компьютере.
Аппаратный таймер микроконтроллера настраивается на частоту, соответствующую выбранной частоте модуляции посредством выбора значений ARR и предделителя PSC:
fpwM = fCLK/(PSC х ARR), (5)
где fCLK — частота шины тактирования таймера.
Для переноса значений CCRi в соответствующий регистр микроконтроллера используется встроенный аппаратный контроллер DMA прямого доступа к памяти. Контроллер конфигурируется так, чтобы по событию переполнения счетного регистра таймера происходило копирование отсчетов из вышеупомянутого массива в регистр CCR таймера. Выбирается циклический режим DMA, то есть по достижении последнего отсчета в таблице следующим будет выбран первый отсчет. При реализации генератора сигналов можно обходиться и без DMA, в этом случае загрузку очередного нового значения CCR необходимо производить в прерывании таймера по переполнению.
Регулировка частоты генерируемого сигнала только лишь посредством подстройки значений ARR и предделителя PSC имеет ограниченное применение: такой способ не позволяет изменять частоту сигнала в широких пределах. Вместе с частотой модулируемого сигнала такой метод будет изменять и саму частоту модуляции fPWM, которая должна быть значительно выше верхнего предела частоты fmax. Слишком же высокая частота fPWM, согласно (5), потребует малых значений ARR, что ухудшит разрешение цифрового генератора по амплитуде. Решение этой проблемы заключается в применении передискретизации (resampling) табличной функции, при которой происходит изменение числа ее отсчетов.
Метод передискретизации можно реализовать следующим образом. Имеем табличную функцию из Nsrc отсчетов, требуется получить табличную функцию, состоящую из Ndst отсчетов. Определим количество отсчетов, которые необходимо взять из исходной таблицы для вычисления одного отсчета новой таблицы Navg = Nsrc/ Ndst. Вычисление может быть произведено простым усреднением, однако в общем случае необходимо вычислять среднее значение нецелого количества отсчетов.
79
80
Вспомним, что, исходя из формулы (1), отсчет можно интерпретировать как нормированное значение интеграла функции на отрезке дискретизации. Поэтому, например, если необходимо найти среднее значение Navg = 2,5 отсчетов, будет накоплена сумма 1-го, 2-го отсчетов и половины численного значения 3-го отсчета, после чего сумма делится на Navg и записывается в первый отсчет искомой последовательности. Поскольку выборка завершилась на середине отсчета с номером 3, в следующий раз будет взята его оставшаяся часть, а затем два целых отсчета с номерами 4 и 5, после чего процесс продолжится до тех пор, пока не будут вычислены все Ndst отсчетов новой табличной функции. В общем виде этот процесс можно описать следующей формулой:
<£)=«Г(ы -пР)+х!:^ - к/ ч
1 =1 "-Л^пр = с/ -
(Л^) - (ьгс)
здесь ю-. ' — вычисляемый отсчет выходной последовательности, ю —
. 1
отсчет исходной последовательности, Пр — текущее число отсчетов, выбранных из исходной последовательности, Н — округление до целого в большую сторону, [•] — округление до целого в меньшую сторону.
Регулировка частоты посредством изменения числа отсчетов таблицы поиска тем не менее оказывается достаточно грубой — шаг изменения частоты от количества отсчетов N будет выражаться как
А/ N)= /РКМ / N - /РКМ /М +1), увеличиваясь с уменьшением числа отсчетов (увеличением частоты), что неприемлемо. Для устранения данного недостатка предлагается следующее решение. Пусть необходимо получить сигнал частотой /л. Найдем количество отсчетов табличной функции Ndst = [/тм / ] для фиксированной частоты модуляции
/РщМ. Теперь скорректируем частоту модуляции путем подстройки параметра АКК из (5) так, чтобы в один период сигнала укладывалось целое число отсчетов Ndst:
АШ(ш™) =
/ак /тш
[_ PSCNdJd \ _ Ndst/d _
(7)
При этом фактическая частота будет выражаться по формуле /ш = км/(АКК^Ч, ).
После этого произведем передискретизацию таблицы поиска прежним способом согласно (6). На рисунке 2 приведены графики функций абсолютной погрешности установки частоты с использованием коррекции частоты модуляции и без нее при начальной частоте модуляции 46 875 Гц (выбрано начальное значение АКК = 256, частота работы таймера /им = 12 МГц).
81
Рис. 2. Абсолютная погрешность генерации частоты сигналов
Видно, что для метода с коррекцией частоты модуляции абсолютная погрешность с увеличением частоты растет достаточно медленно, достигая максимального значения порядка 10 Гц на частоте около 5 КГц, что составляет относительную погрешность 0,2 %. В то же время без коррекции погрешность меняется скачкообразно, достигая 270 Гц на частоте порядка 4930 Гц (относительная погрешность 5,5 %).
Стабильность частоты получаемого сигнала для данного генератора определяется главным образом стабильностью (как температурной, так и долговременной) внешнего кварцевого резонатора, используемого для тактирования микроконтроллера.
Вернемся к вопросу генерации сигналов с периодически изменяющейся полярностью. Будем использовать схемотехнику Н-моста (рис. 3), левая и правая половины которого управляются двумя независимыми каналами одного аппаратного таймера микроконтроллера. Каждый канал таймера поочередно генерирует полуволну сигнала, второй канал в этот момент неактивен. Если функция /(£) представляет собой две симметричные полуволны, то для генерации такого сигнала можно обойтись табличной функцией лишь для одного полупериода, что сокращает объем используемой памяти.
^N0
Рис. 3. Схемотехника Н-моста
82
Рассмотрим подробнее работу данной схемы. Пусть к выходам V+ и V- подключена некоторая нагрузка. Канал CH2 неактивен и находится при этом в высоком логическом уровне. Транзистор T4 открыт, потенциал земли на базе T5 открывает его, подтягивая V- к земле. Подадим на вход CH1 импульсы ШИМ. В случае высокого логического уровня на CHI T6 заземляет выход V+, следовательно, разность потенциалов между V+ и V- отсутствует. Когда уровень на CH1 низкий, T3 закрывается, и возникающий на базе T1 потенциал шины питания HVCC открывает его. Тем самым между V+ и V- возникает разность потенциалов, и ток течет в направлении от V+ к V-.
Теперь поменяем каналы: CH1 отключим и подтянем к высокому уровню, а импульсы ШИМ будем подавать на канал CH2. Очевидно, будет наблюдаться симметричная ситуация, однако ток будет течь в направлении от V- к V+, тем самым полярность сменится на противоположную.
Преимущество использования H-моста в том, что при соответствующем выборе транзисторов T1, T2, T5, T6 с его помощью можно управлять достаточно мощной нагрузкой, а также коммутировать высокие напряжения [5]. Однако в этом случае требуется гальваническая развязка входов CH1 и CH2 от линий микроконтроллера, например с помощью оптопар.
Таким образом, в работе полностью описаны основные вопросы разработки программного генератора сигналов различной формы. Созданная микропрограмма для электростимулятора успешно демонстрировала генерацию прямоугольного, пилообразного, трапециевидного и синусоидального сигналов в диапазоне частот от 20 Гц до 5 КГц, как однополярных, так и со сменой полярности. Следует отметить, что существуют и другие методы реализации генераторов частоты, например в [6] описан метод, в основе которого лежит внешний модуль ЦАП.
Достоинствами метода, предложенного в данной работе, является сравнительная простота реализации, несложная схемотехника, отсутствие дорогостоящих компонентов, а основным недостатком — невысокое разрешение по частоте, уменьшающееся с ее ростом.
Список литературы
1. Yui J. The Definitive Guide to the ARM® Cortex-M3. Elsevier, 2010. URL: https://www.eecs.umich.edu/courses/eecs373/labs/refs/M3%20Guide.pdf (дата обращения: 25.06.2019).
2. RM0008 Rev 20. Reference Manual STM32F10x. STMicroelectronics, 2018. URL: https://www.st.com/resource/en/ reference_manual/ cd00171190.pdf (дата обращения: 25.06.2019).
3. AN4776 Application Note. General-Purpose Timer Cookbook for STM32 Microcontrollers. STMicroelectronics, 2017. URL: https://www.st.com/resource/en/ application_note/dm00236305.pdf (дата обращения: 25.07.2019).
4. Vasca F., Ianelli L. Dynamics and Control of Switched Electronic Systems. Advanced Perspectives for Modeling, Simulation and Control of Power Converters. Springer, 2012.
5. Двухфазный ШИМ (PWM) генератор на STM32F030F4. URL: http://we. easyelectronics.ru/STM32/2-x-faznyy-shim-pwm-generator-na-stm32f030f4.html (дата обращения: 25.06.2019).
6. Литовченко А. А., Ерусалимский Ю. А. Генератор сигналов произвольной формы на микроконтроллере AVR // Молодой ученый. 2016. № 21. С. 173 — 177. URL: https://moluch.ru/archive/125/34400/ (дата обращения: 28.06.2019).
7. Тюрин В. А. Метод прямого цифрового синтеза в генераторах сигналов специальной формы SFG-2110 и АКИП-3410/3 : учеб.-метод. пособие. Казань, 2015.
Об авторах
Александр Олегович Синюхин — ассист., Балтийский федеральный университет им. И. Канта, Россия.
E-mail: asinyukhin@inbox.ru
Сергей Владимирович Орлов — д-р мед. наук, директор ООО «Институт биомеханики позвоночника», Россия.
E-mail: orlovsv61@gmail.com
Александр Евгеньевич Яковлев — д-р мед. наук, нейрохирург, Центральный институт травматологии и ортопедии им. Н. Н. Приорова, Россия.
E-mail: asinyukhin@inbox.ru
Андрей Сергеевич Ревенко — канд. физ.-мат. наук, доц., Балтийский федеральный университет им. И. Канта, Россия
E-mail: andy.revenko@gmail.com
The authors
83
Alexander O. Sinyukhin, Assistant, I. Kant Baltic Federal University, Russia. E-mail: asinyukhin@inbox.ru
Prof. Sergey V. Orlov, director of «Spine Institute» Ltd, Russia. E-mail: orlovsv61@gmail.com
Prof. Alexander E. Jakovlev, Neurosurgeon, Central Institute of Traumatology and Orthopedics, Russia.
E-mail: asinyukhin@inbox.ru
Dr Andrey S. Revenko, Associate Professor, I. Kant Baltic Federal University, Russia.
E-mail: andy.revenko@gmail.com