Построение ЦАП разрешением выше 12 бит на примере STM32

Группа компаний Промэлектроника
24.05.2013
Если у вас имеется несколько ЦАП низкого разрешения на микроконтроллере, то на их основе вы всегда можете построить ЦАП более высокого разрешения. В простейшем случае это 2 порта, являющие собой два однобитных ЦАП. Создав общую точку соединения выходов портов резисторами, соотношение которых 1:2 получим один 2-битный ЦАП, построенный на базе двух однобитных:



Такой же подход справедлив, если вместо дискретного сигнала портов используется аналоговый сигнал ЦАП. Разрядность применяемых ЦАП определяет соотношение резисторов R1 и R2. В случае применения двух 12-ти разрядных ЦАП это соотношение будет 1 : 4096.

Составленный таким образом ЦАП в идеале может иметь двойное разрешение. В нашем случае – 24 бита. Однако на практике этого достичь тяжело. Что помешает? Начнём с соотношения резисторов R1 и R2, будем считать, что R1 – формирует старшие разряды ЦАП высокого разрешения, а R2 - младшие. Что случится, если их соотношение будет отличаться от заявленных 1 : 4096. Возникнет погрешность, показанная ниже:





Оценим потребную точность ∆ резисторов R1 и R2, применяемых для создания одного 24-битного ЦАП из двух 12-битных:

где:
∆ - класс точности резисторов,
Res – разрешение одного ЦАП в битах.

Таким образом, для получения выходного разрешения ЦАП 24 бит, составленного из двух 12-ти битных ЦАП, мы обязаны использовать резисторы с классом точности 0.025% или выше, если такое вообще бывает. Если использовать более реальные резисторы с классом точности 0.1%, то мы потеряем 4 бита разрешения, то есть получим на выходе 20-ти битный ЦАП с характерной дифференциальной нелинейностью.

Что можно сделать? Если использовать не 2, а 4 ЦАП с ещё более низким разрешением (в случае построения 24-битного ЦАП, это 4 шт 6-ти битных ЦАП), то количество нелинейностей увеличится в 16 раз, зато их величина уменьшится в те же 16 раз, таким образом, мы вытащим ещё несколько бит. Вместо достигнутых 20-ти бит на базе резисторов 0.1% в прошлом варианте, мы получим 24 битный ЦАП, в идеале.

Все нелинейности ЦАП низкого разрешения окажутся на выходе составного ЦАП, это очевидно. Более того, выход полученного ЦАП должен быть буферизирован. Малейшие токи ЦАП старших разрядов будут вызывать просадку их выходного напряжения, что создаст интегральную нелинейность преобразования. Речь идёт о сотне нановольт, когда идёт построение 24-битного ЦАП. Токи должны быть минимизированы. Это ограничение на номиналы применяемых резисторов снизу и предпосылка установки повторителя напряжения на выходе ЦАП. Однако, установив буферный повторитель – помните, что все нелинейности и смещения повторителя окажутся на выходе.

В качестве исходных ЦАП, на которых будет происходить преобразование низкого разрешения в контроллерах STM8/32 можно взять пару 12-ти битных ЦАП, если таковая периферия имеется на борту, либо задействовать ШИМ выходы таймеров с последующим усреднением выходного сигнала.

В случае использования пары 12-ти битных ЦАП программно придётся разбивать значение выходного сигнала на 2 части по 12 бит и записывать их в соответствующие регистры данных. В случае использования ШИМ сигналов, их количество может быть увеличено. Каждый таймер общего назначения в STM32 имеет 4 выхода ШИМ. Более того можно синхронизировать работу нескольких таймеров и иметь большее число ШИМ каналов, что повысит общую разрешающую способность всей системы. Например, если использовать 8 каналов ШИМ = 2 таймера общего назначения, то 24-битный ЦАП вполне достижим при использовании резисторов классом 0.1%.

При построении ЦАП высокого разрешения на ШИМ каналах требуется усреднение выходного сигнала установкой ёмкости непосредственно за резистивным делителем. Главным образом, установка ёмкости требуется для подавления частоты ШИМ сигнала. Чем выше частота ШИМ, тем проще её будет подавить. Установка ёмкости усреднения непосредственно за резистивным делителем хороша ещё и тем, что изменение младших битов величины выходного сигнала приводит к току заряда ёмкости через резисторы большого номинала, а старших - через сопротивление меньшего номинала. Всё это приводит к быстрому заряду выходной ёмкости на резких изменениях выходных сигналов и малому – на малых, что позитивно сказывается на динамических параметрах ЦАП.

Задача: Имеем контроллер с тактовой частотой 36МГц (например, семейство STM32L1xxx). Таймер 16 бит тактируется частотой ядра. Вопрос: Какую частоту будет иметь ШИМ сигнал при указанных параметрах? Ответ простой: 36Мгц/65536 = 549 Гц. Т.е имеем верхнюю границу скорости работы ЦАП высокого разрешения. В реальности значение выхода с точностью 24бит установится на порядок медленнее. Если снизить разрешение, с 16-ти до 6-ти бит, то частота ШИМ вырастет в 1000 раз до 562 кГц. Таким образом, стратегия повышения скорости работы и разрешения выходного ЦАП путём увеличения числа и снижения разрядности ШИМ имеет место быть.

Таймеры общего назначения регистров сравнения контроллеров STM32/8 имеют регистры предзагрузки. Таким образом, после переполнения таймера ядро может спокойно загрузить в эти регистры следующее значение выхода ЦАП, разбив его на соответствующие группы битов. При переполнении, эти значения одновременно автоматически попадут в регистры сравнения ШИМ. Если речь идёт о 4-х 6-ти битных ШИМ сигналах, то у ядра будет 64 такта процессорного времени для решения этой задачи (для Cortex – этого более чем достаточно). Работу разбиения сигнала разрядностью 24 бита на несколько с меньшей разрядностью можно поручить ядру, как показано выше. Альтернативой будет запись сигнала высокой разрядности в готовом виде для регистров сравнения. В этом случае появляется возможность задействовать контроллер прямого доступа к памяти (DMA) для работы нескольких ЦАП параллельно. Ядро, в этом случае, окажется незадействованным, а на выходе системы – сигнал высокой разрядности.

Контроллеры фирмы STMicroelectronics позволяют осуществлять генерацию и измерение сигналов высокой разрядности.

Компания "Промэлектроника" желает вам успешных разработок.

Получить более подробную информацию вы можете, обратившись:
Ягов Денис
E-mail: info@promelec.ru
Телефон: +7 (343) 372-92-27

По вопросам оптовых продаж обращайтесь:
E-mail: order@promelec.ru
Телефон: +7 (343) 372 92 28
Единый телефон отдела продаж: 8 800 1000 321


  "ПРОМЭЛЕКТРОНИКА" - официальный прямой дистрибьютор компании "STMicroelectronics"


Последние новости - одной лентой: