Микроконтроллер+DAC как синтезатор сетки частот
[Home] [< Prev: DMA (прямой доступ к памяти)] [Next: Микроконтроллер + DAC + табличный синус >]

Микроконтроллер + DAC как синтезатор сетки частот

Электронные устройства часто содержат в себе в качестве одного из узлов какой-либо генератор сигналов. В зависимости от требований к этому генератору, выбирают один из трёх основных вариантов его реализации: аналоговый генератор, генератор с ФАПЧ или генератор с прямым цифровым синтезом сигнала. Каждый имеет свои достоинства и недостатки. Но если устройство содержит микроконтроллер, то может быть выгодным использовать его для цифрового синтеза сигнала. В предыдущих статьях, посвящённых DAC микроконтроллера, уже демонстрировалась возможность генерации сигнала. Здесь же будет идти речь о том, как сделать такой генератор плавно перестраиваемым и о том, какой спектр имеет выходной сигнал с учётом его ступенчатого характера.

Виды генераторов
Микроконтроллер как синтезатор сигнала
Анализ спектра ступенчатого сигнала
Шум квантования



Виды генераторов

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

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

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

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

Блок-схема генератора с ФАПЧ

На рисунке:
ОГ - опорный генератор прямоугольных сигналов со стабильной частотой f0;
÷n, ÷m - делители частоты;
ФД - фазовый детектор;
ФНЧ - фильтр нижних частот;
УГ - управляемый генератор (частота генератора f определяется напряжением, поступающим с выхода ФНЧ);
ФИ - формирователь импульсов (например, триггер Шмитта), формирует из выходного сигнала генератора УГ прямоугольные импульсы, пригодные для подачи на вход делителя.

За счёт наличия обратной связи в системе, обеспечивается постоянство сдвига фаз между сигналами на выходах делителей частоты, что означает точное равенство частот: f/m=f0/n или f=f0*m/n, где m и n - коэффициенты деления делителей частоты сигналов управляемого генератора и опорного генератора соответственно. В данном случае мы получаем сигнал со стабильной частотой, которую можно программно перестраивать, изменяя коэффициенты деления. Шаг изменения частоты получается равным f0/n, его можно сделать достаточно малым. Частота на выходе может быть как ниже, так и выше частоты опорного генератора. Генератор с ФАПЧ даёт возможность стабилизировать частоту высокочастотного генератора с помощью низкочастотного кварца. Схема генератора получается достаточно простой, чтобы её можно было реализовать даже с использованием цифровых микросхем малой степени интеграции. Есть и недостатки, основной из которых - высокий уровень фазового шума, увеличивающегося с увеличением коэффициентов деления (наличие шума связано с тем, что равенство сдвига фаз двух сигналов обеспечивается в среднем, а мгновенные значения фаз в силу различных причин могут испытывать кратковременные отклонения разной величины и знака).

Прямой цифровой синтез (DDS, Direct Digital Synthesis) аналогового сигнала предоставляет очень интересные возможности, недостижимые для аналоговой техники. Он даёт возможность формировать сигнал произвольной формы, с высокой точностью задавать амплитуду и частоту сигнала, программно изменять любые параметры сигнала в широчайшем диапазоне значений. Стабильность частоты сигнала определяется стабильностью используемого тактового генератора и может быть очень высокой.

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

Микроконтроллер как синтезатор сигнала

В качестве примера рассмотрим синтез гармонического колебания с помощью DAC, управляемого микроконтроллером. Для формирования сигнала будем загружать в DAC через одинаковые промежутки времени, с некоторой тактовой частотой f0 мгновенное значение синтезируемого сигнала в этот момент. После выполнения преобразования загруженного значения, DAC обновляет значение на своём выходе очень быстро, в некотором приближении можно считать, что скачком; после этого напряжение на выходе DAC сохраняет своё значение до следующего преобразования. Полученный на выходе DAC сигнал будет ступенчатым, в зависимости от размера "ступенек", он будет в большей или меньшей степени приближаться по форме к требуемому. Если один период сигнала мы будем формировать по n точкам, то получим сигнал с частотой f=f0/n.

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

