- Usporedba ADC-a u Arduinu i STM32F103C8
- ADC u STM32
- Kako se analogni signal pretvara u digitalni format
- ADC igle u STM32F103C8T6
- Komponente potrebne
- Kružni dijagram i objašnjenja
- Programiranje STM32 za čitanje ADC vrijednosti
Jedna uobičajena značajka koja se koristi u gotovo svakoj ugrađenoj aplikaciji je ADC modul (analogni u digitalni pretvarač). Ovi analogno-digitalni pretvarači mogu očitavati napon s analognih senzora kao što su temperaturni senzor, senzor nagiba, trenutni senzor, Flex senzor i još mnogo toga. Dakle, u ovom uputstvu naučit ćemo kako koristiti ADC u STM32F103C8 za čitanje analognih napona pomoću Energia IDE. Spojit ćemo mali potenciometar na ploču STM32 Blue Pill i napajati promjenjivi napon na analogni pin, očitavati napon i prikazivati ga na LCD zaslonu 16x2.
Usporedba ADC-a u Arduinu i STM32F103C8
Na ploči Arduino sadrži 6 kanala (8 kanala na Mini i Nano, 16 na Mega), 10-bitni ADC s rasponom ulaznog napona od 0V – 5V. To znači da će preslikati ulazni napon između 0 i 5 volti u cjelobrojne vrijednosti između 0 i 1023. Sada, u slučaju STM32F103C8, imamo 10 kanala, 12-bitni ADC s ulaznim opsegom 0V -3,3V. Mapirat će ulazni napon između 0 i 3,3 volta u cjelobrojne vrijednosti između 0 i 4095.
ADC u STM32
ADC ugrađen u mikrokontrolere STM32 koristi princip SAR (sukcesivni registar aproksimacije), kojim se pretvorba izvodi u nekoliko koraka. Broj koraka pretvorbe jednak je broju bitova u ADC pretvaraču. Svaki korak pokreće ADC sat. Svaki ADC sat daje jedan bit od rezultata do izlaza. Interni dizajn ADC-a temelji se na tehnici komutiranih kondenzatora. Ako ste novi u STM32, pogledajte naš vodič za početak rada sa STM32.
12-bitna razlučivost
Ovaj ADC je 10-kanalni 12-bitni ADC. Ovdje izraz 10 kanal podrazumijeva da postoji 10 ADC pinova pomoću kojih možemo mjeriti analogni napon. Izraz 12-bit podrazumijeva razlučivost ADC-a. 12-bit znači 2 na snagu deset (2 12) što je 4096. Ovo je broj koraka uzorka za naš ADC, pa će raspon naših vrijednosti ADC biti od 0 do 4095. Vrijednost će se povećati od 0 do 4095 na temelju vrijednosti napona po koraku, koji se može izračunati formulom
NAPON / KORAK = REFERENTNI NAPON / 4096 = (3,3 / 4096 = 8,056mV) po jedinici.
Kako se analogni signal pretvara u digitalni format
Kako računala pohranjuju i obrađuju samo binarne / digitalne vrijednosti (1 i 0). Dakle, analogni signali poput izlaza senzora u voltima moraju se pretvoriti u digitalne vrijednosti za obradu, a pretvorba mora biti točna. Kad se ulazni analogni napon daje STM32 na njegovim analognim ulazima, analogna vrijednost se čita i pohranjuje u cjelobrojnu varijablu. Ta pohranjena analogna vrijednost (0-3,3 V) pretvara se u cijele vrijednosti (0-4096) pomoću donje formule:
ULAZNI NAPON = (vrijednost ADC / razlučivost ADC) * referentni napon
Razlučivost = 4096
Referenca = 3.3V
ADC igle u STM32F103C8T6

Postoji 10 analognih pinova u STM32 od PA0 do PB1.
Također provjerite kako koristiti ADC u drugim mikrokontrolerima:
- Kako koristiti ADC u Arduino Uno?
- Povezivanje ADC0808 s 8051 mikrokontrolerom
- Korištenje ADC modula PIC mikrokontrolera
- Vodič za ADC za Raspberry Pi
- Kako se koristi ADC u MSP430G2 - Mjerenje analognog napona
Komponente potrebne
- STM32F103C8
- LCD 16 * 2
- Potenciometar 100k
- Breadboard
- Spajanje žica
Kružni dijagram i objašnjenja
Shema sklopa za sučelje LCD- a 16 * 2 i analognog ulaza na ploču STM32F103C8T6 prikazana je u nastavku.

Priključci koji se rade za LCD prikazani su u nastavku:
|
LCD pin br |
Naziv LCD ekrana |
Naziv pin-a STM32 |
|
1 |
Prizemlje (Gnd) |
Uzemljenje (G) |
|
2 |
VCC |
5V |
|
3 |
VEE |
Prikvačivač iz središta potenciometra |
|
4 |
Odaberite registar (RS) |
PB11 |
|
5 |
Čitanje / pisanje (RW) |
Uzemljenje (G) |
|
6 |
Omogući (EN) |
PB10 |
|
7 |
Bit podataka 0 (DB0) |
Nema veze (NC) |
|
8 |
Bit podataka 1 (DB1) |
Nema veze (NC) |
|
9 |
Bit podataka 2 (DB2) |
Nema veze (NC) |
|
10 |
Bit podataka 3 (DB3) |
Nema veze (NC) |
|
11 |
Bit podataka 4 (DB4) |
PB0 |
|
12 |
Bit podataka 5 (DB5) |
PB1 |
|
13 |
Bit podataka 6 (DB6) |
PC13 |
|
14 |
Bit podataka 7 (DB7) |
PC14 |
|
15 |
LED pozitivan |
5V |
|
16 |
LED negativan |
Uzemljenje (G) |
Priključci se izrađuju prema gornjoj tablici. U krugu su prisutna dva potenciometra, prvi se koristi za razdjelnik napona koji se može koristiti za promjenu napona i pružanje analognog ulaza na STM32. Lijevi pin ovog potenciometra dobiva ulazni pozitivni napon sa STM32 (3,3 V), a desni pin spojen je na masu, središnji pin potenciometra spojen je na analogni ulazni pin (PA7) STM32. Drugi se potenciometar koristi za promjenu kontrasta LCD zaslona. Izvor napajanja za STM32 osigurava se putem USB napajanja s računala ili prijenosnog računala.

