Signaalimuundur

Suvel kirjutas mulle sõber Siim ja uuris kas ma blogi jaoks tellimustööd ka teeksin. “Vabalt”, ma vastasin. “Mis sul mõttes?”.

Mõttes oli muusika. Ülesanne on vana süntesaatorit juhtida MIDI abil ning selle jaoks on tarvis ühte signaalimuundurit.

Mõnede mõistete selgitusi:

MIDI- Musical Instrument Digital Interface. See on standardne liides muusika seadmete juhtimiseks ja sünkroniseerimiseks.

CV- Control Voltage. Selle kohta kahjuks eestikeelset wiki artiklit ei ole. Sisuliselt antakse siin korraldus mingi noodi mängimiseks pingenivooga.

Pane tähele, et MIDI on digitaalne protokoll ja CV/gate analogsignaal. Ning kogu see Arduino-PWM-Signaali muundur ahel ongi ette nähtud muutmaks digitaalsignaal analoogsignaaliks. Arduino teisendab MIDI paketis olevad andmed PWM signaaliks ning signaali muunduri töö on sellest PWM signaalist tekitada stabiilne pingenivoo.

CV sisendile sobivad pinged vahemikus 0 kuni 10V ning tekitatud pingenivoo viga tohib maksimaalselt olla 42mV. Suurema vea kuuleb inimene ära, kui häälest ära noodi. PWM-i sagedus, mida Arduino UNO tekitada suudab on ligilähedal 62kHz-le. Samal ajal peab analoogväljund suutma muutuda sagedusega 1kHz. Arduino digitaalsignaali väljundpinge on maksimaalselt 5V. PWM-i pingevahemik seega 0V kuni 5V.

Ehk siis see muundur on sisuliselt filter.

Filter

Filter on selline elektriahel, mis diskrimineerib elektrisignaale sageduse põhjal. Ta laseb neid mingis sagedusvahemikus filtrist läbi. Seda vahemiku nimetatakse pääsualaks. Selle vastand on tõkkeala. See summutab signaali. Kusjuures, nagu päris maailmale kohane, mitte 100%. Aga siiski piisavalt.

Kolmas ala on see, kus filter juba summutab signaali pisut, aga mitte sinu jaoks piisavalt. See ala on pääsuala ja tõkkeala vahel ning seda nimetatakse siirdealaks. Ideaalsel filtril siirdeala ei ole. Pääsuala läheks tõkkealaks üle lõpmatult lühikeses sagedusvahemikus.

See millist sagedust ja kui palju filter summutab iseloomustab filtri amplituudi-sageduse karakteristik. Amplituudiks on väljundi ja sisendi jagatis. Ideaalses tõkkealas on jagatis null. Ideaalses pääsualas on jagatis 1.

Selle karakteristiku puhul antakse sageduse telg logaritmilises skaalas. Ma tunnen, et logaritmilise skaala lahtiseletamine on selle blogi skoobist väljas. Aga põhiline motivatsioon logaritmilise skaala kasutamiseks on see, et ta lubab väga suurt väärtuste vahemiku näidata väikesel graafikul.

All on näide. Joonistasin tabelarvutuse abil madalpääsfiltri amlituut-sagedus karakteristiku. Filtri R on 10 kΩ ja C 10nF.

Kus kohas on sellel graafikul pääsuala, tõkkeala ja siirdeala? Pääsuala lõpuks ja siirdeala alguseks loetakse sellist punkti sagedusteljel, kus väljundi võimsus sisendi suhtes on langenud 3dB võrra. dB on ühik nimega detsibell.

Detsibell on suhet kirjeldav ühik, mis on samuti mõeldud olukordadeks, kus meid huvitavad arvud võivad olla väga suures vahemikus. Näiteks just signaalitöötluses, võimendite ja muu säärasega seoses. See näitab sisuliselt kahe signaali võimsuse või amplituudi suhet. Näiteks, kui meil on võimendi võimendusteguriga 100, saame selle kirja panna kui 20 dB. Teine lahe asi, mida detsibellid teha lubavad on vastavaid võimendustegureid korrutamise ja jagamise asemel liita ja lahutada. Näiteks, kui meil on jadamisi kaks võimendit, mõlemad võimendusteguriga 100 korda ning nende vahel oleva kaabli sumbuvustegur on 2 korda. Saame kirjutada 20-3+20 = 37dB. See on sama, mis võimendustegur (100/2) * 100 = 5000. Aga kohmaka ja suurte teguritega korrutustehte asemel on lihte ja peast lahendatav liitmisülesanne. See on eriti kasulik raadiotehnikas, kui üritad sideliini võimendusi ja võimsuskadusid kokku arvutada.

