- Comparant ADC a Arduino i STM32F103C8
- ADC a STM32
- Com es converteix un senyal analògic en format digital
- Pins ADC a STM32F103C8T6
- Components necessaris
- Diagrama del circuit i explicacions
- Programació STM32 per a la lectura de valors ADC
Una característica comuna que s’utilitza en gairebé totes les aplicacions incrustades és el mòdul ADC (convertidor analògic a digital). Aquests convertidors analògics a digitals poden llegir el voltatge de sensors analògics com el sensor de temperatura, el sensor d’inclinació, el sensor de corrent, el sensor Flex i molt més. Així doncs, en aquest tutorial aprendrem a utilitzar ADC a STM32F103C8 per llegir tensions analògiques mitjançant l’energia IDE. Anem a interconnectar un petit potenciòmetre a bord píndola STM32 blau i subministrar una tensió variable a un pin analògic per llegir el voltatge i mostrar a la pantalla LCD de 16x2.
Comparant ADC a Arduino i STM32F103C8
A la placa Arduino, conté un ADC de 10 bits de 6 canals (8 canals al Mini i Nano, 16 al Mega), amb un rang de voltatge d’entrada de 0V a 5V. Això vol dir que maparà les tensions d’entrada entre 0 i 5 volts en valors enters entre 0 i 1023. Ara, en el cas de STM32F103C8, tenim 10 canals, ADC de 12 bits amb un rang d’entrada 0V -3,3V. Mapearà tensions d’entrada entre 0 i 3,3 volts en valors enters entre 0 i 4095.
ADC a STM32
L’ADC incrustat als microcontroladors STM32 utilitza el principi SAR (registre d’aproximació successiu), pel qual la conversió es realitza en diversos passos. El nombre de passos de conversió és igual al nombre de bits del convertidor ADC. Cada pas és impulsat pel rellotge ADC. Cada rellotge ADC produeix un bit des del resultat fins a la sortida. El disseny intern de l’ADC es basa en la tècnica del condensador commutat. Si no coneixeu STM32, consulteu el nostre tutorial Introducció a STM32.
Resolució de 12 bits
Aquest ADC és un ADC de 10 canals de 12 bits. Aquí el terme 10 canals implica que hi ha 10 pins ADC amb els quals podem mesurar la tensió analògica. El terme 12 bits implica la resolució de l’ADC. 12 bits significa 2 a la potència de deu (2 12), que és 4096. Aquest és el nombre de passos de mostra per al nostre ADC, de manera que l'interval dels nostres valors ADC serà de 0 a 4095. El valor augmentarà de 0 a 4095 basat en el valor de la tensió per pas, que es pot calcular mitjançant la fórmula
TENSIÓ / PAS = TENSIÓ DE REFERÈNCIA / 4096 = (3,3 / 4096 = 8,056mV) per unitat.
Com es converteix un senyal analògic en format digital
Els ordinadors emmagatzemen i processen només valors digitals i binaris (1 i 0). Per tant, els senyals analògics, com la sortida del sensor en volts, s’han de convertir en valors digitals per al processament i la conversió ha de ser precisa. Quan es dóna una tensió analògica d’entrada a STM32 a les seves entrades analògiques, el valor analògic es llegeix i s’emmagatzema en una variable sencera.. Aquest valor analògic emmagatzemat (0-3,3V) es converteix en valors enters (0-4096) mitjançant la fórmula següent:
TENSIÓ D'ENTRADA = (valor ADC / resolució ADC) * Voltatge de referència
Resolució = 4096
Referència = 3,3V
Pins ADC a STM32F103C8T6

Hi ha 10 pins analògics a STM32 de PA0 a PB1.
Comproveu també com utilitzar ADC en altres microcontroladors:
- Com utilitzar ADC a Arduino Uno?
- Interfície ADC0808 amb microcontrolador 8051
- Ús del mòdul ADC del microcontrolador PIC
- Tutorial ADC de Raspberry Pi
- Com s'utilitza ADC a MSP430G2: mesurament de la tensió analògica
Components necessaris
- STM32F103C8
- LCD 16 * 2
- Potenciòmetre 100k
- Taula de pa
- Connexió de cables
Diagrama del circuit i explicacions
A continuació es mostra el diagrama de circuits per connectar 16 * 2 LCD i entrada analògica a una placa STM32F103C8T6.

Les connexions que es fan per a LCD es donen a continuació:
|
Pin LCD núm |
Nom del pin LCD |
Nom del pin STM32 |
|
1 |
Terra (Gnd) |
Terra (G) |
|
2 |
VCC |
5V |
|
3 |
VEE |
Pin del centre del potenciòmetre |
|
4 |
Selecciona registre (RS) |
PB11 |
|
5 |
Lectura / Escriptura (RW) |
Terra (G) |
|
6 |
Activa (EN) |
PB10 |
|
7 |
Bit de dades 0 (DB0) |
Sense connexió (NC) |
|
8 |
Bit de dades 1 (DB1) |
Sense connexió (NC) |
|
9 |
Bit de dades 2 (DB2) |
Sense connexió (NC) |
|
10 |
Bit de dades 3 (DB3) |
Sense connexió (NC) |
|
11 |
Bit de dades 4 (DB4) |
PB0 |
|
12 |
Bit de dades 5 (DB5) |
PB1 |
|
13 |
Bit de dades 6 (DB6) |
PC13 |
|
14 |
Bit de dades 7 (DB7) |
PC14 |
|
15 |
LED positiu |
5V |
|
16 |
LED negatiu |
Terra (G) |
Les connexions es realitzen segons la taula indicada anteriorment. Hi ha dos potenciòmetres presents al circuit, el primer s’utilitza per al divisor de voltatge que es pot utilitzar per variar el voltatge i proporcionar entrada analògica a STM32. El pin esquerre d’aquest potenciòmetre obté la tensió positiva d’entrada de STM32 (3,3 V) i el pin dret es connecta a terra, el pin central del potenciòmetre està connectat al pin d’entrada analògic (PA7) de STM32. L’altre potenciòmetre s’utilitza per variar el contrast de la pantalla LCD. La font d'alimentació per a STM32 es proporciona mitjançant una font d'alimentació USB des d'un PC o portàtil.

