- Kas ir PWM (impulss ar modulāciju)?
- PWM STM32
- Nepieciešamās sastāvdaļas
- STM32 tapas informācija
- Shēmas shēma un savienojumi
- STM32 programmēšana
Iepriekšējā rakstā mēs esam redzējuši par ADC pārveidošanu, izmantojot STM32. Šajā apmācībā mēs uzzināsim par PWM (impulsa platuma modulāciju) STM32 un kā mēs varam kontrolēt LED spilgtumu vai līdzstrāvas ventilatora ātrumu, izmantojot PWM tehniku.
Mēs zinām, ka ir divu veidu signāls: analogais un digitālais. Analogajiem signāliem ir tāds spriegums kā (3V, 1V… utt.) Un digitālajiem signāliem (1 'un 0'). Sensoru izejas ir analogie signāli, un šie analogie signāli tiek pārveidoti ciparos, izmantojot ADC, jo mikrokontrolleri saprot tikai digitālo. Pēc šo ADC vērtību apstrādes izeja atkal jāpārvērš analogajā formā, lai darbinātu analogās ierīces. Šim nolūkam mēs izmantojam noteiktas metodes, piemēram, PWM, Digital to Analog (DAC) pārveidotājus utt.
Kas ir PWM (impulss ar modulāciju)?
PWM ir veids, kā kontrolēt analogās ierīces, izmantojot digitālo vērtību, piemēram, kontrolējot motora ātrumu, LED spilgtumu utt. Mēs zinām, ka motors un LED darbojas pie analogā signāla. Bet PWM nenodrošina tīru analogo izeju, PWM izskatās kā analogais signāls, ko rada īsi impulsi, ko nodrošina darba cikls.
PWM darba cikls
Laika procentuālo daļu, kurā PWM signāls paliek AUGSTS (laikā), sauc par darba ciklu. Ja signāls vienmēr ir ieslēgts, tas ir 100% darba ciklā un, ja tas vienmēr ir izslēgts, tas ir 0% darba cikls.
Darba cikls = Ieslēgšanas laiks / (Ieslēgšanas laiks + Izslēgšanas laiks)
PWM STM32
STM32F103C8 ir 15 PWM tapas un 10 ADC tapas. Ir 7 taimeri, un katru PWM izeju nodrošina kanāls, kas savienots ar 4 taimeriem. Tam ir 16 bitu PWM izšķirtspēja (2 16), tas ir, skaitītāji un mainīgie var būt tikpat lieli kā 65535. Ar 72 MHz takts frekvenci PWM izejas maksimālais periods var būt aptuveni viena milisekunde.
- Tātad 65535 vērtība dod PILNU LED Gaišumu un Pilnīgu līdzstrāvas ventilatora ātrumu (100% darba cikls)
- Tāpat 32767 vērtība dod LED PUSI GRIEZUMU UN DC PUSES ĀTRUMU (50% darba cikls)
- Un vērtība 13107 dod (20%) SPILGUMU UN (20%) ĀTRUMU (20% darba cikls)
Šajā apmācībā mēs izmantojam potenciometru un STM32, lai mainītu LED spilgtumu un līdzstrāvas ventilatora ātrumu ar PWM tehniku. 16x2 LCD tiek izmantots, lai parādītu ADC vērtību (0-4095) un modificēto mainīgo (PWM vērtību), kas tiek izvadīts (0-65535).
Šeit ir daži PWM piemēri ar citiem mikrokontrolleriem:
- PWM ģenerēšana, izmantojot PIC mikrokontrolleru ar MPLAB un XC8
- Servomotora vadība ar Raspberry Pi
- Arduino bāzes LED regulators, izmantojot PWM
- Pulsa platuma modulācija (PWM), izmantojot MSP430G2
Pārbaudiet visus ar PWM saistītos projektus šeit.
Nepieciešamās sastāvdaļas
- STM32F103C8
- DC ventilators
- ULN2003 Motora draivera IC
- LED (RED)
- LCD (16x2)
- Potenciometrs
- Maizes dēlis
- Baterija 9V
- Džemperu vadi
Līdzstrāvas ventilators: šeit izmantotais līdzstrāvas ventilators ir BLDC ventilators no veca datora. Tam nepieciešams ārējs barošanas avots, tāpēc mēs izmantojam 9 V līdzstrāvas akumulatoru.
ULN2003 Motora draivera IC: To izmanto, lai darbinātu motoru vienā virzienā, jo motors ir vienvirziena, un ventilatoram nepieciešama arī ārēja jauda. Uzziniet vairāk par ULN2003 balstītu motora draivera shēmu šeit. Zemāk ir ULN2003 attēlu diagramma:
Piespraudes (IN1 līdz IN7) ir ievades tapas un (OUT 1 līdz OUT 7) ir atbilstošās izejas tapas. COM tiek dots pozitīva avota spriegums, kas nepieciešams izejas ierīcēm.
LED: tiek izmantota RED krāsaina LED, kas izstaro RED gaismu. Var izmantot jebkuras krāsas.
Potenciometri: tiek izmantoti divi potenciometri, viens ir paredzēts sprieguma dalītājam analogai ieejai ADC, bet otrs - LED spilgtuma kontrolei.
STM32 tapas informācija
Kā redzam, PWM tapas ir norādītas viļņu formātā (~), ir 15 šādas tapas, ADC tapas ir attēlotas zaļā krāsā, tur ir 10 ADC tapas, kuras izmanto analogajām ieejām.
Shēmas shēma un savienojumi
STM32 savienojumi ar dažādiem komponentiem ir paskaidroti šādi:
STM32 ar analogo ieeju (ADC)
Kontūras kreisajā pusē esošo potenciometru izmanto kā sprieguma regulatoru, kas regulē spriegumu no 3,3 V tapas. Potenciometra izeja, ti, potenciometra centrālā tapa, ir savienota ar STM32 ADC tapu (PA4).
STM32 ar LED
STM32 PWM izejas tapa (PA9) ir savienota ar LED pozitīvo tapu, izmantojot virknes rezistoru un kondensatoru.
LED ar rezistoru un kondensatoru
Rezistors virknē un kondensators paralēli ir savienoti ar LED, lai radītu pareizu analogo viļņu no PWM izejas, jo analogā izeja nav tīra no tā, kad to ģenerē tieši no PWM tapas.
STM32 ar ULN2003 un ULN2003 ar ventilatoru
STM32 PWM izejas tapa (PA8) ir savienota ar ULN2003 IC ievades kontaktu (IN1), un attiecīgā ULN2003 izejas tapa (OUT1) ir pievienota līdzstrāvas ventilatora negatīvajam vadam.
Līdzstrāvas ventilatora pozitīvais kontakts ir savienots ar ULN2003 IC COM kontaktu un ārējais akumulators (9V DC) ir savienots arī ar to pašu ULN2003 IC COM kontaktu. ULN2003 GND tapa ir savienota ar STM32 GND tapu, un akumulatora negatīvais ir savienots ar to pašu GND tapu.
STM32 ar LCD (16x2)
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) |
Labajā pusē esošais potenciometrs tiek izmantots, lai kontrolētu LCD displeja kontrastu. Iepriekš sniegtajā tabulā parādīts savienojums starp LCD un STM32.
STM32 programmēšana
Tāpat kā iepriekšējā apmācība, mēs programmējām STM32F103C8 ar Arduino IDE, izmantojot USB portu, neizmantojot FTDI programmētāju. Lai uzzinātu vairāk par STM32 programmēšanu ar Arduino IDE, sekojiet saitei. Mēs varam turpināt programmēšanu tāpat kā Arduino. Pilnīgs kods ir norādīts beigās.
Šajā kodēšanā mēs ņemsim ieejas analogo vērtību no ADC tapas (PA4), kas ir savienota ar kreisā potenciometra centrālo tapu, un pēc tam analogo vērtību (0-3,3V) pārveidosim digitālā vai vesela skaitļa formātā (0-4095). Šī digitālā vērtība tiek nodrošināta kā PWM izeja, lai kontrolētu LED spilgtumu un līdzstrāvas ventilatora ātrumu. 16x2 LCD tiek izmantots, lai parādītu ADC un kartēto vērtību (PWM izejas vērtību).
Vispirms mums jāiekļauj LCD galvenes fails, jādeklarē LCD tapas un inicializējiet tos, izmantojot zemāk esošo kodu. Uzziniet vairāk par LCD saskarni ar STM32 šeit.
# iekļaut
Pēc tam paziņojiet un definējiet tapu nosaukumus, izmantojot STM32 tapu
const int analogievade = PA4; // Ieeja no potenciometra const int led = PA9; // LED izeja const int ventilators = PA8; // ventilatora izeja
Tagad iestatīšanas () iekšpusē mums jāparāda daži ziņojumi un pēc dažām sekundēm tie jānotīra un jānorāda INPUT pin un PWM izejas tapas
lcd.begin (16,2); // Gatavojoties LCD, lcd.clear (); // Notīra LCD lcd.setCursor (0,0); // Iestata kursoru0 rindā un kolonnā lcd.print ("CIRCUIT DIGEST"); // Parāda Circuit Digest lcd.setCursor (0,1); // Kursors tiek iestatīts kolonnā0 un 1. rindā lcd.print ("PWM USING STM32"); // Parāda PWM, izmantojot STM32 aizturi (2000); // Kavēšanās laiks lcd.clear (); // Notīra LCD pinMode (analoginput, INPUT); // iestatīt pin mode analoginput kā INPUT pinMode (vadīts, PWM); // iestatīt tapas režīmu kā PWM izejas pinMode (ventilators, PWM); // iestatiet pin mode ventilatoru kā PWM izvadi
Analogā ievades tapa (PA4) ir iestatīta kā INPUT ar pinMode (analogā ieeja, INPUT), LED tapa ir iestatīta kā PWM izeja ar pinMode (vadīta, PWM), un ventilatora tapa ir iestatīta kā PWM izeja ar pinMode (ventilators, PWM) . Šeit PWM izejas tapas ir savienotas ar LED (PA9) un ventilatoru (PA8).
Tālāk funkcijā void loop () mēs nolasām analogo signālu no ADC tapas (PA4) un saglabājam to vesela skaitļa mainīgajā, kas pārveido analogo spriegumu ciparu skaitļa vērtībās (0-4095), izmantojot zemāk esošo kodu int valueadc = analogRead (analoginput);
Svarīgi šeit atzīmēt ir PWM tapas, kas ir STM32 kanāli ar 16 bitu izšķirtspēju (0-65535), tāpēc mums tas ir jānorāda ar analogām vērtībām, izmantojot kartes funkciju, piemēram, zemāk
int rezultāts = karte (valueadc, 0, 4095, 0, 65535).
Ja kartēšana netiek izmantota, mēs, mainot potenciometru, neiegūsim pilnu ventilatora ātrumu vai pilnu LED spilgtumu.
Pēc tam mēs rakstām PWM izeju uz LED, izmantojot pwmWrite (vadīts, rezultāts) un PWM izvadi ventilatoram, izmantojot pwmWrite (ventilators, rezultāts ) funkcijas.
Visbeidzot, LCD displejā tiek parādīta analogās ievades vērtība (ADC vērtība) un izejas vērtības (PWM vērtības), izmantojot šādas komandas
lcd.setCursor (0,0); // Kursors tiek iestatīts uz 0. rindas un kolonnas lcd.print ("ADC vērtība ="); // izdrukā vārdus “” lcd.print (valueadc); // parāda valueadc lcd.setCursor (0,1); // Kursors tiek iestatīts uz kolonnas0 un 1. rindas lcd.print ("Output ="); // izdrukā vārdus "" lcd.print (rezultāts); // parāda vērtības rezultātu
Pilns kods ar demonstrācijas video ir norādīts zemāk.