- Tarvittavat materiaalit
- ADC mallissa STM8S103F3P6
- Piirikaavio ADC-arvojen lukemiseen STM8S: ssä ja näytössä LCD-näytöllä
- ADC-kirjasto mallille STM8S103F3P6
- STM8S-ohjelma analogisen jännitteen ja näytön lukemiseen nestekidenäytössä
- Analogisen jännitteen lukeminen kahdesta potentiometristä STM8S: n avulla
Jos olet säännöllinen lukija ja seuraat STM8S-mikrokontrollerioppaita, tiedät, että viimeisessä opetusohjelmassa opimme, miten 16x2-nestekidenäyttö liitetään STM8-laitteisiin. Jatkamalla sitä tässä opetusohjelmassa opimme käyttämään ADC-ominaisuutta STM8S103F3P6-mikrokontrollerissamme. ADC on erittäin hyödyllinen mikrokontrollerin oheislaite, jota sulautetut ohjelmoijat käyttävät usein mittaamaan jatkuvasti muuttuvia yksiköitä, kuten vaihteleva jännite, virta, lämpötila, kosteus jne.
Kuten tiedämme, "Elämme analogisessa maailmassa digitaalisilla laitteilla", mikä tarkoittaa kaikkea ympärillämme, kuten tuulen nopeutta, valon voimakkuutta, lämpötilaa ja kaikkea mitä käsittelemme, kuten nopeutta, nopeutta, painetta jne., Ovat luonteeltaan analogisia. Mutta mikrokontrollerimme ja mikroprosessorimme ovat digitaalisia laitteita, eivätkä ne pysty mittaamaan näitä parametreja ilman tärkeätä oheislaitetta, jota kutsutaan analogiseksi digitaalimuuntimeksi (ADC). Joten tässä artikkelissa opitaan käyttämään ADC: tä STM8S-mikrokontrollerissa COMIC C-kääntäjän kanssa.
Tarvittavat materiaalit
Tässä artikkelissa luemme kaksi analogista jännitearvoa kahdelta potentiometriltä ja näytämme sen ADC-arvon 16x2 LCD-näytöllä. Tätä varten tarvitsemme seuraavat komponentit.
- STM8S103F3P6 Kehityskortti
- ST-Link V2 -ohjelmoija
- 16x2 LCD
- Potentiometrit
- Johtojen liittäminen
- 1k vastus
ADC mallissa STM8S103F3P6
ADC-tyyppejä on monenlaisia, ja jokaisella mikrokontrollerilla on omat tekniset tiedot. STM8S103F3P6: lla on ADC 5-kanavaisella ja 10-bittisellä tarkkuudella; 10-bittisellä tarkkuudella pystymme mittaamaan digitaalisen arvon välillä 0-1024 ja 5-kanavainen ADC osoittaa, että mikro-ohjaimessa on 5 nastaa, jotka voivat tukea ADC: tä. Nämä 5 nastaa on korostettu alla olevassa kuvassa.
Kuten näette, kaikkia näitä viittä nastaa (AIN2, AIN3, AIN4, AIN5 ja AIN6) multipleksoidaan muiden oheislaitteiden kanssa, mikä tarkoittaa, että näitä nastoja voidaan käyttää vain ADC-nastana toimimisen lisäksi myös muun viestinnän, kuten esimerkiksi, nastoja 2 ja 3 (AIN5 ja AIN 6) voidaan käyttää paitsi ADC: hen myös sarjaliikenteeseen ja GPIO-toimintoihin. Huomaa, että samaa nastaa ei voida käyttää kaikkiin kolmeen tarkoitukseen, joten jos käytämme näitä kahta nastaa ADC: lle, emme voi suorittaa sarjaliikennettä. Muut tärkeät ADC-ominaisuudet mallille STM8S103P36 löytyvät alla olevasta taulukosta.
Yllä olevassa taulukossa Vdd edustaa käyttöjännitettä ja Vss edustaa maata. Joten tapauksessamme kehityskortillamme mikrokontrolleri toimii 3.3V: lla, voit tarkistaa kehityskortin piirikaavion alusta STM8S-opetusohjelmalla. Kun käyttöjännite on 3,3 V, ADC-kellotaajuutemme voidaan asettaa välille 1 - 4 MHz ja muunnosjännitealueemme on 0 - 3,3 V. Tämä tarkoittaa, että 10-bittinen ADC lukee 0, kun 0V (Vss) on toimitettu, ja lukee enintään 1024, kun 3.3V (Vdd) on annettu. Voimme helposti muuttaa tätä 0-5V muuttamalla tarvittaessa MCU: n käyttöjännitettä.
Piirikaavio ADC-arvojen lukemiseen STM8S: ssä ja näytössä LCD-näytöllä
Tässä projektissa käytetty täydellinen piirikaavio on annettu alla, se on hyvin samanlainen kuin aiemmin käsittelemämme STM8S LCD -opetusohjelma.
Kuten näette, nestekidenäytön lisäksi ainoat lisäkomponentit ovat kaksi potentiometriä POT_1 ja POT_2 . Nämä kattilat on kytketty portteihin PC4 ja PD6, jotka ovat ANI2- ja ANI6-nastoja, kuten aiemmin on kuvattu pinout-kuvassa.
Potentiometrit on kytketty siten, että kun vaihdamme sitä, saamme 0-5 V analogisiin nastoihimme. Ohjelmoimme ohjaimemme lukemaan tämän analogisen jännitteen digitaalisessa arvossa (0-1024) ja näyttämään sen LCD-näytöllä. Sitten laskemme myös ekvivalentin jännitteen arvon ja näytämme sen nestekidenäytössä. Muista, että ohjaimemme saa virtaa 3,3 V: stä, joten vaikka tarjoamme 5 V ADC-nastalle, se pystyy lukemaan vain 0 V - 3,3 V.
Kun liitännät on tehty, laitteistoni näyttää tältä alla olevan kuvan mukaisesti. Näet kaksi potentiometriä oikealla ja ST-linkin ohjelmoija vasemmalla.
ADC-kirjasto mallille STM8S103F3P6
Jos haluat ohjelmoida ADC-toiminnot STM8S: lle, käytämme Cosmic C-kääntäjää yhdessä SPL-kirjastojen kanssa. Mutta prosessien helpottamiseksi tein toisen otsikkotiedoston, joka löytyy GitHubista alla olevan linkin avulla.
ADC-kirjasto mallille STM8S103F3P6
Jos tiedät mitä olet tekemässä, voit luoda ylätunnistetiedoston käyttämällä yllä olevaa koodia ja lisätä sen projektisivusi "sisällytä tiedostot" -hakemistoon. Seuraa myös STM8S-opetusohjelman käytön aloittamista tietääkseen, miten ohjelmointiympäristö ja kääntäjä määritetään. Kun määritys on valmis, IDE: llä tulisi olla seuraavat otsikkotiedostot, ainakin punaisella ympäröivät.
Yllä oleva otsikkotiedosto koostuu toiminnosta nimeltä ADC_Read () . Tätä toimintoa voidaan kutsua pääohjelmassasi saadaksesi ADC-arvon mille tahansa pinille. Esimerkiksi ADC_Read (AN2) palauttaa ADC-arvon tapaan AN2 seurauksena. Toiminto näkyy alla.
allekirjoittamaton int ADC_Read (ADC_CHANNEL_TypeDef ADC_Channel_Number) {allekirjoittamaton int = 0; ADC1_DeInit (); ADC1_Init (ADC1_CONVERSIONMODE_CONTINUOUS, ADC_Channel_Number, ADC1_PRESSEL_FCPU_D18, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, DISABLE); ADC1_Cmd (PÄÄLLÄ); ADC1_StartConversion (); kun taas (ADC1_GetFlagStatus (ADC1_FLAG_EOC) == EPÄTOSI); tulos = ADC1_GetConversionValue (); ADC1_ClearFlag (ADC1_FLAG_EOC); ADC1_DeInit ();
Kuten näette, voimme välittää kahdeksan parametria tälle toiminnolle ja tämä määrittää, kuinka ADC määritetään. Yllä olevassa kirjastokoodissamme olemme asettaneet muuntotilan jatkuvaksi ja saaneet sitten kanavanumeron välitetyn parametrin. Ja sitten meidän on asetettava ohjaimen CPU-taajuus, oletuksena (jos et ole liittänyt ulkoista kiteitä), STM8S toimii 16 MHz: n sisäisen oskillaattorin kanssa. Joten olemme maininneet " ADC1_PRESSEL_FCPU_D18 " esivahvistimen arvona. Tämän toiminnon sisällä käytämme muita SPL stm8s_adc1.h -otsikkotiedoston määrittelemiä menetelmiä. Aloitamme alustamalla ADC-nastat ja sitten ADC1_Init () alustamaan ADC-oheislaitteen. Tämän toiminnon määritelmä SPL-käyttöoppaasta on esitetty alla.
Seuraavaksi asetamme ulkoisen liipaisimen ajastimella ja poistamme ulkoisen liipaisimen käytöstä, koska emme käytä sitä täällä. Ja sitten meillä on kohdistaminen oikealle ja kahta viimeistä parametria käytetään asettamaan Schmitt-liipaisin, mutta poistamme sen käytöstä tässä opetusohjelmassa. Joten lyhyesti sanottuna, ADC työskentelee jatkuvassa muuntotilassa vaaditulla ADC-nastalla, jossa ulkoinen liipaisin ja Schmitt-liipaisin ovat poissa käytöstä. Voit tarkistaa datalehden, jos tarvitset lisätietoja ulkoisen liipaisimen tai Schmitt-liipaisuvaihtoehdon käytöstä, emme keskustele siitä tässä opetusohjelmassa.
STM8S-ohjelma analogisen jännitteen ja näytön lukemiseen nestekidenäytössä
Main.c- tiedostossa käytetty täydellinen koodi löytyy tämän sivun alaosasta. Kun olet lisännyt vaaditut otsikkotiedostot ja lähdetiedostot, sinun pitäisi pystyä kääntämään päätiedosto suoraan. Päätiedoston koodin selitys on seuraava. En selitä STM8S LCD -ohjelmaa, koska olemme jo keskustelleet siitä edellisessä opetusohjelmassa.
Koodin tarkoituksena on lukea ADC-arvot kahdesta nastasta ja muuntaa se jännite-arvoksi. Näytämme myös sekä ADC-arvon että jännitteen arvon LCD-näytöllä. Joten olen käyttänyt toimintoa nimeltä LCD_Print Var, joka ottaa muuttujan kokonaislukumuodossa ja muuntaa sen merkiksi näyttämään sen LCD-näytöllä. Olemme käyttäneet yksinkertaisia moduuli- (%) ja jako (/) -operaattoreita saadaksesi jokaisen numeron muuttujasta ja asettamalla muuttujia, kuten d1, d2, d3 ja d4, kuten alla on esitetty. Sitten voimme käyttää LCD_Print_Char- toimintoa näiden merkkien näyttämiseen nestekidenäytössä.
void LCD_Print_Var (int var) {merkki d4, d3, d2, d1; d4 = var% 10 + '0'; d3 = (var / 10)% 10 + '0'; d2 = (var / 100)% 10 + '0'; d1 = (var / 1000) + '0'; Lcd_Tulosta_Char (d1); Lcd_Tulosta_Char (d2); Lcd_Tulosta_Char (d3); Lcd_Tulosta_Char (d4); }
Seuraavaksi pääfunktion alla on neljä muuttujaa ilmoitettu. Kahta niistä käytetään ADC-arvon tallentamiseen (0-1024) ja kahta muuta käytetään todellisen jännitearvon saamiseen.
allekirjoittamaton int ADC_arvo_1 = 0; allekirjoittamaton int ADC_arvo_2 = 0; int ADC_jännite_1 = 0; int ADC_jännite_2 = 0;
Seuraavaksi meidän on valmisteltava GPIO-nastat ja kellokokoonpano analogisen jännitteen lukemiseksi. Tässä luemme analogisen jännitteen nastoista AIN2 ja AIN6, jotka ovat vastaavasti nastat PC4 ja PD6. Meidän on määriteltävä nämä tappi kelluvassa tilassa, kuten alla on esitetty. Otamme myös käyttöön kellon oheislaitteen ADC: lle.
CLK_PeripheralClockConfig (CLK_PERIPHERAL_ADC, ENABLE); // Ota perifeerinen kello käyttöön ADC: lle GPIO_Init (GPIOC, GPIO_PIN_4, GPIO_MODE_IN_FL_IT); GPIO_Init (GPIOC, GPIO_PIN_4, GPIO_MODE_IN_FL_IT);
Nyt kun nastat ovat valmiita, meidän on päästävä äärettömään silmukkaan lukemaan analoginen jännite. Koska meillä on otsikkotiedostomme, voimme helposti lukea analogisen jännitteen nastoista AIN2 ja AIN 6 alla olevien rivien avulla.
ADC_value_1 = ADC_Read (AIN2); ADC_arvo_2 = ADC_Luku (AIN6);
Seuraava vaihe on muuntaa tämä ADC-lukema (0-1023) analogiseksi jännitteeksi. Tällä tavalla voimme näyttää tarkan jännitearvon, joka annetaan nastoille AIN2 ja AIN6. Analogisen jännitteen laskentakaavat voidaan antaa
Analoginen jännite = ADC-lukema * (3300/1023)
STM8S103F3-ohjaimien tapauksessa meillä on ADC 10-bittisellä tarkkuudella, joten olemme käyttäneet 1023 (2 ^ 10) . Myös kehitystehostamme ohjain 3,3 V: lla, joka on 3300, joten jaoimme 3300 1023: lla yllä olevissa kaavoissa. Noin 3300/1023 antaa meille 3,226, joten ohjelmassamme on seuraavat rivit mitata todellinen ADC-jännite ADC-jännitteen avulla.
ADC_jännite_1 = ADC_arvo_1 * (3,226); // (3300/1023 = ~ 3,226) muuntaa ADC-arvon 1 arvoksi 0 arvoon 3300mV ADC_jännite_2 = ADC_arvo_2 * (3,226); // muuntaa ADC-arvon 1 arvoksi 0 - 3300mV
Koodin jäljellä olevaa osaa käytetään vain näiden neljän arvon näyttämiseen nestekidenäytössä. Meillä on myös 500 ms viive, jotta LCD-näyttö päivittyy jokaista 500 mS kohden. Voit vähentää tätä edelleen, jos tarvitset nopeita päivityksiä.
Analogisen jännitteen lukeminen kahdesta potentiometristä STM8S: n avulla
Käännä koodi ja lataa se kehityskortillesi. Jos saat kokoomavirheitä, varmista, että olet lisännyt kaikki otsikkotiedostot ja lähdetiedostot, kuten aiemmin keskusteltiin. Kun koodi on ladattu, sinun pitäisi nähdä pieni tervetuloviesti, jossa lukee ”ADC on STM8S”, ja sinun pitäisi nähdä alla oleva näyttö.
Arvot D1 ja D2 ilmaisevat ADC-arvon nastasta Ain2 ja AIN6 vastaavasti. Oikealla puolella näytetään myös vastaavat jännitearvot. Tämän arvon tulisi olla yhtä suuri kuin vastaavasti pinneissä AIN2 ja AIN6 esiintyvä jännite. Voimme tarkistaa saman yleismittarilla, voimme myös muuttaa potentiometrejä tarkistaaksemme, muuttuuko myös jännitteen arvo vastaavasti.
Täydellinen työskentely löytyy myös alla olevasta videosta. Toivottavasti pidit opetusohjelmasta ja opit jotain hyödyllistä. Jos sinulla on kysyttävää, jätä ne alla olevaan kommenttiosioon. Voit myös käyttää foorumeitamme keskustelun aloittamiseen tai muiden teknisten kysymysten lähettämiseen.