PWM generaator

Seekordne artikkel sai inspiratsiooni ühest minu 2017 aasta jõulukingitusest. Selleks oli taskulamp.

Keegi hõikas üldises lõbusas meeleolus, et nüüd saab öösel salaja raamatut lugeda. Kui ma lambi aga sisse lülitasin jäin ka üsna mõistlikult valgustatud toas pea-aegu pimedaks. Ilmselt on tegemist siiski pigem tööriistaga suure telgi valgustamiseks või auto all ringi roomamiseks. Aga esimene mõte mis mulle pähe hüppas oli “Valgustugevus võiks ju reguleeritav olla.”.

Niisiis….

Ilmselt saab valgusallika valgustugevust muuta reguleerides kui palju energiat valgusallikale antakse. Muuta valgusallika voolu ja pinget.

Üks ägedamaid meetodeid selleks on pulsilaiusmodulatsioon.

PWM

Lühend PWM tuleb tuleb inglisekeelsest mõistest Pulse Width Modulation, mis tõlkes tähendab sõna-sõnalt pulsilaiusmodulatsioon. Illustreerime. Kujutame ette, et meil on üks lamp mis on ühendatud otse 12V akuga.

Sellisel juhul muutub kogu energia mis akust tuleb lambis valguseks ja soojuseks. Kuidas nüüd seda energiahulka vähendada? Variant oleks panna skeemi takisti, aga see oleks tobe. Siis muutuks osa energiast lihtsalt takisti peal soojuseks ja läheks raisku.

Aga kui me paneks skeemi ühe lüliti.

Kui seda lülitid nüüd lülitada iga sekundi tagant, kord sisse, kord välja, siis kahe sekundi lõikes oleks pirnini jõudev energia pool, ehk 50% sellest mis jõuaks tavalises olekus. Meil oleks loomulikult vilkuv lamp. Aga kui seda lülitamist teha kiiremini, näiteks 50 korda sekundis, ei saa inimsilm enam vilkumisest aru (ja hõõgpirn tegelikult ka ei kustu nii kiiresti). Sedasi saavutamegi olukorra, kus keskmine energia mis elektripirnile jääb on pool maksimaalsest.

Kui seda olukorda vaadata graafikuna näeme pulsse.

Pool ajast on pinge peal, pool ajast ei ole. Täitetegur on 50%. See näitab kui pika osa ajast on pinge peal võrreldes tsükli pikkusega.

Kui nüüd näiteks tahame, et 75% saadaolevast energiast läheks lambile tuleb täiteteguriks seada 75%.

Ehk siis reguleerides pulsi laiust saame reguleerida kui palju energiat tarbija saab. Moduleerides pulsi laiust…. Pulsilaiusmodulatsioon. Loe ka Wikit.

PWM vajab integraatorit. Integraatoriks võib nimetada suvalist asja mis pulsi mingiks stabiilse nivooga nähtuseks muudab. Elektromootoris silub pulsi stabiilseks vooluks ja pöörlemiskiiruseks elektrimootori mähise induktiivsus ja mootori inerts. Hõõglambis silub pulsi stabiilseks valgustugevuseks hõõgniidi termiline mahtuvus. Ning valgusdioodi valgustugevuse pulsseerimise, kui see toimub piisavalt kiiresti, silub ühtlaseks inimsilma reaktsioonikiirus.

Skeemi arhidektuur

Keerulisemaid skeeme tasub hoomatavuse huvides jagada väiksemates funktsionaalseteks osadeks. Olen seda ka teinud tegelikult kõikide varasemate skeemidega. Seekord lihtsalt joonistan enne alustamist pildi.

Mida suurem skeem seda olulisemaks muutub selle jagamine väiksemateks funktsionaalseteks plokkideks. Tulemuseks on plokkskeem. See annab võimaluse keskenduda ühele skeemiosale korraga, ning tegelikult võib skeemiosade disaini ka erinevatele inseneridele anda. Kokku tuleb muidugi leppida kuidas skeemiosad üksteisega suhestuvad, milline on toitepinge, ning harmoniseerida komponente mida kasutatakse.