Синтез гармонического сигнала по 8 и 16 точкам
На рисунке показаны сигналы, синтезированные соответственно по 8 и 16 точкам, частота тактового сигнала в обоих случаях одинакова. Одно деление по оси времени на графиках соответствуют периоду тактового сигнала: t0=1/f0. Количество точек на период отличается в 2 раза, поэтому частоты синтезируемых сигналов также отличаются в 2 раза: f1=f0/8, f2=f0/16.

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

Таким образом, изменяя количество выборок n, мы можем программно регулировать частоту получаемого сигнала при фиксированной опорной частоте f0. Впрочем, если требуется плавная перестройка, такой подход не всегда удобен: на высоких частотах, когда n становится малым, шаг изменения частоты оказывается слишком большим, а перестройка очень грубой. У данного метода перестройки частоты есть и другой недостаток. Так как частота синтезируемого сигнала обратно пропорциональна n, то получаемая сетка частот оказывается нелинейной и она не включает в себя точные значения "красивых", целых частот (кроме нескольких значений, когда f0 нацело делится на n). Зато при малых n мы можем заранее вычислить таблицу значений синтезируемой функции и поместить эту таблицу в RAM (или даже рассчитать таблицу на этапе компиляции и разместить её в ROM-памяти). В этом случае достигается наибольшее быстродействие метода, что позволяет использовать максимально возможные значения опорной частоты, а значит могут быть достигнуты максимально возможные для этого метода значения частоты сигнала.

Указанные недостатки легко исправимы, если синтезировать по n точкам не 1 период, а m периодов сигнала, где, по меньшей мере, n>2m. Тогда частота синтезируемого сигнала f=f0*m/n. Можно сделать n большой фиксированной величиной, а частоту сигнала изменять за счёт изменения m. В таком случае, выбирая n, определяем шаг изменения частоты при изменении m на 1: Δf=f0/n; шкала частот получается линейной - частота прямо пропорциональна m. Среднее количество точек на период равно n/m и должно быть достаточно большим (желательно не менее 4 для синусоиды) для того, чтобы сигнал на выходе получился гладким. Величина n может быть выбрана очень большой, что позволяет получить на выходе хороший по качеству сигнал и плавно перестраивать частоту. Но при этом мы теряем возможность тривиальной реализации табличного метода, из-за большого размера таблица из n элементов не сможет поместиться в памяти. Можно выполнять вычисления на "лету", что ограничивает быстродействие метода, либо воспользоваться приёмами, о которых идёт речь в следующем документе: "Микроконтроллер + DAC + табличный синус".

Вычисления значений сигнала выполняются следующим образом. В соответствии с требованиями к формируемому сигналу и требованиями DAC выбираем постоянную составляющую сигнала и амплитуду. Естественно, результат вычислений не должен выходить за границы значений, для которых DAC может выполнить преобразование. Обычно на выходе можно получить только однополярный сигнал, соответственно в DAC мы можем загружать значения от 0 до некоторого максимального значения. Например, в случае микроконтроллеров STM32F100xx при отключённом буфере преобразователя, на выходе можно формировать сигнал с уровнем от 0 до VREF+. А при включённом буфере (буфер включают для увеличения нагрузочной способности выхода), на выходе DAC/входе буфера следует формировать сигнал с уровнем в пределах 0.2 В..VDDA-0.2 В; VDDA - напряжение в цепи аналогового питания (фактически оно должно быть равно напряжению на выводах основного питания микроконтроллера). Указанные требования обусловлены особенностями буфера и должны выполняться для его нормальной работы и получения гарантированной точности сигнала на выходе. С учётом сказанного, если например, для формирования синусоидального сигнала используется DAC в составе микроконтроллера из серии STM32F100xx с включённым буфером, напряжение питания составляет 3.3 В, то на выходе мы можем получить сигнал с мгновенным значением напряжения из диапазона 0.2 В..3.1 В. Значит, размах сигнала не может превышать 2.9 В, а амплитуда, очевидно, не может превышать 1.45 В. Для того, чтобы мгновенное значение напряжения ни в какой момент не было ниже требуемого порога 0.2 В, мы должны обеспечить постоянное смещение (0.2 В + амплитуда сигнала), т.е. 1.65 В нашем случае при максимально допустимой амплитуде 1.45 В. Итак, в данном случае постоянное смещение выбираем равным a0=1.65 В, амплитуду a1=1.45 В. Естественно что при необходимости может быть задано меньшее значение амплитуды, но большее значение в данном случае недостижимо. Преобразование величин ко входу DAC с учётом его 12-разрядности даёт значения a0=2048, a1=1799.

