Помощь в написании студенческих работ
Антистрессовый сервис

Синхронный запуск двух АЦП

РефератПомощь в написанииУзнать стоимостьмоей работы

И тактируется частотой 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), который подключен к седьмому каналу.

Схема входных линий АЦП на отладочной плате 1986EvBrd_64 (микроконтроллер 1986ВЕ92У. 64 вывода, тип корпуса Н 16.64-1 В).

Рис. 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. Каждый дополнительный элемент соответствует символу пробела.

Показать весь текст
Заполнить форму текущей работой