Programació STM32 per a la lectura de valors ADC
Al nostre tutorial anterior, vam aprendre sobre la programació de la placa STM32F103C8T6 mitjançant el port USB. Per tant, no necessitem cap programador FTDI ara. Simplement connecteu-lo al PC mitjançant el port USB de STM32 i comenceu a programar amb ARDUINO IDE. Programar el vostre STM32 a ARDUINO IDE per llegir la tensió analògica és molt senzill. És el mateix que la placa arduino. No cal canviar els passadors del STM32.
En aquest programa es llegirà el valor analògic i es calcularà el voltatge amb aquest valor i es mostraran els dos valors, analògics i digitals, a la pantalla LCD.
Primer definiu els pins LCD. Aquests defineixen a quin pin de STM32 estan connectats els pins LCD. Podeu modificar segons els vostres requisits.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // mencioneu els noms dels pins als quals està connectat el LCD
A continuació, incloem el fitxer de capçalera de la pantalla LCD. Es truca a la biblioteca que conté el codi de com s'ha de comunicar l'STM32 amb la pantalla LCD. Assegureu-vos també que la funció Liquid Crystal es cridi amb els noms dels pins que acabem de definir més amunt.
#incloure
Dins de la funció setup () , només donaríem un missatge d'introducció que es mostrarà a la pantalla LCD. Podeu obtenir informació sobre la interfície LCD amb STM32.
lcd.begin (16, 2); // Estem utilitzant un LCD de 16 * 2 lcd.clear (); // Esborreu la pantalla lcd.setCursor (0, 0); // A la primera fila, primera columna lcd.prin t ("CIRCUITDIGEST"); // Imprimiu aquest lcd.setCursor (0, 1); // A la segona fila primera columna n lcd.print ("STM32F103C8"); // Imprimeix Thi s de retard (2000); // espera dos segons lcd.clear (); // Esborreu la pantalla lcd.setCursor (0, 0); // A la primera fila, primera columna lcd.print ("USANT ADC IN"); // Imprimeix aquest lcd.setCursor (0,1); // A la segona fila de la primera columna lcd.print ("STM32F103C8"); // Imprimeix aquest retard (2000); // espera dos segons lcd.clear (); // Esborreu la pantalla
Finalment, dins de la nostra funció de bucle infinit () , comencem a llegir el voltatge analògic subministrat al pin PA7 des del potenciòmetre. Com ja hem comentat, el microcontrolador és un dispositiu digital i no pot llegir el nivell de tensió directament. Mitjançant la tècnica SAR, el nivell de voltatge es mapeja de 0 a 4096. Aquests valors s’anomenen valors ADC, per obtenir aquest valor ADC només cal utilitzar la línia següent
int val = analogRead (A7); // llegiu el valor ADC del pin PA 7
Aquí la funció analogRead () s’utilitza per llegir el valor analògic del pin. Finalment guardem aquest valor en una variable anomenada " val ". El tipus d’aquesta variable és sencer perquè només obtindrem valors que oscil·len entre 0 i 4096 en aquesta variable.
El següent pas seria calcular el valor de la tensió a partir del valor ADC. Per fer-ho disposem de les següents fórmules
Voltatge = (valor ADC / resolució ADC) * Voltatge de referència e
En el nostre cas, ja sabem que la resolució ADC del nostre microcontrolador és 4096. El valor ADC també es troba a la línia anterior i emmagatzema la variable anomenada val. La tensió de referència és igual a la tensió en què funciona el microcontrolador. Quan el tauler STM32 és alimentat amb un cable USB, llavors el voltatge de funcionament és 3.3V. També podeu mesurar la tensió de funcionament utilitzant un multímetre a través del Vcc i el pin de terra de la placa. Per tant, la fórmula anterior s’adapta al nostre cas tal com es mostra a continuació
tensió flotant = (flotador (val) / 4096) * 3,3; // fórmules per convertir el valor ADC a voltatge e
És possible que us confongueu amb la línia flotant (val). S'utilitza per convertir la variable "val" de tipus de dades int a tipus de dades "float". Aquesta conversió és necessària perquè només si obtenim el resultat de val / 4096 en float podem multiplicar-la 3.3. Si el valor es rep en enter, sempre serà 0 i el resultat també serà zero. Un cop calculat el valor i la tensió de l’ADC, només queda mostrar el resultat a la pantalla LCD que es pot fer mitjançant les línies següents
lcd.setCursor (0, 0); // configureu el cursor a la columna 0, línia 0 lcd.print ("ADC Val:"); lcd.print (val); // Mostra el valor ADC lcd.setCursor (0, 1); // configureu el cursor a la columna 0, línia 1 lcd.print ("Voltatge:"); lcd.print (voltatge); // Voltatge de visualització
A continuació es mostra el codi complet i el vídeo de demostració.
