- Lyginant ADC sistemoje „Arduino“ ir „STM32F103C8“
- ADC sistemoje STM32
- Kaip analoginis signalas paverčiamas skaitmeniniu formatu
- ADC kaiščiai STM32F103C8T6
- Būtini komponentai
- Grandinės schema ir paaiškinimai
- STM32 programavimas ADC reikšmėms nuskaityti
Vienas bendras bruožas, naudojamas beveik kiekvienoje įterptojoje programoje, yra ADC modulis (analoginis į skaitmeninį keitiklį). Šie analoginiai – skaitmeniniai keitikliai gali nuskaityti įtampą iš analoginių jutiklių, tokių kaip temperatūros jutiklis, pakreipimo jutiklis, srovės jutiklis, „Flex“ jutiklis ir daug daugiau. Taigi šioje pamokoje sužinosime, kaip naudoti ADC programoje STM32F103C8, norint skaityti analogines įtampas naudojant „Energia IDE“. Mes sujungsime mažą potenciometrą su „STM32 Blue Pill“ plokšte ir tieksime kintamą įtampą į analoginį kaištį, nuskaitykime įtampą ir parodysime ją 16x2 LCD ekrane.
Lyginant ADC sistemoje „Arduino“ ir „STM32F103C8“
„Arduino“ plokštėje yra 6 kanalai (8 kanalai „Mini“ ir „Nano“, 16 - „Mega“), 10 bitų ADC, kurio įėjimo įtampos diapazonas yra 0–5 V. Tai reiškia, kad jis įvesties įtampas nuo 0 iki 5 voltų suskirstys į sveiko skaičiaus reikšmes nuo 0 iki 1023. Dabar STM32F103C8 atveju turime 10 kanalų, 12 bitų ADC, kurio įėjimo diapazonas yra 0V -3,3V. Jis įves įtampą nuo 0 iki 3,3 voltų į sveikas skaičius nuo 0 iki 4095.
ADC sistemoje STM32
Į STM32 mikrovaldiklius įterptas ADC naudoja SAR (nuoseklaus aproksimavimo registro) principą, pagal kurį konversija atliekama keliais etapais. Konversijos žingsnių skaičius yra lygus ADC keitiklio bitų skaičiui. Kiekvieną žingsnį lemia ADC laikrodis. Kiekvienas ADC laikrodis sukuria vieną bitą nuo rezultato iki išvesties. ADC vidinis dizainas pagrįstas įjungto kondensatoriaus technika. Jei dar nesinaudojote STM32, patikrinkite mūsų „STM32“ pradžios pamoką.
12 bitų skiriamoji geba
Šis ADC yra 10 kanalų 12 bitų ADC. Čia terminas 10 kanalų reiškia, kad yra 10 ADC kaiščių, kuriais galime išmatuoti analoginę įtampą. Terminas 12 bitų reiškia ADC skiriamąją gebą. 12 bitų reiškia 2 iki dešimties (2 12) galios, kuri yra 4096. Tai yra mūsų ADC pavyzdžių žingsnių skaičius, todėl mūsų ADC reikšmių diapazonas bus nuo 0 iki 4095. Vertė padidės nuo 0 iki 40 4095 pagal įtampos vertę viename žingsnyje, kurią galima apskaičiuoti pagal formulę
ĮTampa / ŽINGSNIS = Etaloninė įtampa / 4096 = (3,3 / 4096 = 8,056 mV) vienetui.
Kaip analoginis signalas paverčiamas skaitmeniniu formatu
Kadangi kompiuteriai saugo ir apdoroja tik dvejetaines / skaitmenines reikšmes (1 ir 0). Taigi analoginiai signalai, pvz., Jutiklio išvestis voltais, apdorojimui turi būti konvertuojami į skaitmenines vertes, o konversija turi būti tiksli. Kai analoginės įvesties įtampa yra suteikiama STM32 jo analoginiuose įėjimuose, analoginė vertė nuskaitoma ir saugoma sveikojo skaičiaus kintamajame. Taikoma analoginė vertė (0–3,3 V) konvertuojama į sveikųjų skaičių reikšmes (0–4096) naudojant šią formulę:
INPUT VOLTAGE = (ADC reikšmė / ADC skiriamoji geba) * etaloninė įtampa
Rezoliucija = 4096
Nuoroda = 3,3 V
ADC kaiščiai STM32F103C8T6
STM32 yra 10 analoginių kaiščių nuo PA0 iki PB1.
Taip pat patikrinkite, kaip naudoti ADC kituose mikrovaldikliuose:
- Kaip naudoti ADC „Arduino Uno“?
- Sąsaja ADC0808 su 8051 mikrovaldikliu
- Naudojant PIC mikrovaldiklio ADC modulį
- Raspberry Pi ADC pamoka
- Kaip naudoti ADC MSP430G2 - Analoginės įtampos matavimas
Būtini komponentai
- STM32F103C8
- LCD 16 * 2
- Potenciometras 100k
- Bandomoji Lenta
- Jungiamieji laidai
Grandinės schema ir paaiškinimai
Žemiau parodyta grandinės schema, skirta sąsajai 16 * 2 skystųjų kristalų ir analoginio įėjimo į STM32F103C8T6 plokštę.
LCD jungtys pateikiamos žemiau:
LCD kaiščio Nr |
LCD smeigtuko pavadinimas |
STM32 kaiščio pavadinimas |
1 |
Žemė (Gnd) |
Žemė (G) |
2 |
VCC |
5V |
3 |
VEE |
Kaištis iš potenciometro centro |
4 |
„Register Select“ (RS) |
PB11 |
5 |
Skaityti / rašyti (RW) |
Žemė (G) |
6 |
Įgalinti (EN) |
PB10 |
7 |
0 duomenų bitas (DB0) |
Nėra ryšio (NC) |
8 |
1 duomenų bitas (DB1) |
Nėra ryšio (NC) |
9 |
2 duomenų bitas (DB2) |
Nėra ryšio (NC) |
10 |
3 duomenų bitas (DB3) |
Nėra ryšio (NC) |
11 |
4 duomenų bitas (DB4) |
PB0 |
12 |
5 duomenų bitas (DB5) |
PB1 |
13 |
6 duomenų bitas (DB6) |
PC13 |
14 |
7 duomenų bitas (DB7) |
PC14 |
15 |
LED teigiamas |
5V |
16 |
LED neigiamas |
Žemė (G) |
Jungtys atliekamos pagal pirmiau pateiktą lentelę. Grandinėje yra du potenciometrai, pirmasis naudojamas įtampos dalikliui, kuris gali būti naudojamas įtampai keisti ir teikti analoginę įvestį į STM32. Kairysis šio potenciometro kaištis gauna teigiamą įėjimo įtampą iš STM32 (3,3 V), o dešinysis kaištis yra prijungtas prie žemės, centrinis potenciometro kaištis yra prijungtas prie analoginio STM32 įvesties kaiščio (PA7). Kitas potenciometras naudojamas keisti LCD ekrano kontrastą. STM32 maitinimo šaltinis tiekiamas per USB maitinimą iš kompiuterio ar nešiojamojo kompiuterio.
STM32 programavimas ADC reikšmėms nuskaityti
Ankstesnėje mūsų pamokoje sužinojome apie STM32F103C8T6 plokštės programavimą naudojant USB prievadą. Taigi dabar mums nereikia FTDI programuotojo. Tiesiog prijunkite jį prie kompiuterio per STM32 USB prievadą ir pradėkite programuoti naudodami „ARDUINO IDE“. STM32 programavimas ARDUINO IDE programoje, norint nuskaityti analoginę įtampą, yra labai paprastas. Tai tas pats kaip arduino lenta. STM32 jungiklio kaiščių keisti nereikia.
Šioje programoje bus nuskaityta analoginė vertė ir apskaičiuota įtampa pagal tą vertę, o tada LCD ekrane bus rodomos tiek analoginės, tiek skaitmeninės vertės.
Pirmiausia nustatykite LCD kaiščius. Jie apibrėžia, prie kurio STM32 kaiščio yra prijungti LCD kaiščiai. Galite modifikuoti pagal savo reikalavimus.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // paminėti kaiščių pavadinimus su LCD yra prijungtas
Toliau įtraukiame skystųjų kristalų ekrano antraštės failą. Tai iškviečia biblioteką, kurioje yra kodas, kaip STM32 turėtų bendrauti su LCD. Taip pat įsitikinkite, kad funkcija „Skystasis kristalas“ yra iškviesta su kaiščių pavadinimais, kuriuos ką tik apibrėžėme aukščiau.
# įtraukti
Funkcijos setup () viduje mes tiesiog pateikiame įvadinį pranešimą, kuris bus rodomas LCD ekrane. Galite sužinoti apie LCD sąsają su STM32.
lcd.begin (16, 2); // Mes naudojame 16 * 2 skystųjų kristalų ekraną.clear (); // Išvalykite ekraną lcd.setCursor (0, 0); // Pirmoje eilutėje pirmasis stulpelis lcd.prin t ("CIRCUITDIGEST"); // Spausdinti šį lcd.setCursor (0, 1); // Antroje eilutėje pirmasis stulpelis n lcd.print ("STM32F103C8"); // Print thi s delay (2000); // laukti dviejų sekcijų lcd.clear (); // Išvalykite ekraną lcd.setCursor (0, 0); // Pirmoje eilutėje pirmas stulpelis lcd.print ("USING ADC IN"); // Spausdinti šį lcd.setCursor (0,1); // Antroje eilutėje pirmame stulpelyje lcd.print ("STM32F103C8"); // Spausdinti šią vėlavimą (2000); // palauk du sekundus lcd.clear (); // Išvalykite ekraną
Galiausiai, begalinės kilpos () funkcijos viduje, mes pradedame skaityti analoginę įtampą, tiekiamą į PA7 kaištį iš potenciometro. Kaip jau aptarėme, mikrovaldiklis yra skaitmeninis įrenginys ir jis negali tiesiogiai nuskaityti įtampos lygio. Naudojant SAR techniką, įtampos lygis atvaizduojamas nuo 0 iki 4096. Šios vertės vadinamos ADC reikšmėmis, kad gautumėte šią ADC reikšmę, tiesiog naudokite šią eilutę
int val = analogasRead (A7); // skaitykite ADC vertę iš kaiščio PA 7
Čia funkcija analogRead () naudojama kaiščio analoginei vertei nuskaityti. Galiausiai šią vertę išsaugome kintamajame, vadinamame „ val “. Šio kintamojo tipas yra sveikasis skaičius, nes šiame kintamajame bus saugomos tik vertės nuo 0 iki 4096.
Kitas žingsnis būtų įtampos vertės apskaičiavimas pagal ADC vertę. Norėdami tai padaryti, turime šias formules
Įtampa = (ADC reikšmė / ADC skiriamoji geba) * Etaloninė įtampa el
Mūsų atveju mes jau žinome, kad mūsų mikrovaldiklio skiriamoji geba yra 4096. ADC vertė taip pat randama ankstesnėje eilutėje ir saugoma kintamasis, vadinamas val. Atskaitos įtampa yra lygi įtampos, kuriai esant mikrokontroleris veikia. Kai STM32 lenta maitina per USB kabelį, tada darbinė įtampa yra 3.3V. Taip pat galite išmatuoti darbinę įtampą naudodami multimetrą per Vcc ir žemės kaištį lentoje. Taigi aukščiau pateikta formulė tinka mūsų atvejui, kaip parodyta žemiau
plūdės įtampa = (plūdė (val) / 4096) * 3,3; // formulės, skirtos ADC vertei konvertuoti į voltą e
Galite būti supainioti su plūdine (val) valtimi. Tai naudojama kintamajam „val“ paversti iš int duomenų tipo į „float“ duomenų tipą. Šis perskaičiavimas reikalingas, nes tik gavę val / 4096 rezultatą plūdėje galime jį padauginti iš 3.3. Jei vertė gaunama sveikuoju skaičiumi, ji visada bus 0, o rezultatas taip pat bus nulis. Kai apskaičiuojame ADC vertę ir įtampą, lieka tik rodyti rezultatą LCD ekrane, kurį galima padaryti naudojant šias eilutes
lcd.setCursor (0, 0); // nustatykite žymeklį į 0 stulpelį, 0 eilutę lcd.print ("ADC Val:"); lcd.print (val); // Rodyti ADC reikšmę lcd.setCursor (0, 1); // nustatykite žymeklį į 0 stulpelį, 1 eilutė lcd.print ("Įtampa:"); lcd.print (įtampa); // Ekrano įtampa
Pilnas kodas ir demonstracinis vaizdo įrašas pateikiami žemiau.