- FM-radion yleinen työskentely
- Tarvittavat komponentit
- RDA5807-vastaanotin
- Äänenvahvistin
- Arduino FM -vastaanottimen piirikaavio
- Arduino FM-radiokoodien selitys
- Arduino FM -radion toiminta
Nykyään melkein kaikki käyttävät matkapuhelimiaan kuunnellakseen musiikkia, uutisia, podcasteja jne. Mutta vähän aikaa sitten olimme kaikki riippuvaisia paikallisista FM-radioista saadaksemme uusimmat uutiset ja kappaleet, hitaasti nämä radiot menettävät suosiotaan, mutta hätätilanteissa, kun Internet on alhaalla, radiot asettavat tärkeän roolin tiedon välittämiselle käyttäjille. Radiosignaaleja on aina ilmassa (joita asemat lähettävät), ja tarvitsemme vain FM-vastaanotinpiirin näiden radiosignaalien sieppaamiseksi ja siirtämiseksi äänisignaaleiksi. Aikaisemmissa oppaissamme rakennimme myös muutamia muita alla lueteltuja FM-lähettimiä ja -vastaanottimia.
- Raspberry Pi FM-lähetin
- Raspberry Pi FM -vastaanottimen radio
- FM-lähetinpiiri
- FM-lähetinpiiri ilman induktoria
Tässä opetusohjelmassa aiomme rakentaa Arduino FM -vastaanottimen ja lisätä sen projekti-arsenaaliimme. Käytämme RDA5807 FM-vastaanotin-IC: tä Arduinon kanssa ja ohjelmoimme sen, soita mikä tahansa FM-radioasema, jonka käyttäjä voi virittää potentiometrillä. Käytämme myös äänentoistovahvistinta yhdessä piirin kanssa Arduino FM -radion lähtötehon säätämiseen, kuulostaa mielenkiintoiselta? Joten, aloitetaan.
FM-radion yleinen työskentely
Radiokanavat muuntavat sähköiset signaalit radiosignaaleiksi, ja nämä signaalit on moduloitava ennen niiden lähettämistä antennin kautta. Signaalia voidaan moduloida kahdella tavalla, nimittäin AM ja FM. Kuten nimestä voi päätellä, amplitudimodulaatio (AM) moduloi amplitudia ennen signaalin lähettämistä, kun taas taajuusmodulaatiossa (FM) signaalin taajuus moduloidaan ennen lähettämistä antennin läpi. Radiokanavilla he käyttävät taajuusmodulaatiota moduloimaan signaalia ja lähettämään sitten tietoja. Nyt meidän tarvitsee vain rakentaa vastaanotin, joka voidaan virittää tietyille taajuuksille, vastaanottaa nämä signaalit ja myöhemmin muuntaa nämä sähköiset signaalit äänisignaaleiksi. Aiomme käyttääRDA5807 FM-vastaanotinmoduuli tässä projektissa, mikä yksinkertaistaa piiriämme.
Tarvittavat komponentit
- Arduino Nano
- RDA5807-vastaanotin
- Äänenvahvistin
- Johtojen liittäminen
- Potti - 100 kt
- Perf Board
RDA5807-vastaanotin
RDA5807 on yhden sirun FM-stereoradioviritinmoduuli, jossa on täysin integroitu syntetisaattori. Moduuli tukee maailmanlaajuista taajuusaluetta 50 - 115 MHz, äänenvoimakkuuden säätö ja mykistys, ohjelmoitava korostuksen poisto (50 / 75us), vastaanottosignaalin voimakkuuden ilmaisin ja SNR, 32,768 kHz: n kideoskillaattori, digitaalinen automaattisen vahvistuksen hallinta jne. RDA5807M-virittimen lohkokaavio.
Siinä on digitaalinen matalan IF-arkkitehtuuri ja integroitu matalan kohinan vahvistin (LNA), joka tukee FM-lähetyskaistaa (50--115 MHz), ohjelmoitava vahvistuksen hallinta (PGA), korkean resoluution analogia-digitaalimuunnin ja erittäin tarkat digitaalinen-analoginen muunnin (DAC). Rajoitin estää ylikuormituksen ja rajoittaa vierekkäisten kanavien luomien intermodulaatiotuotteiden määrää. PGA vahvistaa mikserin lähtösignaalin ja digitoidaan sitten ADC: llä. DSP-ydin hallitsee kanavan valintaa, FM-demodulaatiota, stereo-MPX-dekooderia ja lähtösignaalia. RDA5807 pinout kaavio IC on esitetty alla.
Moduuli toimii virtalähteen 1,8 - 3.3V. Kun lepo on valittuna ja ohjausrajapinta on valittu, moduuli nollautuu, kun VIO on Virta päällä, ja tukee myös pehmeää nollausta bitin1 liipaisimella 0: sta 1: een 02H-osoitteesta. Moduuli käyttää I2C-kommunikaatiota kommunikoimaan MCU: n kanssa, ja käyttöliittymä alkaa aloitustilasta, komentotavusta ja datatavuista. RDA5807: ssä on 13 16-bittistä rekisteriä, joista kukin suorittaa tietyn toiminnon. Rekisteriosoitteet alkavat 00H, joka on varattu sirun tunnukselle ja päättyy 0FH. Kaikissa 13 rekisterissä jotkut bitit on varattu, kun taas toiset ovat R / W. Jokainen rekisteri suorittaa tehtäviä, kuten vaihteleva äänenvoimakkuus, kanavien vaihtaminen jne., Riippuen heille osoitetuista biteistä.
Emme voi käyttää moduulia suoraan kytkettäessä sitä piiriin, koska nastat ovat kiinni. Joten käytin perf-levyä ja joitain urospuolisia nastoja ja juotin moduulin kukin tappi jokaiseen urospuoliseen tapiin alla olevan kuvan mukaisesti.
Äänenvahvistin
Äänivahvistin on elektroninen laite, joka vahvistaa pienitehoisia elektronisia äänisignaaleja tasolle, joka on riittävän korkea kaiuttimien tai kuulokkeiden ajamiseksi. Olemme rakentaneet yksinkertaisen audiovahvistimen LM386: lla, saman piiri on esitetty alla ja voit myös tarkistaa linkin saadaksesi lisätietoja tästä piiristä, tarkista myös muut äänivahvistinpiirit.
Arduino FM -vastaanottimen piirikaavio
Käytimme kahta potentiometriä FM-taajuuden virittämiseen ja äänenvahvistimen äänenvoimakkuuden säätämiseen. Voit muuttaa äänenvoimakkuutta joko vaihtamalla pottia, joka on kytketty LM386: n 1–8 : een nastaan, tai potin, joka on liitetty LM386: n tapaan 3. Alla olevassa kuvassa näkyy Arduino FM -radion täydellinen kytkentäkaavio.
Tein vähän muutoksia vahvistimeen. Sen sijaan, että käyttäisin vahvistimessa kahta potentiometriä, käytin vain yhtä. Vaihdoin potin, jota käytetään Gainin vaihtamiseen, vastuksella. Joten nyt projektissamme on kaksi potentiometriä, yksi viritettäväksi ja toinen äänenvoimakkuuden muuttamiseksi. Kanavan virittämiseen käytetty potentiometri on kytketty Arduino nanoon. Potin keskitappi on kytketty Arduino nanon A0-nastaan ja jompikumpi jäljellä olevista kahdesta nastasta on kytketty 5 V: n ja toinen GND: hen. Toista kattilaa käytetään radion äänenvoimakkuuden säätämiseen ja se on kytketty yllä olevan kuvan mukaisesti.
Arduinon tapit A4 ja A5 on kytketty RDA5807M: n SDA- ja SCL-tapiin. pidä mielessä, että vastaanotinmoduuli toimii vain 3,3 V: n jännitteellä. Liitä siis Nanon 3v3-nasta vastaanotinmoduulin VCC-nastaan. Kun liitännät oli tehty, kokoonpanoni näytti tältä
Arduino FM-radiokoodien selitys
Koodi alustaa vastaanotinmoduulin ja asettaa sitten kanavan ennalta asetetulla taajuudella. Kun nanon lukema arvo A0-nastassa muuttuu (vaihtamalla pottia), taajuus muuttuu, mikä puolestaan muuttaa kanavaa. Koko koodi annetaan sivun lopussa.
Aloitamme ohjelmamme lisäämällä tarvittavan lankakirjaston yhteydenpitoon RDA5807: n kanssa. Sitten asetamme muuttujassa "kanava" kanavan arvon. Aina kun radio käynnistyy, se viritetään tälle kanavalle automaattisesti.
#sisältää
Seuraavaksi lataamme tavut RDA5807 IC: n kuhunkin rekisteriin alkuperäisen kokoonpanon asettamiseksi. Tässä vaiheessa palautamme vastaanottimen.
uint8_t boot_config = {/ * rekisteröi 0x02 * / 0b11000001, 0b00000011, / * rekisteri 0x03 * / 0b00000000, 0b00000000, / * rekisteri 0x04 * / 0b00001010, 0b00000000, / * rekisteröi 0x05 * / 0b1000111, 0b1000111, 0b1000111, 0b10001000, 0b00000000, 0b00000000, / * rekisteröi 0x07 * / 0b01000010, 0b00000010,};
Kun olet nollannut laitteen, voimme virittää laitteen. Kanavan tunnelointiin tarvitsee vain ohjelmoida ensimmäiset 4 tavua. Tämä koodin osa muuttaa kanavan halutulle taajuudelle. Aluksi I2C: ssä aloitamme lähetyksen, kirjoitamme tai luemme tiedot ja lopetamme lähetyksen. Tässä vastaanottimen IC: ssä meidän ei tarvitse määrittää osoitetta, koska tietolomakkeessa sanotaan selvästi, että I2C-liitännällä on kiinteä aloitusrekisteri eli 0x02h kirjoitusoperaatiolle ja 0x0Ah lukutoiminnolle.
uint8_t tune_config = {/ * rekisteröi 0x02 * / 0b11000000, 0b00000001, / * rekisteröi 0x03 * / (kanava >> 2), ((kanava ja 0b11) << 6) - 0b00010000};
Asennuksessa alustetaan käynnistysmääritykset (palautetaan) ja viritetään sitten kanavalle kirjoittamalla virityskonfiguritavut RDA5807M: lle.
void setup () {Sarja.alku (9600); pinMode (A0, INPUT); / * Yhdistä RDA5807M FM-virittimeen: * / 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 (); }
Kun käytin pottia taajuuden virittämiseen, olin kohdannut ongelman. Arvot, jotka A0-nasta lukee, eivät ole vakioita. On melukerho, jolla on haluttu arvo. Käytin 0,1uF keraamista kondensaattoria, joka oli kytketty A0: n ja GND: n välille, vaikka melu minimoitiin, se ei ole halutulle tasolle. Joten minun piti tehdä joitain muutoksia koodiin. Aluksi huomasin muistiin lukemat, joihin melu vaikuttaa. Sain selville, että kohinan maksimiarvo on 10. Joten kirjoitin ohjelman siten, että se ottaa uuden arvon huomioon vain, jos saman nastan uuden arvon ja vanhan arvon välinen ero on suurempi kuin 10 ja virittyy sitten halutulle kanavalle.
void loop () {int-kanava1 = 187, keskiarvo = 0, uusiA; staattinen int vanha A = 0; int tulos = 0; newA = analoginen luku (A0); if ((uusiA - vanhaA)> 10 - (vanhaA - uusiA)> 10) {Sarja.println (uusiA); if (uusiA! = vanhaA) {kanava = kanava1 + (uusiA / 10); myChangeChannel (kanava); vanhaA = uusiA; }}} // silmukan loppu
Tätä toimintoa käytetään asettamaan tune_config- taulukon tavut ja lähettämään sitten tiedot RDA5807M IC: lle I2C-protokollaa käyttäen.
void myChangeChannel (int channel) {/ * mitätön, jos mitään ei palauteta int * / tune_config = (kanava >> 2); tune_config = ((kanava & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Arduino FM -radion toiminta
Kun moduuli käynnistetään, koodimme nollaa RDA5807-M IC: n ja asettaa sen haluamalleen käyttäjän kanavalle (Huomaa: tämä taajuus otetaan perustaajuudeksi, jolla taajuutta lisätään). Vaihtamalla potentiometriä (kytketty A0: een) Arduino Nanon lukemat arvot muuttuvat. Jos uuden ja vanhan arvon välinen ero on suurempi kuin 10, koodimme ottaa huomioon tämän uuden arvon. Kanavaa vaihdetaan riippuen uuden arvon muutoksesta vanhaan arvoon. Äänenvoimakkuuden lisääminen tai pienentäminen riippuu potentiometristä, joka on kytketty nastan 3 ja GND: n väliin.
Rakennuksen ja koodauksen lopussa sinulla on oma FM-radio. FM-radion täydellinen toiminta löytyy videosta, joka on linkitetty tämän sivun alaosaan. Toivottavasti pidit projektista ja opit jotain hyödyllistä. Jos sinulla on kysyttävää tämän projektin toteuttamisesta, voit jättää ne kommenttiosioon tai käyttää foorumeitamme muuhun tekniseen apuun.