Пусть нам требуется получить сигнал вида y(t)=a0+a1sin(2πft+φ0); где a0 - постоянное смещение, a1 - амплитуда, f - частота синтезируемого сигнала, φ0 - начальная фаза. С учётом того, что расчёт выполняется в фиксированных точках с интервалом между ними T0=1/f0, а начальная фаза обычно не имеет принципиального значения, то для точки с индексом i (i=0, 1, 2, ...) получим соотношение
y=a0+a1sin(2πfi/f0) или
y=a0+a1sin(2πmi/n);
здесь i=0, 1, 2, ..., n-1 (учитывая периодичность функции sin, следующим после n-1 значением для i принимаем значение 0).

Анализ спектра ступенчатого сигнала

Пусть исходная функция, для которой мы строим ступенчатое приближение имеет вид синусоиды с периодом T: $$ y(t)=\sin \frac {2\pi} {T} t.$$ Будем исследовать спектр функции u(t) - ступенчатого приближения к данной функции y(t). Полученные выводы будут справедливы для синусоидального колебания с любой амплитудой с точностью до постоянного множителя, равного амплитуде.

Для построения ступенчатого приближения возьмём m периодов синусоиды и разобьём этот отрезок времени длиной mT на n маленьких отрезков одинаковой длины mT/n. Присвоим отрезкам индексы от 0 до n-1. Тогда можем сказать, что отрезок с индексом i имеет концы в точках \( \frac {mT} {n} i \) и \( \frac {mT} {n} (i+1) \). Ступенчатая функция u(t) будет иметь неизменное значение в пределах каждого из этих отрезков (исключая точку - конец отрезка). В качестве значения функции u(t) на отрезке i примем значение исходной функции y(t) в некоторой точке этого отрезка, обозначим точку как ti. Точки ti для всех отрезков будем выбирать единообразно - на одинаковом расстоянии от начала своего отрезка i. Это расстояние от начала будем выражать в относительных единицах d, 0≤d<1; где единице соответствует вся длина отрезка: mT/n. Например, значению d=0 соответствует начало отрезка, а значению d=0.5 - середина. Значение d=1, соответствующее концу отрезка, мы исключаем из рассмотрения, так как конец данного отрезка является началом следующего. Координата точки ti: $$t_i=\frac{mT}n i+\frac{mT}n d=\frac{mT}n(i+d).$$

Значение ступенчатой функции в данной точке можно записать в следующем виде: $$ u(t)=y(t_i)|_{t \in[(mTi/n), mT(i+1)/n)}=\sin\left(\frac{2\pi}T \frac{mT}n(i+d)\right)=\\ =\sin\frac{2\pi m(i+d)}n. $$

Отрезки разбиения можно сопоставить с тактовым сигналом, по которому обновляется сигнал на выходе DAC при генерации сигнала методом DDS. Длина отрезка соответствует периоду тактового сигнала. Период тактового сигнала и период синтезируемой функции, с учётом вышесказанного, связаны соотношением \( T_{clk}=mT/n \). Так как частота тактового сигнала \( f_{clk}=1/T_{clk} \), а частота синтезируемого сигнала \( f=1/T \), то частота сигнала и тактовая частота будут связаны соотношением: $$ f=f_{clk} \frac m n. $$

Если использовать функцию - целую часть числа (целая часть числа - наибольшее целое, не превосходящее этого числа), которая обозначается как floor(t) или квадратными скобками, то номер отрезка i, которому принадлежит точка t может быть выражен так: $$i(t)=floor\left(\frac n{mT}t\right)=\left[\frac n{mT}t\right],$$ тогда функция u(t) аналитически может быть выражена следующим образом: $$u(t)=y\left(\frac{mT}n\left(\left[\frac n{mT}t\right]+d\right)\right)=\\ =y\left(\frac{mT}n\left[\frac n{mT}t\right]+\frac{mT}n d\right)$$