Programiranje STM32 za čitanje ADC vrijednosti
U našem prethodnom vodiču saznali smo o programiranju ploče STM32F103C8T6 pomoću USB priključka. Dakle, sada nam ne treba FTDI programer. Jednostavno ga spojite na računalo putem USB priključka STM32 i započnite programirati s ARDUINO IDE. Programiranje vašeg STM32 u ARDUINO IDE za čitanje analognog napona vrlo je jednostavno. Ista je poput arduino ploče. Nema potrebe za promjenom kontaktnih nožica STM32.
U ovom će programu pročitati analognu vrijednost i izračunati napon s tom vrijednošću, a zatim na LCD zaslonu prikazati i analognu i digitalnu vrijednost.
Prvo definirajte LCD igle. Oni definiraju na koji su pin STM32 spojeni LCD pinovi. Možete izmijeniti prema svojim zahtjevima.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // spominjemo nazive pinova na koje je povezan LCD
Dalje, uključujemo datoteku zaglavlja za LCD zaslon. To poziva biblioteku koja sadrži kôd kako STM32 treba komunicirati s LCD-om. Također se pobrinite da se funkcija Liquid Crystal zove s imenima pinova koje smo upravo definirali gore.
#include
Unutar funkcije setup () samo bismo dali uvodnu poruku koja će se prikazati na LCD zaslonu. Možete naučiti o povezivanju LCD-a sa STM32.
lcd.begin (16, 2); // Koristimo LCD LCD 16 * 2 LCD (Clear) (); // Obrišite zaslon lcd.setCursor (0, 0); // U prvom retku prvi stupac lcd.prin t ("CIRCUITDIGEST"); // ispis ovog lcd.setCursor (0, 1); // U drugom redu reda prvi stupac n lcd.print ("STM32F103C8"); // Ispis thi e kašnjenje (2000); // čekamo dvije sekunde lcd.clear (); // Obrišite zaslon lcd.setCursor (0, 0); // U prvom retku prvi stupac lcd.print ("USING ADC IN"); // Ispis ovog lcd.setCursor (0,1); // U prvom stupcu prvog stupca lcd.print ("STM32F103C8"); // Ispiši ovo kašnjenje (2000); // čekamo dvije sekunde lcd.clear (); // Očistite zaslon
Konačno, unutar naše funkcije beskonačne petlje () počinjemo čitati analogni napon napajan na pin PA7 s potenciometra. Kao što smo već razgovarali, mikrokontroler je digitalni uređaj i ne može izravno očitavati razinu napona. Koristeći SAR tehniku, razina napona preslikava se od 0 do 4096. Te se vrijednosti nazivaju ADC vrijednosti, da biste dobili ovu ADC vrijednost, jednostavno upotrijebite sljedeći redak
int val = analogRead (A7); // očitavanje vrijednosti ADC s pina PA 7
Ovdje se funkcija analogRead () koristi za čitanje analogne vrijednosti pina. Na kraju ovu vrijednost spremamo u varijablu koja se naziva " val ". Tip ove varijable je cjelobrojni jer ćemo u ovu varijablu pohraniti samo vrijednosti u rasponu od 0 do 4096.
Sljedeći bi korak bio izračunavanje vrijednosti napona iz vrijednosti ADC. Da bismo to učinili, imamo sljedeće formule
Napon = (vrijednost ADC / razlučivost ADC) * Referentni napon e
U našem slučaju već znamo da je ADC razlučivost našeg mikrokontrolera 4096. Vrijednost ADC-a također se nalazi u prethodnom retku i pohranjuje varijablu koja se naziva val. Referentni napon jednak naponu na kojem djeluje mikrokontroler. Kada STM32 odbor napaja preko USB kabela onda je napon 3.3V. Također možete izmjeriti radni napon pomoću multimetra preko Vcc i uzemljenja na ploči. Dakle, gornja formula se uklapa u naš slučaj kao što je prikazano u nastavku
plovni napon = (plovak (val) / 4096) * 3,3; // formule za pretvaranje vrijednosti ADC u voltag e
Možda ćete biti zbunjeni s linijom float (val). To se koristi za pretvorbu varijable "val" iz int tipa podataka u "float" tip podataka. Ova je pretvorba potrebna jer je samo ako dobijemo rezultat val / 4096 u float-u možemo pomnožiti 3.3. Ako se vrijednost primi u cijelom broju, uvijek će biti 0, a rezultat će također biti nula. Nakon što izračunamo ADC vrijednost i napon, preostaje samo prikaz rezultata na LCD zaslonu, što se može učiniti pomoću sljedećih redaka
lcd.setCursor (0, 0); // postavljanje kursora na stupac 0, redak 0 lcd.print ("ADC Val:"); lcd.ispis (val); // Prikaz vrijednosti ADC lcd.setCursor (0, 1); // postavljanje kursora na stupac 0, redak 1 lcd.print ("Voltage:"); lcd.ispis (napon); // Prikaz napona
Kompletni kod i demonstracijski video prikazan je u nastavku.
