Hangszóró vezérlése GPIO-ról

Egy ultrahangsugárzó hangszórót szerettem volna GPIO portról egyszerű négyszögjellel meghajtani. A hangszóró 2 és 60 kHz között képes hangsugárzásra, így 10 kHz-es teszt számomra is hallható volt.
Egy 2N3904-es tranzisztor bázisára vezettem rá a GPIO kimenő jelét, és ahogy mindenütt láttam, a hangszórót a kollektor és + közé illesztettem. Az eredmény gyakorlatilag nulla. Elméletileg nem, mert nagyon halkan szólt, de alig.
Ezek után találtam egy kapcsolást, ahol a kollektor és a + közé csak egy ellenállást tettek be, és a hangszórót a tranzisztor emitterére és kollektorára kötötték. Ezt is kipróbáltam, és sokkal jobb lett a hangerő.
Találtam azonban olyan megoldást is, ahol a GPIO jelét egy PNP és egy NPN tranzisztor bázisára vezették rá párhuzamosan, és e két tranzisztor összekötött emitterére kapcsolták a hangszóró egyik lábát.
És itt bizonytalanodtam el.
Kérdésem: mi a legmegfelelőbb módja, meghajtani egy ultrahangszórót egy GPIO portról?

Hozzászólások

A 2N3904 használatánál a hangszórónak megfelelő feszültséget használtál? Leírod a hangszóró pontos típusát és a használt EC feszültséget?

Azt hiszem, ez a típus. Megmértem, és kb 700k az ellenállása.
Próbáltam a tranzisztoron keresztül 3.3V, 5V és 8V-os feszültségről is meghajtani. Ha a hangszóró az EC lábakra volt kötve, akkor már a 3.3V is erős, hallható hangot adott, különben elég gyengét. Az EC feszültséget külön nem mértem, de a kollektor és a + közé egy 2k ellenállást kötöttem még be.
A hangszóró ellenállásától függ, hogy milyen módon kell meghajtani?

Ez piezo lesz, nem induktív. Az általam javasolt meghajtás akkor is működni fog, de elhagyható, ha úgy tetszik, rövidre zárható az elektrolit kondenzátor.

Az első eset azért nem szólt, mert feltöltötted a piezo kapacitását tápfeszültségre, a tranzisztor kikapcsolását követően is feltöltve maradt, így nem volt változás. Kapacitáson ugyanis a feszültség változása hoz létre áramot.

Ugyanakkor rossz ötletnek tartom kapacitív terhelés négyszög feszültséggel történő meghajtását, mert az lehetetlen. A feszültség éleknél végtelen nagy áramnak kellene folynia.

Legalább 10 Ω-os ellenállást tégy sorba a piezo hangszóróval.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Jelenleg a hangszóró az EC lábakra van kötve, és a kollektor a + táphoz 2k ellenálláson keresztül kapcsolódik, így a hangszóró már a 2k ellenálláson keresztül kapja a tápfeszültséget. Gondolom, akkor e mellé nem kell további ellenállás.
Összességében akkor az ilyen kapacitív hangszórók meghajtására ez az EC lábas kötés a megfelelő?

Csak buta meghajtás ez az „A”-osztályú végfok, nagyon rossz a hatásfoka. A hangerő növeléséhez csökkenteni kellene az ellenállást, de amikor nyitva van a tranzisztor - tehát vezet -, ez feleslegesen nagy áramot hoz létre. A végén írtam: szerinten egyetlen ellenállás kell csak a GPIO-ra. Nyilván kérdés, mekkora áramot tud hajtani az a port.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

A gond csak az, hogy van 3.3 Vpp feszültséged. Ebből lejön két nyitófeszültség, ami 2*0.65V nagyjából, tehát 1.3 V. Marad tehát csúcstól csúcsig 2 V-od, ez csúcsban 1 V, szinuszos esetben effektív értékben 0.707 V. Ekkora feszültségnél hiába van marha izmos, nagy áramú tranzisztorod, nemes egyszerűséggel nem fog a hangszóród komolyabb áramot felvenni.

Ezzel azt akarom mondani, hogy hiába raksz bele egy rakás alkatrészt, nem lesz hangosabb. Marad az a változat, hogy csinálsz hozzá erősítőt. A négyszögjellel történő meghajtást gyorsan felejtsd el!

