- Comparando ADC en Arduino y STM32F103C8
- ADC en STM32
- Cómo se convierte una señal analógica en formato digital
- Pines ADC en STM32F103C8T6
- Componentes requeridos
- Diagrama de circuito y explicaciones
- Programación de STM32 para leer valores ADC
Una característica común que se utiliza en casi todas las aplicaciones integradas es el módulo ADC (convertidor analógico a digital). Estos convertidores analógicos a digitales pueden leer el voltaje de sensores analógicos como el sensor de temperatura, el sensor de inclinación, el sensor de corriente, el sensor de flexión y mucho más. Entonces, en este tutorial, aprenderemos cómo usar ADC en STM32F103C8 para leer voltajes analógicos usando el IDE de Energia. Vamos a interconectar un pequeño potenciómetro a bordo píldora STM32 azul y suministrar una tensión variable a un pin analógico para leer el voltaje y mostrarlo en la pantalla LCD de 16x2.
Comparando ADC en Arduino y STM32F103C8
En la placa Arduino, contiene 6 canales (8 canales en el Mini y Nano, 16 en el Mega), ADC de 10 bits con un rango de voltaje de entrada de 0V – 5V. Esto significa que mapeará voltajes de entrada entre 0 y 5 voltios en valores enteros entre 0 y 1023. Ahora, en el caso de STM32F103C8 tenemos 10 canales, ADC de 12 bits con un rango de entrada 0V -3.3V. Mapeará voltajes de entrada entre 0 y 3,3 voltios en valores enteros entre 0 y 4095.
ADC en STM32
El ADC integrado en los microcontroladores STM32 utiliza el principio SAR (registro de aproximación sucesiva), mediante el cual la conversión se realiza en varios pasos. El número de pasos de conversión es igual al número de bits en el convertidor ADC. Cada paso es impulsado por el reloj ADC. Cada reloj ADC produce un bit desde el resultado hasta la salida. El diseño interno del ADC se basa en la técnica del condensador conmutado. Si es nuevo en STM32, consulte nuestro tutorial Introducción a STM32.
Resolución de 12 bits
Este ADC es un ADC de 10 canales y 12 bits. Aquí, el término 10 canales implica que hay 10 pines ADC con los que podemos medir el voltaje analógico. El término 12 bits implica la resolución del ADC. 12 bits significa 2 elevado a diez (2 12) que es 4096. Este es el número de pasos de muestra para nuestro ADC, por lo que el rango de nuestros valores de ADC será de 0 a 4095. El valor aumentará de 0 a 4095 basado en el valor de voltaje por paso, que se puede calcular mediante la fórmula
VOLTAJE / PASO = VOLTAJE DE REFERENCIA / 4096 = (3.3 / 4096 = 8.056mV) por unidad.
Cómo se convierte una señal analógica en formato digital
Como las computadoras almacenan y procesan solo valores binarios / digitales (1 y 0). Por lo tanto, las señales analógicas como la salida del sensor en voltios deben convertirse en valores digitales para su procesamiento y la conversión debe ser precisa.Cuando se proporciona un voltaje analógico de entrada a STM32 en sus entradas analógicas, el valor analógico se lee y se almacena en una variable entera. Ese valor analógico almacenado (0-3,3 V) se convierte en valores enteros (0-4096) usando la siguiente fórmula:
VOLTAJE DE ENTRADA = (Valor ADC / Resolución ADC) * Voltaje de referencia
Resolución = 4096
Referencia = 3.3V
Pines ADC en STM32F103C8T6
Hay 10 pines analógicos en STM32 desde PA0 a PB1.
También verifique cómo usar ADC en otros microcontroladores:
- ¿Cómo usar ADC en Arduino Uno?
- Interfaz ADC0808 con microcontrolador 8051
- Usando el módulo ADC del microcontrolador PIC
- Tutorial de Raspberry Pi ADC
- Cómo usar ADC en MSP430G2 - Medición de voltaje analógico
Componentes requeridos
- STM32F103C8
- LCD 16 * 2
- Potenciómetro 100k
- Tablero de circuitos
- Cables de conexión
Diagrama de circuito y explicaciones
A continuación se muestra el diagrama de circuito para conectar la pantalla LCD 16 * 2 y la entrada analógica a una placa STM32F103C8T6.
Las conexiones que se realizan para LCD se dan a continuación:
Pin LCD No |
Nombre del pin LCD |
Nombre de pin STM32 |
1 |
Tierra (Gnd) |
Tierra (G) |
2 |
VCC |
5V |
3 |
VEE |
Pin del centro del potenciómetro |
4 |
Registro Seleccionar (RS) |
PB11 |
5 |
Lectura / escritura (RW) |
Tierra (G) |
6 |
Habilitar (EN) |
PB10 |
7 |
Bit de datos 0 (DB0) |
Sin conexión (NC) |
8 |
Bit de datos 1 (DB1) |
Sin conexión (NC) |
9 |
Bit de datos 2 (DB2) |
Sin conexión (NC) |
10 |
Bit de datos 3 (DB3) |
Sin conexión (NC) |
11 |
Bit de datos 4 (DB4) |
PB0 |
12 |
Bit de datos 5 (DB5) |
PB1 |
13 |
Bit de datos 6 (DB6) |
PC13 |
14 |
Bit de datos 7 (DB7) |
PC14 |
15 |
LED positivo |
5V |
dieciséis |
LED negativo |
Tierra (G) |
Las conexiones se realizan de acuerdo con la tabla anterior. Hay dos potenciómetros presentes en el circuito, el primero se usa para el divisor de voltaje que se puede usar para variar el voltaje y proporcionar una entrada analógica al STM32. El pin izquierdo de este potenciómetro recibe voltaje positivo de entrada de STM32 (3.3V) y el pin derecho está conectado a tierra, el pin central del potenciómetro está conectado al pin de entrada analógica (PA7) de STM32. El otro potenciómetro se usa para variar el contraste de la pantalla LCD. La fuente de alimentación para STM32 se proporciona mediante una fuente de alimentación USB desde una PC o computadora portátil.
Programación de STM32 para leer valores ADC
En nuestro tutorial anterior, aprendimos sobre la programación de la placa STM32F103C8T6 usando el puerto USB. Así que ahora no necesitamos un programador FTDI. Simplemente conéctelo a la PC a través del puerto USB de STM32 y comience a programar con ARDUINO IDE. Programar su STM32 en ARDUINO IDE para leer voltaje analógico es muy simple. Es lo mismo que la placa arduino. No es necesario cambiar los pines de puente de STM32.
En este programa leerá el valor analógico y calculará el voltaje con ese valor y luego mostrará los valores analógicos y digitales en la pantalla LCD.
Primero defina los pines de la pantalla LCD. Estos definen a qué pin de STM32 están conectados los pines LCD. Puede modificar según sus requisitos.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // mencione los nombres de los pines con la pantalla LCD conectada
A continuación, incluimos el archivo de encabezado para la pantalla LCD. Esto llama a la biblioteca que contiene el código de cómo el STM32 debe comunicarse con la pantalla LCD. También asegúrese de que se llame a la función Liquid Crystal con los nombres de los pines que acabamos de definir anteriormente.
#incluir
Dentro de la función setup () , solo daríamos un mensaje de introducción para que se muestre en la pantalla LCD. Puede obtener información sobre cómo interconectar LCD con STM32.
lcd. comienzo (16, 2); // Estamos usando una pantalla LCD de 16 * 2 lcd.clear (); // Limpia la pantalla lcd.setCursor (0, 0); // En la primera fila, primera columna lcd.prin t ("CIRCUITDIGEST"); // Imprime este lcd.setCursor (0, 1); // En la segunda fila, primera columna n lcd.print ("STM32F103C8"); // Imprimir Thi s de retardo (2000); // esperar dos segundos lcd.clear (); // Limpia la pantalla lcd.setCursor (0, 0); // En la primera fila, primera columna lcd.print ("USING ADC IN"); // Imprime este lcd.setCursor (0,1); // En la segunda fila, primera columna lcd.print ("STM32F103C8"); // Imprime este retraso (2000); // esperar dos segundos lcd.clear (); // Limpiar la pantalla
Por último, dentro de nuestro infinito bucle () función, nos empezamos a leer la consigna suministrada a la clavija PA7 del potenciómetro. Como ya comentamos, el microcontrolador es un dispositivo digital y no puede leer el nivel de voltaje directamente. Utilizando la técnica SAR, el nivel de voltaje se asigna de 0 a 4096. Estos valores se denominan valores ADC, para obtener este valor ADC simplemente use la siguiente línea
int val = analogRead (A7); // lee el valor ADC del pin PA 7
Aquí la función analogRead () se usa para leer el valor analógico del pin. Finalmente guardamos este valor en una variable llamada “ val ”. El tipo de esta variable es entero porque solo obtendremos valores que van de 0 a 4096 para ser almacenados en esta variable.
El siguiente paso sería calcular el valor de voltaje a partir del valor de ADC. Para hacer esto tenemos las siguientes fórmulas
Tensión = (ADC Valor ADC / Resolución) * Referencia Voltag correo
En nuestro caso ya sabemos que la resolución ADC de nuestro microcontrolador es 4096. El valor ADC también se encuentra en la línea anterior y se almacena la variable denominada val. El voltaje de referencia es igual al voltaje al que está funcionando el microcontrolador. Cuando el tablero STM32 es alimentado mediante un cable USB, entonces el voltaje de funcionamiento es 3.3V. También puede medir el voltaje de operación usando un multímetro en el Vcc y el pin de tierra en la placa. Entonces la fórmula anterior encaja en nuestro caso como se muestra a continuación
voltaje de flotación = (flotación (val) / 4096) * 3.3; // fórmulas para convertir el valor ADC a voltag e
Puede confundirse con la línea float (val). Se utiliza para convertir la variable "val" del tipo de datos int al tipo de datos "float". Esta conversión es necesaria porque solo si obtenemos el resultado de val / 4096 en float podemos multiplicarlo 3.3. Si el valor se recibe en entero, siempre será 0 y el resultado también será cero. Una vez que hemos calculado el valor de ADC y el voltaje, todo lo que queda es mostrar el resultado en la pantalla LCD que se puede hacer usando las siguientes líneas
lcd.setCursor (0, 0); // coloca el cursor en la columna 0, línea 0 lcd.print ("ADC Val:"); lcd.print (val); // Mostrar valor ADC lcd.setCursor (0, 1); // coloca el cursor en la columna 0, línea 1 lcd.print ("Voltaje:"); lcd.print (voltaje); // Mostrar voltaje
El código completo y el video de demostración se muestran a continuación.