Aga. Antud juhul on see oluline selleks, et teaksime milline on vajaminev sumbuvustegur filtri tõkkealas. Ja ma kasutan seda teadmist, et otsustada millist filtrit vaja on.

Nagu amplituudi-sageduse tunnusjoonelt näha ei toimu üleminek pääsualast tõkkealasse järsult. Tavalise RC filtri puhul langeb võimsus 20db dekaadi kohta. See tähendab, et signaali võimsus väheneb sada korda kui signaali sagedus kasvab kümme korda. Meid aga huvitab amplituut. Me ei kasuta võimsust vaid pinget oma süntesaatori tüürimiseks. Signaali amplituut langeb 10 dB dekaadi kohta ehk siis signaal nõrgeneb 10 korda, kui sagedus kasvab 10 korda. See seab olulisi piiranguid.

Selleks, et saada tuhandekordne sumbuvustegur 62 kHz juures, peaks filtri pääsuala lõppema 6 dekaadi madalamal sagedusel (1000x amplituudi kasv on 60dB). See tähendaks, et murdesagedus peaks olema 0,062 Hz. See on saavutatav küll, aga see välistaks igasuguse lootuse, et väljundi pinget õnnestuks muuta sagedusega 1kHz. Sellel sagedusel oleks kasuliku signaali amplituudist järel vähem kui kümnendik.

Lahenduseks on ehitada filter, mille amplituudi-sageduse karakteristik langeb siirdealas kiirusega 60 dB dekaadi kohta. Meil on ju tarvis, et kogu signaal kuni sageduseni 1kHz pääseks filtrist läbi kogu oma amplituudis 10V. PWM-i sagedus 62 kHz ei tohi aga tekitada pingekõikumist, mis on suurem kui 42mV. Tuhandekordne amplituudi vähendamine tähendabki, et 10 voldise amplituudiga PWM-i signaalist jääb järele täitetegurile vastav pinge ja selle peale 10mV lülitusmüra.

Aktiivfilter

Kasutan aktiivfiltrit, mille leidsin L. Abo raamatust “Raadiolülitused”.

See on sisuliselt puhvriga RC madalpääsfilter, kui vaatad R2-te ja C1-te. Aga R1 ja C2 teevad seda, et sumbuvustegur signaali amplituudile on 10 dB asemel 20 dB-d.

Analüüsime seda skeemi. Kujutame ette, et sisendpinge Us on alalispinge. Alalispinge jaoks on kondensaatorid tühised. Ning kui R4 on null on meil tegemist lihtsa puhvriga. Kui sagedus aga kasvama hakkab hakkavad kondensaatorid aina rohkem voolu juhtima. Osa signaali energiast läheb C1 kaudu kaduma. Need on need esimesed 10 dB-d.

Aga C2? C2 tekitab kõrgete sagedusga muutuvale pingele lühise võimendi väljundisse. Võimendi väljund aga töötab sellele pingele vastu ja kompenseerib selle. Et aru saada miks nii juhtub võta arvesse, et ka C1 muutub kõrge sagedusega signaali jaoks lühiseks. Sellest aga järeldub, et võimendi + sisendile jäävad ainult madalamaid sagedusi sisaldavad signaali osad. Ja järgur ehk puhver üritab võimendi väljundis alati hoida sisendil olevat pinget. Siit siis järeldub, et teine 10 dB kaob filtris läbi C2-he, mida läbiv signaal neutraliseeritakse võimendi väljundi kaudu.

