- Mikä on PWM (pulssi modulaatiolla)?
- PWM STM32: ssä
- Tarvittavat komponentit
- STM32: n nastatiedot
- Piirikaavio ja liitännät
- STM32: n ohjelmointi
Edellisessä artikkelissa olemme nähneet ADC-muunnoksista STM32: n avulla. Tässä opetusohjelmassa opit STM32: n PWM: stä (pulssinleveyden modulointi) ja kuinka voimme ohjata LED-kirkkautta tai DC-tuulettimen nopeutta PWM-tekniikalla.
Tiedämme, että signaaleja on kahta tyyppiä: analoginen ja digitaalinen. Analogisignaaleilla on jännitteitä, kuten (3V, 1V… jne.) Ja digitaalisilla signaaleilla (1 'ja 0). Anturilähdöt ovat analogisia signaaleja ja nämä analogiset signaalit muunnetaan digitaalisiksi ADC: n avulla, koska mikro-ohjaimet ymmärtävät vain digitaalista. Kun nämä ADC-arvot on käsitelty, lähtö on jälleen muunnettava analogiseen muotoon analogisten laitteiden ajamiseksi. Tätä varten käytämme tiettyjä menetelmiä, kuten PWM, Digital to Analog (DAC) -muuntimet jne.
Mikä on PWM (pulssi modulaatiolla)?
PWM on tapa hallita analogisia laitteita käyttämällä digitaalista arvoa, kuten moottorin nopeuden, ledin kirkkauden jne. Säätäminen. Tiedämme, että moottori ja led toimivat analogisella signaalilla. Mutta PWM ei tarjoa puhdasta analogialähtöä, PWM näyttää analogiselta signaalilta, joka saadaan lyhyillä pulsseilla, joka saadaan työjaksolta.
PWM: n toimintajakso
Prosenttiaikaa, jonka aikana PWM-signaali pysyy KORKEAna (ajallaan), kutsutaan työjaksoksi. Jos signaali on aina päällä, se on 100%: n käyttöjaksossa ja jos se on aina pois päältä, se on 0%: n käyttöjakso.
Käyttösykli = Kytke päälle aika / (Kytke päälle aika + Sammuta aika)
PWM STM32: ssä
STM32F103C8: ssa on 15 PWM-nastaa ja 10 ADC-nastaa. Ajastimia on 7, ja jokaisen PWM-lähdön tarjoaa 4 ajastimeen kytketty kanava. Siinä on 16-bittinen PWM-tarkkuus (2 16), eli laskurit ja muuttujat voivat olla jopa 65535. 72 MHz: n kellotaajuudella PWM-lähdön maksimiaika voi olla noin yksi millisekunti.
- Joten arvo 65535 antaa LED-valon TÄYDEN KIRKKAUDEN JA DC-puhaltimen TÄYDEN NOPEUDEN (100%: n käyttöjakso)
- Vastaavasti arvo 32767 antaa puoli kirkkautta LEDille ja puoli nopeutta tasavirtapuhaltimelle (50% käyttöjakso)
- Ja arvo 13107 antaa (20%) KIRKKAUDEN JA (20%) NOPEUDEN (20% Duty Cycle)
Tässä opetusohjelmassa käytämme potentiometriä ja STM32: tä vaihtamaan LED-kirkkautta ja tasavirtapuhaltimen nopeutta PWM-tekniikalla. 16x2-nestekidenäyttöä käytetään ADC-arvon (0-4095) ja modifioidun muuttujan (PWM-arvo) näyttämiseen (0-65535).
Tässä on muutama PWM-esimerkki muiden mikrokontrollerien kanssa:
- PWM: n tuottaminen PIC-mikrokontrollerilla MPLAB: n ja XC8: n kanssa
- Servomoottorin ohjaus Raspberry Pi: llä
- Arduino-pohjainen LED-himmennin PWM: n avulla
- Pulssinleveyden modulointi (PWM) MSP430G2: n avulla
Tarkista kaikki PWM: ään liittyvät projektit täältä.
Tarvittavat komponentit
- STM32F103C8
- DC-tuuletin
- ULN2003-moottorin ohjaimen IC
- LED (PUNAINEN)
- LCD (16x2)
- Potentiometri
- Leipälauta
- Akku 9 V
- Neulalangat
DC-tuuletin: Tässä käytetty DC-tuuletin on vanhan tietokoneen BLDC-tuuletin. Se vaatii ulkoisen virtalähteen, joten käytämme 9 V: n DC-akkua.
ULN2003 Motor Driver IC: Sitä käytetään moottorin ohjaamiseen yhteen suuntaan, koska moottori on yksisuuntainen ja puhaltimelle tarvitaan myös ulkoista virtaa. Lisätietoja ULN2003-pohjaisesta moottoriohjainpiiristä on täällä. Alla on ULN2003: n kuvakaavio:
Nastat (IN1 - IN7) ovat tuloliittimiä ja (OUT 1 - OUT 7) ovat vastaavia lähtönastoja. COM annetaan lähtölaitteille vaadittava positiivinen lähdejännite.
LED: PUNAISTA värillistä lediä käytetään, joka lähettää PUNAISTA valoa. Mitä tahansa väriä voidaan käyttää.
Potentiometrit: Kaksi potentiometriä käytetään, yksi on jännitteenjakaja analogiselle tulolle ADC: lle ja toinen ledin kirkkauden säätämiseen.
STM32: n nastatiedot
Kuten näemme, PWM-nastat on merkitty aaltomuodossa (~), tällaisia nastoja on 15, ADC-nastat ovat vihreitä, siellä on 10 ADC-nastaa, joita käytetään analogisiin tuloihin.
Piirikaavio ja liitännät
STM32: n kytkennät eri komponentteihin selitetään seuraavasti:
STM32 analogisella tulolla (ADC)
Piirin vasemmalla puolella olevaa potentiometriä käytetään jännitteen säätimenä, joka säätelee jännitettä 3,3 V: n nastasta. Potentiometrin lähtö eli potentiometrin keskitappi on kytketty STM32: n ADC-napaan (PA4).
STM32 LEDillä
STM32 PWM -ulostappi (PA9) on kytketty LED: n positiiviseen napaan sarjavastuksen ja kondensaattorin kautta.
LED vastuksella ja kondensaattorilla
Sarjassa oleva vastus ja rinnakkain oleva kondensaattori on kytketty LEDiin oikean analogiaallon muodostamiseksi PWM-lähdöstä, koska analoginen lähtö ei ole puhdas siitä, kun se generoidaan suoraan PWM-nastasta.
STM32 ULN2003: lla ja ULN2003 tuulettimella
STM32 PWM -ulostappi (PA8) on kytketty ULN2003 IC: n tulotappiin (IN1) ja vastaava ULN2003: n ulostulotappi (OUT1) on kytketty DC-tuulettimen negatiiviseen johtoon.
DC-tuulettimen positiivinen nasta on kytketty ULN2003 IC: n COM-nastaan ja ulkoinen akku (9 V DC) on myös kytketty samaan ULN2003 IC: n COM-nastaan. ULN2003: n GND-nasta on kytketty STM32: n GND-nastaan ja akun negatiivinen on kytketty samaan GND-nastaan.
STM32 LCD-näytöllä (16x2)
LCD-nasta nro |
LCD-nastan nimi |
STM32-nastan nimi |
1 |
Maa (Gnd) |
Maa (G) |
2 |
VCC |
5 V |
3 |
VEE |
Tappi potentiometrin keskustasta |
4 |
Rekisteröinti Valitse (RS) |
PB11 |
5 |
Lue / kirjoita (RW) |
Maa (G) |
6 |
Ota käyttöön (EN) |
PB10 |
7 |
Databitti 0 (DB0) |
Ei yhteyttä (NC) |
8 |
Databitti 1 (DB1) |
Ei yhteyttä (NC) |
9 |
Databitti 2 (DB2) |
Ei yhteyttä (NC) |
10 |
Databitti 3 (DB3) |
Ei yhteyttä (NC) |
11 |
Databitti 4 (DB4) |
PB0 |
12 |
Databitti 5 (DB5) |
PB1 |
13 |
Databitti 6 (DB6) |
PC13 |
14 |
Databitti 7 (DB7) |
PC14 |
15 |
LED positiivinen |
5 V |
16 |
LED negatiivinen |
Maa (G) |
Oikealla puolella olevaa potentiometriä käytetään LCD-näytön kontrastin säätämiseen. Yllä oleva taulukko näyttää LCD: n ja STM32: n välisen yhteyden.
STM32: n ohjelmointi
Kuten edellinen opetusohjelma, ohjelmoimme STM32F103C8: n Arduino IDE: llä USB-portin kautta ilman FTDI-ohjelmoijaa. Jos haluat oppia STM32: n ohjelmoinnista Arduino IDE: llä, seuraa linkkiä. Voimme jatkaa ohjelmointia kuten Arduinossa. Täydellinen koodi annetaan lopussa.
Tässä koodauksessa aiotaan ottaa analoginen tuloarvo ADC-nasta (PA4), joka on kytketty vasemman potentiometrin keskitappiin, ja muuntaa sitten analogisen arvon (0-3,3 V) digitaaliseksi tai kokonaislukumuodoksi (0-4095). Tämä digitaalinen arvo annetaan edelleen PWM-ulostulona LED-kirkkauden ja tasavirtapuhaltimen nopeuden säätämiseen. 16x2 nestekidenäyttöä käytetään ADC: n ja yhdistetyn arvon (PWM-lähtöarvo) näyttämiseen.
Ensin meidän on sisällytettävä LCD-otsikkotiedosto, ilmoitettava LCD-nastat ja alustettava ne alla olevan koodin avulla. Lisätietoja LCD-näytön ja STM32: n liitännästä on täällä.
#sisältää
Selvitä ja määritä seuraavaksi pinien nimet STM32: n tapilla
const int-analogitulo = PA4; // Potentiometrin tulo const int led = PA9; // LED-lähtö const int tuuletin = PA8; // tuulettimen lähtö
Nyt asennuksen () sisällä meidän on näytettävä joitain viestejä ja tyhjennettävä ne muutaman sekunnin kuluttua ja määritettävä INPUT-nasta ja PWM-lähtönastat
lcd-alku (16,2); // LCD-näytön valmistelu lcd.clear (); // Tyhjentää LCD- lcd.setCursor (0,0); // Asettaa kohdistimen riville0 ja sarakkeelle0 lcd.print ("CIRCUIT DIGEST"); // Näyttää Circuit Digest lcd.setCursor (0,1); // Asettaa kohdistimen sarakkeeseen 0 ja riviin 1 lcd.print ("PWM USING STM32"); // Näyttää PWM: n käyttämällä STM32- viivettä (2000); // Viiveaika lcd.clear (); // Tyhjentää LCD pinMode (analoginen tulo, INPUT); // aseta nastatilan analogiatulo tuloksi pinMode (led, PWM); // aseta nastatila lediksi PWM-ulostulona pinMode (tuuletin, PWM); // aseta nastatilan tuuletin PWM-ulostuloksi
Analoginen tulotappi (PA4) asetetaan tuloksi pinMode-toiminnolla (analoginen tulo, INPUT), LED-nasta asetetaan PWM-ulostuloksi pinMode-toiminnolla (led, PWM) ja tuulettimen nasta asetetaan PWM-ulostuloksi pinMode-toiminnolla (puhallin, PWM) . Tässä PWM-lähtöliittimet on kytketty LEDiin (PA9) ja tuulettimeen (PA8).
Seuraavaksi void loop () -toiminnossa luemme analogisen signaalin ADC-nastasta (PA4) ja tallennamme sen kokonaislukumuuttujaan, joka muuntaa analogisen jännitteen digitaalisiksi kokonaislukuarvoiksi (0-4095) käyttämällä alla olevaa koodia int valueadc = analogRead (analogitulo);
Tärkeä asia tässä on PWM-nastat, jotka ovat STM32: n kanavia, joilla on 16-bittinen tarkkuus (0-65535), joten meidän on kartoitettava se analogisilla arvoilla käyttämällä alla olevaa karttatoimintoa
int tulos = kartta (valueadc, 0, 4095, 0, 65535).
Jos kartoitusta ei käytetä, emme saa täyttä tuulettimen nopeutta tai täyttä LED-kirkkautta vaihtelemalla potentiometriä.
Sitten kirjoitamme PWM-lähdön LEDiin käyttämällä pwmWrite (led, tulos) ja PWM-lähtö tuulettimeen käyttämällä pwmWrite (tuuletin, tulos ) -toimintoja.
Lopuksi näytämme Analoginen tuloarvo (ADC-arvo) ja lähtöarvot (PWM-arvot) LCD-näytöllä seuraavien komentojen avulla
lcd.setCursor (0,0); // Asettaa kohdistimen riville0 ja sarakkeelle0 lcd.print ("ADC-arvo ="); // tulostaa sanat “” lcd.print (valueadc); // näyttää valueeadc lcd.setCursor (0,1); // Asettaa kohdistimen sarakkeeseen 0 ja riviin 1 lcd.print ("Output ="); // tulostaa sanat "" lcd.print (tulos); // näyttää arvon tuloksen
Täydellinen koodi esittelyvideolla on alla.