- Salīdzinot ADC Arduino un STM32F103C8
- ADC STM32
- Kā analogais signāls tiek pārveidots ciparu formātā
- ADC tapas STM32F103C8T6
- Nepieciešamās sastāvdaļas
- Ķēdes shēma un paskaidrojumi
- STM32 programmēšana ADC vērtību nolasīšanai
Viena kopīga iezīme, kas tiek izmantota gandrīz katrā iegultā lietojumprogrammā, ir ADC modulis (Analog to Digital Converter). Šie analogie uz ciparu pārveidotāji var nolasīt spriegumu no analogiem sensoriem, piemēram, temperatūras sensora, slīpuma sensora, strāvas sensora, elastīgā sensora un daudz ko citu. Tātad šajā apmācībā mēs uzzināsim, kā izmantot ADC sistēmā STM32F103C8, lai lasītu analogos spriegumus, izmantojot Energia IDE. Mēs savienosim nelielu potenciometru ar STM32 Blue Pill paneli un piegādāsim mainīgu spriegumu analogajai tapai, nolasīsim spriegumu un parādīsim to 16x2 LCD ekrānā.
Salīdzinot ADC Arduino un STM32F103C8
Arduino dēlī tas satur 6 kanālus (8 kanālus uz Mini un Nano, 16 uz Mega), 10 bitu ADC ar ieejas sprieguma diapazonu 0–5 V. Tas nozīmē, ka tas ieejas spriegumus no 0 līdz 5 voltiem kartēs veselu skaitļu vērtībās no 0 līdz 1023. Tagad STM32F103C8 gadījumā mums ir 10 kanāli, 12 bitu ADC ar ieejas diapazonu 0V -3,3V. Tas atveidos ieejas spriegumu no 0 līdz 3,3 voltiem veselu skaitļu vērtībās no 0 līdz 4095.
ADC STM32
STM32 mikrokontrolleros iestrādātajā ADC tiek izmantots SAR (secīgas aproksimācijas reģistrs) princips, saskaņā ar kuru konvertēšana tiek veikta vairākos posmos. Pārveidošanas soļu skaits ir vienāds ar bitu skaitu ADC pārveidotājā. Katru soli vada ADC pulkstenis. Katrs ADC pulkstenis rada vienu bitu no rezultāta līdz izejai. ADC iekšējais dizains ir balstīts uz komutētā kondensatora tehniku. Ja esat jauns STM32 lietotājs, pārbaudiet mūsu sākumlapas apmācību.
12 bitu izšķirtspēja
Šis ADC ir 10 kanālu 12 bitu ADC. Šeit termins 10 kanāls nozīmē, ka ir 10 ADC tapas, ar kuru palīdzību mēs varam izmērīt analogo spriegumu. Termins 12 biti nozīmē ADC izšķirtspēju. 12 biti nozīmē 2 ar desmit (2 12) jaudu, kas ir 4096. Tas ir mūsu ADC paraugu soļu skaits, tāpēc mūsu ADC vērtību diapazons būs no 0 līdz 4095. Vērtība palielināsies no 0 līdz 40 4095, pamatojoties uz sprieguma vērtību vienā solī, kuru var aprēķināt pēc formulas
Spriegums / solis = atsauces spriegums / 4096 = (3,3 / 4096 = 8,056 mV) vienībā.
Kā analogais signāls tiek pārveidots ciparu formātā
Tā kā datori glabā un apstrādā tikai binārās / digitālās vērtības (1 un 0). Tātad analogie signāli, piemēram, sensora izeja volti, apstrādei ir jāpārvērš ciparu vērtībās, un pārveidošanai jābūt precīzai. Ja analogās ieejas analogās ieejās STM32 tiek ievadīts analogais ieejas spriegums, analogā vērtība tiek nolasīta un saglabāta vesela skaitļa mainīgajā.. Saglabātā analogā vērtība (0–3,3 V) tiek pārveidota par veselu skaitļu vērtībām (0–4096), izmantojot šādu formulu:
INPUT VOLTAGE = (ADC vērtība / ADC izšķirtspēja) * Atskaites spriegums
Izšķirtspēja = 4096
Atsauce = 3,3 V
ADC tapas STM32F103C8T6
STM32 ir 10 analogās tapas no PA0 līdz PB1.
Pārbaudiet arī to, kā izmantot ADC citos mikrokontrolleros:
- Kā lietot ADC Arduino Uno?
- Saskarne ADC0808 ar 8051 mikrokontrolleru
- Izmantojot PIC mikrokontrollera ADC moduli
- Aveņu Pi ADC apmācība
- Kā lietot ADC programmā MSP430G2 - analogā sprieguma mērīšana
Nepieciešamās sastāvdaļas
- STM32F103C8
- LCD 16 * 2
- Potenciometrs 100k
- Maizes dēlis
- Savienojošie vadi
Ķēdes shēma un paskaidrojumi
Circuit diagramma saskarni 16 * 2 LCD un analogās ieejas, lai STM32F103C8T6 kuģa ir parādīts zemāk.
LCD savienojumi ir izveidoti zemāk:
LCD tapa Nr |
LCD tapas nosaukums |
STM32 tapas nosaukums |
1 |
Zeme (Gnd) |
Zeme (G) |
2 |
VCC |
5V |
3 |
VEE |
Piespraude no potenciometra centra |
4 |
Reģistrēties Atlasīt (RS) |
PB11 |
5 |
Lasīt / rakstīt (RW) |
Zeme (G) |
6 |
Iespējot (EN) |
PB10 |
7 |
Datu bits 0 (DB0) |
Nav savienojuma (NC) |
8 |
1. datu bits (DB1) |
Nav savienojuma (NC) |
9 |
2. datu bits (DB2) |
Nav savienojuma (NC) |
10 |
3. datu bits (DB3) |
Nav savienojuma (NC) |
11 |
4. datu bits (DB4) |
PB0 |
12 |
5. datu bits (DB5) |
PB1 |
13 |
6. datu bits (DB6) |
PC13 |
14 |
7. datu bits (DB7) |
PC14 |
15 |
LED pozitīvs |
5V |
16 |
LED negatīvs |
Zeme (G) |
Savienojumi tiek veikti saskaņā ar iepriekš sniegto tabulu. Ķēdē ir divi potenciometri. Pirmais tiek izmantots sprieguma dalītājam, ko var izmantot, lai mainītu spriegumu un nodrošinātu analogo ieeju STM32. Šī potenciometra kreisais tapa saņem pozitīvu ieejas spriegumu no STM32 (3,3 V), un labais tapa ir pievienots zemei, potenciometra centrālais tapa ir savienots ar STM32 analogo ieejas tapu (PA7). Otru potenciometru izmanto, lai mainītu LCD displeja kontrastu. STM32 strāvas avotu nodrošina, izmantojot USB barošanas avotu no datora vai klēpjdatora.
STM32 programmēšana ADC vērtību nolasīšanai
Iepriekšējā apmācībā mēs uzzinājām par STM32F103C8T6 dēļa programmēšanu, izmantojot USB portu. Tāpēc mums FTDI programmētājs tagad nav vajadzīgs. Vienkārši pievienojiet to datoram, izmantojot STM32 USB portu, un sāciet programmēt ar ARDUINO IDE. STM32 ARDUINO IDE programmēšana analogā sprieguma nolasīšanai ir ļoti vienkārša. Tas ir tāds pats kā arduino dēlis. Nav nepieciešams mainīt STM32 džempera tapas.
Šajā programmā tiks nolasīta analogā vērtība un aprēķināts spriegums ar šo vērtību, un pēc tam LCD ekrānā tiks parādītas gan analogās, gan digitālās vērtības.
Vispirms definējiet LCD tapas. Tie nosaka, kurai STM32 tapai ir pievienotas LCD tapas. Jūs varat modificēt atbilstoši savām prasībām.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // pieminēt tapu nosaukumus, ar kuriem LCD ir savienots
Tālāk mēs iekļaujam galvenes failu LCD displejam. Tas izsauc bibliotēku, kurā ir kods, kā STM32 vajadzētu sazināties ar LCD. Pārliecinieties arī, vai funkcija Liquid Crystal tiek izsaukta ar tapu nosaukumiem, kurus mēs tikko definējām iepriekš.
# iekļaut
Funkcijas setup () iekšpusē mēs vienkārši sniegsim ievadziņu, kas tiks parādīta LCD ekrānā. Jūs varat uzzināt par LCD saskarni ar STM32.
lcd.begin (16, 2); // Mēs izmantojam 16 * 2 LCD lcd.clear (); // Notīrīt ekrānu lcd.setCursor (0, 0); // Pirmās rindas pirmajā kolonnā lcd.prin t ("CIRCUITDIGEST"); // Izdrukājiet šo lcd.setCursor (0, 1); // Sekundārajā rindā pirmā kolonna n lcd.print ("STM32F103C8"); // Drukāt Thi s aizture (2000); // jāgaida divas sekundes lcd.clear (); // Notīrīt ekrānu lcd.setCursor (0, 0); // Pirmās rindas pirmajā kolonnā lcd.print ("USING ADC IN"); // Izdrukājiet šo lcd.setCursor (0,1); // Otrās rindas pirmajā kolonnā lcd.print ("STM32F103C8"); // Drukāt šo kavēšanos (2000); // jāgaida divas sekundes lcd.clear (); // Notīriet ekrānu
Visbeidzot, mūsu bezgalīgās cilpas () funkcijas iekšpusē mēs sākam nolasīt PA7 tapai no potenciometra piegādāto analogo spriegumu. Kā mēs jau apspriedām, mikrokontrolleris ir digitāla ierīce, un tā nevar tieši nolasīt sprieguma līmeni. Izmantojot SAR tehniku, sprieguma līmenis tiek kartēts no 0 līdz 4096. Šīs vērtības sauc par ADC vērtībām, lai iegūtu šo ADC vērtību, vienkārši izmantojiet šo rindu
int val = analogRead (A7); // nolasīt ADC vērtību no tapas PA 7
Šeit funkcija analogRead () tiek izmantots, lai izlasītu analogo vērtību pin. Visbeidzot, mēs saglabājam šo vērtību mainīgajā, ko sauc par “ val ”. Šī mainīgā tips ir vesels skaitlis, jo šajā mainīgajā tiks saglabātas tikai vērtības no 0 līdz 4096.
Nākamais solis būtu aprēķināt sprieguma vērtību no ADC vērtības. Lai to izdarītu, mums ir šādas formulas
Spriegums = (ADC vērtība / ADC izšķirtspēja) * Atsauces spriegums e
Mūsu gadījumā mēs jau zinām, ka mūsu mikrokontrollera ADC izšķirtspēja ir 4096. ADC vērtība ir atrodama arī iepriekšējā rindā un glabā mainīgo, ko sauc par val. Nominālais spriegums ir vienāds ar spriegumu, kurā mikrokontrolleru strādā. Kad STM32 valde darbina, izmantojot USB kabeli, tad darba spriegums ir 3.3V. Jūs varat arī izmērīt darba spriegumu, izmantojot multimetru pāri Vcc un zemes tapu uz tāfeles. Tātad iepriekš minētā formula iekļaujas mūsu gadījumā, kā parādīts zemāk
pludiņa spriegums = (pludiņš (val) / 4096) * 3,3; // formulas, lai ADC vērtību pārvērstu voltā e
Jūs varētu sajaukt ar līnijas pludiņu (val). To izmanto, lai mainīgo “val” pārveidotu no int datu veida uz “float” datu tipu. Šī konversija ir nepieciešama, jo tikai tad, ja val / 4096 iegūstam pludiņā, mēs varam to reizināt ar 3.3. Ja vērtība tiek saņemta vesels skaitlis, tā vienmēr būs 0 un rezultāts būs arī nulle. Kad esam aprēķinājuši ADC vērtību un spriegumu, atliek atainot rezultātu LCD ekrānā, ko var izdarīt, izmantojot šādas rindas
lcd.setCursor (0, 0); // iestatiet kursoru uz 0 kolonnas 0 rindu lcd.print ("ADC Val:"); lcd.print (val); // Parādīt ADC vērtību lcd.setCursor (0, 1); // iestatiet kursoru uz 0. kolonnas 1. rindu lcd.print ("Spriegums:"); lcd.print (spriegums); // Displeja spriegums
Pilns kods un demonstrācijas video ir norādīts zemāk.