Tutorial 3. ADC (Convertidor Analógico-Digital) en Microcontrolador de la serie STM32F4.

Bienvenido al tutorial 3 de Ophyra, donde utilizaremos el Convertidor Analógico Digital (ADC). El STM32F407 de Ophyra cuenta con 16 canales analógicos distribuidos en tres módulos ADCs independientes.  Sin embargo, en Ophyra están disponibles solamente 8 canales (AN0, AN1, AN2, AN3, AN8, AN9, AN14, AN15 descritos en el manual) de los 16.  El objetivo de este tutorial es utilizar el canal 2 del ADC 1. Encenderemos un color diferente del LED-RGB (disponible en Ophyra) dependiendo del nivel de voltaje ingresado.

Configurar el hardware usando STM32CubeMX.

Creamos un nuevo proyecto dentro de STM32CubeMX dando un click sobre el menú “New Project” y seleccionamos el microcontrolador de OphyraSTM32F407VGT6, como se observa en la imagen 1.

Nota: En la casilla llamada “Part Number Search” se puede ingresar el modelo de nuestro micorcontrolador, para que se simplifique la búsqueda. (puedes ver un poco más de detalles de como crear el proyecto en nuestro primer tutorial).

Imagen 1. Selección del Microcontrolador.

Creado el proyecto, en el lado izquierdo de la ventana (pestaña: Pinout) observamos los 3 ADC del microcontrolador. Por ejemplo: al desplegar el ADC1, se mostrarán los canales disponibles para este ADC, tal y como se observa en la Imagen 2.


Imagen 2. Canales disponibles para el ADC 1.

 Ahora habilitamos el ACD1 seleccionando el canal 2, como en la siguiente imagen.

Imagen 3. Selección del canal 2 del ADC 1.

Como en esta práctica utilizaremos el LED-RGB de Ophyra para visualizar los niveles de voltaje entrantes al canal 2, debemos configurar los pines E0, E1, E2, como salidas (GPIO-Output). Posteriormente, cambiamos los nombres que por defecto nos arroja la interfaz por LEDA, LEDV y LEDR (LED Amarillo, Verde y Rojo). Este paso se muestra en la siguiente imagen.

Imagen 4. Habilitación de los pines que controlan al LED-RGB.

Ahora seleccione la pestaña de “Configuration”, para desplegar la ventana que se muestra en la imagen 5.  Accione el botón ADC1 para configurar los recursos del ADC.

Imagen 5. Ventana de selección y configuración de recursos.

Accionando sobre el botón ADC1 se nos muestra la ventana que se muestra en la imagen 6.

Imagen 6. Configuración del ADC.

La descripción de las opciones es la siguiente:

  • Resolution → Selecciona la resolución para la conversión del ADC.
  • Data Alignment → Selecciona la alineación de los datos leídos por el ADC.
  • Scan conversion mode → Conversión en un arreglo de canales uno detrás de otro
  • Continuous Conversion Mode → Modo de conversión continuo.
  • Discontinuous Conversion Mode → Modo discontinuo de conversión.
  • DMA Continuos Requests → Solicitud para lectura continua del DMA.
  • End of Conversion Selection → Fin de conversión en el canal
  • Number of Conversion → Número de canales a convertir (debe de estar entre 1 y 16)
  • External Trigger Conversion Source → Selecciona el evento externo para iniciar la conversión
  • External Trigger Conversion Edge → Disparo que selecciona polaridad externa y habilita el inicio de un grupo regular (Este parámetro es cambiado automáticamente por el software)
  • Rank → Rango para la secuencia de conversión (Este debe ser entre 1 y 16)
  • Channel → Canal de conversión
  • Sampling Time → Tiempo de muestreo
  • Enable Analog WatchDog Mode → Habilita o deshabilita el modo de perro guardian

Nos cercioramos de que los parámetros estén configurados igual a los mostrados en la imagen 6 y le damos click en OK. Ahora accione el botón de Generar Código Fuente, como se muestra en la imagen 7, y siga los pasos que se muestran en la misma imagen.

Imagen 7. Generación del código fuente.

Al momento de presionar el botón de Ok se generará el proyecto en Atollic TrueSTUDIO y aparecerá una ventana preguntando si deseamos abrir el proyecto, le damos clik en Open Proect. Esperamos a que el programa Atollic TrueSTUIDO se inicie y abrimos el archivo main.c para  escribir el programa.

Realizar programa en Atollic TrueSTUDIO.

Dentro del archivo main.c agregamos primero unas etiquetas nuevas a las funciones GPIO_PIN_RESETGPIO_PIN_SET  como se muestra en la imagen 8. Estas etiquetas nos ayudarán a recordar mejor cual es el estado lógico que enciende o apaga el LED-RGB. 

Imagen 8. Inclusión de etiquetas.

Tome en cuenta que la lógica del LED-RGB de Ophyra es negada, es decir, un estado lógico cero enciende el LED  y con un estado lógico 1 el LED se apaga.