Ступенчатое приближение, построенное по 8 точкам
Ступенчатое приближение, построенное по 16 точкам
n=8, m=1, d=0 n=16, m=1, d=0

Несмотря на то, что период исходной функции y(t) равен T и от её приближения - функции u(t) мы также ожидаем наличия основной гармоники с тем же периодом T, сама функция u(t) имеет в общем случае период mT. Это объясняется тем, что моменты, когда происходит выборка сигнала для каждой следующей "волны" синусоиды немного отличаются, смещаются относительно моментов предыдущей волны. Поэтому форма ступенек для разных периодов немного отличается, полное повторение формы сигнала происходит только через промежуток времени mT.

Ступенчатое приближение по 26 точкам для 3 периодов, d=0.5
n=26, m=3, d=0.5

Спектральный анализ функции u(t) следует выполнять с учётом того, что её период равен mT. Следует отметить, что в частных случаях, когда m и n имеют общий целый делитель, больший 1, mT не является наименьшим положительным периодом для u(t). Однако, это не принципиально, так как mT будет по прежнему периодом функции, а при разложении в ряд Фурье не требуется обязательно использовать наименьший период функции. Подробнее о периоде u(t) (выделено в отдельный документ).

Так вот, в результате разложения (подробнее в статье: "Разложение в ряд Фурье функции - ступенчатого приближения к синусоиде") мы получим, что отличны от 0 только гармоники сигнала с номерами \( k=m, n\mp m, 2n\mp m, 3n\mp m, \ldots \) Например, если n=8, m=1, то отличны от нуля будут гармоники с номерами 1, 7, 9, 15, 17, 23, 25, ... Видим, что в тех случаях, когда n существенно превышает m, основная гармоника и первая следующая за ней, отличная от нуля, значительно удалены друг от друга, что позволяет легко отфильтровать полезный сигнал.

Частота основной гармоники равна частоте исходной синусоиды, частоты остальных гармоник больше в \( zn/m \mp 1 \) раз, здесь \( z \ge 1, z \in Z \) - целый множитель.

Амплитуда ненулевых гармоник: $$ A_k=\frac{n\sin\frac{\pi m}n}{\pi k}, \text{где } k=m, n \mp m, 2n \mp m, 3n \mp m, \ldots $$ Амплитуда основной гармоники стремится к амплитуде исходной синусоиды (в данном случае к 1) с ростом отношения n/m. Амплитуды высших гармоник малы по сравнению с амплитудой основной гармоники и быстро убывают с ростом n/m. Кроме того, амплитуда ненулевой гармоники обратно пропорциональна её номеру k и также быстро убывает с увеличением номера.

Коэффициент гармоник K (или коэффициент нелинейных искажений), выражающий долю высших гармоник в общей средней мощности сигнала, также быстро убывает с ростом отношения n/m: $$ K=1-\frac {n^2 \sin^2 \frac {\pi m} n} {\pi^2 m^2} \approx \frac 1 3 \left(\frac {\pi m} n \right)^2. $$ Например уже при n/m=8 (количество выборок составляет 8 на период), величина K составляет около 5% и это безо всякой фильтрации!

Зависимость амплитуды основной гармоники от количества выборок на период, m=1
Am(n), зависимость амплитуды основной гармоники от количества выборок на период, в данном случае m=1.
Спектр ступенчатой функции - приближения синусоиды
A(k), спектр ступенчатой функции - приближения синусоиды, в данном случае n=8, m=1. Пунктиром изображена огибающая спектра. Частота гармоники с номером k равна \( f_k=kf/m=kf_{clk}/n \), где f - частота исходной синусоиды, \( f_{clk} \) - частота выборок.
Зависимость коэффициента гармоник для ступенчатой функции - приближения синусоиды от среднего количества выборок на период исходной синусоиды
K(n/m), зависимость коэффициента гармоник для ступенчатой функции - приближения синусоиды от среднего количества выборок на период исходной синусоиды n/m.

