Aprende a utilizar el ADC en el STM32F103C8T6? Tutorial del ADC de STM32

En este tutorial, te presentaré el ADC de la placa cápsula azul STM32F103C8T6 para medir las tensiones de entrada analógicas. Ya demostré que se puede conectar una pantalla LCD de 16×2 con la cápsula azul STM32 en un tutorial anterior. Utilizaré la pantalla LCD para mostrar los resultados del CAD en esta aventura.

[adsense1]

Introducción

Prácticamente todos los propósitos embebidos requieren al menos un sensor para interactuar con el microcontrolador. Puede ser un sensor de temperatura o un sensor de posición. Si todos conocemos un factor sobre los Sensores es que la mayoría de ellos (en su tipo primario) son de naturaleza analógica. Lo que esto implica es {que un} sensor lee un valor de carácter analógico (como la temperatura) y produce una tensión analógica.

Sin embargo, el problema de los microcontroladores (ya sea STM32F103C8T6 o Arduino) es que son «seres» digitales y no pueden trabajar con valores analógicos. Por lo tanto, primero tenemos que convertir los valores analógicos en valores digitales antes de dárselos al microcontrolador para su posterior procesamiento o análisis. Para ello se utilizan convertidores de analógico a digital.

Si has trabajado con microcontroladores 8051, lo más probable es que tengas que utilizar un CI ADC externo, como el CI ADC0804, para transformar la señal analógica en valores digitales. Sin embargo, la mayoría de los microcontroladores de moda, como el Arduino o el STM32F103C8T6, llevan incorporado un ADC. Por tanto, no queremos ninguna parte externa. Lo único que tenemos que hacer es configurar el ADC interno y convertir los valores analógicos en digitales.

En este desarrollo/tutorial, revelaré un potenciómetro de interfaz, que es la única fuente de tensión analógica variable, y configuraré un pin analógico para aprender la tensión, utilizaré el ADC para convertirla en un valor digital y mostraré el resultado en la pantalla LCD.

[adsense2]

ADC en la cápsula azul STM32

Para los que discuten con la hoja de información de la MCU STM32F103C8T6, podrán ver que el ADC de la MCU STM32F103C8T6 es de 12 bits y es un ADC de aproximación sucesiva. La MCU ayuda hasta 16 canales externos para medir las alertas analógicas.

Sin embargo, el ADC de la placa STM32 Blue Capsule está configurado para 10 canales, lo que significa que debes utilizar los diez pines de entrada analógica para medir 10 tensiones analógicas totalmente diferentes.

Aprende a utilizar el ADC en el STM32F103C8T6?

Como hemos hablado antes, el ADC de la cápsula azul STM32 tiene una decisión de 12 bits. Por lo tanto, el rango de los valores del ADC en el STM32F103C8T6 es de 0 a 212 – 1, es decir, de 0 a 4095. Basado principalmente en la tensión analógica, el valor aumentará por pasos.

La tensión / Paso o la decisión se puede calcular utilizando los siguientes componentes.

Tensión / Paso = Tensión de referencia / 212

La tensión de referencia suele ser de 3,3 V. Por lo tanto, el menor cambio de tensión que puede detectarse es

Tensión / Paso = 3,3 / 4096 = 0,8056 mV / Paso

Ahora, la tensión de entrada analógica puede calcularse como sigue:

Tensión de entrada = ( Valle ADC / Decisión ADC ) * Tensión de referencia

Diagrama del circuito

La siguiente imagen muestra el diagrama del circuito de la empresa para configurar el ADC en el STM32F103C8T6.

Si los pines de la placa STM32 Capsule Blue utilizados en el diagrama del circuito no están claros, utiliza la siguiente imagen como referencia.

Pines del STM32F103C8T6

Piezas necesarias

  • MCU STM32F103C8T6 basada principalmente en la placa STM32 Blue Capsule
  • pantalla LCD 16×2
  • pOT de 10KΩ x 2
  • Convertidor USB a UART (si se programa a través de UART)
  • Cableado

Aclaración del circuito

