При помощи синусоидальных импульсов
Во второй части работы необходимо вывести синусоидальный ШИМ - сигнал. Отметим, что музыкальная нота – это гармоническое синусоидальное колебание определенной частоты, поэтому, изучив принцип получения синусоидальных колебаний, можно получить чистоту звучания нот, близкую к реальности. В таблице представлено соответствие частот и нот музыкального звукоряда.
Для расчета частоты синусоидальных колебаний используется формула:
(1) |
где - частоты модулированных импульсов;
- число модулированных импульсов за период.
1. Создание нового проекта.
1.1 Создаем новый проект Lab5А.pjt.
1.2 Добавляем в проект файлы (см. п. 1.2 части I), кроме файла
DSP281x_CpuTimers.c, и вместо lab5.c загружаем lab5А.c.
2. Настройка параметров проекта, компоновка проекта и загрузка выходного файла (аналогично п.п. 2.1 – 2.4 части I данной лабораторной работы). В закладке Compiler выбираем Preprocessor и в поле Include Search Path (-i) вводим:
C:\tidcs\C28\dsp281x\v100\DSP281x_headers\include;
..\include; C:\tidcs\C28\IQmath\cIQmath\include
3. Преобразование файла Lab5А.c.
Удаляем те строки программы, которые касаются работы таймера 0 ядра процессора F2812: ConfigCpuTimer(&CpuTimer0, 150, 50000), InitCpuTimers(), CpuTimer0Regs.TCR.bit.TSS = 0, переменные i и time_stamp, массив frequency [8].
Переименовываем подпрограмму “cpu_timer0_isr()” в “T1_Compare_isr” и в ней добавляем строку: PieCtrlRegs.PIEACK.all = PIEACK_GROUP2, устанавливаем бит T1CINT регистра EVAIFRA в 1.
Добавляем инструкцию, разрешающую в модуле расширения прерываний PIE прерывание от GP таймера 1: PieCtrlRegs.PIEIER2.bit.INTx5=1 и устанавливаем разрешение прерывания ядра процессора INT2: IER = 2.
Настраиваем таймер 1 Менеджера Событий (аналогично пп. 3.5.1 – 3.5.2 части I): записываем коэффициент деления равный 1, устанавливаем бит T1CINT регистра EVAIMRA в 1.
В регистр периода (T1PR) заносим значение, рассчитанное по формуле:
(2) |
где кГц, МГц,HISCP = 2, TPS = 1.
Рис. 4.14. Принцип формирования синусоидального сигнала
широтно-импульсной модуляцией
4. Тестирование программы.
Сбрасываем ЦСП: Debug → Reset CPU, Debug → Restart.
Переходим к главной подпрограмме: Debug → Go main.
Запускаем программу: Debug → Run.
Устанавливаем точку останова на строчке: PieCtrlRegs.PIEACK.all = PIEACK_GROUP2.
5. Включение библиотеки “IQ-Math” в проект.
Добавляем в начальную часть текста программы строки:
#include "IQmathLib.h",
_iq30 sine_table[512],
#pragma DATA_SECTION(sine_table,"IQmathTables");
и добавляем файл Lab5A.cmd.
6. Расчет необходимого значения регистра сравнения.
Учитывая, что разность значений регистра периода и регистра сравнения определяет ширину выходного модулированного импульса (см. рис. 4.15), а значения функции синуса изменяются от минус 1 до плюс 1, рассчитываем значение регистра сравнения по формуле:
T1CMPR = T1PR – _IQ30mpy(sine_table[index] + _IQ30(0.9999),T1PR/2) | (3) |
где функция IQ30mpy(a, b) – умножение чисел a и b в формате IQ30; _IQ30(0.9999) – оттранслированное значение единицы.
Рис. 4.15. Изменение ширины импульса при ШИМ по
синусоидальному закону
Чтобы избежать переполнения, применим функцию насыщения _IQsat (x, max, min). Тогда окончательно записываем в подпрограмму T1_Compare_isr формулу для расчета необходимого значения регистра сравнения:
EvaRegs.T1CMPR = EvaRegs.T1PR - _IQsat(_IQ30mpy(sine_table[index]+_IQ30(0.9999), EvaRegs.T1PR/2),EvaRegs.T1PR,0).
7. Расчет частоты синусоидальных колебаний.
Для этого используем формулу (1), задаемся = 50 кГц, = 128, т.е. из таблицы значений синуса выбираем каждое четвертое число, добавляем строку:
index += 4.
Тогда = 390,6 Гц.
Компонуем проект: Project → Rebuild All.
Содержание отчета:
Отчет должен содержать цель работы, краткие теоретические сведения по теме работы, рисунки, поясняющий принцип формирования ШИМ – сигналов, тексты исследуемых программ, результаты их выполнения, выводы.
Контрольные вопросы:
1. Назначение и структура Менеджера Событий DSP TMS320F2812.
2. Структура таймеров Менеджера Событий, их отличие от таймеров ЦПУ по структуре и назначению.
3. Режимы работы таймеров Менеджера Событий.
4. Регистры Менеждера Событий.
5. ШИМ – сигнал: определение, формирование с помощью Менеджера Событий.
6. Прерывания Менеджера Событий.
Лабораторная работа № 5
Исследование модуля АЦП
Цель работы: изучить структуру встроенного АЦП, режимы его работы. Научится создавать простейшие программы с использованием АЦП.
Теоретические сведения
Структура модуля АЦП
Модуль АЦП содержит ядро АЦП, два устройства выборки – хранения, аналоговый мультиплексор, мультиплексор УВХ, мультиплексор результата и автоматический секвенсер (устройство управления работой АЦП и мультиплексоров). 12- битный АЦП имеет 16 мультиплексированных входов. АЦП может работать либо в каскадном, либо в двухканальном режимах.
Рис. 5.1. Блок-схема модуля АЦП в каскадном режиме
Структура АЦП в каскадном режиме представлена на рис. 5.1. Как видно из рисунка, в этом режиме работой модуля управляет один автоматический секвенсер. Перед запуском необходимо задать число преобразований (“MAX_CONV1”) и номер канала, который будет преобразован на каждом шаге (“CHSELxx”). Результат преобразования на каждом шаге сохраняется в соответствующий регистр (“RESULT0” to “RESULT15”).
Можно задать два режима захвата сигналов – одновременный и последовательный. В первом случае два УВХ работают в параллель, т.е. выборка и захват происходят одновременно. При этом за один шаг осуществляется преобразование двух каналов различных групп с одинаковым кодом (например, ADCINA3 и ADCINB3). В последовательном режиме сигнал с любого входа может быть преобразован на любом шаге. Запуск преобразования может осуществляется программно, от внешнего источника или от менеджеров событий А или В. Запуск от Менеджера Событий осуществляется аппаратно, без использования прерываний, что позволяет очень точно задавать интервал преобразования. Прерывания от АЦП для обработки результатов могут быть сконфигурированы либо после каждого преобразования, либо по окончании преобразования последовательности.
Рис. 5.2. Блок-схема модуля АЦП в двухканальном режиме
В двухканальном режиме автоматический секвенсер разделяется на две независимые части (“SEQ1” и “SEQ2”) со своими настройками и сигналами запуска. Входные каналы задается в регистрах CHSEL00 .. CHSEL07 для последовательности SEQ1 и CHSEL08 .. CHSEL15 для последовательности SEQ2, результаты преобразования сохраняется в регистрах RESULT0 .. RESULT7 и RESULT8 .. RESULT15 соответственно. Для любой из двух последовательностей может быть задан любой из 16 входных каналов. Данный режим позволяет получить фактически два независимых АЦП, со своими регистрами управления и сигналами запуска. Арбитр последовательности используется в случае одновременного появления сигналов запуска от двух последовательностей. В таком случае приоритет имеет SEQ1, преобразование SEQ2 будет задержано до окончания SEQ1.
Время преобразования и система тактирования АЦП.
Рассмотрим настройку тактирования АЦП на примере. Тактирование АЦП осуществляется от высокоскоростного прескалера периферии HSPCLK (см. рис. 5.3).
Рис. 5.3. Пример конфигурации модуля тактирования АЦП.
Максимальная частота на выходе HSPCLK составляет 150 МГц. Максимальная частота тактирования АЦП FCLK согласно документации составляет 25 МГц. ADCCLKPS служит для формирования требуемой частоты FCLK из HSPCLK. Бит CPS позволяет при необходимости понизить частоту в два раза. Полученная ADCCLK подается на ядро АЦП и на устройство выборки-хранения. Битами ACQ_PC можно задать необходимое время захвата сигнала. За это время сигнал на УВХ должен установиться с заданной точностью. Время захвата зависит от сопротивления источника сигнала, характеристик сигнала, требуемой точности и рассчитывается для каждого случая отдельно. В лабораторных работах сигнал подается с потенциометра, высокая точность не требуется, поэтому время выборки может быть задано любое.
Минимальное время преобразования для первого канала в последовательности составляет 200 мкс, для последующих - 80 мкс.
Формат регистров модуля АЦП
Рис. 5.4. Регистр 1 управления АЦП (ADCTRL1)
Рис. 5.5 Регистр 2 управления АЦП (ADCTRL2)
Рис. 5.6 Регистр 3 управления АЦП (ADCTRL3)
Делитель частоты ядра. Периферийная частота процессора, HSPCLK, делится на 2* ADCCLKPS[3:0], за исключением, когда ADCCLKPS[3:0] = 0000, в этом случае HSPCLK не делится. Полученная частота дополнительно делится на ADCTRL1[7]+1.
|
Регистр числа каналов для преобразования (ADCMAXCONV)
Рис.5.7. Формат регистра ADCMAXCONV
Рис. 5.8 Регистр статуса автопоследовательности (ADCASEQASR)
Каждый набор из 4-х бит CONVnn, выбирает один из 16 аналоговых входов АЦП для последовательного автоматического преобразования.
Значение CONVnn | Выбираемый канал АЦП |
ADCINA0 | |
ADCINA1 | |
ADCINA2 | |
ADCINA3 | |
ADCINA4 | |
ADCINA5 | |
ADCINA6 | |
ADCINA7 | |
ADCINB0 | |
ADCINB1 | |
ADCINB2 | |
ADCINB3 | |
ADCINB4 | |
ADCINB5 | |
ADCINB6 | |
ADCINB7 |