- FM radijas Bendrasis darbas
- Būtini komponentai
- RDA5807 imtuvas
- Garso stiprintuvas
- „Arduino FM“ imtuvo grandinės schema
- „Arduino FM“ radijo kodo paaiškinimas
- „Arduino FM“ radijo darbas
Šiandien beveik visi naudojasi savo mobiliaisiais telefonais klausydamiesi muzikos, naujienų, tinklalaidžių ir tt neveikia, radijo imtuvai atlieka svarbų vaidmenį perduodant informaciją vartotojams. Radijo signalai visada yra ore (kuriuos transliuoja stotys), ir viskas, ko mums reikia, yra FM imtuvo grandinė, kad sugautume tuos radijo signalus ir perkeltume juos į garso signalus. Ankstesnėse mūsų pamokose mes taip pat sukūrėme keletą toliau nurodytų FM siųstuvų ir imtuvų.
- Raspberry Pi FM siųstuvas
- „Raspberry Pi“ FM imtuvo radijas
- FM siųstuvo grandinė
- FM siųstuvo grandinė be induktoriaus
Šioje pamokoje sukursime „ Arduino FM“ imtuvą ir pridėsime jį prie savo projekto arsenalo. Mes naudosime RDA5807 FM imtuvo IC su „Arduino“ ir programuosime ją, grosime bet kurią FM radijo stotį, kurią vartotojas gali sureguliuoti potenciometru. Mes taip pat naudosime garso stiprintuvą kartu su grandine, kad valdytume „ Arduino FM“ radijo išvesties garsumą, skamba įdomiai, tiesa? Taigi, pradėkime.
FM radijas Bendrasis darbas
Radijo stotys elektrinius signalus paverčia radijo signalais, todėl prieš perduodant per anteną, juos reikia moduliuoti. Yra du būdai, kuriais galima moduliuoti signalą, būtent AM ir FM. Kaip rodo pavadinimas, amplitudės moduliacija (AM) moduliuoja amplitudę prieš perduodant signalą, tuo tarpu, kai dažnio moduliacija (FM), signalo dažnis moduliuojamas prieš perduodant per anteną. Radijo stotyse jie naudoja dažnio moduliaciją moduliuodami signalą ir tada perduodami duomenis. Dabar viskas, ką mums reikia sukurti, yra imtuvas, kurį galima suderinti į tam tikrus dažnius ir priimti tuos signalus, o vėliau šiuos elektrinius signalus paversti garso signalais. Mes ketiname naudotiRDA5807 FM imtuvo modulis šiame projekte supaprastina mūsų grandinę.
Būtini komponentai
- „Arduino Nano“
- RDA5807 imtuvas
- Garso stiprintuvas
- Jungiamieji laidai
- Puodas - 100 tūkst
- Perf Board
RDA5807 imtuvas
RDA5807 yra vieno lusto FM radijo imtuvo modulis su visiškai integruotu sintezatoriumi. Modulis palaiko 50–115 MHz dažnių juostą visame pasaulyje, garso reguliavimą ir nutildymą, programuojamą išjungimą (50/75 us), signalo stiprumo indikatorių ir SNR, 32,768 KHz kristalinį osciliatorių, skaitmeninį automatinio stiprinimo valdymą ir kt. Žemiau esančiame paveikslėlyje parodyta derintuvo RDA5807M blokinė schema.
Jis turi skaitmeninę mažo IF architektūrą ir integruoja mažo triukšmo stiprintuvą (LNA), kuris palaiko FM transliavimo juostą (50–115 MHz), programuojamą stiprinimo valdymą (PGA), didelės raiškos analoginio-skaitmeninio keitiklį ir aukštos kokybės skaitmeninio ir analoginio keitikliai (DAC). Ribotuvas apsaugo nuo perkrovos ir riboja gretimų kanalų sukurtų intermoduliacijos produktų skaičių. PGA sustiprina maišytuvo išvesties signalą ir skaitmeninamas ADC. DSP šerdis valdo kanalų pasirinkimą, FM demoduliaciją, stereofoninį MPX dekoderį ir išvesties garso signalą. RDA5807 pinout schema IC yra pateikta žemiau.
Modulis veikia maitinant 1,8 - 3,3 V įtampą. Atėjęs į poilsį ir pasirinkęs valdymo sąsają, modulis iš naujo nustato save, kai „VIO“ yra įjungtas, ir taip pat palaiko minkštą atstatymą, kai „bit1“ trigeris yra nuo 0 iki 1 iš 02H adreso. Modulis naudoja I2C ryšį bendraujant su MCU, o sąsaja prasideda paleidimo sąlyga, komandos baitu ir duomenų baitais. RDA5807 turi 13 16 bitų registrų, kurių kiekvienas atlieka tam tikrą funkciją. Registro adresai prasideda 00H, kuris skiriamas lusto ID ir baigiasi 0FH. Visuose 13 registrų kai kurie bitai yra rezervuoti, o kiti yra R / W. Kiekvienas registras atlieka tokias užduotis kaip įvairus garsumas, kanalų keitimas ir kt., Atsižvelgiant į jiems priskirtus bitus.
Mes negalime tiesiogiai naudoti modulio, kai jį prijungiame prie grandinės, nes kaiščiai yra uždaryti. Taigi, aš naudojau perf lentą ir kai kuriuos vyriškus kaiščius ir sulitavau kiekvieno modulio kaištį prie kiekvieno vyriško kaiščio, kaip parodyta paveikslėlyje žemiau.
Garso stiprintuvas
Garso stiprintuvas yra elektroninis prietaisas, kuris stiprina mažos galios elektroninius garso signalus iki tokio lygio, kad jis būtų pakankamai aukštas, kad būtų galima vairuoti garsiakalbius ar ausines. Mes sukūrėme paprastą garso stiprintuvą naudodami LM386, to paties grandinė parodyta žemiau, taip pat galite patikrinti nuorodą, kad sužinotumėte daugiau apie šią grandinę, taip pat patikrinkite kitas garso stiprintuvo grandines.
„Arduino FM“ imtuvo grandinės schema
FM juostos derinimui ir garso stiprintuvo garso reguliavimui naudojome du potenciometrus. Pakeisti garsą galima arba tikslines puodai, kuris yra prijungtas tarp 1 ir 8 -ojo iš LM386 arba puodo, kuris yra prijungtas prie kontaktų 3 LM386 kaiščiu. Žemiau pateiktame paveikslėlyje parodyta visa „Arduino FM Radio“ grandinės schema.
Aš mažai pakeitiau stiprintuvą. Užuot naudojęs du potenciometrus stiprintuve, naudojau tik vieną. Puodą, kuris naudojamas keitimui, pakeičiau rezistoriumi. Taigi dabar mūsų projekte yra du potenciometrai, kuriuos reikia suderinti, o kitą - garsumui pakeisti. Kanalo derinimui naudojamas potenciometras yra sujungtas su „Arduino“ nano. Centrinis puodo kaištis yra sujungtas su „Arduino nano“ A0 kaiščiu, o bet kuris iš likusių dviejų kaiščių yra prijungtas prie 5 V, o kitas - prie GND. Kitas puodas naudojamas radijo garsumui valdyti ir yra prijungtas taip, kaip parodyta aukščiau esančiame paveiksle.
„Arduino“ kaiščiai A4 ir A5 yra prijungti prie RDA5807M SDA ir SCL kaiščių. nepamirškite, kad imtuvo modulis veikia tik esant 3,3 V įtampai. Taigi, prijunkite 3v3 „Nano“ kaištį prie imtuvo modulio VCC kaiščio. Kai tik buvo užmegzti ryšiai, mano sąranka atrodė taip
„Arduino FM“ radijo kodo paaiškinimas
Kodas inicijuos imtuvo modulį ir tada nustatys kanalą iš anksto nustatytu dažniu. Kai nano nuskaityta vertė A0 kaištyje keičiasi (keičiant puodą), keičiasi dažnis, kuris savo ruožtu keičia kanalą. Visas kodas pateikiamas puslapio pabaigoje.
Savo programą pradedame pridėdami reikalingą laidų biblioteką, kad galėtumėte bendrauti su RDA5807. Tada kintamajame „kanalas“ nustatome kanalo vertę. Kai tik radijas įsijungs, jis automatiškai bus derinamas prie šio kanalo.
# įtraukti
Tada mes įkelsime baitus į kiekvieną mūsų RDA5807 IC registrą, kad nustatytume pradinę konfigūraciją. Šiuo metu imtuvą nustatome iš naujo.
uint8_t boot_config = {/ * registruoti 0x02 * / 0b11000001, 0b00000011, / * registruoti 0x03 * / 0b00000000, 0b00000000, / * registruoti 0x04 * / 0b00001010, 0b00000000, / * registruoti 0x05 * / 0b10001111, 0b1000111, 0b1000111, 0b1000111, 0b1000111, 0b1000111, 0b1000111 0b00000000, 0b00000000, / * registruokite 0x07 * / 0b01000010, 0b00000010,};
Iš naujo nustatę įrenginį, galime jį suderinti. Norėdami nustatyti kanalą, turime užprogramuoti tik pirmuosius 4 baitus. Ši kodo dalis pakeis kanalą į norimą dažnį. Iš pradžių „I2C“ mes pradedame perdavimą, rašome arba skaitome duomenis ir tada baigiame perdavimą. Šiame imtuvo IC mes neturime nurodyti adreso, nes duomenų lape aiškiai sakoma, kad I2C sąsajoje yra fiksuotas pradžios registras, ty 0x02h rašymo operacijai ir 0x0Ah skaitymo operacijai.
uint8_t tune_config = {/ * registruoti 0x02 * / 0b11000000, 0b00000001, / * registruoti 0x03 * / (kanalas >> 2), ((kanalas ir 0b11) << 6) - 0b00010000};
Sąrankoje mes inicijuojame įkrovos konfigūraciją (nustatome iš naujo) ir nustatome kanalą, rašydami derinimo konfigūracijos baitus į RDA5807M.
negaliojanti sąranka () {Serial.begin (9600); pinMode (A0, INPUT); / * Prijunkite prie RDA5807M FM imtuvo: * / Wire.begin (); „Wire.beginTransmission“ (RDA5807M_ADDRESS); „Wire.write“ („boot_config“, BOOT_CONFIG_LEN); „Wire.endTransmission“ (); „Wire.beginTransmission“ (RDA5807M_ADDRESS); „Wire.write“ (tune_config, TUNE_CONFIG_LEN); „Wire.endTransmission“ (); }
Naudodamas puodą, norėdamas derinti dažnį, susidūriau su problema. A0 kaiščio nuskaitytos vertės nėra pastovios. Yra triukšmo klubas su norima verte. Aš naudojau 0,1uF keraminį kondensatorių, sujungtą tarp A0 ir GND, nors triukšmas sumažėjo iki minimumo, tačiau jis nėra iki norimo lygio. Taigi, aš turėjau atlikti keletą kodo pakeitimų. Iš pradžių atkreipiau dėmesį į triukšmo paveiktus rodmenis. Sužinojau, kad didžiausia triukšmo vertė yra 10. Taigi aš parašiau programą taip, kad ji atsižvelgtų į naują vertę tik tuo atveju, jei skirtumas tarp naujos ir senos to paties kaiščio vertės yra didesnis nei 10 ir tada sureguliuoja norimą kanalą.
void loop () {int kanalas1 = 187, vid. = 0, naujasA; statinis int senasA = 0; int rezultatas = 0; newA = analoginis skaitymas (A0); if ((naujaA - senA)> 10 - (senaA - naujaA)> 10) {Serij.println (naujaA); if (naujasA! = senasA) {kanalas = kanalas1 + (naujasA / 10); „myChangeChannel“ (kanalas); senasA = naujasA; }}} // kilpos pabaiga
Ši funkcija naudojama nustatant masyvo „ tune_config“ baitus, o tada naudojant I2C protokolą, duomenys perduodami į RDA5807M IC.
void myChangeChannel (int channel) {/ * negalioja, jei nieko negrąžinama, int * / tune_config = (kanalas >> 2); tune_config = ((kanalas & 0b11) << 6) - 0b00010000; Viela.prasideda (); „Wire.beginTransmission“ (RDA5807M_ADDRESS); „Wire.write“ (tune_config, TUNE_CONFIG_LEN); „Wire.endTransmission“ (); }
„Arduino FM“ radijo darbas
Įjungus modulį, mūsų kodas iš naujo nustato RDA5807-M IC ir nustato jį kaip norimo vartotojo kanalą (pastaba: šis dažnis laikomas baziniu dažniu, kuriuo dažnis bus didinamas). Keičiant potenciometrą (prijungtą prie A0), pasikeičia „Arduino Nano“ skaitomos vertės. Jei skirtumas tarp naujos ir senos vertės yra didesnis nei 10, mūsų kodas atsižvelgs į šią naują vertę. Kanalas keičiamas atsižvelgiant į naujos vertės pasikeitimą iš senosios vertės. Garsumo padidinimas ar sumažinimas priklauso nuo potenciometro, kuris yra sujungtas tarp kaiščio 3 ir GND.
Konstravimo ir kodavimo pabaigoje turėsite savo FM radiją. Visą FM radijo veikimą galite rasti vaizdo įraše, susietame šio puslapio apačioje. Tikiuosi, kad jums patiko projektas ir sužinojote ką nors naudingo. Jei turite klausimų dėl šio projekto veikimo, galite juos palikti komentarų skiltyje arba naudoti mūsų forumus kitai techninei pagalbai.