Põhimõttelt hakkab skeem toimima nii:

Saehammas pinge generaator tekitab pidevalt signaali konstantse sagedusega. Referentspinge saab olema kasutaja poolt muudetav. Komparaator lülitab enda väljundi madalast kõrgeks siis, kui saehamba pinge kasvab suuremaks referentspingest. Muutes referentspinge väärtust muudame täitetegurit.

Tekkinud PWM signaali (roheline) kasutame N-MOSFET tüüpi transistori juhtimiseks ja selle transistori töö saab olema valgusdioodide lülitamine.

Saehammas pinge generaator

Alustame sellest, et tarvis on tekitada lineaarselt kasvav pinge. Selleks kasutame kondensaatorit. Kui kondensaatorile anda ühtlane ja ajas muutumatu elektrivool hakkab kondensaatori pinge kasvama lineaarselt. Umbes niimoodi:

Meil aga ei ole praegu huvi vooluallikat ehitada ja seega kasutame patarei pinge vooluks muutmise jaoks tavalist takistit. Kasutame skeemi mis kannab nime RC-ahel.

Selle skeemi pinge kasv ei ole lineaarne. Kui laeng hakkab kondensaatorisse C1 voolama hakkab C1 pinge kasvama. Mida aeg edasi seda suurem on pinge C1-l. See aga tähendab, et takistile R1 jääv pingelang väheneb. Kui pingelang takistil väheneb väheneb ka takistit läbiv vool, ja pinge kasvu kiirus takistil C1 väheneb.

Seda muutumist saab kirjeldada valemiga

Vc on pinge suvalisel ajahetkel t. Vs on ahela toitepinge, ning R ja C on ahelas kasutatud takisti ja kondensaatori väärtus.

R ja C korrutise kohta kasutatakse mõistet “ajakonstant”. Seda tähistatakse tähega τ (tau).

Ühe ajakonstanti möödudes, kui t on võrdne τ-ga, on võtab pinge arvutamise valem kuju

Kui selle ära arvutame saame teada, et ühe ajakonstanti möödudes kasvab pinge kondensaatoril 63% toitepingest.

See on ilmselt rohkem matemaatikat kui enamusele mugav. Seega ma ei lahka seda rohkem aga soovitan valemi mõnda tabelarvutuse süsteemi lüüa ja veidi katsetada. Oluline mis siit kaasa võtta on see, et kui tahad teada kui kiiresti kondensaator ennast läbi takisti täis laeb tasub välja arvutada ajakonstant τ.   

Pöördume nüüd tagasi saehammaspinge generaatori juurde. Meil oli tarvis lineaarselt kasvavat pinget. Uuri korra veel kondensaatori pinge kasvu illustreerivat graafikut. Milline on graafik esimese ajakonstantini? Milline on graafik kuni pingeni 5V * 0,63 = 3,15V.

Küllalt lineaarne. Aga miks ma praegu ajakonstandist räägin? Seda on lihtne kasutada generaatori sageduse arvutamiseks. Kui me leiutame meetodi kuidas ühe ajakonstanti möödudes suudame kondensaatori kiiresti tühjaks laadida algab kogu laadimistsükkel uuesti.

Ning signaali periood oleks võrdne ühe ajakonstantina. Sagedus seega

Ok. Teoreetiline kraam on jalust ära. Hakkame arvutama.

Vaatan lakke ja pakun, et kui valime saehammaspinge generaatori sageduseks 2000 Hz. Oletan, et sellel sagedusel ei ole PWM-i tekitatud valgustugevuse värelemine inimsilmale nähtav.

2000Hz korral on ajakonstant 1/2000 = 0,5 ms. Nüüd tuleb leida takisti ja kondensaator mille väärtuste korrutis oleks 0,5 ms. Kui me ühe komponendi, näiteks kondensaatori väärtuse fikseerime jääb alles ühe muutujaga võrrand. Valin, jällegi lakke vaadates, 150 nF kondensaatori. Ajakonstandi arvutamise võrrandit ümber korraldades saab

