tdse-tp4_01-adc

FIUBA - Electrónica - Taller de Sistemas Embebidos - Trabajo Práctico N°: 4 - ADC
Index Commits Files Refs README
app/adc.txt (2511B)
   1 # Configuración ADC1
   2 
   3 La configuración del ADC utilizada se puede ver en el archivo `Core/main.c`, en
   4 particular en la definición de la función `MX_ADC1_Init`, esta función es
   5 invocada antes de iniciar el superloop en la función `main`, al momento de
   6 inicializar los periféricos.
   7 
   8 La función `MX_ADC1_Init` es auto-generada por la aplicación STM32CubeMX,
   9 removiendo comentarios utilizados por la aplicación resulta como se muestra a
  10 continuación:
  11 
  12 ```c
  13 static void MX_ADC1_Init(void)
  14 {
  15   ADC_ChannelConfTypeDef sConfig = {0};
  16 
  17   // Common config
  18   hadc1.Instance = ADC1;
  19   hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  20   hadc1.Init.ContinuousConvMode = DISABLE;
  21   hadc1.Init.DiscontinuousConvMode = DISABLE;
  22   hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  23   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  24   hadc1.Init.NbrOfConversion = 1;
  25   HAL_ADC_Init(&hadc1);
  26 
  27   // Configure Regular Channel
  28   sConfig.Channel = ADC_CHANNEL_0;
  29   sConfig.Rank = ADC_REGULAR_RANK_1;
  30   sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
  31   HAL_ADC_ConfigChannel(&hadc1, &sConfig);
  32 }
  33 ```
  34 
  35 Se puede ver que se utiliza solo uno de los conversores A/D del microcontrolador
  36 `ADC1`, y la configuración se guarda en un handle, que se define globalmente
  37 `hadc1`. El `ADC1` se configura en modo normal, es decir sin modo escaneo, ya
  38 que se lee un solo canal, por lo tanto no es necesario leer multiples canales
  39 secuencialmente. Y también se desactivan el modo de conversión continua y
  40 discontinúa, el primero indica que el ADC se detenga al finalizar cada
  41 conversión, el segundo se utiliza cuando se leen muchos canales secuencialmente
  42 (por ejemplo en modo escaneo) y hace que el ADC divida los canales en grupos, de
  43 manera de leer secuencialmente los grupos en cada conversion. Ademas se utiliza
  44 un trigger por software, es decir, no por interrupciones externas o
  45 temporizadores, y los bytes leídos se alinean a la derecha.
  46 
  47 Para la configuración especifica del canal, se indica al ADC que se utilizará el
  48 canal 0, el cual corresponde con el pin `PA0` de la placa NUCLEO-F103RB
  49 utilizada, el rango `sConfig.Rank` se utiliza para definir la prioridad de la
  50 lectura cuando se leen multiples canales, en este caso como solo se lee un canal
  51 no tiene mucha relevancia. Por ultimo se configura el período de muestreo del
  52 canal con `sConfig.SamplingTime`, en `ADC_SAMPLETIME_1CYCLE_5`, esto es 1.5
  53 ciclos del reloj del ADC, el período de muestreo máximo disponible para el ADC
  54 con la configuración de reloj de CPU utilizada.