Как работать с АЦП и ЦАП в микроконтроллерах SiLabs
Одним из бурно развивающихся направлений в электронной промышленности является создание полностью интегрированных систем управления, включающих блоки для аналоговой и цифровой обработки сигнала. Большой спрос на сложные системы управления свысокоскоростными и точными аналоговыми ицифровыми преобразованиями определяет их развитие. Необходимым компонентом таких систем являются блоки для оцифровки аналоговых сигналов с целью их дальнейшей обработки. Компания SiLabs — один из мировых производителей микросхем для совместной обработки аналоговых ицифровых сигналов. В данной статье рассматриваются принципы работы с интегрированными АЦП и ЦАП одного из 8-разрядных микроконтроллеров SiLabs (ранее выпускавшихся под маркой Cygnal), а также приводятся примеры программирования этих блоков.
Общие сведения
Восьмиразрядные микроконтроллеры SiLabs имеют следующие особенности:
- высококачественная аналоговая периферия;
- знакомый многим разработчикам набор команд x51 на высокопроизводительном ядре;
- надежность и устойчивость в работе;
- низкое энергопотребление;
- миниатюрность корпусов микросхем;
- инимальное количество требуемых внешних элементов.
Удачное сочетание этих характеристик и высокое качество продукции Cygnal способствовали быстрому росту продаж микроконтроллеров и их дальнейшему развитию. В 2000 году компания выпустила микроконтроллер размером 3×3 мм, а в начале 2002 года — самый быстрый (и по сегодняшний день) 8-разрядный микроконтроллер с производительностью до 100 MIPS.
С момента приобретения Cygnal компанией Silicon Laboratories (SiLabs) коллектив уже бывшей компании Cygnal достиг новых высот: в 2003 году был выпущен микроконтроллер с 24-разрядным сигма-дельта АЦП, а в 2004 году — микроконтроллер с 16-разрядным АЦП последовательного приближения с частотой выборки до 1 млн отсчетов в секунду (Msps).
Все продукты компании пользуются высокими оценками экспертов в области аналоговой и цифровой обработки сигналов. По результатам Annual Creativity in Electronics (ACE) Awards 2005, проводимым независимым еженедельником EE Times, микроконтроллер C8051F064 признан «Продуктом года» среди микросхем для аналоговой обработки сигналов. И это уже не говоря о том, что C8051F064 — микроконтроллер. Следует добавить, что изучение платформы SiLabs уже начинают включать в обязательную программу изучения некоторых кафедр высших учебных заведений, работающих в области измерительной техники.
Параметры точности и быстродействия аналоговых блоков микроконтроллеров SiLabs зачастую превосходят параметры отдельных АЦП и ЦАП той же ценовой категории. В качестве примера можно привести АЦП AD7677, точность которого немного уступает точности АЦП микроконтроллера С8051F064, а стоимость в 3 раза превышает стоимость С8051F064.
В таблице 1 приведены параметры АЦП некоторых микроконтроллеров SiLabs.
АЦП последовательного приближения | Сигма-дельта АЦП | ||||||
Семейство | C8051F300 | C8051F330 | C8051F020 | C8051F005 | C8051F064 | C8051F350 | |
Разрешение | 8 бит | 10 бит | 8 бит | 12 бит | 12 бит | 16 бит | 24 бит |
Частота выборки, sps | 500k | 200k | 500k | 100k | 100k | 1M | 1000 |
Сигнал/шум+искажения (SINAD) | 48 дБ | 55,5 дБ | 47 дБ | 66 дБ | 66 дБ | 89 дБ | 2,4 мкВ* |
Интегральная нелинейность, LSB | +0,5 | +0,5 | +1 | +1 | +0,5 | +0,75 | +15 ppm |
Дифференциальная нелинейность, LSB | +0,5 | +0,5 | +1,0 | +1,0 | +1,0 | +0,5 | — |
Смещение | +0,5 LSB | +1 LSB | +0,5 LSB | +3 LSB | +3 LSB | 0,008% FS | 0,002% FS |
Источника опорного напряжения, В | — | 2,4 | 2,43 | 2,4 | 2,4 | 2,5 |
Примечания:
- * при коэффициенте усиления, равном 1, и частоте выборки 10 отсчетов в секунду;
- FS — full scale, погрешность полной шкалы (мультипликативная погрешность);
- LSB — least significant bit, младший значащий разряд (МЗР).
C8051F020 — микроконтроллер общего назначения
В данной статье в качестве «базового» устройства будем рассматривать микроконтроллер C8051F020 фирмы SiLabs. Как видно из таблицы 1, он уступает другим микроконтроллерам SiLabs по характеристикам АЦП, но является неплохим примером для демонстрации работы аналоговой подсистемы, имеющейся на кристалле.
В аналоговую подсистему рассматриваемого микроконтроллера входят один 8-разрядный и один 12-разрядный АЦП последовательного приближения, а также два 12-разрядных ЦАП. C8051F020 содержит операционный усилитель с программируемым коэффициентом усилением (PGA), аналоговый мультиплексор (8 каналов и 9 каналов), 2 компаратора, источник опорного напряжения и температурный датчик. Эти узлы показаны на рис. 1.
Для поддержки работы АЦП и ЦАП кристалл содержит источник опорного напряжения 2,43 В, который имеет температурную нестабильность 15 ppm/°C. Максимальный ток нагрузки источника опорного напряжения составляет 200 мкА. При использовании внешнего источника опорного напряжения этот блок может быть программно отключен.
Важной особенностью АЦП SiLabs является то, что для осуществления аналогово-цифровых преобразований не нужно останавливать цифровую подсистему микроконтроллера. Аналоговая и цифровая подсистемы разделены на кристалле таким образом, что работа последней не вносит помех в работу аналоговой подсистемы.
Для задания режимов работы узлов кристалла используются регистры специальных функций (SFR), позволяющие упростить работу с аналоговой периферией. Все настройки осуществляются программно путем записи соответствующих значений в регистры. В следующем разделе реализация данной идеологии будет рассмотрена более детально.
Следует помнить, что C8051F020 является микроконтроллером. Из его характеристик отметим следующее. Он позволяет получить пиковую производительность 25 MIPS, содержит Flash-память программ объемом 64 кбайт, а также 4352 байт ОЗУ. Цифровая подсистема кристалла включает пять 16-разрядных счетчиков-таймеров, сторожевой таймер, последовательные интерфейсы (два UART, SMBus и SPI) (рис. 2). Для внутрисхемной отладки и программирования предназначен интерфейс JTAG. Микроконтроллер имеет 64 линии ввода-вывода и выпускается в корпусе TQFP100. Диапазон питающих напряжений составляет 2,7-3,6 В, рабочий температурный диапазон — индустриальный (-40…+85 °С).
Наличие интерфейса внешней памяти, который может работать в мультиплексированном и немультиплексированном режимах, позволяет увеличивать объем оперативной памяти. Ширина шины адреса интерфейса внешней памяти составляет 16 бит, шины данных — 8 бит.
Программирование АЦП и ЦАП
12-разрядный АЦП (АЦП0)
Подсистема АЦП0, показанная на рис. 3, состоит из 9-канального аналогового мультиплексора (AMUX0), операционного усилителя с программируемым коэффициентом усиления (PGA0) и 12-разрядного АЦП последовательного приближения (SAR). Максимальная частота дискретизации АЦП0 составляет 100 тысяч отсчетов/сек, которая определяется частотой системного тактового сигнала, деленной на значение, задаваемое битами AD0SC регистра ADC0CF.
Работа АЦП0 разрешается установкой бита AD0EN (ADC0CN.7) в 1. Если этот бит имеет значение 0, то подсистема АЦП0 находится в режиме низкого энергопотребления. Все режимы работы AMUX0, PGA0 и АЦП конфигурируются через регистры специальных функций (SFR).
8 каналов AMUX0 доступны для измерений внешнего сигнала, а 9-й подключен к температурному датчику на кристалле. Каждая пара входов мультиплексора может быть запрограммирована для работы либо в дифференциальном, либо в однопроводном режиме. AMUX0 по умолчанию инициализируется в однопроводном режиме. AMUX0 управляется двумя регистрами SFR: регистром выбора канала AMX0SL и конфигурационным регистром AMX0CF (см. ниже раздел «Регистры специальных функций»).
PGA0 усиливает сигнал с выхода AMUX0 с коэффициентом, определенным конфигурационным регистром АЦП0 ADC0CF (см. табл. 7). PGA0 может быть запрограммирован с коэффициентом 0.5, 1, 2, 4, 8 или 16. По умолчанию коэффициент усиления равен 1.
Если АЦП разрешен, и сигналы на запуск преобразований не поступают, то, тем не менее, происходит непрерывная выборка входного сигнала АЦП0. При установке бита AD0TM (регистра управления режимом выборки-хранения АЦП0 ADC0CN) в 1 АЦП0 функционирует в энергосберегающем режиме выборки-хранения. В этом режиме каждому преобразованию предшествует период выборки, равный 3 периодам частоты преобразования SAR0 (после сигнала запуска преобразования АЦП). При использовании внешнего сигнала CNVSTR для запуска АЦП в энергосберегающем режиме выборки-хранения АЦП0 осуществляет выборку только при низком сигнале CNVSTR, а преобразование запускается по переднему фронту CNVSTR (рис. 4). Режим выборки может быть отключен при переходе кристалла в энергосберегающий режим (standby или спящий режим).
При изменении конфигурации АЦП0 (например, изменение параметров PGA и MUX) для осуществления корректного преобразования необходимо учитывать минимальное время установки, обусловленное сопротивлением MUX, емкостью накопительных конденсаторов АЦП, сопротивлением внешнего источника сигнала, а также требуемой точностью преобразования. В data sheet приведена примерная формула расчета времени установки в зависимости от требуемой точности установления сигнала АЦП0. Так как в энергосберегающем режиме выборки после запуска каждого преобразования выборка длится 3 периода частоты преобразования АЦП, то для большинства приложений эти 3 периода будут перекрывать время установки. Минимальное значение времени установки составляет 1,5 мкс.
Запуск преобразования АЦП0
Преобразование может быть запущено четырьмя разными способами в зависимости от состояния битов AD0CM1 и AD0CM0 в регистре ADC0CN (см. табл. 8):
- программно (записью 1 в ADOBUSY);
- по переполнению Таймера2;
- по переполнению Таймера3;
- по внешнему сигналу (по переднему фронту на CNVSTR).
Бит AD0BUSY устанавливается в 1 во время преобразования и сбрасывается в 0 после завершения преобразования. Задний фронт AD0BUSY инициирует прерывание (если разрешено) и устанавливает флаг прерывания AD0INT. Преобразованные данные сохраняются в регистры ADC0H и ADC0L и могут быть выровнены либо по левому, либо по правому краю в этой паре регистров в зависимости от состояния бита AD0LJST (ADC0CN.0):
- Если AD0LJST = 0, то результат преобразования АЦП выравнивается по правому краю пары регистров и будет храниться в ADC0H[3:0]:ADC0L[7:0]. Причем ADC0H[7:4] является знаковым разрядом ADC0H.3 для дифференциальных данных, в противном случае он принимает значение 0000b.
- Если AD0LJST = 1, то результат выравнивается по левому краю, и будет храниться в ADC0H[7:0]:ADC0L[7:4] и ADC0L[3:0] = 0000b.
Примеры:
- Если выходное слово данных ADC0 = FFFH (111111111111 b) и AD0LJST = 0, то в регистр результата будет записано ADC0H:ADC0L = = 0FFFH (0000111111111111).
- Если AD0LJST = 1, то ADC0H:ADC0L = = FFF0H (1111111111110000b).
Формат результата преобразования 12-разрядного АЦП
Связь входных аналоговых значений с данными в регистре результата преобразования АЦП0 можно вычислить по следующей формуле (при AD0LJST = 0):
ADC0Code = Vin x | Gain | 2 n
VREF
|
|
где
- V
in— значение напряжения входного аналогового сигнала (В);- Gain- коэффициент усиления PGA0;
- V
REF— значение опорного напряжения (В);- n- разрядность результата, n = 12 для однопроводных и n = 11 для дифференциальных входов.
- Gain- коэффициент усиления PGA0;
Рассмотрим пример, где AIN0 используется как вход в однопроводном режиме (AMX0CF=00H и AMXSL=00H), а коэффициент усиления равен 1. Результаты преобразования для различных значений входного сигнала приведены в таблице 2.
Значение входного напряжения AIN0-AGND, В |
ADC0H:ADC0L (AD0LJST = 0) |
ADC0H:ADC0L (AD0LJST = 1) |
|||
|
0FFFH | FFF0H | |||
|
0800H | 8000H | |||
|
07FFH | 7FF0H | |||
0 | 0000H | 0000H |
Если AIN0 и AIN1 используются как входы в дифференциальном режиме (AMX0CF=01H и AMXSL=00H) и коэффициент усиления равен 1, получим следующие результаты (табл. 3).
AIN0-AIN1, В | ADC0H:ADC0L (AD0LJST = 0) |
ADC0H:ADC0L (AD0LJST = 1) |
|||
|
07FFH | 7FF0H | |||
|
0400H | 4000H | |||
|
0001H | 0010H | |||
0 | 0000H | 0000H | |||
|
FFFFH (-1d) | FFF0H | |||
|
FC00H (-1024d) | C000H | |||
— VREF |
F800H (-2048d) | 8000H |
Задание режимов работы АЦП0 рекомендуется выполнять в следующей последовательности:
- Задание конфигурации опорного напряжения (REF0CN).
- Установка тактовой частоты преобразования SAR0 и коэффициента усиления PGA0 (ADC0CF).
- Задание конфигурации входных каналов мультиплексора (AMX0CF).
- Выбор требуемого входного канала мультиплексора (AMX0SL).
- Установка соответствующего бита управления, выбор режима запуска преобразования и разрешение работы АЦП0 (ADC0CN).
Другие входные каналы мультиплексора (шаг 3) могут быть выбраны при процедуре обработки прерывания (ISR) в АЦП0 после преобразования входного сигнала на текущем канале и сброса бита AD0INT. Сигнал на заново выбранном канале будет преобразован в следующем цикле. После инициализации преобразования установкой AD0BUSY в 1 определение окончания преобразования можно производить опросом бита AD0INT (ADC0CN.5). Рекомендуемая последовательность действий при процедуре опроса:
- Сброс AD0INT в 0.
- Установка AD0BUSY в 1.
- Ожидание 1 в AD0INT.
- Обработка результата преобразования АЦП0.
|
Пример 2: измерение температуры с использованием встроенного температурного датчика (9-й канал АЦП0). У микроконтроллера C8051F020 точность внутреннего осциллятора невысокая и составляет 20%, поэтому в данном примере используется тактовый генератор с внешним кварцевым резонатором.
|
Переполнение Таймера 3 используется для инициализации преобразования АЦП0. Прерывание (EIE2.0) от Таймера 3 также разрешено. Следовательно, переход к процедуре обработки прерывания (ISR) Таймера 3 выполняется одновременно с запуском преобразования АЦП. В начале процедуры происходит сброс TF3 (флага переполнения Таймера 3) и далее опрашивается флаг AD0INT (ожидается его установка в 1). Флаг AD0INT устанавливается в 1 после завершения преобразования АЦП. Далее значение преобразования АЦП считывается из регистра АЦП0 и записывается в переменную ADC0_reading.
Если нужно посмотреть значение переменной ADC0_reading в момент отладки программы, следует войти в окно редактора кода интегрированной среды разработки (IDE) Silicon Labs и нажатием правой кнопки мыши на имени переменной добавить ее в окно просмотра (Watch). При остановке программы данные в окне просмотра обновляются, отображая последнее значение переменных.
Вместо использования метода опроса (как показано в вышеприведенном программном коде) также могут быть использованы прерывания от АЦП0, которые разрешаются установкой бита EADC0 (EIE2.1). Процедура обработки прерываний для АЦП0 будет вызываться каждый раз при завершении преобразования. При процедуре обработки прерываний необходимо считывать регистр АЦП0 и сохранять его значение, а уже после этого сбрасывать флаг AD0INT.
Пример 3: измерения аналоговых сигналов с использованием прерываний. Инициализационный код АЦП и соответствующей процедуры обработки прерывания приведены ниже.
|
Регистры специальных функций (SFR) АЦП0
Опишем регистры выбора канала AMUX0 (AMX0SL), конфигурационный регистр AMUX0 (AMX0CF), регистр конфигурации АЦП0 (ADC0CF), управляющий регистр АЦП0 (ADC0CN).
AMX0SL: Регистр выбора канала AMUX0
Бит | Символ | Описание |
7-4 | — | Не используется, Read = 0000, Write = не важно |
3-0 | AMX0AD3U0 | AMX0 биты адреса 0000U1111: входы АЦП выбираются согласно таблице 5 |
Регистр AMUX0SL, Биты 3-0 (AMX0AD3-0) | |||||||||||
0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1xxx | |||
Регистр AMX 0CF, Биты 3-0 |
0000 | AIN0 | AIN1 | AIN2 | AIN3 | AIN4 | AIN5 | AIN6 | AIN7 | Темп. датчик | |
0001 | +(AIN0) -(AIN1) |
AIN2 | AIN3 | AIN4 | AIN5 | AIN6 | AIN7 | Темп. датчик | |||
0010 | AIN0 | AIN1 | +(AIN2) -(AIN3) |
AIN4 | AIN5 | AIN6 | AIN7 | Темп. датчик | |||
0011 | +(AIN0) -(AIN1) |
+(AIN2) -(AIN3) |
AIN4 | AIN5 | AIN6 | AIN7 | Темп. датчик | ||||
0100 | AIN0 | AIN1 | AIN2 | AIN3 | +(AIN4) -(AIN5) |
AIN6 | AIN7 | Темп. датчик | |||
0101 | +(AIN0) -(AIN1) |
AIN2 | AIN3 | +(AIN4) -(AIN5) |
AIN6 | AIN7 | Темп. датчик | ||||
0110 | AIN0 | AIN1 | +(AIN2) -(AIN3) |
+(AIN4) -(AIN5) |
AIN6 | AIN7 | Темп. датчик | ||||
0111 | +(AIN0) -(AIN1) |
+(AIN2) -(AIN3) |
+(AIN4) -(AIN5) |
AIN6 | AIN7 | Темп. датчик | |||||
1000 | AIN0 | AIN1 | AIN2 | AIN3 | AIN4 | AIN5 | +(AIN6) -(AIN7) |
Темп. датчик | |||
1001 | +(AIN0) -(AIN1) |
AIN2 | AIN3 | AIN4 | AIN5 | +(AIN6) -(AIN7) |
Темп. датчик | ||||
1010 | AIN0 | AIN1 | +(AIN2) -(AIN3) |
AIN4 | AIN5 | +(AIN6) -(AIN7) |
Темп. датчик | ||||
1011 | +(AIN0) -(AIN1) |
+(AIN2) -(AIN3) |
AIN4 | AIN5 | +(AIN6) -(AIN7) |
Темп. датчик | |||||
1100 | AIN0 | AIN1 | AIN2 | AIN3 | +(AIN4) -(AIN5) |
+(AIN6) -(AIN7) |
Темп. датчик | ||||
1101 | +(AIN0) -(AIN1) |
AIN2 | AIN3 | +(AIN4) -(AIN5) |
+(AIN6) -(AIN7) |
Темп. датчик | |||||
1110 | AIN0 | AIN1 | +(AIN2) -(AIN3) |
+(AIN4) -(AIN5) |
+(AIN6) -(AIN7) |
Темп. датчик | |||||
1111 | +(AIN0) -(AIN1) |
+(AIN2) -(AIN3) |
+(AIN4) -(AIN5) |
+(AIN6) -(AIN7) |
Темп. датчик |
Входы мультиплексора (AIN0-AIN7) могут быть запрограммированы для работы либо в дифференциальном, либо в однопроводном режиме. Это позволяет выбирать наиболее подходящий режим измерения, а также производить изменение режимов . 9-й канал мультиплексора подключен к температурному датчику на кристалле. В таблице 5 приведены все возможные комбинации режимов работы каналов AMUX.
Бит | Символ | Описание |
7-4 | — | Не используется, Read = 0000, Write = не важно |
3 | AIN67IC | Конфигурационные биты пары входов AIN6, AIN7 0: AIN6 и AIN7 — однопроводные входы 1: дифференциальный вход AIN6-AIN7 (+, -) |
2 | AIN45IC | Конфигурационные биты пары входов AIN4, AIN5 0: AIN4 и AIN5 — однопроводные входы 1: дифференциальный вход AIN4-AIN5 (+, -) |
1 | AIN23IC | Конфигурационные биты пары входов AIN2, AIN3 0: AIN2 and AIN3 — однопроводные входы 1: дифференциальный вход AIN2-AIN3 (+, -) |
0 | AIN01IC | Конфигурационные биты пары входов AIN0, AIN1 0: AIN0 and AIN1 — однопроводные входы 1: дифференциальный вход AIN0-AIN1 (+, -) |
Для каналов, сконфигурированных как дифференциальные входы, слова результата преобразования АЦП0 имеют формат двоичного дополнительного кода.
Максимальная частота работы блока последовательного приближения (SAR0) АЦП0 составляет 2,5 МГц.
CLK SAR0 = |
SYSCLK |
AD0SC + 1 |
(см. таблицу 7)
Бит | Символ | Описание | ||||
7-3 | AD0SC4U0 |
Биты установки частоты преобразования SAR0 АЦП0 Частоту преобразования SAR0 получают из системной тактовой частоты по следующей формуле:
где AD0SC — 5-битное значение AD0SC4U0 |
||||
2-0 | AMP0GN2U0 |
Внутренний усилитель с программируемымкоэффициентом усиления (PGA) АЦП0 000: Коэф.= 1 001: Коэф.= 2 010: Коэф.= 4 011: ?Коэф.= 8 10x: Коэф.= 16 11x: Коэф.= 0,5 |
Таким образом, если системная тактовая частота равна 16 МГц, и биты AD0SC4-0 установлены в 10000b, то частота преобразования SAR0 = 16 МГц / 17 = 941,176 кГц. Следовательно, если в ADC0CF записано значение 10000000, то частота преобразования SAR0 будет примерно равна 941 кГц, а коэффициент усиления PGA0 равен 1.
Бит | Символ | Описание |
7 | AD0EN | Бит разрешения АЦП0 0: АЦП0 запрещен; 1: АЦП0 разрешен. |
6 | AD0TM | Бит режима выборки АЦП0 0: Постоянная выборка входного аналогового сигнала до начала преобразования. АЦП должен быть разрешен. 1: Выборка при низком уровне внешнего сигнала на CNVSTR, преобразование запускается по переднему фронту на CNVSTR. |
5 | AD0INT | Флаг прерывания по окончанию преобразования АЦППримечание: Этот флаг должен быть сброшен программно в 0. 0: АЦП0 не закончил преобразование данных после последнего сброса этого флага. 1: АЦП0 завершил преобразование данных. |
4 | AD0BUSY | Бит занятости АЦП0 0: Преобразование АЦП0 завершено или в настоящий момент не осуществляется. AD0INT устанавливается в 1по заднему фронту AD0BUSY. 1: АЦП0 осуществляет преобразование. |
3-2 | AD0CM1U0 | Выбор способа запуска преобразования АЦП0 Если AD0TM=0, то преобразование АЦП0 инициализируется: 00: При записи <1> в AD0BUSY. 01: По переполнению Таймера 3. 10: По переднему фронту внешнего сигнала на CNU VSTR. 11: По переполнению Таймера 2. Если AD0TM=1: 00: Выборка запускается по записи <1> в AD0BUSY, длится 3 такта, далее следует преобразование. 01: Выборка запускается по переполнению Таймера 3 и длится 3 такта, далее следует преобразование. 10: АЦП0 осуществляет выборку при низком уровне на CNVSTR, преобразование запускается по переднему фронту внешнего сигнала на CNVSTR. 11: Выборка запускается по переполнению Таймера 2, длится 3 такта SAR, далее следует преобразование. |
1 | AD0WINT | Флаг прерываний окна сравнения АЦП0 Примечание: Этот бит должен сбрасываться программно |
0 | AD0LJST | Выбор выравнивания в АЦП0 0: Данные регистров ADC0H: ADC0L выровнены по правому краю. 1: Данные регистров ADC0H: ADC0L выровнены по левому краю. |
Регистры ADC0H и ADC0L используются для хранения слов данных старших и младших значащих разрядов соответственно.
Для улучшения точности измерения АЦП предусмотрена функция программируемого «оконного детектора». В регистрах микроконтроллера программируются нижнее и верхнее значения отслеживаемого напряжения. Регистры ADC0GTH, ADC0GTL, ADC0LTH и ADC0LTL являются регистрами значений верхнего и нижнего порога выходного сигнала АЦП0 соответственно. В случае, если напряжение на входе АЦП выйдет за пределы заданных пороговых значений, генерируется соответствующее прерывание, избавляя пользовательскую программу от необходимости циклического опроса.
8-разрядный АЦП (АЦП1)
Подсистема АЦП1 состоит из 8-канального аналогового мультиплексора (AMUX1), операционного усилителя с программируемым коэффициентом усиления (PGA1) и 8-разрядного АЦП последовательного приближения (SAR) (рис. 5). Схема работы с АЦП1 аналогична схеме работы с АЦП0, но есть отличия в некоторых деталях. Например, АЦП1 не поддерживает режим программируемого оконного детектора и имеет 5 режимов запуска преобразования (вместо 4). Максимальная скорость преобразования АЦП1 такая же, как у АЦП0, и составляет 100 ksps.
АЦП1 разрешается установкой бита AD1EN (ADC1CN.7) в 1. Если этот бит имеет значение 0, то подсистема АЦП1 находится в режиме низкого энергопотребления. Режимы преобразования данных AMUX1, PGA1 и АЦП1 конфигурируются через регистры специального назначения SFR.
8 каналов AMUX1 доступны для измерения внешнего сигнала и могут быть сконфигурированы только в однопроводном режиме. Канал мультиплексора выбирается регистром AMX1SL SFR. PGA1 усиливает выходной сигнал AMUX1 в число раз, определенное регистром конфигурации ADC1CF АЦП1 (возможные значения коэффициентов усиления 0,5, 1, 2 или 4; по умолчанию, коэффициент равен 0,5).
Так как входы АЦП коммутируются на внешние выводы при помощи цифрового коммутатора (Crossbar), то аналоговые входы должны быть сконфигурированы установкой в 0 соответствующих битов в регистре P1MDIN. Вывод AIN1 выводится на Порт 1, в противном случае по умолчанию выводы Порта 1 устанавливаются в режим цифровых входов-выходов.
|
Запуск преобразования АЦП1
Преобразование может запускаться 5 различными способами, в соответствии с установленными режимами запуска преобразования АЦП1 (AD1CM2-0) в регистре ADC1CN:
- Программно, записью 1 в AD1BUSY.
- По переполнению Таймера 2.
- По переполнению Таймера 3.
- По внешнему сигналу (переднему фронтуна CNVSTR).
- Записью ‘1’ в AD0BUSY (ADC0CN.4) (инициализация преобразования АЦП1 и АЦП0 одной программной командой).
12-разрядные ЦАП (ЦАП0 и ЦАП1)
Подсистема ЦАП состоит из двух 12-разрядных ЦАП с потенциальными выходами: ЦАП0 и ЦАП1. Оба ЦАП функционально идентичны и каждый конфигурируется через соответствующие регистры управления: DAC0CN и DAC1CN. На рис. 6 показана функциональная блок-схема обоих ЦАП. Время установки сигнала на выходе ЦАП не превышает 10 мкс, при этом существует возможность синхронизации выходов ЦАП сигналами таймера.
В соответствии с входными значениями кода (от 000H до FFFH) выходной сигнал ЦАП будет принимать значения напряжения от 0 В до VREF. Опорное значение для каждого ЦАП подается на вывод VREFD.
Формирование выходного сигнала
Команда на обновление значения выходного напряжения ЦАП формируется четырьмя способами:
- По запросу (запись в старший байт регистра слова данных ЦАПx, DACxH, x = 0 или 1).
- По переполнению Таймера 2.
- По переполнению Таймера 3.
- По переполнению Таймера 4.
Режим обновления выходного сигнала ЦАП по запросу является режимом по умолчанию. В этом режиме данные на выходе ЦАП обновляются при записи в регистр DACxH.
Данные, записанные в DACxL, сохраняются, но не отображаются на выходе ЦАП до записи данных вDACxH. Поэтому для записи 12-разрядного слова данных в АЦП сначала следует записать регистр DACxL, а потом DACxH.
ЦАП могут быть использованы в 8-разрядном режиме с записью данных только в DACxH (при этом DACxL устанавливают обычно в 00H).
В режиме обновления выходного сигнала ЦАП по переполнению таймера выходной сигнал ЦАП обновляется независимо от процессора. Записанные в пару регистров ЦАП значения (DACxL и DACxH) сохраняются до переполнения соответствующего таймера. После этого содержимое DACxH:DACxL копируется во входные «защелки» ЦАП, обновляя значение на выходе.
Режим обновления выходного сигнала ЦАП по переполнению таймера удобно использовать для формирования периодического выходного сигнала, например, синусоиды с определенной выходной частотой.
Формат входных данных
Формат 12-разрядного слова в регистрах DACxH и DACxL может быть сконфигурирован установкой соответствующих битов DACxDF (DACxCN.[2:0]). Пять вариантов формата слов показаны на рис. 7.
Задание режимов работы ЦАП
Конфигурирование ЦАП необходимо выполнять в следующей последовательности:
- Конфигурация опорного напряжения (REF0CN).
- Запись в регистры входных данных требуемого 12-разрядного цифрового значения (DACxH и DACxL).
- Установка соответствующего режима формирования входных данных и формата слов данных, разрешения ЦАПх (DACxCN.7).
- При необходимости конфигурирование и запуск соответствующих таймеров.
Пример:
|
Регистры специальных функций (SFR) ЦАП0
Разрешение работы ЦАП, выбор режима обновления сигнала на выходе ЦАП, выбор формата слов данных на входе ЦАП осуществляется программно через регистр специальных функций (таблица 9).
Бит | Символ | Описание |
7 | DAC0EN | Бит разрешения ЦАП0 0: ЦАП0 запрещен. ЦАП0 в режиме низкого энергопотребления и вывод выхода в состоянии высокого импеданса. 1: ЦАП0 разрешен. ЦАП0 в рабочем состоянии и вывод выхода активен. |
6-5 | — | Не используется. Read = 00, Write = не важно |
4-3 | DAC0MD1U0 | Биты режима ЦАП0 Обновление выходного сигнала ЦАП происходит: 00: при записи в регистр DAC0H. 01: по переполнению Таймера 3. 10: по переполнению Таймера 4. 11: по переполнению Таймера 2. |
2-0 | DAC0DF2U0 | Биты формата данных ЦАП0 (см. рис. 7) 000: Старшие 4 бита слова данных ЦАП0 в DAC0H[3:0], младшие 8 битов в DAC0L[7:0]. 001: Старшие 5 битов слова данных ЦАП0 в DAC0H[4:0], младшие 7 битов в DAC0L[7:1]. 010: Старшие 6 битов слова данных ЦАП0 в DAC0H[5:0], младшие 6 битов в DAC0L[7:2]. 011: Старшие 7 битов слова данных ЦАП0 в DAC0H[6:0], младшие 5 битов в DAC0L[7:3]. 1xx: Старшие 8 битов слова данных ЦАП0 в DAC0H[7:0], младшие 4 бита в DAC0L[7:4]. |
DAC0H и DAC0L используются для хранения старшего и младшего байта слова данных ЦАП0 соответственно. Регистры специальных функций (SFR) ЦАП1 аналогичны SFR ЦАП0.
Заключение
Микроконтроллер C8051F020 удобно использовать во встраиваемых применениях, требующих высокой производительности, большой памяти программ и хороших характеристик АЦП/ЦАП. Следует добавить, что микроконтроллер C8051F020 был выпущен достаточно давно, в настоящее время фирма SiLabs выпускает новые микроконтроллеры с лучшими характеристиками, например C8051F064 с двумя 16-разрядными АЦП со скоростью преобразования 1 Msps, или C8051F350 с 24-разрядным сигма-дельта АЦП.
В заключение можно сказать, что микроконтроллеры с интегрированными АЦП и ЦАП являются удобным решением для систем сбора и обработки данных от многих датчиков. Уступая чисто аналоговой обработке только в быстродействии, такой микроконтроллер отличается большой функциональной гибкостью и точностью благодаря наличию обширной аналоговой и цифровой периферии, что значительно упрощает разработку конечного устройства.
Литература
- Data sheet C8051F02x.pdf (www.silabs.com)
- Application Note AN122: Annotated ‘C’ examples for the ‘F02x Family (www.silabs.com)
- Moi Tin Chew, Gourab Sen Gupta. Embedded Programming with Field-Programmable Mixed-Signal uControllers. 2005.