Исследование модуля АЦП. Рабочий диапазон входных напряжений. Зависимость между входным аналоговым напряжением и его дискретным значением

Страницы работы

Содержание работы

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).

Похожие материалы

Информация о работе