Como hemos hablado antes, hay 10 entradas analógicas en la placa STM32 Blue Capsule. Son PA0 a PA7 (ADC0 a ADC7) y PB0 y PB1 (ADC8 y ADC9).

Debes utilizar cualquiera de los canales de entrada analógica en tu desarrollo. Para esta demostración, utilizaré el ADC0, es decir, el pin PA0 porque el pin de entrada analógica. A esta patilla, he relacionado el terminal central (wiper) de un potenciómetro de 10KΩ, mientras que los dos terminales opuestos del POT están relacionados con tres,3 V y GND.

Estoy utilizando una pantalla LCD de 16×2 como aparato de salida. En la empresa «Interfaz del LCD 16X2 con el STM32F103C8T6», ya he definido las conexiones entre la placa cápsula azul del STM32 y el LCD 16×2. Estoy utilizando las mismas conexiones aquí también.

Programación de la cápsula azul STM32

Probablemente ya hayas adoptado mi tutorial «Programar la cápsula azul STM32 mediante USB», por lo que no necesitas un convertidor de USB a UART, ya que debes utilizar el USB de la placa para añadir este sistema.

Hablando de este sistema, primero hay que inicializar los pines para la pantalla LCD y para la entrada analógica. A continuación, inicializa la pantalla LCD y muestra algunos datos introductorios. Dentro de la parte del bucle, aprende el voltaje analógico del pin de entrada analógico (PA0) mediante la operación analogRead y vende el valor en una variable conocida como analogVal.

Ahora, con los componentes mencionados, puedes calcular la tensión de entrada. Utiliza una variable Float para cargar el valor de la tensión de entrada calculada.

float inputVoltage = ((float) analogVal) / 4096 * 3,3

Muestra la tensión analógica calculada en la pantalla LCD junto con el valor calculado del ADC. Puedes hacer flotar el POT constantemente y la tensión analógica correspondiente será aprendida por el ADC del STM32F103C8T6 y calculará la tensión

Código

/*
* Clavija VSS del LCD a GND
* Clavija del LCD VDD a 5V
* Clavija LCD VO a POT
* Clavija RS del LCD a clavija digital PB11
* Clavija RW del LCD a GND
* Clavija LCD PT a clavija digital PB10
* Los pines D0 a D3 del LCD no se utilizan
* Clavija D4 del LCD a la clavija digital PB0
* Clavija D5 del LCD a la clavija digital PB1
* Clavija LCD D6 a clavija digital PA7
* Clavija digital LCD D7 a clavija PA6
* Clavija LED+ del LCD a 5V
* Clavija del LED del LCD a GND
*/
#embody

const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PA7, d7 = PA6;
LiquidCrystal LiquidCrystal(rs, es, d4, d5, d6, d7) pantalla;

const int analogInput = PA0;
ajuste inválido()
{
pantalla de cristal líquido.start(16, 2);
pantalla de cristal líquido.clear();
pantalla de cristal líquido.setCursor(0, 0);
pantalla de cristal líquido.print(«Hub de electrónica»);
pantalla de cristal líquido.setCursor(0, 1);
pantalla de cristal líquido.print(» ADC en STM32 «);
retraso(2000);
pantalla de cristal líquido.clear();
}
bucle vacío()
{
int analogVal = analogRead(analogInput);
floatVoltajeDeEntrada = (float(analogVal)/4096) * 3,3;
pantalla de cristal líquido.setCursor(0, 0);
pantalla de cristal líquido.print(«ADC Worth:»);
pantalla de cristal líquido.print(analogVal);
pantalla de cristal líquido.setCursor(0, 1);
pantalla de cristal líquido.print(«Tensión:»);
pantalla de cristal líquido.print(tensión de entrada);
}

Conclusión

En esta empresa se realiza una demostración sencilla del funcionamiento del ADC en la MCU STM32F103C8T6, basada principalmente en la placa STM32 Blue Capsule.

Lee:  Símbolos inductivos - Símbolos de solenoide, calzo y bobinas
Javired
Javired

Deja una respuesta

Tu dirección de correo electrónico no será publicada.