Ahora nos dirigimos a la sección del bucle infinito o while(1)  y escribimos el siguiente código:

Imagen 9. Código principal del programa.

El código comienza con la sentencia: HAL_ADC_Start(&hadc1), que inicia la conversión del ADC. Después con la sentencia HAL_ADC_GetValue(&hadc1) obtenemos el valor que entrega el ADC y lo guardamos en una variable llamada: Resultado. Recuerde que es del cana 2 sobre el que se obtiene el valor convertido por el ADC.

Lo siguiente que realiza el código es comparar el valor obtenido (que puede estar entre: 0 a 4095) con un rango de valores pre-establecidos. En resumen el algoritmo realiza lo siguiente:

  • Si el valor de obtenido del ADC (Resultado) es menor o igual a 1024; se enciende el LED Rojo y se apagan los demás.
  • Si el valor de obtenido del ADC es mayor  a 1024 y menor o igual a 2048; se enciende el LED Rojo y  el Verde y se apaga el Azul, con el objetivo de visualizar el color Amarillo.
  • Si el valor de obtenido del ADC es mayor  a 2048 y menor o igual a 3072; se enciende el LED Verde y  se apagan los demás.
  • Si el valor de obtenido del ADC es mayor  a 3072; se encienden los tres LEDs, con el objetivo de visualizar el color Blanco.

Este código se ejecutará infinitas veces; ahora es momento de preparar el hardware que necesitaremos para probar físicamente la práctica. El material a necesitar es muy sencillo y se enlista a continuación:

  • Cables conectores macho-macho, para realizar conexiones rápidas.
  • Protoboard o Tarjeta de pruebas.
  • Potenciometro de cualquier valor mayor a 1kOhm; 5KOhm es un valor recomendado.
  • Tarjeta Ophyra.

A continuación utilizando los pines de expansión inserta la tarjeta Ophyra en el Protoboard, como se observa en la imagen 10.

Imagen 10. Inserción de Ophyra al protoboard.

Ahora inserta el potenciómetro al protoboard y realiza las conexiones con los cables como se observa en la imagen 11. El canal 2 de las entradas analógicas se encuentra en el PIN-A2. El pin central del potenciómetro se conecta al PIN-A2 de Ophyra y los extremos del potenciómetro a 5v y GND.

Imagen 11. Conexión del potenciómetro a Ophyra.

Nota Importante: No conectes a las entradas analógicas voltajes mayores a 3.3volts porque podrían dañarse.

Cargar programa a nuestra tarjeta de Desarrollo Ophyra.

 El último paso es programar tu tarjeta Ophyra. Si nunca lo has hecho, sigue esta GUÍA.

Conclusiones.

Ahora gira el potenciómetro y observa como cambia de color el LED-RGB de Ophyra. Conforme el voltaje aumenta de 0 a 3.3volts, el ADC entregará valores de 0 a 4095. El algoritmo que programamos encenderá la secuencia de colores (Rojo->Amarillo->Verde->Blanco) conforme giramos el potenciómetro y el voltaje aumenta.

El resumen de pasos para realizar este tutorial es el siguiente:

  1. Configurar como salida los Pines conectados al LED-RGB (PE0, PE1, PE2). Cambiar el nombre que por defecto nos pone STM32CubeMX, por un nombre fácil de recordar.
  2. Seleccionar el ADC a utilizar (ADC1, ADC2 o ADC3) y seleccionar uno de los 8 canales analógicos disponibles en la tarjeta Ophyra.
  3. Configurar el ADC según el modo que se utilizará, en este caso se activa el modo continuo de conversión.
  4. Crear el proyecto y abrir Atollic TRUEStudio. Utilizar las sentencias: HAL_ADC_Start(&hadc*)  para iniciar la lectura y conversión del ADC. HAL_ADC_GetValue(&hadc*) para obtener el valor de última conversión del ADC.
  5. Realizar las conexiones pertinentes a Ophyra.
  6. Programar Ophyra.
  7. Verificar el funcionamiento del programa.

Te sugerimos implementar más canales de lectura, existen dos maneras de hacerlo. La primera es: activando los otros ADC disponibles y asignarles una entrada analógica a cada uno. La segunda manera de hacerlo, es configurar el ADC en modo de conversión por escaneo (Scan Conversion Mode) de esta forma el ADC leerá uno a uno los canales habilitados y entregará las lecturas según se les solicite. Para mayor información sobre este modo y otros modos de conversión consulte el manual RM0090 del STM32F407 en la sección 13. Para más referencia sobre las APIs de las Capas de Abstracción de Hardware (HAL) que están disponibles para el control del ADC consulte el Manual UM1725 en la sección 6. 

Si tienes alguna consulta o duda sobre este tutorial o referente a cualquier otro tema de Ophyra, contactanos a nuestro Foro.

Menú