Синхронный запуск двух АЦП
И тактируется частотой CPU_CLK. Все задержки выбраны минимально возможные в 1 машинный такт. В качестве опорного напряжения выбран источник AUcc: GND. Реализован однократный запуск АЦП с последующей проверкой флага Flg_REG_EOCIF в регистре состояния MDR_ADC→ADC1_STATUS. Вывод результатов работы осуществляется на графический дисплей в три строки: первая строка содержит информацию о тактовой… Читать ещё >
Синхронный запуск двух АЦП (реферат, курсовая, диплом, контрольная)
Для ускорения оцифровки одного канала можно использовать оба АЦП, запускаемые с задержкой одного относительно другого по времени. Время задержки запуска второго АЦП относительно первого задается битами Delay_ADC. При этом задержка Delay_ADC определяется в тактах CPU_CLK. независимо от того, на какой частоте ADC_CLK или CPU_CLK идет само преобразование. Для одновременного запуска процесса преобразования необходимо установить бит Cfg_Sync_Conver и запустить процесс преобразования установкой бита Cfg_REG_GO. Синхронный запуск двух АЦП может работать также и в режиме последовательного преобразования нескольких каналов. Для корректного задания режимов работы АЦП все изменения в регистре ADCx_CFG необходимо сделать до задания бита Go или Cfg_REG_SAMPLE, иначе новая конфигурация будет действовать со следующего преобразования.
Назначение регистров контроллера АЦП
MDR_RST_CLK->ADC_MCO_CLOCK, смещение Ох 14 — регистр управления тактовой частотой АЦП (см. рис. 3.22):
[31:14]- биты не используются;
[13] (ADC_CLK_EN) — бит разрешения выдачи тактовой частоты ADC_CLK (1 — разрешен, 0 — запрещен);
[12] - бит не используется;
[11:8] (ADC_C3_SEL) — выбор делителя для ADC_C3:
Оххх — ADC_C3 = ADC_C2;
- 1000 — ADC_C3 = ADC_C2/2;
- 1001 — ADC_C3 = ADC_C2/4;
- 1010 — ADC_C3 = ADC_C2 / 8;
- 1111 — ADC_C3 = ADC_C2/256;
[7:6] - не используются;
[5:4] (ADC_C2_SEL) — выбор источника для ADC_C1:
- 00 — LSE;
- 01 — LSI;
- 10 — ADC_C1;
- 11 -HSI_C1;
[3:2] - не используются;
[1:0] (ADC_C1_SEL) — выбор источника для ADC_C1:
- 00 — CPU_C1 (до умножителя PLL);
- 01 — USB_C1 (до умножителя PLL);
- К) — CPU_C2 (после умножителя PLL);
- 11 — USB_C2 (после умножителя PLL); MDR_RST_CLK->PER_CLOCK, смещение 0×1 с — регистр управления тактовой частотой периферийных блоков, бит [17] отвечает за включение АЦП;
MDR_ADC, базовый адрес 0×4008_8000 — контроллер АЦП; MDR_ADC->ADC1_CFG, смещение 0×00- регистр управления A DC 1;
[31:28] (Delay_ADC) — задержка между началом преобразования ADC1 и ADC2 при последовательном переборе либо работе на один канал:
- 0000 — 1 такт CPLLCLK;
- 0001−2 такта CPU_CLK;
- 1111 -16 тактов CPLLCLK.
[27:25] (Delay_Go) — дополнительная задержка перед началом преобразования после выбора канала:
- 000−1 такт CPLLCLK;
- 001 — 2 такта CPU_CLK;
- 111−8 тактов CPLLCLK.
[24:21] (TR) — подстройка опорного напряжения;
[20] (SEL_VREF) — выбор для оцифровки источника опорного напряжения на 1.23 В (0 — не выбран; 1 — выбран), должен использоваться совместно с выбором канала Cfg_REG_CHS= 30;
[19] (SEL_TS) — выбор для оцифровки датчика температуры.
(0 — не выбран; 1 — выбран), должен использоваться совместно с выбором канала Cfg_REG_CHS = 31;
[18] (TS_BUF_EN) — включение выходного усилителя для датчика температуры и источника опорного напряжения (0 — выключен; 1 — включен), используется при TS_EN= 1;
[17] (TS_EN) — включение датчика температуры и источника опорного напряжения (0 — выключен; 1 — включен); при включении датчика температуры и источника опорного напряжения выходной сигнал стабилизируется в течение 1 мс;
[16] (Cfg_Sync_Conver) — запускает работу двух АЦП одновременно, при этом биты конфигурации ADC2 (Cfg_REG_DIVCLK, Cfg_REG_ADON, Cfg_M_REF и CfgJREG_CHS) берутся из регистра конфигурации ADC1 (0 — независимые АЦП; 1 — синхронные АЦП);
[15:12] (Cfg_REG_DIVCLK)-выбор коэффициента деления частоты процессора:
- 0000 — CPU_CLK = HCLK;
- 0001 — CPLLCLK = HCLK/2;
- 0010 — CPLLCLK = HCLK/4;
- 0011 — CPLLCLK = HCLK/8;
- 1011 — CPLLCLK = HCLK/2048.
Остальные CPLLCLK = HCLK;
[11] (Cfg_M_REF) — выбор источника опорных напряжений:
- 0 — внутреннее опорное напряжение (от AUcc и AGND);
- 1 — внешнее опорное напряжение (от «ADC0_REF+» и newline «ADC1_REF-»);
[10] (Cfg_REG_RNGC) — разрешение автоматического контроля уровней (0 — не разрешено; 1 — разрешена выработка флага при выходе за диапазон в регистрах границы);
[9] (Cfg_REG_CHCH) — выбор переключения каналов: 0 — используется только выбранный канал; 1 — переключение включено (перебираются каналы, выбранные в регистре выбора канала); [8:4] (Cfg_REG_CHS) — выбор аналогового канала, по которому поступает сигнал для преобразования:
- 0 — 0-й канал;
- 1 — 1 -й канал;
- 11 111 — 31-й канал.
[3] (Cfg_REG_SAMPLE) — выбор способа запуска АЦП (0 — одиночное; 1 — последовательное), автоматический запуск после завершения предыдущего преобразования;
[2] (Cfg_REG_CLKS) — выбор источника синхросигнала CLK работы A DC (0 — CPLLCLK; 1 — ADC_CLK);
[1] (Cfg_REG_GO) — начало преобразования; запись «Г начинает процесс преобразования, сбрасывается автоматически;
[0] (Cfg^REG_ADON) — включение АЦП (0 — выключено; 1 — включено);
MDR_ADC->ADC2_CFG. смещение 0×04 — регистр управления ADC2; [31:28] - не используются;
[27:25] (Dclay_Go) — задержка перед началом следующего преобразования после завершения предыдущего при последовательном переборе каналов:
- 000 — 0 тактов CPU_CLK;
- 001−1 такт CPU_CLK;
- 111−7 тактов CPLLCLK.
[24:19] - не используются;
[18] (ADC2_OP) — выбор источника опорного напряжения 1.23 В: 0 — внутренний (неточный); 1 — от датчика температуры (точный). Необходимо, чтобы 6htTS_EN был равен 1;
[17] (ADCl_OP) — выбор источника опорного напряжения 1.23 В: 0-внутренний (неточный); 1 — отдатчика температуры (точный). Необходимо чтобы 6htTS_EN был равен 1;
[16] - не используется;
[15:12] (Cfg_REG_Dl VCLK) — выбор коэффициента деления частоты процессора:
- 0000 — CPU_CLK = HCLK;
- 0001 -CPU_CLK = HCLK/2;
- 0010 — CPU_CLK = HCLK/4;
- 0011 — CPU_CLK = HCLK/8;
- 1011 — CPU_CLK = HCLK/2048;
Остальные CPU_CLK = HCLK;
[11] (Cfg_M_REF) — выбор источника опорных напряжений:
- 0 — внутреннее опорное напряжение (от AUcc и AGND);
- 1 — внешнее опорное напряжение (от «ADC0_REF+» и «ADCLREF-»);
[10] (Cfg^REG_RNGC) — разрешение автоматического контроля уровней (0 — не разрешена; 1 — разрешена выработка флага при выходе за диапазон в регистрах границы);
[9] (Cfg_REG_CHCH) — выбор переключения каналов: 0 — используется только выбранный канал; 1 — переключение включено (перебираются каналы, выбранные в регистре выбора канала); [8:4] (Cfg_REG_CHS) — выбор аналогового канала, по которому поступает сигнал для преобразования:
- 0 0-й канал;
- 1 — 1-й канал;
- 11 111 — 31-й канал.
[3] (Cfg_REG_SAMPLE) — выбор способа запуска АЦП (0 — одиночное; 1 — последовательное), автоматический запуск после завершения предыдущего преобразования;
[2] (Cfg_REG_CLKS) — выбор источника синхросигнала CLK работы ADC (0 — CPILCLK; 1 — ADC_CLK);
[1] (Cfg_REG_GO) — начало преобразования; запись «1» начинает процесс преобразования, сбрасывается автоматически;
[0] (Cfg_REG_ADON) — включение АЦП (0 — выключено; 1 — включено);
MDR_ADC->ADCl_H_Level, смещение 0×08 — регистр верхней границы ADC1;
MDR_ADC->ADC2_H_Level, смещение 0×0с — регистр верхней границы ADC2;
[31:12] - не используются;
[11:0] (REG_H_LEVEL) — верхняя граница зоны допуска;
MDR_ADC->ADCl_L_Level, смещение 0×10 — регистр нижней границы аналого-цифрового преобразователя ADC1;
MDR_ADC->ADC2_L_Level, смещение 0×14 — регистр нижней границы аналого-цифрового преобразователя ADC2;
[31:12] - не используются;
[11:0] (REG_L_LEVEL) — нижняя граница зоны допуска;
MDR_ADC->ADC 1_RE SULT, смещение Ox 18 — регистр данных A DC 1;
MDR_ADC->ADC2_RESULT, смещение Oxlc — регистр данных ADC2;
[31:21] - не используются;
[20:16] (CHANNEL) — канал результата преобразования:
[15:12] - не используются;
[11:0] (RESULT) — значение результата преобразования;
MDR_ADC->ADC 1_STATUS, смещение 0×20 — регистр статуса A DC 1;
MDR_ADC->ADC2_STATUS, смещение 0×24-регистр статуса ADC2;
[31:5] - не используются;
[4] (ECOIF_IE) — флаг разрешения генерирования прерывания по событию Flg_REG_ECOIF (0 — прерывание не генерируется; 1 — прерывание генерируется);
[3] (AWOIF_IE) — флаг разрешения генерирования прерывания по событию Flg_REG_AWOIFEN (0 — прерывание не генерируется; 1 — прерывание генерируется);
[2] (Flg^REG_EOCIF) — флаг выставляется, когда закопчено преобразование и данные еще не считаны. Очищается считыванием результата из регистра ADCx_RESULT (1 — есть готовый результат преобразования; 0 — нет результата);
[1] (Flg_REG_AWOIFEN) — флаг выставляется, когда результат преобразования выше верхней или ниже нижней границы автоматического контроля уровней. Сбрасывается только при записи нуля в данный регистр флагов (0 — результат в допустимой зоне; 1 — вне допустимой зоны);
[0] (Flg_REG_OVERWRITE) — данные в регистре результата были перезаписаны, данный флаг сбрасывается только при записи нуля в данный бит регистра флагов (0 — не было события перезаписи несчитанного результата; 1 — был результат преобразования, который не был считан);
MDR_ADC->ADC1_CHSEL. смещение 0×28 — регистр выбора каналов перебора аналого-цифрового преобразователя ADC1;
MDR_ADC->ADC2_CHSEL.смещение 0×2с-регистр выбора каналов перебора аналого-цифрового преобразователя ADC2;
[31:0] (Sl_Ch_Ch_REF) — выбор каналов автоматического перебора (О-в соответствующем бите, если канал не участвует в переборе; 1 — канал участвует в переборе);
Программа 11. На рис. 3.24 приведен фрагмент принципиальной схемы входных цепей встроенного АЦП. Перемычка ADC_IN_SEL (Х5) должна быть установлена в положение TRIM. Входной сигнал для преобразования при этом поступает с многооборотного переменного резистора TRIM на линию PD7 порта PORTD. Выбран режим работы с одним АЦП (ADC1), который подключен к седьмому каналу.
Рис. 3.24. Схема входных линий АЦП на отладочной плате 1986EvBrd64 (микроконтроллер 1986ВЕ92У. 64 вывода, тип корпуса Н 16.64−1 В).
и тактируется частотой CPU_CLK. Все задержки выбраны минимально возможные в 1 машинный такт. В качестве опорного напряжения выбран источник AUcc: GND. Реализован однократный запуск АЦП с последующей проверкой флага Flg_REG_EOCIF в регистре состояния MDR_ADC->ADC1_STATUS. Вывод результатов работы осуществляется на графический дисплей в три строки: первая строка содержит информацию о тактовой частоте микроконтроллера; вторая строка содержит 12-разрядный цифровой код, являющийся результатом преобразования; третья строка содержит информацию о величине напряжения, поступающего на вход АЦП. На рис. 3.25 приведена программа, демонстрирующая работу встроенного АЦП. Для доступа к функциям графического дисплея к проекту подключена библиотека lcd_mlt.Iib. Все измерения проводят в бесконечном цикле while, поэтому можно наблюдать изменение показаний дисплея в режиме реального времени при изменении сопротивления переменного резистора TRIM.
Рис. 3.25. Программа, демонстрирующая работу встроенного АЦП.
Секция Include содержит ссылки на два стандартных файла описания оборудования (MDR32F*.h). файл описания функций доступа к графическому дисплею (lcd_mlt.h), файл с отображаемыми шрифтами для вывода на графический дисплей (font.h) и файл описания стандартной библиотеки ввода-вывода (stdio.li). Секция Define содержит определение константы STR_LENGTH, задающей размер строки для вывода на графический дисплей.
В секции прототипов описаны следующие функции: frqjnit — настройка тактирования микроконтроллера (частота 8 МГц); adcjnit — начальная инициализация АЦП; ascii — перекодировка входного символа в ASCII кодировке в указатель на массив с графическим образом этого символа; print_mlt — перекодировка строки символов в ASCII кодировке в строку указателей на графические образы этих символов.
Ранее уже обсуждались исходные тексты первых двух функций frqjnit (см. рис. 3.6) и ascii (см. рис. 3.15).
В секции main декларированы следующие переменные: ch_str — указатель на строку длиной STR_LENGTH для символов в ASCII кодировке; adc_result — двухбайтовое целое для записи результата работы АЦП в двоичном коде; adc_result — четырехбайтовое целое для записи частоты тактирования; adc_result_volt — тип float для записи результата работы АЦП в вольтах. Далее идет инициализация оборудования: тактовый генератор (frqjnit), АЦП (adcjnit), порты контроллера для подключения графического дисплея (MltPinCfg), микросхема графического дисплея (Lcdlnit). Далее идут очистка графического дисплея и получение системной переменной SystemCoreClock, содержащей информацию о тактовой частоте.
Вывод информации на графический дисплей включает два этапа: (1) использование стандартной функции sprinlf для форматного вывода в строку ASCII символов ch_str; (2) использование функции print_mlt для вывода этой строки на экран дисплея. Информация о тактовой частоте выводится до начала бесконечного цикла while. В геле цикла while осуществляется пуск АЦП. ожидание флага готовности результата и вывод результата в двух видах: двоичный код и напряжение в вольтах.
На рис. 3.26 приведены исходные тексты новых функций, использованных для работы с АЦП. Эти функции ранее не обсуждались, поэтому обсудим их более подробно.
Функция adcjnit осуществляет начальную инициализацию аналого-цифрового преобразователя, заключающуюся в выборе частоты CPLLCLK и подаче ее для тактирования АЦП. Все настройки для однократного запуска одного АЦП сосредоточены в регистре MDR_ADC->ADC1_CFG и состоят в выборе седьмого канала для подачи на вход АЦП и включения АЦП.
Функция print_mlt имеет два входных параметра — указатель на текстовую строку ch_str в ASCII кодировке и позиционный номер str_num для размещения строки на графическом дисплее. Алгоритм работы заключается в преобразовании каждого ASCII-символа строки ch_str в указатель на графический образ этого символа. Преоб;
Рис. 3.26. Подпрограммы-функции для начальной инициализации и вывода результатов работы АЦП.
разование каждого символа осуществляется при помощи вспомогательной функции ascii. В результате преобразования получают строку array из указателей графических образов символов, соответствующих исходной строке ASCII-символов. В заключение вызывают функцию LcdPutString для вывода строки графических образов на экран дисплея. Особенностью функции print_mlt является дополнение количества элементов каждой строки до значения STR_LENGTH. Каждый дополнительный элемент соответствует символу пробела.