4.5 Исследование модуля АЦП
Одним из наиболее важных периферийных устройств процессора является аналого-цифровой преобразователь (АЦП), который работает как интерфейс, связывая контроллер с внешними устройствами.
Такие физические величины, как температура, влажность, давление, скорость и ускорение являются аналоговыми сигналами. Известно, что обрабатывать проще дискретные сигналы. Для преобразования аналоговых сигналов в дискретные и служит АЦП.
Зависимость между входным аналоговым напряжением и его дискретным значением, учитывая разрядность АЦП, выражается формулой:
(4.1) |
где и - рабочий диапазон входных напряжений;
n – разрядность
В процессоре F2812 = 3 В и = 0 В, n = 12.
В процессоре имеется 16 выводов для аналоговых сигналов. Однако при осуществлении преобразования АЦП работает только с одним выводом, что обеспечивается с помощью внутреннего устройства “выборки-хранения” (sample and hold). Процессор включает два УВХ, которые могут работать параллельно. К каждому УВХ подсоединено 8 мультиплексированных линий.
Можно запрограммировать модуль АЦП таким образом, чтобы автоматически происходило преобразование по всем 16 каналам. Следует помнить, что преобразование напряжения последующего канала осуществляется только после преобразования предыдущего.
В этой лабораторной работе мы будем преобразовывать напряжения каналов ADCIN_A0 и ADCIN_B0, подсоединенных к потенциометрам. Диапазон изменения напряжения от 0 до 3 В. Запуск АЦП осуществляется от GP таймера 1 модуля Менеджера Событий А с частотой 10 Гц.
Порядок выполнения лабораторной работы №5
Часть I
1. Создание проекта.
1.1 В Code Composer Studio создаем новый проект Lab6.pjt.
1.2 Добавляем в проект файлы: C:\tidcs\c28\dsp281x\v100\DSP281x_headers\source\DSP281x_GlobalVariableDefs.c
C:\tidcs\c28\dsp281x\v100\DSP281x_common\cmd\F2812_EzDSP_RAM_lnk.cmd;
C:\tidcs\c28\dsp281x\v100\DSP281x_headers\cmd\F2812_Headers_nonBIOS.cmd;
C:\ti\c2000\cgtoolslib rts2800_ml.lib;
C:\tidcs\c28\dsp281x\v100\DSP281x_common\source: DSP281x_PieCtrl.c; DSP281x_PieVect.c; DSP281x_DefaultIsr.c; DSP281x_Adc.c; DSP281x_usDelay.asm.
1.3 Включаем в проект заголовочные файлы: Project → Build Options, в закладке Compiler выбираем Preprocessor и в поле Include Search Path (-i) вводим: C:\tidcs\C28\dsp281x\v100\DSP281x_headers\include;..\include.
1.4 Задаем глубину стека: Project → Build Options → Linker → Stack Size: 0x400.
1.5 Компонуем проект: Project → Build.
1.6 Загружаем выходной файл: File → Load Program → Debug\ lab6.out.
1.7 Создаем файл, в котором будет находиться программа в С-коде: File → New → Source File.
2. Инициализация системы (подпрограмма “InitSystem()”).
2.1 Разрешаем работу сторожевого таймера с коэффициентом деления 64 (WDCR), сбрасываем сторожевой таймер (SCSR).
2.2 Настраиваем ЦСП на частоту 150 МГц (PLLCR), в предделитель высокоскоростного таймера заносим 2.
2.3 Разрешаем тактирование модуля АЦП и Менеджера Событий (PCLKCR).
3. Инициализация портов (подпрограмма “Gpio_select()”).
3.1 Настраиваем все выводы на работу в качестве портов (GPxMUX).
3.2. Настраиваем порты A, D, E, F, G на ввод (GPxDIR).
3.3 Настраиваем линии порта GPIOB15 – GPIOB8 на ввод, а GPIOB7 – GPIOB0 на вывод.
3.4 Сбрасываем биты регистров GPxQUAL в ноль.
4. Инициализация модуля Менеджера Событий.
4.1 Запрещаем выходы сравнения и выбираем полярность выходов сравнения принудительный низкий уровень (GPTCONA).
4.2 В регистре T1CON выбираем: непрерывный режим счета вверх, синхронизация от внутреннего источника, запрещаем режим сравнения, разрешаем работу GP таймера 1, задаем коэффициент деления 128.
4.3 Разрешаем запуск АЦП от Менеджера Событий А (GPTCONA).
4.4 Рассчитываем значение периода (T1PR), зная, что = 10 Гц:
5. Инициализация модуля АЦП.
5.1 Задаем: двух последовательный режим, запрещаем непрерывный режим, коэффициент деления 1 (ADCTRL1).
5.2 Записываем количество преобразований 2 (ADCMAXCONV).
5.3 Выбираем каналы ADCIN_A0 и ADCIN_B0 (ADCCHSELSEQ1).
5.4 Разрешаем преобразования от Менеджера Событий А, разрешаем прерывания АЦП в конце каждой последовательности (ADCTRL2)
5.3 Задаем делитель частоты высокосоростного таймера равный 4.
6. Настройка прерываний.
6.1 Указываем адрес вектора прерываний (ADCINT).
6.2 Разрешаем прерывание 6 группы 1 (PIEIER1).
6.3 Вызываем подпрограммы инициализации: модуля прерывания периферийных устройств “InitPieCtrl()”, вектора прерывания периферийных устройств “InitPieVectTable()”, модуля АЦП “InitAdc()”.
7. Получение результатов преобразования АЦП (подпрограмма “adc_isr()”).
7.1 Читаем результаты преобразования (ADCRESULT) и сохраняем их в Voltage_A0 и Voltage_B0.
7.2 Подготавливаем АЦП к следующему преобразованию: сбрасываем последовательность SEQ1 (ADCTRL2), сбрасываем бит прерывания SEQ1 (ADCST), подтверждаем прерывания (PIEACK).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.