Módulo ADC y muestreo
Transcripción
Módulo ADC y muestreo
Módulo ADC y muestreo Rodrigo Chang Universidad de San Carlos de Guatemala [email protected] 22 de febrero de 2015 Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 1 / 22 Lo que veremos hoy... 1 ADC en el TM4C123GH6PM Caracterı́sticas y operación Referencia de voltaje en la Tiva Launchpad Promedio por hardware Sensor de temperatura interno 2 Configuración del módulo ADC Pasos de configuración Configuración del módulo ADC Configuración del secuenciador Trigger del ADC por Timer Lectura de las muestras 3 Reto de la práctica Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 2 / 22 ADC en el TM4C123GH6PM Caracterı́sticas y operación Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 3 / 22 Conversor analógico-digital Los MCUs Tiva TM4C tienen dos módulos ADC (ADC0 and ADC1) que pueden ser usados para convertir señales analógicas de voltaje a valores digitales discretos Cadada módulo ADC tiene 12 bits de resolución. Cada módulo ADC opera independientemente y puede: • • • Ejecutar diferentes secuenciadores de muestras. Muestrear cualquiera de las entradas analógicas compartidas. Generar interrupciones y triggers. ADC VIN t 12 101 ADC0 Interrupciones / Triggers 100 VOUT Canales de entrada VOUT VIN 011 010 ADC1 Triggers Interrupciones / Triggers 001 000 t Características... Características del ADC - TM4C123GH6PM Dos módulos ADC de 12-bit 12 entradas de canales analógicos compartidas Control de trigger flexible • • Software (controlador) Timers Comparadores analógicos GPIO Terminación única y entrada diferencial. Sensor de temperatura On-chip Promediador por hardware 2x a 64x Tasa de muestreo máxima de un millón de muestras/segundo (1MSPS). 8 comparadores digitales por ADC 2 comparadores analógicos Desfase opcional en tiempo de muestreo entre modulos ADC, programable de 22.5 ° a 337.5° • • Referencias fijas (VDDA/GNDA) por limitación de número de pines. 4 secuenciadores programables de conversión por módulo ADC Pines de poder y tierra separados para funciones analógicas. ADC VIN VOUT Secuenciadores... Secuenciadores de muestras Los ADC’s de la Tiva TM4C obtienen y muestrean datos usando secuenciadores programables. Cada secuenciador es una serie consecutiva de muestras totalmente programables que permiten al módulo ADC obtener datos de distintas fuentes de entrada sin tener que ser reprogramados.. Cada módulo ADC tiene 4 secuenciadores que controlan el muestreo y la captura de datos. Todos los secuenciadores son idénticos excepto por el número de muestras que pueden capturar y la profundidad de su memoria FIFO. Para configurar un secuenciador la siguiente información es requerida: • • • • Fuente de entrada para cada muestra. Modo (terminación única o diferencial) para cada muestra. Si la muestra genera interrupción al terminar la conversión. Indicador de si la muestra es la última en la secuencia. Secuenciador Cada secuenciador puede transmitir datos independientemente a través de un canal del uDMA. SS 3 SS 2 SS 1 SS 0 Número de muestras Prof. de la FIFO 1 4 4 8 1 4 4 8 Laboratorio... Referencia de voltaje en la Tiva Launchpad La referencia de voltaje para ambos módulos utiliza los pines VDDA y GNDA que están conectados en la Tiva Launchpad como se muestra. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 4 / 22 Promedio por hardware Se puede configurar el secuenciador para realizar un promedio de muestras por hardware. Desde 2, hasta 64 muestras seguidas pueden ser promediadas. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 5 / 22 Sensor de temperatura interno La curva de V (T ) del sensor de temperatura es la siguiente Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 6 / 22 Sensor de temperatura interno De acuerdo con la hoja de datos, podemos calcular la temperatura en ◦ C si la lectura del ADC es un número decimal sin signo utilizando la ecuación: T = 147,5 − Rodrigo Chang (USAC) 75 ∗ (VREFP − VREFN) ∗ ADCCODE 4096 Laboratorio de Comunicaciones 4 22 de febrero de 2015 7 / 22 Sensor de temperatura interno De acuerdo con la hoja de datos, podemos calcular la temperatura en ◦ C si la lectura del ADC es un número decimal sin signo utilizando la ecuación: T = 147,5 − 75 ∗ (VREFP − VREFN) ∗ ADCCODE 4096 Simplificando, con VREFP = 3,3V y VREFN = 0V tenemos que: 1 2475 ∗ ADCCODE T = ∗ 1475 − 10 4096 Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 7 / 22 Configuración del módulo ADC Pasos de configuración Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 8 / 22 Pasos de configuración del módulo Para configurar el módulo ADC, la configuración debe realizarse en este orden: 1 Configurar los pines (si es que se utilizarán) para que funcionen como canales analógicos. 2 Configurar el módulo ADC a utilizar (ADC0 o ADC1), esto es, configurar el reloj del periférico y configurar la prioridad de los secuenciadores. 3 Configurar la frecuencia de muestreo máxima a utilizar. Mientras más baja, menor es el consumo de energı́a. 4 Configurar el secuenciador a utilizar. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 9 / 22 Configuración del secuenciador Para configurar el secuenciador debemos: 1 Deshabilitar el secuenciador durante la configuración. 2 Configurar el evento de trigger (SW, Timer, GPIO, etc). 3 Configurar el canal analógico a muestrear. 4 Configurar cada muestra o paso del secuenciador. 5 Si se utilizan interrupciones, habilitarlas en el secuenciador. 6 Configurar la prioridad de interrupción del secuenciador. 7 Habilitar el secuenciador para que espere el trigger. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 10 / 22 Configuración del módulo ADC Configuración del módulo ADC Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 11 / 22 Configuración con registros 1 4 7 10 13 void A D C 0 S S 3 _ T i m e r T r i g g e r _ I n i t ( void ) { // 1. Habilitar el reloj para el modulo ADC0 volatile uint32_t delay ; SYSCTL_RCGCADC_R |= SYSCTL_RCGCADC_R0 ; // tm4c specific delay = SYSCTL_RCGCADC_R ; // 2. Configurar los pines si es que utiliza GPIO_PORTB_DIR_R &= ~0 x40 ; GPIO_P OR TB _A FS EL _R |= 0 x40 ; GPIO_PORTB_DEN_R &= ~0 x40 ; GPIO_P OR TB _A MS EL _R |= 0 x40 ; // 3. Prioridad de los secuenciadores ADC0_SSPRI_R = 0 x00000123 ; 16 // 4. Configura la frecuencia maxima de muestreo SYSCTL_RCGC0_R &= ~ S YS CT L_R CG C0 _AD C0 SP D_M ; SYSCTL_RCGC0_R += S Y S C T L _ R C G C0 _ A D C 0 S P D _ 1 2 5 K ; 19 // Continua la configuracion del secuenciador ... Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 12 / 22 Configuración con la TivaWare Utilizando las funciones incluidas en # include " driverlib / adc . h " Podemos realizar la misma configuración hecha anteriormente con registros 2 5 8 // 1.1 Configuracion de frecuencia de muestreo Sys CtlADCSpeedSe t ( S Y SC T L_ AD C SP E ED _1 2 5K S PS ) ; // 1. Configuracion de reloj al modulo ADC0 S y s C tl Per i p h e r a l E n a b le ( SYSCTL_PERIPH_ADC0 ) ; // 2. Configurar el numero de secuenciador 3 y el trigger A D C Sequenc e C o n f i g u r e ( ADC0_BASE , 3 , ADC_TRIGGER_TIMER , 0) ; // Configuracion de la entrada analogica S y s C tl Per i p h e r a l E n a b le ( SYSCTL_PERIPH_GPIOB ) ; GPIOPinTypeADC ( GPIO_PORTB_BASE , GPIO_PIN_5 ) ; 11 // Continua la configuracion del secuenciador ... Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 13 / 22 Configuración del módulo ADC Configuración del secuenciador Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 14 / 22 Configuración con registros 3 6 9 12 15 18 // ... Continua la configuracion del secuenciador // 1. Deshabilitar el secuenciador ADC0_ACTSS_R &= ~0 x08 ; // 2. Configurar el evento del trigger por timer ADC0_EMUX_R &= ~0 xf000 ; ADC0_EMUX_R |= 0 x5000 ; // 3. Configurar la fuente de entrada para cada muestra // ADC0_SSMUX3_R &= ~0 xf ; // ADC0_SSMUX3_R |= 0 x5 ; // canal 5 // 4. Para cada muestra configurar los bits de control ADC0_SSCTL3_R = 0 xe ; // ts0 , ie0 , end0 // 5. Configurar las interrupciones // 5.1 Habilitar interrupciones del secuenciador 3 ADC0_IM_R |= 0 x8 ; // 5.2 Configurar la prioridad del secuenciador 3 NVIC_PRI4_R = ( NVIC_PRI4_R & 0 xffff00ff ) | 0 x00004000 ; // 5.3 Habilitar la interrupcion 17 NVIC_EN0_R = 0 x1 << 17; // 6. Habilitar el secuenciador ADC0_ACTSS_R |= 0 x08 ; } Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 15 / 22 Configuración con la TivaWare 1 4 7 10 // ... Continua la configuracion del secuenciador // 3. Configurar el unico paso del secuenciador 3 con ts0 , ie0 , end0 A D C S e q u en c e S t e p C o n f i g u re ( ADC0_BASE , 3 , 0 , ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END ) ; // 4. Configurar las interrupciones ADCIntEnable ( ADC0_BASE , 3) ; IntEnable ( INT_ADC0SS3 ) ; IntPrioritySet ( INT_ADC0SS3 , 2) ; // 5. Habilitar el secuenciador 3 ADC SequenceEnabl e ( ADC0_BASE , 3) ; } Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 16 / 22 Configuración del módulo ADC Trigger del ADC por Timer Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 17 / 22 Configurar el trigger con un temporizador Para configurar el trigger con un timer debemos configurarlo en el módulo ADC y en el módulo Timer a utilizar. // Configuracion del timer ... 3 6 // Configurar trigger para ADC T im erContro l T ri g g er ( TIMER0_BASE , TIMER_A , true ) ; // Iniciar el timer TimerEnable ( TIMER0_BASE , TIMER_A ) ; O bien 2 // Iniciar el timer , activando el trigger para ADC y empezar a contar TIMER0_CTL_R |= 0 x21 ; Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 18 / 22 Configuración del módulo ADC Lectura de las muestras Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 19 / 22 Lectura de las muestras Para leer las muestras debemos leer el registro que accede a la FIFO para cada secuenciador: 1 // Leer la muestra // muestra = ( ADC0_SSFIFO3_R & 0 xfff ) ; muestra = ADC0_SSFIFO3_R ; También existe una función en la librerı́a de periféricos, que pone todas las muestras del secuenciador en un arreglo: 3 uint32_t ui32ADC0Value [4]; ... AD CSequenc eD at aG et ( ADC0_BASE , 1 , ui32ADC0Value ) ; Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 20 / 22 Reto de la práctica Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 21 / 22 Reto de la práctica El reto es... Con el proyecto de ejemplo obtener la temperatura en grados Celsius, utilizando el ADC0, secuenciador 3 para muestrear el sensor de temperatura interno. La tasa de muestreo a utilizar será de 0.5 SPS. El valor final debe mostrarse utilizando la ventana del depurador, poniendo un breakpoint en las instrucciones que realizan el cálculo de temperatura. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 22 / 22