- Vertaamalla ADC: tä Arduinossa ja STM32F103C8: ssa
- ADC STM32: ssä
- Kuinka analoginen signaali muunnetaan digitaalimuodoksi
- ADC-nastat mallissa STM32F103C8T6
- Tarvittavat komponentit
- Piirikaavio ja selitykset
- STM32: n ohjelmointi ADC-arvojen lukemista varten
Yksi yleinen piirre, jota käytetään melkein kaikissa sulautetuissa sovelluksissa, on ADC-moduuli (analoginen digitaalimuunnin). Nämä analogisesta digitaaliseen muuntimet voivat lukea jännitteen analogisista antureista, kuten lämpötila-anturista, kallistustunnistimesta, virta-anturista, Flex-anturista ja paljon muuta. Joten tässä opetusohjelmassa opimme käyttämään ADC: tä STM32F103C8: ssa analogisten jännitteiden lukemiseen Energia IDE: n avulla. Tulemme interface pieni potentiometri STM32 Blue Pill hallituksen ja toimittaa vaihtelevan jännitteen analogiseen pin Lue jännite ja näyttää sen 16x2 LCD-näyttö.
Vertaamalla ADC: tä Arduinossa ja STM32F103C8: ssa
Arduino-kortissa se sisältää 6-kanavan (8 kanavaa Mini- ja Nano-laitteissa, 16 Megalla), 10-bittisen ADC: n tulojännitealueella 0–5 V. Tämä tarkoittaa, että se kartoittaa 0 - 5 voltin syöttöjännitteet kokonaislukuiksi välillä 0 - 1023. Nyt STM32F103C8: n tapauksessa meillä on 10 kanavaa, 12-bittinen ADC, jonka tuloalue on 0 - 3,3 V. Se kuvaa tulojännitteet 0-3,3 volttia kokonaislukuarvoksi 0-4095.
ADC STM32: ssä
STM32-mikrokontrollereihin upotettu ADC käyttää SAR-periaatetta (peräkkäinen approksimaatiorekisteri), jolla muunnos suoritetaan useissa vaiheissa. Muunnosvaiheiden määrä on yhtä suuri kuin ADC-muuntimen bittien lukumäärä. Jokaista vaihetta ohjaa ADC-kello. Jokainen ADC-kello tuottaa yhden bitin tuloksesta ulostuloon. ADC: n sisäinen rakenne perustuu kytkentäkondensaattoritekniikkaan. Jos olet uusi STM32-käyttäjä, tutustu STM32-oppaamme -oppaaseen.
12-bittinen tarkkuus
Tämä ADC on 10-kanavainen 12-bittinen ADC. Tässä termi 10 kanavaa tarkoittaa, että on olemassa 10 ADC-nastaa, joiden avulla voimme mitata analogista jännitettä. Termi 12-bittinen tarkoittaa ADC: n resoluutiota. 12-bittinen tarkoittaa 2 kymmenen (2 12) tehoon, joka on 4096. Tämä on ADC: n esimerkkivaiheiden määrä, joten ADC-arvojemme alue on 0–4095. Arvo nousee 0: sta arvoon 4095 perustuen jännitteen arvoon askelta kohti, joka voidaan laskea kaavalla
JÄNNITE / VAIHE = VERTAILIJÄNNITE / 4096 = (3,3 / 4096 = 8,056 mV) yksikköä kohti.
Kuinka analoginen signaali muunnetaan digitaalimuodoksi
Koska tietokoneet tallentavat ja käsittelevät vain binaarisia / digitaalisia arvoja (1 ja 0). Joten analogiset signaalit, kuten anturin lähtö voltteina, on muunnettava digitaalisiksi arvoiksi käsittelyä varten ja muunnoksen on oltava tarkka. Kun analoginen tulojännite annetaan STM32: lle sen analogisissa tuloissa, analoginen arvo luetaan ja tallennetaan kokonaislukumuuttujaan. Tallennettu analoginen arvo (0-3,3 V) muunnetaan kokonaislukuiksi (0-4096) seuraavaa kaavaa käyttäen:
INPUT VOLTAGE = (ADC-arvo / ADC-tarkkuus) * Referenssijännite
Resoluutio = 4096
Viite = 3,3 V
ADC-nastat mallissa STM32F103C8T6
STM32: ssa on 10 analogista nastaa PA0: sta PB1: een.
Tarkista myös, kuinka ADC: tä käytetään muissa mikro-ohjaimissa:
- Kuinka käyttää ADC: tä Arduino Unossa?
- ADC0808: n ja 8051-mikrokontrollerin liitäntä
- Käyttämällä PIC-mikrokontrollerin ADC-moduulia
- Vadelma Pi ADC -opastus
- Kuinka käyttää ADC: tä MSP430G2: ssa - Analogisen jännitteen mittaaminen
Tarvittavat komponentit
- STM32F103C8
- LCD 16 * 2
- Potentiometri 100k
- Leipälauta
- Johtojen liittäminen
Piirikaavio ja selitykset
Kytkentäkaavio liitännän 16 * 2 LCD- näyttöön ja analogiseen tuloon STM32F103C8T6- kortille on esitetty alla.
LCD-liitännät ovat alla:
LCD-nasta nro |
LCD-nastan nimi |
STM32-nastan nimi |
1 |
Maa (Gnd) |
Maa (G) |
2 |
VCC |
5 V |
3 |
VEE |
Tappi potentiometrin keskustasta |
4 |
Rekisteröinti Valitse (RS) |
PB11 |
5 |
Lue / kirjoita (RW) |
Maa (G) |
6 |
Ota käyttöön (EN) |
PB10 |
7 |
Databitti 0 (DB0) |
Ei yhteyttä (NC) |
8 |
Databitti 1 (DB1) |
Ei yhteyttä (NC) |
9 |
Databitti 2 (DB2) |
Ei yhteyttä (NC) |
10 |
Databitti 3 (DB3) |
Ei yhteyttä (NC) |
11 |
Databitti 4 (DB4) |
PB0 |
12 |
Databitti 5 (DB5) |
PB1 |
13 |
Databitti 6 (DB6) |
PC13 |
14 |
Databitti 7 (DB7) |
PC14 |
15 |
LED positiivinen |
5 V |
16 |
LED negatiivinen |
Maa (G) |
Liitännät tehdään yllä olevan taulukon mukaisesti. Piirissä on kaksi potentiometriä, joista ensimmäistä käytetään jännitteenjakajaan, jota voidaan käyttää jännitteen muuttamiseen ja analogisen tulon tuottamiseen STM32: lle. Tämän potentiometrin vasen nasta saa positiivisen tulojännitteen STM32: lta (3,3 V) ja oikea tappi on kytketty maahan, potentiometrin keskitappi on kytketty STM32: n analogiseen tuloon (PA7). Toista potentiometriä käytetään nestekidenäytön kontrastin muuttamiseen. STM32: n virtalähde saadaan USB-virtalähteellä tietokoneesta tai kannettavasta tietokoneesta.
STM32: n ohjelmointi ADC-arvojen lukemista varten
Edellisessä opetusohjelmassa opimme STM32F103C8T6-kortin ohjelmoinnista USB-portin avulla. Joten emme tarvitse nyt FTDI-ohjelmoijaa. Liitä se vain tietokoneeseen STM32: n USB-portin kautta ja aloita ohjelmointi ARDUINO IDE: llä. STM32: n ohjelmointi ARDUINO IDE: ssä analogisen jännitteen lukemiseen on hyvin yksinkertaista. Se on sama kuin arduino-lauta. STM32: n hyppytappeja ei tarvitse vaihtaa.
Tässä ohjelmassa luetaan analoginen arvo ja lasketaan jännite tällä arvolla ja näytetään sitten sekä analogiset että digitaaliset arvot LCD-näytöllä.
Ensimmäinen määritellä ulos LCD nastat. Nämä määrittelevät, mihin STM32-napaan LCD-nastat on kytketty. Voit muokata tarpeidesi mukaan.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // mainita pin-nimet, joihin LCD on kytketty
Seuraavaksi sisällytämme LCD-näytön otsikkotiedoston. Tämä kutsuu kirjaston, joka sisältää koodin, kuinka STM32: n tulisi olla yhteydessä nestekidenäyttöön. Varmista myös, että toimintoa Liquid Crystal kutsutaan edellä määritellyillä pin-nimillä.
#sisältää
Sisällä setup () -toiminto, olisimme vain antaa intro viesti näytetään LCD-näytöllä. Voit oppia LCD: n liittämisestä STM32: een.
lcd.begin (16, 2); // Käytämme 16 * 2 LCD-näyttöä. Clear (); // Tyhjennä näyttö lcd.setCursor (0, 0); // Ensimmäisen rivin ensimmäinen sarake lcd.prin t ("CIRCUITDIGEST"); // Tulosta tämä lcd.setCursor (0, 1); // Toisen rivin ensimmäisessä sarakkeessa n lcd.print ("STM32F103C8"); // Tulosta Thi s viive (2000); // odota kaksi sekuntia lcd.clear (); // Tyhjennä näyttö lcd.setCursor (0, 0); // Ensimmäisen rivin ensimmäinen sarake lcd.print ("USING ADC IN"); // Tulosta tämä lcd.setCursor (0,1); // Toisen rivin ensimmäisessä sarakkeessa lcd.print ("STM32F103C8"); // Tulosta tämä viive (2000); // odota kaksi sekuntia lcd.clear (); // Tyhjennä näyttö
Lopuksi infinite loop () -toimintomme sisällä aloitamme analogisen jännitteen lukemisen PA7-nastalle potentiometristä. Kuten jo keskustelimme, mikrokontrolleri on digitaalinen laite, eikä se pysty lukemaan jännitetasoa suoraan. SAR-tekniikkaa käytettäessä jännitetaso kartoitetaan välillä 0 - 4096. Näitä arvoja kutsutaan ADC-arvoiksi, jotta saat tämän ADC-arvon, käytä vain seuraavaa riviä
int val = analoginen luku (A7); // lue ADC-arvo tapista PA 7
Tässä funktiota analogRead () käytetään lukemaan tapin analogiarvo. Lopuksi tallennamme tämän arvon muuttujaan nimeltä " val ". Tämän muuttujan tyyppi on kokonaisluku, koska saamme tähän arvoon vain arvot, jotka vaihtelevat välillä 0 - 4096.
Seuraava vaihe olisi laskea jännitteen arvo ADC-arvosta. Tätä varten meillä on seuraavat kaavat
Jännite = (ADC-arvo / ADC-tarkkuus) * Referenssijännite e
Meidän tapauksessamme tiedämme jo, että mikrokontrollerimme ADC-resoluutio on 4096. ADC-arvo löytyy myös edelliseltä riviltä ja tallentaa muuttujan nimeltä val. Viite jännite on yhtä suuri kuin jännite, jolla mikro-ohjain toimii. Kun STM32 lauta on kytketty USB-kaapelin kautta sitten käyttöjännite on 3,3. Voit myös mitata käyttöjännitteen käyttämällä yleismittaria piirilevyn Vcc: n ja maadoitustapin poikki. Joten yllä oleva kaava sopii tapauksemme alla olevan kuvan mukaisesti
kelluvajännite = (kelluva (val) / 4096) * 3,3; // kaavat ADC-arvon muuntamiseksi jännitteeksi e
Saatat olla sekoitettu viivan kelluntaan (val). Tätä käytetään muuttamaan muuttuja "val" int-tietotyypistä "float" -tietotyypiksi. Tätä muunnosta tarvitaan, koska vain jos saamme val / 4096: n tuloksen uimurina, voimme kertoa sen 3,3. Jos arvo vastaanotetaan kokonaislukuna, se on aina 0 ja tulos on myös nolla. Kun olemme laskeneet ADC-arvon ja jännitteen, jäljellä on vain näyttää tulos LCD-näytöllä, joka voidaan tehdä seuraavilla riveillä
lcd.setCursor (0, 0); // aseta kohdistin sarakkeeseen 0, rivi 0 lcd.print ("ADC Val:"); lcd.print (val); // Näytä ADC-arvo lcd.setCursor (0, 1); // aseta kohdistin sarakkeeseen 0, rivi 1 lcd.print ("Jännite:"); lcd.print (jännite); // Näytön jännite
Täydellinen koodi ja esittelyvideo on annettu alla.