Порядок выполнения лабораторной работы



 

Часть I. Формирование сигналов звуковой частоты

При помощи прямоугольных импульсов

 

В работе необходимо сгенерировать звуковую гамму (звуковой ряд) используя динамик, соединенный с выходом T1PWM. В первой части лабораторной работы звучание организуется при помощи прямоугольных импульсов, генерируемых таймером Менеджера Событий. Каждая нота будет воспроизводиться 500 мс. Загрузка новой ноты будет производиться по прерыванию таймера ЦПУ 0. Период таймера ЦПУ – 50 мс. В подпрограмме обслуживания прерываний от ЦПУ таймера 0 необходимо производить сброс Watchdog и загружать новую ноту. Обратите внимание на период между прерываниями таймера, периодом Watchdog и периодом перезагрузки новой ноты.

 

Таблица. Соответствие частот музыкальным нотам

Нота С1 D E F G A H C2
Частота, Гц 264 297 330 352 396 440 495 528

 

1. Создание нового проекта.

В Code Composer Studio создаем новый проект Lab5.pjt. Открываем файл Lab4.c и сохраняем его E:\C281x\Labs\Lab5\lab5.c.

Добавляем в проект файлы:

 

C:\CCStudio_v3.3\C2000\cgtools\lib\rts2800_ml.lib

C:\tidcs\c28\dsp281x\v100\DSP281x_common\source\DSP281x_CpuTimers.c

C:\tidcs\c28\dsp281x\v100\DSP281x_common\source\DSP281x_DefaultIsr.c

C:\tidcs\c28\dsp281x\v100\DSP281x_common\source\DSP281x_PieCtrl.c

C:\tidcs\c28\dsp281x\v100\DSP281x_common\source\DSP281x_PieVect.c

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\DSP281x_Headers_nonBIOS.cmd

 

2. Настройка параметров проекта, компоновка проекта и загрузка выходного файла.

Включаем в проект заголовочные файлы: Project → Build Options,в закладке Compiler выбираем Preprocessor и в поле Include Search Path (-i) вводим: C:\tidcs\C28\dsp281x\v100\DSP281x_headers\include;..\include

 Задаем глубину стека: Project → Build Options → Linker → Stack Size: 0x400.

Компонуем проект: Project → Build.

Загружаем выходной файл: File → Load Program → Debug\ lab5.out.

 

3. Преобразование файла Lab5.c.

Удаляем те части программы, которые не будут использоваться данной лабораторной работе: массив LED[8].

Переходим к подпрограмме «Gpio_select()». Настраиваем линию 6 порта GPIOA на вывод функции T1PWM (GPАMUX).

В подпрограмме «InitSystem» разрешаем работу Менеджера Событий А.

Внутри главной подпрограммы записываем:

CpuTimer0Regs.TCR.bit.TSS = 0.

Настраиваем таймер 1 Менеджера Событий на выработку модулированного сигнала PWM:

Бит «TCMPOE» устанавливаем в 1, задаем “активный низкий” уровень (GPTCONA);

В регистре T1CON устанавливаем: режим счета вверх (TMODE), делитель 128 (TPS), запрещаем работу таймера (TENABLE), выбираем внутреннюю синхронизацию (TCLKS), разрешаем сравнение (TECMPR);

Определяем значения регистра периода (T1PR) для разных частот и заносим их в массив int frequency [8] = {?,?,?,?,?,?,?,?}. Исходя из формулы T1_PWM_Freq = 150MHz / (HISPCP * TPS * T1PR) для первой ноты в регистр периода необходимо занести: T1PR = 150MГц / (2 * 128 * 264 Гц) = 2219, для второй ноты T1PR = 150MГц / (2 * 128 * 297 Гц) = 1973 и т.д.

Так как сторожевой таймер будет сбрасываться быстрее (каждые 200 мс), чем прозвучит следующая нота (через 500 мс), то задаем условия:

if ((CpuTimer0.InterruptCount%4)= =0) SysCtrlRegs.WDKEY = 0xAA

 Разбиваем период воспроизведения нот на 10 периодов по 50 мс, для этого записываем условие: if ( (CpuTimer0.InterruptCount – time_stamp ) > 10).

После чего переменной «time_stamp» присваиваем текущее значение CpuTimer0.InterruptCount, загружаем код следующей ноты в T1PR, а в регистр T1CMPR заносим значение, равное T1PR/2. Разрешаем работу таймера.

 

4. Тестирование программы.

Сбрасываем ЦСП:    Debug → Reset CPU, Debug → Restart.

Переходим к главной подпрограмме: Debug → Go main.

Запускаем программу: Debug → Run.

 

Часть II. Формирование сигналов звуковой частоты

При помощи синусоидальных импульсов

 

Во второй части работы необходимо вывести синусоидальный ШИМ - сигнал. Отметим, что музыкальная нота – это гармоническое синусоидальное колебание определенной частоты, поэтому, изучив принцип получения синусоидальных колебаний, можно получить чистоту звучания нот, близкую к реальности. В таблице представлено соответствие частот и нот музыкального звукоряда.

 

Для расчета частоты синусоидальных колебаний используется формула:

(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. Режимы работы таймеров Менеджера Событий.

1. Регистры Менеждера Событий.

2. ШИМ – сигнал: определение, формирование с помощью Менеджера Событий.

3. Прерывания Менеджера Событий.

 

 


Лабораторная работа № 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.


Дата добавления: 2018-04-15; просмотров: 314; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!