- Splošno delo FM radia
- Potrebne komponente
- RDA5807 Sprejemnik
- Avdio ojačevalnik
- Shema vezja sprejemnika Arduino FM
- Pojasnilo radijske kode Arduino FM
- Delovanje radia Arduino FM
Danes skoraj vsi uporabljajo mobilne telefone za poslušanje glasbe, novic, poddaj itd. Toda nedolgo nazaj smo bili vsi odvisni od lokalnih radijskih postaj, da smo prejemali najnovejše novice in pesmi, počasi ti radijski sprejemniki izgubljajo priljubljenost, vendar v nujnih primerih, ko internet če radio ne igra pomembne vloge pri posredovanju informacij uporabnikom. Radijski signali so vedno prisotni v zraku (ki jih oddajajo postaje), vse kar potrebujemo pa je vezje sprejemnika FM, ki te radijske signale ujame in prenese v zvočne signale. V naših prejšnjih vajah smo zgradili tudi nekaj drugih oddajnikov in sprejemnikov FM, ki so navedeni spodaj.
- Raspberry Pi FM oddajnik
- Radio sprejemnik Raspberry Pi FM
- FM oddajnik vezje
- FM oddajniško vezje brez induktorja
V tej vadnici bomo izdelali sprejemnik Arduino FM in ga dodali v naš projektni arzenal. Uporabili bomo IC sprejemnika RDA5807 FM z Arduinom in ga tako programirali, predvajali katero koli FM radijsko postajo, ki jo lahko uporabnik nastavi s potenciometrom. Skupaj z vezjem bomo uporabili tudi avdio ojačevalnik za nadzor izhodne glasnosti našega radia Arduino FM, se sliši zanimivo, kajne? Torej, začnimo.
Splošno delo FM radia
Radijske postaje pretvorijo električne signale v radijske signale, ki jih je treba pred prenosom prek antene modulirati. Obstajata dve metodi, pri katerih je mogoče modulirati signal, in sicer AM in FM. Kot že ime pove, amplitudna modulacija (AM) modulira amplitudo pred oddajanjem signala, medtem ko se pri frekvenčni modulaciji (FM) frekvenca signala modulira pred oddajanjem skozi anteno. Na radijskih postajah uporabljajo modulacijo frekvence za modulacijo signala in nato prenos podatkov. Zdaj je vse, kar moramo zgraditi, sprejemnik, ki ga lahko nastavimo na določene frekvence in sprejmemo te signale ter kasneje te električne signale pretvorimo v zvočne. Uporabili bomoV tem projektu je modul sprejemnika RDA5807 FM, ki poenostavlja naše vezje.
Potrebne komponente
- Arduino Nano
- RDA5807 sprejemnik
- Avdio ojačevalnik
- Priključne žice
- Lonec - 100K
- Perf Board
RDA5807 Sprejemnik
RDA5807 je stereo radijski sprejemnik z enim čipom FM s popolnoma integriranim sintetizatorjem. Modul podpira svetovni frekvenčni pas od 50 do 115 MHz, nadzor glasnosti in utišanje zvoka, programabilni de-poudarek (50 / 75us), indikator moči prejema signala in SNR, kristalni oscilator 32.768KHz, digitalni samodejni nadzor ojačanja itd. Spodaj slika prikazuje blokovni diagram sprejemnika RDA5807M.
Ima digitalno nizkofrekvenčno arhitekturo in vključuje ojačevalnik z nizkim šumom (LNA), ki podpira FM radiofrekvenčni pas (50 do 115 MHz), programirljiv nadzor ojačitve (PGA), analogno-digitalni pretvornik z visoko ločljivostjo in digitalno-analogni pretvorniki visoke ločljivosti (DAC). Omejevalnik preprečuje preobremenitev in omejuje število intermodulacijskih izdelkov, ki jih ustvarijo sosednji kanali. PGA ojača izhodni signal mešalnika in nato digitalizira z ADC-ji. Jedro DSP upravlja izbiro kanalov, FM demodulacijo, stereo MPX dekoder in izhodni avdio signal. RDA5807 pinout diagram za IC je naveden spodaj.
Modul deluje na napajanje 1,8 - 3.3V. Ko izbere vmesnik za počitek in nadzor, se modul ponastavi, ko je VIO Power up, in podpira tudi mehko ponastavitev s sprožilcem bit1 od 0 do 1 naslova 02H. Modul uporablja komunikacijo I2C za komunikacijo z MCU, vmesnik pa se začne s pogojem zagona, bajtom ukaza in bajti podatkov. RDA5807 ima 13 16-bitnih registrov, od katerih vsak opravlja določeno funkcijo. Naslovi registra se začnejo s 00H, ki je dodeljen ID čipa in konča z 0FH. V vseh 13 registrih je nekaj bitov rezerviranih, nekateri pa R / W. Vsak register izvaja naloge, kot so spreminjanje glasnosti, spreminjanje kanalov itd., Odvisno od bitov, ki so jim dodeljeni.
Modula ne moremo neposredno uporabiti, ko ga priključimo na vezje, saj so zatiči zaprti. Torej, uporabil sem ploščo za perf in nekaj moških zatičev in prilepil vsak zatič modula na vsak moški zatič, kot je prikazano na spodnji sliki.
Avdio ojačevalnik
Zvočni ojačevalnik je elektronska naprava, ki ojača elektronske zvočne signale z majhno močjo do stopnje, ko je dovolj visoka za vožnjo zvočnikov ali slušalk. Z uporabo LM386 smo zgradili preprost ojačevalnik zvoka, vezje za isto je prikazano spodaj, lahko pa tudi preverite povezavo, če želite izvedeti več o tem vezju, preverite tudi druga vezja ojačevalnika zvoka.
Shema vezja sprejemnika Arduino FM
Za nastavitev FM-pasu in nadzor glasnosti ojačevalnika smo uporabili dva potenciometra. Če želite spremeniti glasnost, lahko spremenite lonec, ki je povezan med 1 in 8- im zatičem LM386 ali lonec, ki je priključen na zatič 3 LM386. Spodnja slika prikazuje celoten diagram vezja za radio Arduino FM.
Ojačevalnika sem malo spremenil. Namesto da bi v ojačevalniku uporabil dva potenciometra, sem uporabil samo enega. Lonec, ki se uporablja za spreminjanje ojačitve, sem zamenjal z uporom. Zdaj ima naš projekt dva potenciometra, enega za nastavitev in enega za spreminjanje glasnosti. Potenciometer, ki se uporablja za nastavitev kanala, je povezan z Arduino nano. Sredinski zatič lonca je povezan z A0 zatičem Arduino nano, kateri koli od preostalih dveh zatičev je povezan s 5V, drugi pa z GND. Drugi lonec se uporablja za nadzor glasnosti radia in je povezan, kot je prikazano na zgornji sliki.
Pin A4 in A5 Arduino sta povezana s SDA in SCL pinom RDA5807M. ne pozabite, da sprejemniški modul deluje le na 3,3 V. Torej priključite 3v3 pin Nano na VCC pin sprejemniškega modula. Ko so bile vzpostavljene povezave, je bila moja postavitev videti tako
Pojasnilo radijske kode Arduino FM
Koda bo inicializirala sprejemniški modul in nato postavila kanal s prednastavljeno frekvenco. Ko se vrednost, ki jo nano prebere na zatiču A0, spremeni (s spreminjanjem lonca) se spremeni frekvenca, kar pa spremeni kanal. Celotna koda je podana na koncu strani.
Naš program začnemo z dodajanjem potrebne knjižnice žic za komunikacijo z RDA5807. Nato v spremenljivki "kanal" nastavimo vrednost kanala. Ko se radio zažene, se samodejno nastavi na ta kanal.
#include
Nato bomo v vsak register na našem IC RDA5807 naložili bajte, da bomo nastavili začetno konfiguracijo. V tem trenutku ponastavimo sprejemnik.
uint8_t boot_config = {/ * register 0x02 * / 0b11000001, 0b00000011, / * register 0x03 * / 0b00000000, 0b00000000, / * register 0x04 * / 0b00001010, 0b00000000, / * register 0x05 * / 0b10001000, 0b000011x, / * register 0b00001111, / * register 0b00000000, 0b00000000, / * register 0x07 * / 0b01000010, 0b00000010,};
Po ponastavitvi naprave jo lahko nastavimo. Za nastavitev kanala moramo programirati samo prvih 4 bajtov. Ta del kode bo spremenil kanal na želeno frekvenco. V I2C najprej začnemo prenos, zapisujemo ali beremo podatke in nato prenos končamo. V tem sprejemniku IC nam ni treba določiti naslova, saj v obrazcu jasno piše, da ima vmesnik I2C fiksni začetni register, tj. 0x02h za operacijo pisanja in 0x0Ah za operacijo branja.
uint8_t tune_config = {/ * register 0x02 * / 0b11000000, 0b00000001, / * register 0x03 * / (kanal >> 2), ((channel & 0b11) << 6) - 0b00010000};
Pri namestitvi smo inicializirali zagonsko konfiguracijo (ponastavitev) in nato nastavili na kanal tako, da v RDA5807M zapisali nastavitvene bajte.
void setup () {Serial.begin (9600); pinMode (A0, INPUT); / * Povezava z FM sprejemnikom RDA5807M: * / 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 (); }
Ko sem uporabljal pot za nastavitev frekvence, sem naletel na težavo. Vrednosti, ki jih bere pin A0, niso konstantne. Obstaja hrup z želeno vrednostjo. Uporabil sem 0,1uF keramični kondenzator, povezan med A0 in GND, čeprav je bil hrup minimiziran, ni na želeni ravni. Torej, moral sem nekaj sprememb kode. Sprva sem si zapisal odčitke, na katere vpliva hrup. Ugotovil sem, da je največja vrednost šuma 10. Program sem napisal tako, da bo novo vrednost upošteval le, če bo razlika med novo vrednostjo in staro vrednostjo istega zatiča večja od 10 in nato nastavi na želeni kanal.
void loop () {int channel1 = 187, avg = 0, newA; statični int oldA = 0; int rezultat = 0; newA = analogRead (A0); if ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); if (newA! = oldA) {channel = channel1 + (newA / 10); myChangeChannel (kanal); oldA = newA; }}} // konec zanke
Ta funkcija se uporablja za nastavitev bajtov matrike tune_config in nato s protokolom I2C posreduje podatke v IC RDA5807M.
void myChangeChannel (int channel) {/ * void, če se nič ne vrne drugače int * / tune_config = (channel >> 2); tune_config = ((channel & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Delovanje radia Arduino FM
Ko je modul vklopljen, naša koda ponastavi IC RDA5807-M in ga nastavi na želeni uporabnikov kanal (Opomba: ta frekvenca se vzame za osnovno frekvenco, na katero se bo frekvenca povečala). S spreminjanjem potenciometra (priključenega na A0) se vrednosti, ki jih prebere Arduino Nano, spremenijo. Če je razlika med novo in staro vrednostjo večja od 10, bo naša koda upoštevala to novo vrednost. Kanal se spremeni glede na spremembo nove vrednosti od stare vrednosti. Povečanje ali zmanjšanje glasnosti je odvisno od potenciometra, ki je povezan med zatičem 3 in GND.
Na koncu gradnje in kodiranja boste imeli svoj FM radio. Popolno delovanje FM radia najdete v video posnetku na dnu te strani. Upam, da ste projekt uživali in se naučili kaj koristnega. Če imate kakršna koli vprašanja glede tega, da ta projekt deluje, jih lahko pustite v oddelku za komentarje ali uporabite naš forum za drugo tehnično pomoč.