- Čo je PWM (impulz s moduláciou)?
- PWM v STM32
- Súčasti sú povinné
- Detaily kolíka STM32
- Schéma zapojenia a zapojenia
- Programovanie STM32
V predchádzajúcom článku sme videli konverziu ADC pomocou STM32. V tomto výučbe sa dozvieme o PWM (Pulse Width Modulation) v STM32 a o tom, ako môžeme pomocou techniky PWM ovládať jas LED alebo rýchlosť jednosmerného ventilátora.
Vieme, že existujú dva typy signálu: analógový a digitálny. Analógové signály majú napätie ako (3 V, 1 V… atď.) A digitálne signály majú (1 'a 0). Výstupy snímačov sú analógové signály a tieto analógové signály sa prevádzajú na digitálne pomocou ADC, pretože mikrokontroléry rozumejú iba digitálnym. Po spracovaní týchto hodnôt ADC je opäť potrebné výstup previesť do analógovej podoby, aby sa mohli riadiť analógové zariadenia. Na to používame určité metódy, ako sú PWM, digitálne analógové (DAC) prevodníky atď.
Čo je PWM (impulz s moduláciou)?
PWM je spôsob ovládania analógových zariadení pomocou digitálnych hodnôt, ako je riadenie rýchlosti motora, jasu LED atď. Vieme, že motor a LED pracujú na analógovom signáli. Ale PWM neposkytuje čistý analógový výstup, PWM vyzerá ako analógový signál vytváraný krátkymi impulzmi, ktorý poskytuje pracovný cyklus.
Pracovný cyklus PWM
Percento času, v ktorom signál PWM zostáva VYSOKÝ (v čase), sa nazýva pracovný cyklus. Ak je signál stále ZAPNUTÝ, je v 100% pracovnom cykle a ak je vždy vypnutý, je to 0% pracovný cyklus.
Pracovný cyklus = čas zapnutia / (čas zapnutia + čas vypnutia)
PWM v STM32
STM32F103C8 má 15 pinov PWM a 10 pinov ADC. K dispozícii je 7 časovačov a každý výstup PWM poskytuje kanál spojený so 4 časovačmi. Má 16-bitové rozlíšenie PWM (2 16), to znamená, že počítadlá a premenné môžu byť až 65535. Pri takte s frekvenciou 72 MHz môže mať výstup PWM maximálnu dobu asi jednej milisekundy.
- Takže hodnota 65535 dáva PLNÝ JAS LED A PLNÁ RÝCHLOSŤ jednosmerného ventilátora (100% pracovný cyklus)
- Podobná hodnota 32767 dáva POLOVIČNÝ JAS LED A POLOVIČNÚ RÝCHLOSŤ DC ventilátora (50% pracovný cyklus)
- A hodnota 13107 dáva (20%) JAS A (20%) RÝCHLOSŤ (20% pracovný cyklus)
V tomto tutoriáli používame potenciometer a STM32 na zmenu jasu LED a rýchlosti jednosmerného ventilátora technikou PWM. 16x2 LCD sa používa na zobrazenie hodnoty ADC (0-4095) a modifikovanej premennej (hodnota PWM), ktorá je na výstupe (0-65535).
Tu je niekoľko príkladov PWM s iným mikrokontrolérom:
- Generovanie PWM pomocou PIC mikrokontroléra s MPLAB a XC8
- Ovládanie servomotora s Raspberry Pi
- Arduino LED stmievač využívajúci PWM
- Pulzná šírková modulácia (PWM) pomocou MSP430G2
Skontrolujte všetky projekty súvisiace s PWM tu.
Súčasti sú povinné
- STM32F103C8
- DC ventilátor
- Integrovaný obvod ovládača motora ULN2003
- LED (ČERVENÁ)
- LCD (16x2)
- Potenciometer
- Nepál
- Batéria 9V
- Prepojovacie drôty
DC ventilátor: Tu používaný DC ventilátor je BLDC ventilátor zo starého PC. Vyžaduje externé napájanie, takže používame 9V dc batériu.
ULN2003 IC Driver Driver: Používa sa na pohon motora jedným smerom, pretože motor je jednosmerný a pre ventilátor je tiež potrebné externé napájanie. Viac informácií o obvode ovládača motora založeného na ULN2003 sa dozviete tu. Nižšie je znázornený diagram ULN2003:
Piny (IN1 až IN7) sú vstupné piny a (OUT 1 až OUT 7) zodpovedajúce výstupné piny. COM dostane kladné zdrojové napätie potrebné pre výstupné zariadenia.
LED: Používa sa ČERVENÉ sfarbenie LED, ktoré vyžaruje ČERVENÉ svetlo. Môžu sa použiť akékoľvek farby.
Potenciometre: Používajú sa dva potenciometre, jeden slúži na delenie napätia pre analógový vstup na ADC a druhý na riadenie jasu LED.
Detaily kolíka STM32
Ako vidíme, piny PWM sú označené vlnovým formátom (~), takýchto pinov je 15, piny ADC sú znázornené zelenou farbou, 10 pinov ADC je použitých pre analógové vstupy.
Schéma zapojenia a zapojenia
Pripojenie STM32 k rôznym komponentom je vysvetlené nižšie:
STM32 s analógovým vstupom (ADC)
Potenciometer na ľavej strane obvodu sa používa ako regulátor napätia, ktorý reguluje napätie z kolíka 3,3 V. Výstup z potenciometra, tj. Stredový kolík potenciometra, je pripojený k kolíku ADC (PA4) STM32.
STM32 s LED
Výstupný kolík STM32 PWM (PA9) je pripojený k kladnému kolíku LED pomocou sériového rezistora a kondenzátora.
LED s odporom a kondenzátorom
Rezistor v sérii a kondenzátor paralelne sú spojené s LED na generovanie správnej analógovej vlny z výstupu PWM, pretože analógový výstup nie je čistý iba pri generovaní priamo z kolíka PWM.
STM32 s ULN2003 a ULN2003 s ventilátorom
Výstupný kolík STM32 PWM (PA8) je pripojený k vstupnému kolíku (IN1) modulu ULN2003 IC a zodpovedajúci výstupný kolík (OUT1) ULN2003 je pripojený k zápornému vodiču jednosmerného ventilátora.
Kladný kolík jednosmerného ventilátora je pripojený ku kolíku COM ULN2003 IC a externá batéria (9 V DC) je tiež pripojená k rovnakému kolíku COM ULN2003 IC. GND pin ULN2003 je pripojený k GND pinu STM32 a záporný pól batérie je pripojený k rovnakému GND pinu.
STM32 s LCD (16x2)
Pin LCD č |
Názov kolíka LCD |
Názov kolíka STM32 |
1 |
Zem (GND) |
Zem (G) |
2 |
VCC |
5V |
3 |
VEE |
Špendlík zo stredu potenciometra |
4 |
Register Select (RS) |
PB11 |
5 |
Čítanie / Zápis (RW) |
Zem (G) |
6 |
Povoliť (EN) |
PB10 |
7 |
Dátový bit 0 (DB0) |
Žiadne pripojenie (NC) |
8 |
Dátový bit 1 (DB1) |
Žiadne pripojenie (NC) |
9 |
Dátový bit 2 (DB2) |
Žiadne pripojenie (NC) |
10 |
Dátový bit 3 (DB3) |
Žiadne pripojenie (NC) |
11 |
Dátový bit 4 (DB4) |
PB0 |
12 |
Dátový bit 5 (DB5) |
PB1 |
13 |
Dátový bit 6 (DB6) |
PC13 |
14 |
Dátový bit 7 (DB7) |
PC14 |
15 |
Pozitívne LED |
5V |
16 |
LED negatívne |
Zem (G) |
Potenciometer na pravej strane slúži na ovládanie kontrastu LCD displeja. Vyššie uvedená tabuľka zobrazuje spojenie medzi LCD a STM32.
Programovanie STM32
Rovnako ako predchádzajúci výukový program sme programovali STM32F103C8 s Arduino IDE cez USB port bez použitia programátora FTDI. Ak sa chcete dozvedieť viac o programovaní STM32 s Arduino IDE, kliknite na odkaz. Môžeme pokračovať v programovaní ako v Arduine. Celý kód je uvedený na konci.
V tomto kódovaní vezmeme vstupnú analógovú hodnotu z kolíka ADC (PA4), ktorý je pripojený k strednému kolíku ľavého potenciometra, a potom prevedieme analógovú hodnotu (0-3,3 V) na digitálny alebo celočíselný formát (0-4095). Táto digitálna hodnota sa ďalej poskytuje ako výstup PWM na riadenie jasu LED a rýchlosti jednosmerného ventilátora. 16x2 LCD sa používa na zobrazenie ADC a mapovanej hodnoty (výstupná hodnota PWM).
Najprv musíme zahrnúť hlavičkový súbor LCD, deklarovať piny LCD a inicializovať ich pomocou nižšie uvedeného kódu. Viac informácií o prepojení LCD so STM32 sa dozviete tu.
#include
Ďalej deklarujte a definujte názvy pinov pomocou pinov STM32
konštantný analógový vstup = PA4; // Vstup z potenciometra const int led = PA9; // LED výstup const int fan = PA8; // výkon ventilátora
Teraz vo vnútri setup () musíme zobraziť niektoré správy a po niekoľkých sekundách ich vymazať a určiť pin INPUT a výstupné piny PWM
lcd.začiatok (16,2); // Príprava na LCD lcd.clear (); // Vymaže LCD lcd.setCursor (0,0); // Nastaví kurzor na riadok0 a stĺpec0 lcd.print ("CIRCUIT DIGEST"); // Zobrazí prehľad okruhu lcd.setCursor (0,1); // Nastaví kurzor na stĺpec0 a riadok1 lcd.print ("PWM POUŽÍVAJÚCI STM32"); // Zobrazí PWM pomocou oneskorenia STM32 (2000); // Čas oneskorenia lcd.clear (); // Vymaže LCD pinMode (analogový vstup, VSTUP); // nastavenie analógového vstupu v režime pin ako INPUT pinMode (led, PWM); // nastavenie režimu pin pin ako PWM výstup pinMode (ventilátor, PWM); // nastavenie ventilátora v režime pin ako PWM výstup
Analógový vstupný kolík (PA4) je nastavený ako INPUT pomocou pinMode (analogový vstup, INPUT), LED kolík je nastavený ako PWM výstup pinMode (led, PWM) a pin ventilátora je nastavený ako PWM výstup pomocou pinMode (ventilátor, PWM) . Tu sú výstupné piny PWM pripojené k LED (PA9) a ventilátoru (PA8).
Ďalej vo funkcii void loop () načítame analógový signál z kolíka ADC (PA4) a uložíme ho do celočíselnej premennej, ktorá prevádza analógové napätie na digitálne celé čísla (0-4095) pomocou nižšie uvedeného kódu int valueadc = analogRead (analoginput));
Tu je dôležité si uvedomiť, že PWM piny, čo sú kanály STM32, majú 16-bitové rozlíšenie (0-65535), takže ich musíme mapovať pomocou analógových hodnôt pomocou funkcie mapy, ako je uvedené nižšie
int výsledok = mapa (valueadc, 0, 4095, 0, 65535).
Pokiaľ sa mapovanie nepoužije, nezískame plnú rýchlosť ventilátora alebo plný jas LED zmenou potenciometra.
Potom zapíšeme výstup PWM na LED pomocou funkcie pwmWrite (led, result) a výstup PWM do ventilátora pomocou funkcií pwmWrite (fan, result ).
Nakoniec zobrazíme analógovú vstupnú hodnotu (hodnota ADC) a výstupné hodnoty (hodnoty PWM) na LCD displeji pomocou nasledujúcich príkazov
lcd.setCursor (0,0); // Nastaví kurzor na riadok0 a stĺpec0 lcd.print ("hodnota ADC ="); // vypíše slová „“ lcd.print (valueadc); // zobrazuje hodnotueadc lcd.setCursor (0,1); // Nastaví kurzor na stĺpec0 a riadok1 lcd.print ("Výstup ="); // vypíše slová v "" lcd.print (výsledok); // zobrazí výsledok hodnoty
Kompletný kód s ukážkovým videom je uvedený nižšie.