Ning kui siia numbrid sisse panna saame, et paraja suurusega takisti oleks 3333,33 Ω. Lähim mõistlik nominaal oleks 3300Ω.

RC ahel on nüüd valmis. Tarvis on meetodid kondensaatori kiireks tühjakslaadimiseks, mis rakendub kui kondensaatori pinge kasvab 63%-ni toitepingest. Toitepinge saab olema 9V patarei ja saehammaspinge tipp seega ligikaudu 5,7V. Seega on 5,7V juures peab käivituma mingi lüliti mis kondensaatori tühjaks laeb.

Siin ehitame varasemate artiklite tarkusele. Tuleta meelde komparaatorit, transistori ja pingejagurit.

R2-st ja R3-st koosnev pingejagur tekitab 9V patarei pingest(Vss) referentspinge 5,6V. Kui R1-st ja C3-s koosneva RC ahela pinge kasvab referentspingest suuremaks läheb opaka U1 väljund 0V-st 9-le voldile. 9V N-MOSFET transistori paisul avab transistori, ning läbi transistori voolab kondensaatorisse C3 salvestatud takisti ülikiiresti maha. See muidugi tähendab, et komparaator annab väljundiks jälle nullpinge, transistor lõpetab juhtimise ja kondensaatorit hakatakse uuesti, aeglaselt, läbi R1-he laadima.

Q1 paisu ees on R4 ja C2-st koosnev madalpääsfilter. Selle ülesanne on veidi venitada ümberlülitamise aega. Kujuta ette olukorda, kus pinge C3-l on just ületanud referentspinge mille tekitavad R2 ja R3. Transistor hakkab juhtima, aga ta ei jõua täielikult avaneda. Kui ta pisutki avaneb hakkab pinge C3-l kiiresti langema, tekitades õige pea uuesti olukorra, kus transistor lülitatakse välja.

Skeemi väljundiks on punkt kondensaatori C3 ja takisti R1 vahel.

Referentspinge allikas

See on nüüd lihtne. Meil on vaja oma teise komparaatori jaoks pingeallikat, mille pinge väärtust saab reguleerida kogu meie saehammaspinge generaatori amplituudi ulatuses. Postitusest, mis sai tehtud Jaanuaris 2018 on ehk meeles selline komponent nagu potentsiomeeter. Sellele võib mõelda kui pingejagurile mille takistite suhet saab nuppu pöörates muuta.

Võiksime potentsiomeetri ühendada otse toite külge. See tähendaks, et potentsiomeetri keskväljavõtte pingeväärtust saaks reguleerida vahemikus 0V kuni 9V. Aga Saehammaspinge generaatorist tuleva signaali maksimumpinge on ju 5,6V. Sealne komparaator tagab, et selle pingel lühistatakse kondensaator. See tähendaks, et kõikides nendes poteka asendites, kus keskväljavõtte pinge on suurem kui 5,6V, ei muudaks poteka kruttimine väljundis mitte midagi. Seega mõttetu.

Kui aga valime pote nominaaliga 10kΩ ning paneme sellest positiivse toite poole 6,2kΩ takisti saame sisuliselt samasuguse pingejaguri nagu on saehammaspinge generaatori referentspinge tekitajaks. Ainus vahe on see, et me saame valida kuidas see 10kΩ jaotatakse. Ning seega saame reguleerimisvahemiku 0V kuni 5,6V.

Komparaator

Komparaator võrdleb sahammaspinget referentspingega ning lülitab komparaatori väljundi kõrgeks kui saehammaspinge kasvab suuremaks kui referents. Seega, kui keerame referentspinge 0V on komparaator sisuliselt kogu aeg sees.  Meie koormus saab endale kogu toitepinge. Kui keerame referentspinge oma maksimumi 5,6V on koormus välja lülitatud.

Näidatud on ka referentspinge allikas milles eelmises peatükis räägitud sai.

Valgusallikas

