Hledal jsem na ebay.com prodejce TDA7052A (NF zesilovač v DIL pouzdře) a mezi výsledky se mi objevila i nabídka maličkého modulu stereofonního FM rádia s integrovaným obvodem RDA5807M. Jedná se o kompletní DSP přijímač taktovaný hodinkovým krystalem 32 kHz a ovládaný přes IIC (I2C, TWI) interface. Tak jsem ho koupil.
Vlastní DSP přijímač je smd integrovaný obvod RDA5807M velikosti necelé 3x3mm s deseti vývody (pouzdro MSOP10). Předpokládám, že jeho hlavní využití je jako FM rádio v mobilních telefonech. Stačí k němu připojit stejnosměrné napájení 1,8-3,3 V, krystal 32,768 kHz, anténu a sluchátka. Kmitočtový rozsah je 50-115 MHz v pěti rozsazích. Pro nás je užitečný rozsah 87-108 MHz. Krok ladění je defaultně 100 kHz, ale dá se nastavit 25 kHz, 50 kHz, 100 kHz a 200 kHz. Hlasitost se dá nastavit v 16 krocích (4 bity, tedy 0-15) s logaritmickým průběhem, má možnost nuceného přepnutí na MONO, zapnutí BASS-Boost (zdůraznění basů) a několik dalších nastavení, viz pdf datasheet. Přímo umí budit stereofonní nízkoohmová sluchátka 32 Ω. Veškeré nastavení se provádí pomocí I2C (TWI) (dvouvodičový interface/protokol). V doporučeném zapojení jsou ještě dvě cívky a paralelní LC rezonanční obvod na vysokofrekvenční oddělení stínění sluchátkového kabelu, který slouží zároveň jako anténa.
RDA5807 doporučené zapojení
Modul - rozměry
Zapojení vývodů modulu
Já jsem koupil modul, kde je integrovaný obvod již připájený na plošném spoji asi 10x10mm, na kterém je již i krystal, filtrační kondenzátor na napájecím přívodu a vazební kondenzátor na anténním vstupu. Při domácím bastlení je s ním mnohem snazší manipulace, než by byla s holým integrovaným obvodem. (pro informaci: cena za 5 kusů byla v přepočtu asi 56,-Kč včetně poštovného).
Když mi modul přišel, ověřil jsem si že opravdu funguje pomocí Arduina a nějakého jednoduchého prográmku, který jsem stáhnul z internetu. Pak jsem si navrhl plošný spoj pro vlastní verzi přijímače s tímto modulem, jednočipem Atmega328PB (smd provedení), oled grafickým displejem (128x64 pixelů, 0,96 palce), mechanickým rotačním enkodérem a třemi tlačítky.
v režimu ladění: nastavujeme kmitočet, nebo hlasitost.
v režimu předvoleb: přepíná uložené stanice
tlačítko BT1:
krátký stisk: přepínání ladění/hlasitost
delší stisk: skenování kmitočtu směrem dolů
podržení při zapnutí: nastavení hodnoty indikace "BAT LOW"
tlačítko BT2:
krátký stisk: Mono/Stereo
delší stisk: On/Off Bass-Boost
potvrzení hodnoty indikace "BAT LOW"
tlačítko BT3:
krátký stisk: On/Off displej
delší stisk: skenování kmitočtu směrem nahoru
podržení při zapnutí: smazání všech předvoleb
tlačítko v ose enkodéru:
krátký stisk: přepnutí na předvolby
delší stisk: uložení stanice do předvoleb
Pár poznámek k ovládání
Více je ve videu odkazovaném na konci článku.
Celkem je k dispozici 20 pamětí pro předvolby (více se mi zdá zbytečné). Při podržení tlačítka v ose enkodéru se na následující volnou pozici uloží aktuálně naladěný kmitočet a aktuálně zobrazený text RDS. Smazat se předvolby dají pouze hromadně - podržením tlačítka BT3 při zapnutí (zobrazí se oznámení "ERASED").
Aktuálně nastavené hodnoty - Kmitočet, Hlasitost, Mono/Stereo a Bass-Boost se ukládají do trvalé paměti jednočipu (Eeprom), takže po zapnutí rádio hraje tak jako před vypnutím. Nevyužívám nastavení hlasitosti přímo v RDA5807M ale pomocí napětí na ovládacích vstupech NF zesilovačů TDA7052A.
Docela problém jsem měl se zobrazením RDS textů. Hlavně asi proto, že tomu moc nerozumím. Zkoumal jsem RDS normu a snažil se zjistit, jak je to aplikováno v případě tohoto obvodu (RDA5807M). Něco jsem našel v nějakých diskuzích na internetu, něco jsem zjistil sám metodou pokus-omyl. Nakonec to "tak nějak" funguje, ale k dokonalosti to má určitě daleko. Nicméně názvy stanic, pokud jsou vysílány standartním způsobem to zobrazí, a to mi celkem stačí.
Jako poslední funkci jsem udělal měření napájecího napětí a indikaci vybité baterie. Po nahrání programu do jednočipu je nastaven limit přibližně 4,0V (záleží na odporech R8 a R9, doporučuji alespoň 1% hodnoty), což je také na spodní hranici indikace. Stabilizované napájecí napětí jednočipu 3,3V je zároveň referenční napětí pro AD převodník. A pod 4V napájecího napětí již ta stabilizace není moc dokonalá (asi 0,7V "sežere" ochranná dioda na vstupu) a tak měření není extra přesné. Jiná hodnota indikace se dá nastavit, pokud při zapnutí podržíme tlačítko BT1. Na regulovatelném napájecím zdroji nastavíme požadované napětí a tlačítkem BT2 potvrdíme a uložíme.
Napájení
Napájecí napětí 3,3V pro RDA5807m, jednočip a displej je stabilizováno "low_drop" stabilizátorem LE33A (výrobce ST). Tím pádem není problém napájet celé rádio například i z ploché baterie 4,5V. Výkonové NF zesilovače jsou napájeny přímo. Výrobce zaručuje jejich funkčnost od 4,5 voltů ale vyzkoušel jsem, že bez problémů fungují již od 4,0V i když již klesá hlasitost. Nepatrně by pomohlo nahrazení ochranné diody D1 nějakým Schotky typem, nebo její úplné vypuštění (nahrazení kouskem drátu).
Napájení všech obvodů 3,3V je přes jumpery JP3.3V. Tím je možné odpojit potřebné obvody třeba při programování. IO RDA5807M nesnese napájení 5V a pokud máme programátor jen na 5V, mohl by "odejít" (sám jsem takto 2 kusy zničil).
Displej
V předchozí verzi jsem měl problém s rušením od multiplexu oled displeje. To jsem vyřešil přidáním diody D2 a kondenzátoru C19 (220µF) do napájení displeje. Samotný filtrační kondenzátor byl neúčinný. Tím se ale zpomalil náběh napětí na displeji při zapnutí a některé displeje nejsou schopny se zresetovat při zapnutí. Na to je potřeba pamatovat při nákupu displeje. Tyto, 0,96palce s jedním zlutým řádkem a zbytkem modrým mi fungují spolehlivě. Naopak, mnohé 1,3 palce, celé modré, bez možnosti změnit adresu jsou docela problematické. Také je potřeba dát si pozor na pořadí pinů. Některé displeje (1.3 palce) mají prohozené vývody napájení (+a -).
Jelikož jsem v původní verzi nevěděl, jak se zbavit rušení od multiplexu displeje, přidal jsem možnost displej vypínat. Tuto funkci jsem zachoval i v této verzi. Ušetří se tím pár mA, pokud je to potřeba.
Nízkofrekvenční zesilovač
Na výstup jsem dal dva nízkofrekvenční zesilovače TDA7052A v DIL pouzdře. Ty mohou dát až 1W do 8 Ohmů i při nízkém napájecím napětí. Navíc umožňují regulaci hlasitosti pomocí stejnosměrného napětí. Beze změny schématu lze použít též TDA7052B i když mají nepatrně jiné hodnoty některých parametrů. Ovládací napětí se získává z PWM převodníku na jednom výstupním pinu jednočipu. Napájeny jsou přímo ze vstupního konektoru, pouze přes ochrannou diodu. Podle katalogu snesou maximálně 18V. Výstup zesilovačů je symetrický (BTL princip = Bridge-tied-load = Do můstku zapojená zátěž) a výstup se zablokuje, pokud je rozdíl výstupních proudů jednotlivých zesilovačů větší než 100_mA. To ale umožňuje připojit přes oddělovací kondenzátory například stereofonní sluchátka třemi vodiči (L+P+Stínění) nesymetricky na + výstupy. Pro sluchátka je výkon i při 100_mA dostatečný.
Laděný obvod na vstupu
Rezonanční obvod L1/C16 na anténním vstupu je naladěn přibližně na střed pásma. Dal jsem ho tam spíše pro dobrý pocit. Subjektivně nepozoruji žádné zlepšení (ale ani zhoršení) citlivosti přijímače, po jeho přidání. Na objektivní změření nemám vybavení. (V doporučeném zapojení z datasheetu výrobce je nutný pro oddělení stínění sluchátkového kabelu, který slouží zároveň jako anténa).
Cívka L1 mi vyšla: 6 závitů drátem 0,8mm na vrták o průměru 5mm.
Na plošném spoji jsou i plošky pro případné připájení SMD verze této cívky.
Osazeno přední strana
Osazeno zadní strana
V provozu
Mechanické provedení
Celý přijímač je na jednom plošném spoji o rozměrech 100x45mm. Plošný spoj funguje jako subpanel. Z přední strany jsou ovládací prvky (tlačítka, rotační enkodér) a displej. Na zadní straně jsou téměř všechny ostatní součástky. Pouze pod displejem jsou z přední strany 3 blokovací kondenzátory 0,1µF v smd provedení.
Všechny vývodové keramické kondenzátory jsou na rozteč 5mm. Rovněž všechny odpory jsou na rozteč 5mm (odpory velikosti 204). Pokud bychom použili větší odpory (207) je potřeba je zapájet nastojato.
Rotační enkodér je možné zapájet z přední strany (vývody přímo do plošného spoje), nebo ho dát zezadu a upevnit k DPS centrální maticí. Vývody je pak nutné s DPS propojit kousky drátu. Výhoda téhle druhé možnosti je, že enkodér nevyčnívá příliš dopředu oproti ostatním součástkám.
Jumper JP3 umožňuje prohodit spínače A a B rotačního enkodéru, pokud by reagoval opačně.
Přední panel - DPS
Přední panel jsem nakreslil jako plošný spoj a nechal vyrobit v Číně.
Firmware
Firmware jsem napsal v editoru/kompilátoru MCS Bascom-AVR. Pro běh firmware je využit vnitřní RC oscilátor 8 MHz v Atmega. Proto je potřeba při programování jednočipu vypnout dělení kmitočtu osmi v nastavení konfiguraních bitů. Hex a .bin soubory pro Atmega328PB jsem uložil do sekce DOWNLOAD. Pro zobrazení kmitočtu jsem si vytvořil vlastní font - jakési pseudo sedmisegmentové číslice.
Pokud by měl někdo zájem si program upravit podle svých nápadů, mohu mu zdrojový kód poslat e-mailem. Upozorňuji, že je to v MCS Bascom-AVR. Občas někdo nechápe, že to NENÍ Arduino (soubor.INO).
Nastavení konfiguračních bitů sumárně (třeba pro AVR-DUDE):
Lockbits:FF
Fusebits: E2
Fusebits High: D9
Fusebits Extended: FD
Plošný spoj jsem ale navrhl i pro alternativní možnost taktování z externího krystalu 16 MHz. To umožňuje napsat si kompletně program v Arduinu (nebo v C++ nebo v čemkoli jiném), exportovat hex soubor a přes ISP konektor nahrát. Jak jsem viděl, existují v Arduinu pro trento obvod velice komplexní a jistě naprosto funkční knihovny (i třeba pokud jde o RDS).
Video s návodem k ovládání
Na youtube jsem dal video, jak rádio funguje. Obraz jsem nahrával telefonem a zvuk přímo ze sluchátkového výstupu rádia do vstupu zvukové karty PC. To proto, abych měl video se stereo zvukem.
Doplněno 20.10.2019
Změna ukládání stanic do paměti předvoleb
Původní způsob ukládání stanic do předvoleb fungoval tak, že při delším stisku tlačítka v ose rotačního enkodéru se právě nastavený kmitočet a právě zobrazený text RDS uložil na následující neobsazenou pozici v paměti předvoleb. Byly s tím trochu problémy, pokud se zrovna v okamžiku ukládání nezobrazil název stanice korektně.
Nový způsob funguje následovně:
Podržením tlačítka v ose enkodéru se na displeji zobrazí číslo následující volné pozice v paměti předvoleb a inverzně (v negativu) RDS text připravený k uložení. V tuto chvíli máme tři možnosti:
Buď dalším krátkým stiskem tohoto tlačítka se to, co je zobrazeno uloží.
Nebo můžeme rotačním enkodérem nastavit číslo některé nižší (již obsazené) pozice a tuto pozici přepsat novou stanicí.
Nebo stiskem tlačítka BT3 (Displej/SCN+) ukládání zrušíme. Nic se neuloží.
Vymazání stanic z paměti je stále možné pouze hromadně, podržením tlačítka BT3 při zapnutí napájení. Zatím se mi do toho moc nechce, ale možná během dlouhých zimních večerů udělám kompletně nějaké komfortní ukládání a mazání, včetně zadání vlastního textu k uložené stanici.
Zbyly mi tu 2 1 0 destičky DPS. Pokud by měl někdo zájem, pošlu mu je za poštovné.
(Pro nečekaný zájem jsem objednal další DPS. Budu je mít odhadem tak za 2 až 3 týdny.)
Tento web site byl vytvořen prostřednictvím phpRS - redakčního systému napsaného v PHP jazyce.
Na této stránce použité názvy programových produktů, firem apod. mohou být ochrannými známkami
nebo registrovanými ochrannými známkami příslušných vlastníků.