Komponentide valikut siia skeemi juhendab “The Art of Electronics”. See ütleb järgmist: Vali takisti ja kondensaator justkui valiksid neid tavalisele passiivfiltrile. Meil oli tarvis, et 1 kHz signaal küllalt tõkestamata läbi pääseks. Seega tuleks murdesagedus valide umbes kaks korda kõrgem. Mul on vedelemas ports 10nF kondensaatoreid. Kohendame filtri murdesageduse arvutamise valemi sobivaks takisti väärtuse leidmiseks.

Lähim nominaalmõõt on 8,2kΩ.

Järgmiseks ütleb, “The Art of Electronics”, et C1 = C2 ja R1 = R2.

Üks aste annab meile 20 dB-d sumbuvust. Kui tahame 60 dB-d sumbuvust tuleb järjestiku panna kolm taolist filtrit.

Meisterdasin filtri kiiresti maketeerimislauale valmis. All on ostsilloskoobi ekraanipilt.

Seadsin Arduino PWM-i taktsageduse kõrgeimaks võimalikuks ning andsin väljundile järjest väärtuseid, mis joonistaksid siinussignaali. Filtri sisend on kollane, väljund sinine.

Võimendi

Meil on nüüd pingeväljund, mille võimalik vahemik on 0V kuni 5V. Meil on see vaja teisendada vahemikuks 0V kuni 10V. See oleks lihtne ülesanne, kui poleks veel ühte tingimust: Me tohime kasutada PWM-i väärtuseid vaid kuni 240-ni. Arduino PWM-i registrid on 8 bitised. See tähendab, et saame maksimaalselt 256 väljundpinge väärtus. 5V / 256 ~ 19,53 mV. See annab võimalikuks väljundpinge vahemikuks 0V kuni 4,98V. Seega meie võimendustegur ei pea olema mitte 2, vaid 10V / 4,98V = 2,008. Ilmselt on see keeruline saavutada, sest juba 1% tolerantsiga takisti tavaline viga on suurem. Aga kui me teeme tagasiside ahela täpse potentsiomeetriga, saame võimendustegurit hiljem häälestada.

Meil on tarvis mitteinverteerivat võimendit.

Tegelesime sellega Kitarrivõimendi postituses. Tuletasime seal postituses valemi, mille abil arvutada tagasisideahela takistite väärtused.

Valin R2-heks 10kΩ.

Valin 1kΩ 15 pöördelise potentsiomeetri. See on piisavalt suur, et ära katta kogu tolerantside vahemik, samas piisavalt väike ja tundlik, et vajalik täpsus saavutada. Proovime ülejäänud takistid valida nii, et ideaalsel juhul oleks potentsiomeetri hoob täpselt keskel. See tähendab, et pool potentsiomeetri takisti väärtusest on pingejaguri madalama takistusega otsa pool.

10080 – 500 = 9580 Ω. Kui ühendame jadamisi nominaalid 9100Ω ja 470Ω saame 9570Ω.

Tekib skeem

Eksperiment

Ladusin maketeerimislauale kokku alloleva skeemi.

Kasutasin integraalskeemi TL0841N. See on 14 jalaga komponent, milles on neli opvõimendit. Seega ei võta see skeem eriti palju ruumi. Ladusin selle katsetamiseks maketeerimislauale.

Vasakul asuv must karp on spetsiaalselt selleks projektiks ehitatud kahepolaarne ± 12V toiteallikas. Tegin selle RAC10-12DK baasil ja see ei vääri lähemat selgitamist.

Siin on mõned ostsilloskoobi ekraanipildid. Esimesel on kollasega kujutatud PWM signaal Arduinost ning PWM-i täitetegur muutub siinusfunktsiooni järgi.

PWM signaali vaadates jääb justkui mulje, et vahepeal lülitamist justkui ei toimukski. Toimub ikka, lihtsalt minu ostsilloskoobi resolutsioon ja võendamissagedus nii pika perioodi puhul ei ole piisav väga kitsaste pulsside näitamiseks. Aga see ei olegi oluline. Antud pildil on oluline sinine (filtreeritud signaal) ja lilla (võimendatud signaal).

Teine katse, mis ma tegin oli see, et ma andsin PWM-ile fikseeritud väärtuse, mis annab keskväärtuseks 2,5V ja vaatasin signaale lähemalt.

