Лабораторная работа 1 изучение аналогоцифрового преобразователя микропроцессора tms320F2812 по дисциплине Проектирование устройств на цифровых сигнальных процессорах
Скачать 42.54 Kb.
|
Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования «Омский государственный технический университет» Кафедра «Радиотехнические устройства и системы диагностики» ЛАБОРАТОРНАЯ РАБОТА № 1: «ИЗУЧЕНИЕ АНАЛОГО-ЦИФРОВОГО ПРЕОБРАЗОВАТЕЛЯ МИКРОПРОЦЕССОРА TMS320F2812» по дисциплине «Проектирование устройств на цифровых сигнальных процессорах» Выполнил студент гр. ЭНм-201: Хамидов И.В. Проверил преподаватель: _____________ Титов Д.А. Омск 2021 Цель работы: Целью работы является изучение устройства и режимов работы аналого-цифрового преобразователя, входящего в состав микропроцессора TMS320F2812. Задание к работе: Ознакомиться с устройством блока аналого-цифрового преобразователя микропроцессора TMS320F2812. Изучить назначение регистров управления аналого-цифрового преобра-зователя микропроцессора TMS320F2812. Разработать ПО, выполняющее аналого-цифровое преобразование сиг-налов с частотой дискретизации 10 кГц. Произвести дискретизацию сигналов с помощью разработанного ПО. Сделать выводы по результатам работы. Ход работы: Микропроцессор TMS320F2812 содержит блок аналого-цифрового преоб-разователя, позволяющий производить дискретизацию 16 независимых вход-ных сигналов. Разрядность АЦП равна 12. Диапазон входных сигналов: 0–3 В. Согласно документу соотношение между напряжением на входе и значением цифрового кода, формируемого АЦП микропроцессора TMS320F2812, определяется выражением
гдеVIN – напряжение на входе АЦП;VREF+ -, VREF-– опорные напряжения; q – разрядность АЦП, равная 12; D – значение цифрового кода (целое число без знака). Для стенда ЦОС VREF-=0В ,VREF+=3 В . Произвели подготовку рабочего места к выполнению лабораторных работ. Открыли проект ПО лабораторной работы №1 «Example_ADC.pjt» (в программной среде Code Composer Studio 3.3). Перемещаясь по «дереву файлов» выбрали файл «Example_281xSpi_FFDLB.c» (файл с кодом программы). Код программы: ////################################################### // Программа для дискретизации сигналов // с помошью АЦП процессора TMS320F2812 //##################################################### #include "DSP281x_Device.h" #include "DSP281x_Examples.h" #pragma CODE_SECTION(cpu_timer0_isr, "ramfuncs"); #pragma CODE_SECTION(InitFlash, "ramfuncs"); // Объявление заголовков используемых функций. // Обработчик прерывания по таймеру interrupt void cpu_timer0_isr(void); // Константы для настройки АЦП #define ADC_CKPS 0x1 #define ADC_SHCLK 0xf // Массив отсчетов входного сигнала. // В этот массив записываются кодовые // значения отсчетов входного сигнала, // приходящие от АЦП микропроцессора. Uint16 InputSamples[100]; unsigned int ii=0; unsigned int jj=0; void main(void)//************ main **************** { // Системные настройки // (функция из файла "DSP281x_SysCtrl.c"). InitSysCtrl(); // "Очистка" всех прерываний, // запрет маскируемых прерываний. DINT; // Инициализация регистров PIE // (peripheral interrupt expansion), // т. е. настройка источников прерываний и // определение количества прерываний // (функция из файла "DSP281x_PieCtrl.c"). InitPieCtrl(); // Запрет прерываний от процессора и сброс // флагов всех прерываний. IER = 0x0000; IFR = 0x0000; // Инициализация таблицы PIE // (функция из файла "DSP281x_PieVect.c"). InitPieVectTable(); EALLOW; //Открыть доступ к регистру эмуляции. // HSPCLK=SYSCLKOUT/2*3=150/6=25MГц. SysCtrlRegs.HISPCP.all = 3; // Low speed clock=SYSCLKOUT/4. SysCtrlRegs.LOSPCP.all = 4; // CLKIN=(OSCCLK * 10.0)/2=30МГц*10/2=150Гц. SysCtrlRegs.PLLCR.all = 10; PieVectTable.TINT0 = &cpu_timer0_isr; EDIS;// Запрет записи в регистр эмуляции. // Перенос функций в опреативную память MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart); // Инициализация флеш-памяти InitFlash(); // Инициализация таймеров // (функция из файла "DSP281x_CpuTimers.c"). InitCpuTimers(); // Настройка таймера CPU-Timer 0. // Таймер настраивается на // период дискретизации сигнала 0,1 мс. // По таймеру выдается прерывание через 0,1 мс, // CPU Freq = 150MГц. ConfigCpuTimer(&CpuTimer0, 150, 100); // Разрешение прерывания CPU INT1, // соотв. таймеру CPU-Timer 0. IER |= M_INT1; // Разрешение TINT0 в таблице PIE // (Group 1 interrupt 7) PieCtrlRegs.PIEIER1.bit.INTx7 = 1; // Разрешение глобальных прерываний и событий // процесса отладки высокого приоритета. EINT; ERTM; // Инициализация периферийных устройств. InitAdc(); // Инициализация АЦП. // Настройка АЦП AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; // ADC module clock = HSPCLK/2*ADC_CKPS = // = 25MГц/(2*1) = 12.5MГц. AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; // Режим Cascaded mode. AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x0; // Режим Сontinuous run. AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Очистка массива отсчетов входного сигнала. for(ii=0; ii<=99; ii++) InputSamples[ii] = 0; // Запуск АЦП. AdcRegs.ADCTRL2.all = 0x2000; // Запуск таймера. StartCpuTimer0(); // режим ожидания прерывания по таймеру. for(;;); }//***************** end of main ******************** interrupt void cpu_timer0_isr(void) { // Ожидание прерывания от АЦП while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {} // Программная задержка= // = (HISPCP*2)*(ADCCLKPS*2)*(CPS+1) cycles = // = (3*2)*(1*2)*(0+1)=12 cycles asm(" RPT #11 || NOP"); AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; InputSamples[jj] =((AdcRegs.ADCRESULT0>>4) ); jj++; if(jj>99) jj=0; PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; } //===================================================== Выполняем компиляцию проекта. Запрограммируем микропроцессор. Микропроцессор считать успешно запрограммированным при отсутствии сообщений об ошибках в процессе программирования. Курсором выделили переменную «Input-Samples» и на выделенном участке нажали правую кнопку «мыши». В появившемся контекстном меню выбрали пункт «Add to Watch Window». К разъему «Вход» стенда ЦОС подключаем генератор сигналов. С генератора подаем гармонический сигнал положительной полярности с частотой 1 кГц и размахом 3,0 В. В меню главного окна среды Code Composer Studio 3.3 последовательно выбраем пункты «Debug»→«Run» и через 5–10 с последовательно выбраем пункты «Debug»→«Halt». В поле «Watch» главного окна среды Code Composer Studio 3.3 раскрыли и скопировали содержание переменной «InputSamples» (столбец значений). . В програмной среде Matlab в командной строке выполняем команду: >> InputSamples=0; Раскрываем содержание переменной «InputSamples» в редакторе массивов вставляем скопированный столбец в переменную «InputSamples». Отобразим на графике дискретную последовательность отсчетов сигнала, поступивших с АЦП микропроцессора TMS320F2812. Для этого в командной строке среды Matlab выполним команды: >> plot(InputSamples, '-o'); >> ylabel('КОД') >> xlabel('n') 25 Рисунок 1. Гармонический сигнал положительной полярности. Вывод Последовательность дискретных значений имеет гармоническую форму и на один период последовательности приходится 10 дискретных значений, что подтверждает построенный график. Для качественной оцифровки сигнала достаточно 10 дискретных значений на период. Значения последовательности целые числами и лежат в диапазоне от 0 до 4095, в соответствии с двенадцати разрядным АЦП микропроцессора. |