Все эти свойства ступенчатой функции - приближения для синусоиды подтверждают приведённое выше предположение о том, что с увеличением количества точек на период исходного сигнала n/m увеличивается точность приближения.

Шум квантования

До сих пор предполагалось, что на выходе DAC можно задать напряжение с любой степенью точности. На самом деле, конечно, это не так. Но это не означает, что спектральный анализ для идеализированного, абсолютно точного DAC был выполнен напрасно. Полученные результаты могут быть использованы, только следует учесть влияние квантования уровней на качество выходного сигнала. Реальный преобразователь имеет какую-то определённую разрядность N и может сформировать на выходе 2N различных уровней напряжения, как правило, равномерно распределённых в рабочем выходном диапазоне напряжений V-..V+ шириной D=V+-V-. Тогда шаг изменения напряжения между уровнями h=D/2N.

Конечное количество уровней выходного напряжения, приводит к тому, что выполняя очередное преобразование с помощью DAC для формирования требуемого сигнала, мы вынуждены заменять его мгновенную величину в этот момент времени на ближайшее значение, реализуемое этим DAC. В результате вносится ошибка величиной до \( e= \pm h/2 \). Получаемый на выходе DAC сигнал можно рассматривать как сумму двух сигналов: идеального сигнала, который мы получили бы от DAC с бесконечно большим разрешением и шума, возникающего в результате квантования в реальном DAC.

Первая составляющая сигнала как раз и была подробно исследована выше и все полученные результаты остаются полностью справедливы для неё.

Шум квантования имеет амплитуду, не превышающую h/2. Что касается спектра этого шума, то аналитическое его исследование сопряжено с серьёзными трудностями и здесь рассматриваться не будет. Намного проще оценить характеристики шума квантования численными методами в каждом конкретном случае. Как правило, высокая точность не требуется и достаточно убедиться, что шум квантования не превышает некоторого предельно уровня, обеспечивающего нормальную работу устройства. Тем более, что DAC преобразователь всегда имеет погрешности преобразования, которые при работе на полном диапазоне выходных напряжений могут в некоторых устройствах существенно превышать шаг квантования и являться ещё одним источником шумов преобразования.

В неблагоприятных случаях амплитуды отдельных гармоник шума квантования могут достигать величины порядка амплитуды шума квантования, т.е. величины h/2, но обычно, по крайней мере, в несколько раз меньше за счёт распределения мощности шума по большому количеству гармонических составляющих. Наличие шума усложняет задачу фильтрации сигнала. Если в идеальном случае основная гармоника и следующая за ней разнесены в частотной области на расстояние до n/m от частоты основной гармоники, то шум квантования может иметь отличными от нуля все составляющие с частотами z/m (z - положительное целое; только нечётное при чётном общем количестве выборок n или любое при нечётном n, так что имеет смысл выбирать n чётным для разнесения гармоник шума квантования по частоте). При m>1 частоты первых гармоник шума квантования с номерами k<m оказываются ниже частоты основной гармоники и в принципе не могут быть выделены с помощью фильтра нижних частот.

Соотношение сигнал/шум квантования можно увеличить, увеличивая амплитуду генерируемого сигнала, а если необходим сигнал с малой амплитудой, выгоднее использовать аттенюатор, чем синтезировать сигнал малой амплитуды непосредственно с помощью DAC. С другой стороны, с ростом амплитуды, спектр сигнала может обогащаться за счёт того, что в большей степени проявляется нелинейность DAC. Поэтому оптимальный режим работы зависит от характеристик используемых компонентов схемы.

Существуют и другие факторы, искажающие синтезируемый с помощью DAC сигнал. Например, ещё один источник посторонних гармоник в DDS генераторе связан с явлением дрожания фазы: момент прихода тактового сигнала, по которому выполняется преобразование в DAC в силу различных причин может случайным образом отклоняться от своего регулярного положения; время установления сигнала на выходе также не является абсолютно стабильной величиной.

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

author: hamper; date: 2016-08-02; modified: 2016-10-27
  @Mail.ru