Nagu ka süüdiolevas taskulambis kasutan oma lambis valgusdioode. Valgusdiood, nagu nimi ütleb, on diood mis kiirgab valgust. Selleks, et valgusdiood hakkaks valgust kiirgama tuleb see päripingestada. Nagu ka tavalisel dioodil ei ole ka valgusdioodil väga midagi, mis takistaks voolu voolamist pärisuunas. Ning vastupingele on tavaline valgusdiood üsna lahja. Juhuslikult valitud valgel Osrami LED-il oli maksimaalne lubatud vastupinge oli hale 1,2V.

Valgusdioodi kasutatakse üsna tihti koos voolu piirava takistiga. Seda siis puhuks, kui sul on vaja pigem nõrka valgust näiteks mõne indikaatori jaoks. Praktika tarbeks ütleme, et tahad lülitada oma 5V Arduino väljundiga ühte valgusdioodi. Et asi oleks asjakohane ütleme, et see diood on valge. Kontrolli dioodi andmelehest järgi, aga rusikareegel on, et valge dioodi päripingelang on ~ 2,8V. Päripingelang sõltub natuke dioodi läbivast voolust. Näite huvides oletame, et 2,8V on päripingelang siis kui LED-i vool on 10mA.

Niisiis. Kui toiteallikast tuleb 5V ning dioodile jääb 2,8V, siis takistile peab jääma 2,2V. Pea meeles, et takisti on ainus tükk selles skeemis, mis voolu oskab piirata. Ja vooluks tahtsime 10mA. Tuletame meelde oomi seadust ja arvutame R=U/I = 2,2V/0,01A = 220Ω.

Meie aga pidime kasutama PWM-i mitte takistit. Ning kasutada olev pinge on 9V mitte 5V. Me saame panna mitu LED-i järjestikku. Valisin LED-i mille päripingelang ja selle sõltuvus voolust on antud alloleval graafikul

Kui kasutame 3 LED-i järjestiku saame 9V toiteallika korral igale dioodile 3V. Vaadates graafikut on näha, et 3V päripinge korral on dioodi vool 8mA.  100% täiteteguri korral on selle dioodi maksimaalseks lubatud vooluks 30mA

Isegi siis, kui värske patarei pinge on 9,6V on vool ikkagi alla lubatu.

Dioode läbiva voolu lülitamiseks kasutame N-MOSFET tüüpi transistori.

Eksperiment

Skeemi ehitamise käigus tuli teadmisi, nagu ikka. See RC ahel Q1 paisu küljes ei olnud algselt plaanis. Simulatsioonis, millest tulid PWM-i tutvustava peatüki pildid, töötas skeem ka ilma selle viiteta. Selleks võib olla kaks põhjust. Esiteks oli simulatsioonis kasutatud C3 10nF 150nF asemel. Seetõttu oli selle tühjaks laadimine oluliselt kiirem. Teiseks oli simulatsioonis kasutatud opvõimendi mudeli väljundpinge kasvukiirus üle kümne korra suurem. Selle tõttu jõudis simulatsioonis kasutatud võimendi transistori rohkem avada ja kogu energia jõudis C3-st ära voolata enne, kui võimendi ise uuesti reageerida jõudis.

Teine asi, mis kaika kodarasse viskas, oli potentsiomeetri tolerants. Mul ei olnud võimalik tekitada potentsiomeetriga pingeallikast saehammas pinge maksimumist suuremat pinget. Selle maksimum oli isegi pisut väiksem, mistõttu ei olnud võimalik PWM-i täitetegurit 0%-ni viia ning LED-e ei olnud võimalik täielikult välja lülitada. Lahendasin probleemi asendades ülemise õla 6k2 takisti 5k6 takistiga.

Skeemi toimimise printsiipi saab näha allolevalt liikuvalt pildilt. Helesinine on saehammaspinge, kollane on referentspinge ning alumine lilla on nende kahe omavahelisest suhtest sõltuv PWM signaal mõõdetuna Q2 väljundilt.