- FM rádió Általános munka
- Szükséges alkatrészek
- RDA5807 vevő
- Hangerősítő
- Arduino FM vevő áramköri rajza
- Arduino FM rádió kód magyarázat
- Az Arduino FM rádió működése
Ma szinte mindenki mobiltelefonját hallgatja zenék, hírek, podcastok stb. Hallgatására. De nem is olyan régen mindannyian a helyi FM rádióktól függtünk, hogy megkapjuk a legfrissebb híreket és dalokat, lassan ezek a rádiók veszítenek népszerűségükből, de vészhelyzetekben, amikor az internet nem működik, a rádiók fontos szerepet töltenek be az információk továbbításában a felhasználók számára. A rádiójelek mindig jelen vannak a levegőben (amelyeket az állomások sugároznak), és csak egy FM vevő áramkörre van szükségünk, hogy elkapjuk ezeket a rádiójeleket és átvigyük őket audiojelekre. Korábbi oktatóanyagainkban néhány más FM adót és vevőt is felépítettünk, amelyeket alább felsorolunk.
- Raspberry Pi FM adó
- Raspberry Pi FM vevő rádió
- FM adó áramkör
- FM adó áramkör induktivitás nélkül
Ebben az oktatóanyagban felépítünk egy Arduino FM vevőt, és hozzáadjuk a projektarzenálunkhoz. Az RDA5807 FM vevő IC-t az Arduino-val együtt használjuk, és beprogramozzuk, lejátszhatunk bármilyen FM rádióállomást, amelyet a felhasználó egy potenciométerrel beállíthat. Arduino FM rádiónk kimeneti hangerejét egy hangerősítővel és az áramkörrel együtt is használjuk, érdekesnek tűnik? Tehát kezdjük.
FM rádió Általános munka
A rádióállomások átalakítják az elektromos jeleket rádiójelekké, és ezeket a jeleket modulálni kell, mielőtt továbbítanák őket az antennán keresztül. Kétféle módon lehet jelet modulálni, nevezetesen az AM és az FM. Ahogy a neve is mutatja, az amplitúdó-moduláció (AM) modulálja az amplitúdót a jel továbbítása előtt, míg a frekvenciamodulációban (FM) a jel frekvenciáját az antennán történő átvitel előtt modulálják. A rádióállomásokon frekvenciamodulációval modulálják a jelet, majd továbbítják az adatokat. Most már csak egy vevőt kell építenünk, amelyet bizonyos frekvenciákra lehet hangolni, és ezeket a jeleket fogadni, majd ezeket az elektromos jeleket audio jelekké alakítani. Fogjuk használni aRDA5807 FM vevő modul ebben a projektben, amely leegyszerűsíti áramkörünket.
Szükséges alkatrészek
- Arduino Nano
- RDA5807 vevő
- Hangerősítő
- Csatlakozó vezetékek
- Pot - 100K
- Perf Board
RDA5807 vevő
Az RDA5807 egy chipes FM sztereó rádió tuner modul teljesen integrált szintetizátorral. A modul támogatja a világszerte alkalmazott 50-115 MHz frekvenciasávot, a hangerőszabályzást és a némítást, a programozható csökkentést (50 / 75us), a vételi jelerősség-jelzőt és az SNR-t, 32,768KHz kristályoszcillátort, a digitális automatikus erősítésszabályozást stb. Az alábbi ábra az RDA5807M tuner blokkvázlata.
Digitális alacsony IF-architektúrával rendelkezik, és integrálja az alacsony zajszintű erősítőt (LNA), amely támogatja az FM sugárzási sávot (50–115 MHz), a programozható erősítésszabályozást (PGA), a nagy felbontású analóg – digitális átalakítót nagy pontosságú digitális-analóg átalakítók (DAC). A korlátozó megakadályozza a túlterhelést és korlátozza a szomszédos csatornák által létrehozott intermodulációs termékek számát. A PGA felerősíti a keverő kimeneti jelét, majd digitalizálja ADC-kkel. A DSP mag kezeli a csatornaválasztást, az FM demodulációt, a sztereó MPX dekódert és a kimenő audiojelet. Az IC RDA5807 kihúzási diagramja az alábbiakban látható.
A modul 1,8 - 3,3 V tápegységen működik. Amikor nyugalomba kerül és a kiválasztott kezelőfelületet választja, a modul alaphelyzetbe áll, amikor a VIO be van kapcsolva, és támogatja a lágy alaphelyzetbe állítást a bit1 triggerje által a 02H cím 0-tól 1-ig. A modul az I2C kommunikációt használja az MCU-val való kommunikációhoz, és az interfész kezdési feltételekkel, parancsbájttal és adatbájttal kezdődik. Az RDA5807 13 16 bites regiszterrel rendelkezik, amelyek mindegyike egy adott funkciót lát el. A regiszter címek 00H-val kezdődnek, amelyet a chip azonosítóhoz rendelnek, és 0FH-ra végződnek. Mind a 13 regiszterben egyes bitek vannak fenntartva, míg mások R / W. Minden regisztráció olyan feladatokat hajt végre, mint a változó hangerő, a csatornaváltás stb., A hozzájuk rendelt bitektől függően.
Nem használhatjuk közvetlenül a modult áramkörhöz való csatlakoztatáskor, mivel a csapok le vannak zárva. Tehát egy perf táblát és néhány dugótüskét használtam, és forrasztottam a modul egyes csapjait az egyes hím csapokhoz, az alábbi képen látható módon.
Hangerősítő
Az audioerősítő olyan elektronikus eszköz, amely az alacsony fogyasztású elektronikus hangjeleket olyan szintre erősíti, hogy az elég magas legyen a hangszórók vagy a fejhallgató vezetéséhez. Egy egyszerű hangerősítőt építettünk az LM386 segítségével, amelynek áramköre az alábbiakban látható, és ellenőrizheti a linket, hogy többet megtudjon erről az áramkörről, és ellenőrizze a többi hangerősítő áramkört is.
Arduino FM vevő áramköri rajza
Két potenciométert használtunk az FM sáv hangolásához és az audio erősítő hangerejének szabályozásához. A hangerő megváltoztatása akkor sem változhat a pot, amely kapcsolódik az 1 és 8 közötti th tűje LM386 vagy a pot, amely kapcsolódik a 3 csap a LM386. Az alábbi kép az Arduino FM rádió teljes kapcsolási rajzát mutatja.
Kevés változtatást hajtottam végre az erősítőben. Ahelyett, hogy két potenciométert használtam volna az erősítőben, csak egyet használtam. A nyereség megváltoztatására szolgáló edényt ellenállással cseréltem. Tehát most a projektünkben két potenciométer van, az egyik a hangoláshoz, a másik a hangerő megváltoztatásához. A csatorna hangolására használt potenciométer az Arduino nanóval van összekapcsolva. A fazék középső csapja össze van kötve az Arduino nano A0 tűjével, és a fennmaradó két érintkező bármelyike az 5 V-hoz, a másik pedig a GND-hez csatlakozik. Egy másik edényt használunk a rádió hangerejének szabályozására, és a fenti ábra szerint csatlakoztatjuk.
Az Arduino A4 és A5 tűje az RDA5807M SDA és SCL tűjéhez csatlakozik. ne feledje, hogy a vevő modul csak 3,3 V-on működik. Tehát csatlakoztassa a Nano 3v3 tűjét a vevő modul VCC tűjéhez. Miután a csatlakozások létrejöttek, a beállításom így nézett ki
Arduino FM rádió kód magyarázat
A kód inicializálja a vevőmodult, majd beállítja a csatornát az előre beállított frekvenciával. Amikor a nano által az A0 érintkezőnél leolvasott érték megváltozik (a pot cseréjével), a frekvencia megváltozik, ami viszont megváltoztatja a csatornát. A teljes kódot az oldal végén adjuk meg.
A programunkat azzal kezdjük, hogy hozzáadjuk az RDA5807-tel való kommunikációhoz szükséges vezetékkönyvtárat. Ezután a „channel” változóban beállítjuk a csatorna értékét. Amikor a rádió elindul, automatikusan ráhangolódik erre a csatornára.
#include
Ezután az RDA5807 IC-nk mindegyik regiszterébe bájtokat töltünk be a kezdeti konfiguráció beállításához. Ezen a ponton visszaállítjuk a vevőt.
uint8_t boot_config = {/ * regisztráció 0x02 * / 0b11000001, 0b00000011, / * regisztráció 0x03 * / 0b00000000, 0b00000000, / * regisztráció 0x04 * / 0b00001010, 0b00000000, / * regisztráció 0x05 * / 0b1000111, 0b1000111, 0b1000111, 0 0b00000000, 0b00000000, / * regiszter 0x07 * / 0b01000010, 0b00000010,};
Az eszköz visszaállítása után hangolhatjuk az eszközt. A csatorna tuningolásához csak az első 4 bájtot kell programoznunk. A kód ezen része megváltoztatja a csatornát a kívánt frekvenciára. Az I2C-ben először megkezdjük az átvitelt, megírjuk vagy elolvassuk az adatokat, majd befejezzük az átvitelt. Ebben a vevő IC-ben nem kell megadnunk a címet, mivel az adatlap egyértelműen kimondja, hogy az I2C interfész fix kezdő regiszterrel rendelkezik, azaz 0x02h írási művelethez és 0x0Ah olvasási művelethez.
uint8_t tune_config = {/ * regisztráció 0x02 * / 0b11000000, 0b00000001, / * regisztráció 0x03 * / (csatorna >> 2), ((csatorna & 0b11) << 6) - 0b00010000};
A beállítás során inicializáljuk a rendszerindítási konfigurációt (visszaállítás), majd egy csatornára hangolunk úgy, hogy beállítási konfigurációs bájtokat írunk az RDA5807M-re.
void setup () {Soros.kezdés (9600); pinMode (A0, INPUT); / * Csatlakozás az RDA5807M FM-tunerhez: * / 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 (); }
Amikor a potot frekvenciára hangoltam, problémával szembesültem. Az A0 tű által leolvasott értékek nem állandóak. Van egy zaj klubágy a kívánt értékkel. Az A0 és a GND közé kapcsolt 0,1uF kerámia kondenzátort használtam, bár a zaj minimálisra csökkent, de nem éri el a kívánt szintet. Tehát módosítanom kellett a kódot. Eleinte megjegyeztem azokat az olvasmányokat, amelyeket a zaj befolyásol. Megtudtam, hogy a zaj maximális értéke 10. Tehát úgy írtam a programot, hogy csak akkor veszi figyelembe az új értéket, ha ugyanazon csap új értéke és a régi értéke közötti különbség nagyobb, mint 10 majd a kívánt csatornára hangol.
void loop () {int csatorna1 = 187, avg = 0, újA; statikus int oldA = 0; int eredmény = 0; newA = analogRead (A0); if ((newA - oldA)> 10 - (oldA - newA)> 10) {Soros.println (újA); if (újA! = régiA) {csatorna = csatorna1 + (újA / 10); myChangeChannel (csatorna); oldA = newA; }}} // hurok vége
Ez a funkció a tune_config tömb bájtjainak beállítására szolgál , majd az adatokat az I2C protokoll segítségével továbbítja az RDA5807M IC-be.
void myChangeChannel (int channel) {/ * void, ha semmi sem kerül vissza, int * / tune_config = (csatorna >> 2); tune_config = ((& 0b11 csatorna) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Az Arduino FM rádió működése
Amikor a modul bekapcsol, a kódunk alaphelyzetbe állítja az RDA5807-M IC-t, és a kívánt felhasználó csatornájára állítja (Megjegyzés: ezt a frekvenciát vesszük alap bázis frekvenciának, amelyen a frekvencia növekszik). A potenciométer (az A0-hoz csatlakoztatva) megváltoztatásával megváltoznak az Arduino Nano által leolvasott értékek. Ha az új és a régi érték közötti különbség nagyobb, mint 10, akkor kódunk ezt az új értéket veszi figyelembe. A csatorna megváltozik attól függően, hogy az új érték megváltozik-e a régi értéktől. A hangerő növelése vagy csökkentése a potenciométertől függ, amely a 3 csap és a GND között van összekötve.
Az elkészítés és a kódolás végén saját FM rádiót fogsz használni. Az FM rádió teljes működése megtalálható az oldal alján linkelt videóban. Remélem, hogy tetszett a projekt, és valami hasznosat tanult. Ha bármilyen kérdése van a projekt működésével kapcsolatban, hagyja őket a megjegyzés rovatban, vagy más technikai segítséget használhat fórumunkon.