Lülitasin filtri väljundi AC režiimi ja vaatan seda suurendusega. Siit paistab probleem. 100mV müra tuleb justkui läbi filtri. Aga… Kogemus õpetab, et see ei ole põhjus muretsemiseks. Nimelt on tegemist väga kiire signaaliga. Vaatame veel lähemalt.

Esimese perioodi pikkus on umbes 12ns. Sagedus seega veidi üle 83 MHz !!! See on üsnagi FM raadio sagedus. Rock-FM sagedus näiteks on 88,8MHz. Selline sagedus rändab vägagi meelsasti läbi õhu. Meenuta pilti maketeerimislauast. Nägid neid pikki traate ja pikki komponentide jalgu? Need kõik töötavad antennina. Teine asi, mida sellised pikad juhtmed tekitavad on parasiitinduktiivsus ja -takistus. Need parasiidid toitekaablites tekitavad lülitushetkel võimendi toites pingelangu ja see omakorda piirab kiirust millega võimendi suudab oma väljundit muuta. Sellise olukorra saab hõlpsasti lahendada trükkplaadiga, millel on korralik maakiht kõikide komponentide all. See hakkab puudutama probleemistiku, mida nimetatakse lühendiga EMC, eesti keeles elektromagneetiline ühilduvus. See aga läheb keerukaks. See läheb lausa nii keerukaks, et seda ei puudutatud isegi ülikoolis selle põhjalikkusega, mida see väärib (Või oli mul selles loengus paremat teha. Ka võimalik.). Põhimõtted mürakindla trükkplaadi tegemiseks ei ole tegelikult keerulised. Ma võtan need kindlasti ette mingi hetk. Võibolla isegi siis, kui sellele projektile trükkplaati hakkan meisterdama. Vaatame

Kuskohast see müra aga tuleb? Signaaliteooriast on teada, et suvalist perioodilist signaali saab esitada siinussignaalide summana. Nelinurksignaali saab esitada siinussignaalide summana, kus esimene siinus on samal sagedusel, mis kõnealune nelinurk. Seda võib nimetada ka fundamentaalsageduseks. Teine nelinurksignaali komponent on kolmekordne fundamentaalsagedus. Kolmas komponent on viiekordne fundamentaalsagedus. Neljas seitsmekordne jne.

See seaduspära töötab ka teistpidi. Meie nelinurksignaali saab laiali lammutada tema algosadeks, siinussignaalideks. Seda saab demonstreerida digitaalostsilloskoobi FFT funktsiooniga.

Kollane on seesama 50% täiteteguriga nelinurksignaal, mis Arduinost tuleb, tumepunane aga selle FFT, ehk siis vaade selle signaali sageduskomponentidele. Esimene triip ekraani alguses tähistab nullsagedust. See on see 2.5V nihkepinge, mille ümber meie nelinurksignaal tekib. See ei oleks seal kui Arduino väljund käiks pingete -2.5V ja +2.5V vahel. Teine tipp on fundamentaalsagedus. Pane tähele, et see on umbes seal, kus see olema peab, 62kHz kandis (Horisontaalskaala on 100kHz ruudu kohta). Teine on veidi üle 180kHz ehk siis kolmekordne. Kolmas on umbes 310kHz ehk siis viiekordne. Ning niimoodi läheb see edasi sisuliselt lõpmatuseni. Ning ka see 83 MHz on kusagil kaugel olemas. Kahjuks saan sellel teemal täiendavaks lugemiseks pakkuda ainult inglise keelset Wiki artiklit.

Kokkuvõte

Filter ja võimendi igatahes töötavad nii kui tarvis. Kas Arduino 8 bitine PWM on piisavalt täpne nootide vahel lülitamiseks on omaette küsimus. Seda peavad näitama edasised eksperimendid parema trükkplaadiga ja koos instrumendiga, mida kogu muundur juhtima peab.

See artikkel takerdus juba üsna kõvasti matemaatikasse. See on kindlasti heidutav ja minu rumalus selles vallas kindlasti ei aita aru saamisele kaasa. Samuti ei tasu üldse mitte elus hoida lootust, et sellest edaspidi pääsu on. Asjad lähevad järjest keerulisemaks. Aga soovitan meelde jätta põhiprintsiibid, ehitada ning teemasse süveneda vastavalt vajadusele ja jõudu mööda.