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

Documentos relacionados