PWM-mel és aluláteresztő szűrővel tudsz szinuszt csinálni, D/A konverterrel is, de az sem ördögtől való, ha analóg módon csinálod meg a szinuszos jelet. Nem kell már lassan egy LED villogtatásához is számítógép, operációs rendszer. Sokféle megoldás van. Ha mindenképp ilyen kis feszültségből akarod megoldani, a soros rezonancia lehet megoldás, de bizonyos értelemben a legnehezebb, legtöbb odafigyelést igénylő megoldás is egyben.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Azt ugye tudod, hogy ez rettentően lehangoló!
Az ESP-men van még egy kijelző, meg egy gomb is, így azt reméltem, hogy ha megy a hangszóró, majd nyomkodom a gombot, váltja a frekvenciát, kiírja az aktuálisat, és kész egy kis kézi teszt eszköz. Nem gondoltam volna, hogy egy hangszóró ki- és bekapcsolása egy adott frekvencián ennyire bonyolult. :(

Nem bonyolult, de van úgy, hogy méretezésből kijön, hogy valami túl sok vagy túl kevés, így a kapcsolástechnikán is változtatni kell, hogy megvalósítható legyen.

Itt két követelmény van:
- szinuszoshoz közeli jelalak
- megfelelő (a jelenleginél nagyobb) feszültség

Az első azért, mert a kapacitív reaktancia a frekvenci reciprokával arányos, a felharmonikusokra egyre kisebb, az utóbbi azért, amiért az egésszel küzdesz, hogy legyen megfelelő hangerőd.

Nem látom, mi az akadálya a megfelelő erősítő elkészítésének. Már azon túl, hogy szeretnél fél órán belül eredményt. :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Az első pontot felfogtam, ha nem ilyen spéci hangszórót használnék, nem lenne gond.
A másodikat kevésbé értem. A 2V az a kapcsolófeszültségem, de a hangszóróra akár 10V-ot is kapcsolhatok. Akkor elég lenne csak a kapcsolt feszültséget megemelnem, ami független a GPIO-tól, és ezzel már kapnék egy megfelelő erősítőt?
Összességében kezdem úgy érezni, hogy egy 555-ös egy potméterrel lassan egyszerűbben összerakható.

Az a közös kollektoros fokozat feszültségkövető. Nagyjából amennyit változik a bázison a feszültség, annyit fog az emitteren is, csak szintben eltolva. Tehát a nagyobb kollektorfeszültség legfeljebb több disszipációt okoz, de nem lesz nagyobb a jelszinted.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

A legfobb kerdes hogy milyen hardver hajta ki a hangszorot? Egy mikrokontroller, valami beagyazott cucc vagy linux?

Az első verzió teljesen hibás. Az arról szól, hogyan tegyünk tönkre egy tranzisztort. A gond ugye az, hogy a hangszóró - vélelmezem, dinamikus hangszóróról beszélünk - induktív terhelés, s egy induktivitás áramát nem lehet ugrásszerűen megszüntetni. Helyesebben szólva egyetlen elvi mód lenne rá, ha nulla ideig végtelen nagy feszültség lenne az induktivitáson, azaz dirac-delta függvény. Viszont kevés tranzisztor tolerálja a végtelen nagy feszültséget. :)

A második cseppet szimpatikusabb, de nem az igazi, lesz az áramnak egyenáramú komponense.

A harmadik a jó megoldás, feltéve, hogy jól csinálod.

Egy npn tranzisztor kollektorát kösd a tápfeszültség „+”, míg egy pnp tranzisztor kollektorát a táp GND-jére. Az emittereket kösd össze egymással. A bázisokat is kösd össze egymással, s az összekötött bázisokat kösd a GPIO kimenetre. Az összekötött emitterekre köss egy néhány 10 µF-os elektrolit kondenzátor „+” sarkát. Az elektrolit kondenzátor „-” vége és a GND közé kösd a hangszórót.

Lehetne még egy dióda katódját a „+” tápra, anódját az összekötött emitterekre kötni, majd egy másik dióda katódját az összekötött emitterekre, anódját pedig a GND-re kötni. Ez volna a korrekt, de mivel a GPIO határozott potenciálon tartja a bázisokat, az ellenkező irányú áram el fog folyni azon a tranzisztoron, amelyet épp nem kívántál kinyitni. :) Ha egy mód van rá, a GPIO-t ne forgasd be inputra, azaz nagy impedanciás ne legyen, legalább is akkor, amikor épp hajtod a hangszórót a nagyfrekis jellel, azaz az induktív hangszóró nem energiamentes. Tudom, mentsvár még a GPIO clamp-diódája.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Amúgy, ha nem akarsz sokat vacakolni, kösd egy 330 Ω-os ellenállás egyik végét a GPIO-ra, az ellenállás másik végét erre a piezo hangszóróra, a piezo hangszóró másik végét a GND-re, s meg is vagy.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

További kérdésem: mi a feladat, mi a valódi cél? Azért kérdem, mert egyfelől a négyszögjel spektrális felbontásából az alapharmonikuson túl csökkenő amplitúdóval ugyan, de tartalmazza a páratlan felharmonikusokat, a kapacitív terhelésen viszont a nagyobb frekvenciájú komponens nagyobb áramot hoz létre. Ezért jó volna tudni, mit szeretnél csinálni, mi a feladat.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

A mostani végcél nem lényeges, igazából csak tesztelni akarom, hogy egy erőteljesebb ultrahangra hogy reagálnak a szomszéd erőteljesen vonyító kutyái.
Inkább csak meglepett, hogy ennyiféle módot találtam a hangszóró meghajtására. Ezt a kéttranzisztoros megoldást még ki fogom próbálni, bár az én hangszóróm úgy tűnik, nem induktív.

A négyszögjel spektruma és a kapacitív hangszóró frekvenciafüggése miatt jó volna ezt közel szinuszosan hajtani. Ha egy pontos frekvencia megcélozható, egy soros induktivitással kihangolható egy adott frekvenciára, de ésszel, mert soros rezonancián elkezdi enni az áramot, a feszültség viszont a meghajtó feszültségnél jóval nagyobb lehet, így megfeleő mérés, számolás nélkül el is villanhat az egész.

Másik megoldás, hogy csinálsz neki valamilyen végfokot, de ehhez vélhetően kell kb. 12 V tápfeszültség. Kis táp esetén megoldás még az, hogy hídban, ellenütemben hajtott kimenetek közé kötöd a hangsugárzódat.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE