- Nepieciešamie materiāli
- ADC uz STM8S103F3P6
- Shēmas diagramma ADC vērtību nolasīšanai STM8S un displejā LCD
- ADC bibliotēka STM8S103F3P6
- STM8S programma analogā sprieguma un displeja nolasīšanai LCD
- Analogā sprieguma nolasīšana no diviem potenciometriem, izmantojot STM8S
Ja esat regulārs lasītājs, kurš seko mūsu STM8S mikrokontrolleru apmācībām, jūs zināt, ka mūsu pēdējā apmācībā mēs iemācījāmies saskarni 16x2 LCD ar STM8. Turpinot to šajā apmācībā, mēs uzzināsim, kā izmantot ADC funkciju mūsu mikrokontrollerī STM8S103F3P6. ADC ir ļoti noderīga mikrokontrollera perifēra ierīce, ko iegultie programmētāji bieži izmanto, lai mērītu vienības, kuras pastāvīgi mainās, piemēram, mainīgais spriegums, strāva, temperatūra, mitrums utt.
Kā mēs zinām, mēs dzīvojam analogā pasaulē ar digitālām ierīcēm, tas nozīmē, ka viss apkārtējais, piemēram, vēja ātrums, gaismas intensitāte, temperatūra, un viss, ar ko mēs nodarbojamies, piemēram, ātrums, ātrums, spiediens utt., Pēc būtības ir analogi. Bet mūsu mikrokontrolleri un mikroprocesori ir digitālas ierīces, un tie nevarēs izmērīt šos parametrus bez svarīgas perifērijas ierīces ar nosaukumu Analog to Digital Converter (ADC). Tātad šajā rakstā uzzināsim, kā izmantot ADC uz STM8S mikrokontrolleru ar COMIC C kompilatoru.
Nepieciešamie materiāli
Šajā rakstā mēs nolasīsim divas analogās sprieguma vērtības no diviem potenciometriem un parādīsim tā ADC vērtību 16x2 LCD displejā. Lai to izdarītu, mums būs nepieciešami šādi komponenti.
- STM8S103F3P6 Izstrādes padome
- ST-Link V2 programmētājs
- 16x2 LCD
- Potenciometri
- Savienojošie vadi
- 1k rezistors
ADC uz STM8S103F3P6
ADC ir daudz veidu, un katram mikrokontrollerim ir savas specifikācijas. STM8S103F3P6 mums ir ADC ar 5 kanālu un 10 bitu izšķirtspēju; ar 10 bitu izšķirtspēju mēs varēsim izmērīt digitālo vērtību no 0 līdz 1024, un 5 kanālu ADC norāda, ka mums ir 5 mikrokontrollera tapas, kas var atbalstīt ADC, šīs 5 tapas ir iezīmētas zemāk redzamajā attēlā.
Kā redzat, visas šīs piecas tapas (AIN2, AIN3, AIN4, AIN5 un AIN6) tiek multipleksētas ar citām perifērijas ierīcēm, kas nozīmē, ka šīs tapas var izmantot ne tikai kā ADC tapu, bet arī citu sakaru veikšanai, piemēram,, 2. un 3. tapu (AIN5 un AIN 6) var izmantot ne tikai ADC, bet arī seriālo sakaru un GPIO funkcijām. Ņemiet vērā, ka vienu un to pašu tapu nebūs iespējams izmantot visiem trim mērķiem, tādēļ, ja ADC izmantojam šīs divas tapas, mēs nevarēsim veikt sērijveida saziņu. Citas svarīgas ADM īpašības STM8S103P36 ir atrodamas zemāk esošajā tabulā, kas ņemta no datu lapas.
Iepriekš minētajā tabulā Vdd apzīmē darba spriegumu un Vss apzīmē zemi. Tātad mūsu gadījumā mūsu izstrādes dēlī mums ir mikrokontrolleris, kas darbojas ar 3,3 V, jūs varat pārbaudīt izstrādes paneļa shēmu no sākuma, sākot ar STM8S apmācību. Ar 3.3V kā darba spriegumu mūsu ADC pulksteņa frekvenci var iestatīt no 1 līdz 4MHz, un mūsu pārveidošanas sprieguma diapazons ir no 0V līdz 3.3V. Tas nozīmē, ka mūsu 10 bitu ADC rādījums būs 0, kad tiek nodrošināts 0 V (Vss), un maksimums 1024, ja tiek nodrošināts 3,3 V (Vdd). Mēs varam viegli mainīt šo 0-5V, ja nepieciešams, mainot MCU darba spriegumu.
Shēmas diagramma ADC vērtību nolasīšanai STM8S un displejā LCD
Šajā projektā izmantotā visa shēma ir dota zemāk, tā ir ļoti līdzīga STM8S LCD apmācībai, kuru mēs iepriekš apspriedām.
Kā redzat, vienīgie papildu komponenti, izņemot LCD, ir divi potenciometri POT_1 un POT_2 . Šie podi ir savienoti ar pieslēgvietām PC4 un PD6, kas ir ANI2 un ANI6 tapas, kā iepriekš tika apspriests pinout attēlā.
Potenciometri ir savienoti tā, ka, mainot to, mēs saņemsim 0-5 V uz mūsu analogajām tapām. Mēs ieprogrammēsim mūsu kontrolieri, lai nolasītu šo analogo spriegumu ciparu vērtībā (no 0 līdz 1024) un parādītu to LCD ekrānā. Tad mēs arī aprēķināsim ekvivalento sprieguma vērtību un parādīsim to LCD, atcerieties, ka mūsu kontrolieris tiek darbināts ar 3,3 V, tāpēc pat tad, ja ADC kontaktligzdai piegādājam 5 V, tas varēs nolasīt tikai no 0 V līdz 3,3 V.
Kad savienojumi ir izdarīti, mana aparatūra izskatās šādi, kā parādīts zemāk. Jūs varat redzēt divus potenciometrus labajā pusē un ST-link programmētāju kreisajā pusē.
ADC bibliotēka STM8S103F3P6
Lai ieprogrammētu ADC funkcionalitāti STM8S, mēs izmantosim Cosmic C kompilatoru kopā ar SPL bibliotēkām. Bet procesu atvieglošanai es izveidoju vēl vienu galvenes failu, kuru var atrast vietnē GitHub ar zemāk esošo saiti.
ADC bibliotēka STM8S103F3P6
Ja jūs zināt, ko jūs darāt, varat izveidot galvenes failu, izmantojot iepriekš minēto kodu, un pievienot to projekta lapas direktorijā “iekļaut failus”. Citi sekojiet darba sākšanai ar STM8S apmācību, lai uzzinātu, kā iestatīt programmēšanas vidi un kompilatoru. Kad iestatīšana ir gatava, IDE jābūt šādiem galvenes failiem, vismaz tiem, kas ir apvilkti sarkanā krāsā.
Iepriekšminētais galvenes fails sastāv no funkcijas ar nosaukumu ADC_Read () . Šo funkciju var izsaukt jūsu galvenajā programmā, lai iegūtu ADC vērtību jebkurā tapā. Piemēram, ADC_Read (AN2) rezultātā atgriezīs ADC vērtību tapā AN2. Funkcija ir parādīta zemāk.
neparakstīts int ADC_Read (ADC_CHANNEL_TypeDef ADC_Channel_Number) {neparakstīts int rezultāts = 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 (ENABLE); ADC1_StartConversion (); while (ADC1_GetFlagStatus (ADC1_FLAG_EOC) == FALSE); rezultāts = ADC1_GetConversionValue (); ADC1_ClearFlag (ADC1_FLAG_EOC); ADC1_DeInit ();
Kā redzat, šai funkcijai mēs varam nodot astoņus parametrus, un tas nosaka, kā tiek konfigurēts ADC. Augstāk esošajā bibliotēkas kodā esam iestatījuši nepārtrauktu reklāmguvumu režīmu un pēc tam saņēmuši parametra kanāla numuru. Un pēc tam mums ir jāiestata mūsu kontroliera CPU frekvence, pēc noklusējuma (ja neesat pievienojis ārēju kristālu), jūsu STM8S darbosies ar 16Mhz iekšējo oscilatoru. Tāpēc mēs esam pieminējuši “ ADC1_PRESSEL_FCPU_D18 ” kā vērtību pirms mērogotāja . Šīs funkcijas iekšpusē mēs izmantojam citas metodes, ko nosaka SPL stm8s_adc1.h galvenes fails. Mēs sākam ar ADC tapu inicializēšanu un pēc tam ADC1_Init (), lai inicializētu ADC perifērijas ierīci . Šīs funkcijas definīcija no SPL lietotāja rokasgrāmatas ir parādīta zemāk.
Pēc tam mēs iestatījām ārējo trigeri, izmantojot taimeri, un atspējojam ārējo aktivizētāju, jo mēs to šeit neizmantosim. Un tad mums ir iestatīts labojums pa labi, un pēdējie divi parametri tiek izmantoti, lai iestatītu Schmitt trigeri, taču mēs to atspējosim šai apmācībai. Tātad, īsi sakot, mēs ADC strādāsim nepārtrauktā pārveidošanas režīmā ar nepieciešamo ADC tapu ar ārēju sprūdu un Schmitt sprūda atspējošanu. Jūs varat pārbaudīt datu lapu, ja jums ir nepieciešama plašāka informācija par to, kā izmantot ārējo aktivizētāju vai Schmitt trigera opciju. Mēs to neapspriedīsim šajā apmācībā.
STM8S programma analogā sprieguma un displeja nolasīšanai LCD
Pilns kods, kas izmantots failā main.c, ir atrodams šīs lapas apakšdaļā. Pēc nepieciešamo galvenes failu un avota failu pievienošanas jums vajadzētu būt iespējai tieši apkopot galveno failu. Galvenā faila koda skaidrojums ir šāds. Es nepaskaidrošu STM8S LCD programmu, jo mēs to jau esam apsprieduši iepriekšējā apmācībā.
Koda mērķis būs nolasīt ADC vērtības no divām tapām un pārveidot to par sprieguma vērtību. Mēs arī parādīsim LCD gan ADC vērtību, gan sprieguma vērtību. Tātad, es esmu izmantojis funkciju ar nosaukumu LCD_Print Var, kas mainīgo uzņem vesela skaitļa formātā un pārveido to par rakstzīmi, lai to parādītu LCD. Mēs esam izmantojuši vienkāršos moduļa (%) un dalīšanas (/) operatorus, lai iegūtu katru ciparu no mainīgā un ievietotu tādus mainīgos kā d1, d2, d3 un d4, kā parādīts zemāk. Tad mēs varam izmantot funkciju LCD_Print_Char, lai šīs rakstzīmes parādītu LCD.
void LCD_Print_Var (int var) {char d4, d3, d2, d1; d4 = var% 10 + '0'; d3 = (var / 10)% 10 + '0'; d2 = (var / 100)% 10 + '0'; d1 = (var / 1000) + '0'; Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); }
Pēc galvenās funkcijas mums ir deklarēti četri mainīgie. Divus no tiem izmanto, lai saglabātu ADC vērtību (no 0 līdz 1024), bet pārējos divus izmanto, lai iegūtu faktisko sprieguma vērtību.
neparakstīts int ADC_value_1 = 0; neparakstīts int ADC_value_2 = 0; int ADC_spriegums_1 = 0; int ADC_spriegums_2 = 0;
Tālāk mums jāsagatavo GPIO tapas un pulksteņa konfigurācija, lai nolasītu analogo spriegumu. Šeit mēs nolasīsim analogo spriegumu no tapām AIN2 un AIN6, kas attiecīgi ir tapas PC4 un PD6. Šīs tapas ir jādefinē peldošā stāvoklī, kā parādīts zemāk. Mēs arī iespējosim pulksteņa perifērijas ierīci ADC.
CLK_PeripheralClockConfig (CLK_PERIPHERAL_ADC, ENABLE); // Iespējot perifēro pulksteni ADC GPIO_Init (GPIOC, GPIO_PIN_4, GPIO_MODE_IN_FL_IT); GPIO_Init (GPIOC, GPIO_PIN_4, GPIO_MODE_IN_FL_IT);
Tagad, kad tapas ir gatavas, mums jāiekļūst bezgalīgajā ciklā, lai nolasītu analogo spriegumu. Tā kā mums ir mūsu galvenes fails, mēs varam viegli nolasīt analogo spriegumu no tapām AIN2 un AIN 6, izmantojot tālāk norādītās līnijas.
ADC_value_1 = ADC_Read (AIN2); ADC_value_2 = ADC_Read (AIN6);
Nākamais solis ir pārveidot šo ADC rādījumu (no 0 līdz 1023) par analogo spriegumu. Tādā veidā mēs varam parādīt precīzu sprieguma vērtību, kas dota tapām AIN2 un AIN6. Analogā sprieguma aprēķināšanas formulas var sniegt pa
Analogais spriegums = ADC rādījums * (3300/1023)
Mūsu gadījumā ar STM8S103F3 kontrolieriem mums ir ADC ar 10 bitu izšķirtspēju, tāpēc mēs izmantojām 1023 (2 ^ 10) . Arī mūsu attīstības jaudas kontrolieris ar 3,3 V, kas ir 3300, tāpēc iepriekšminētajās formulās mēs sadalījām 3300 ar 1023. Aptuveni 3300/1023 dos mums 3,226, tāpēc mūsu programmā ir šādas līnijas, lai izmērītu faktisko ADC spriegumu, izmantojot ADC spriegumu.
ADC_voltage_1 = ADC_value_1 * (3,226); // (3300/1023 = ~ 3,226) konvertē ADC vērtību 1 uz 0 uz 3300mV ADC_voltage_2 = ADC_value_2 * (3,226); // konvertēt ADC vērtību 1 uz 0 uz 3300mV
Atlikušo koda daļu izmanto tikai, lai šīs četras vērtības parādītu LCD ekrānā. Mums ir arī kavēšanās 500ms, lai LCD tiktu atjaunināts par katru 500mS. Ja jums ir nepieciešami ātrāki atjauninājumi, varat to vēl vairāk samazināt.
Analogā sprieguma nolasīšana no diviem potenciometriem, izmantojot STM8S
Apkopojiet kodu un augšupielādējiet to savā izstrādes dēlī. Ja rodas kāda sastādīšanas kļūda, pārliecinieties, vai esat pievienojis visus galvenes failus un avota failus, kā aprakstīts iepriekš. Kad kods ir augšupielādēts, jums vajadzētu redzēt nelielu apsveikuma ziņojumu ar uzrakstu “ADC on STM8S”, un tad jums vajadzētu redzēt zemāk redzamo ekrānu.
Vērtība D1 un D2 norāda ADC vērtību attiecīgi no tapām Ain2 un AIN6. Labajā pusē mums tiek parādītas arī līdzvērtīgas sprieguma vērtības. Šai vērtībai jābūt vienādai ar spriegumu, kas parādās attiecīgi uz tapām AIN2 un AIN6. Mēs varam pārbaudīt to pašu, izmantojot multimetru, mēs varam arī mainīt potenciometrus, lai pārbaudītu, vai attiecīgi mainās arī sprieguma vērtība.
Pilnīgu darbu var atrast arī zemāk esošajā videoklipā. Ceru, ka jums patika apmācība un uzzinājāt kaut ko noderīgu. Ja jums ir kādi jautājumi, atstājiet tos komentāru sadaļā zemāk. Varat arī izmantot mūsu forumus, lai sāktu diskusiju vai izliktu citus tehniskus jautājumus.