- Общо FM радио
- Необходими компоненти
- RDA5807 Приемник
- Аудио усилвател
- Схема на Arduino FM приемник
- Обяснение на Arduino FM радио кода
- Работа на Arduino FM радио
Днес почти всеки използва мобилните си телефони, за да слуша музика, новини, подкасти и т.н. Но не много отдавна всички зависихме от местните FM радиостанции, за да получаваме най-новите новини и песни, бавно тези радиоприемници губят популярност, но при спешни случаи, когато интернет е изключен, радиостанциите играят важна роля за предаване на информация до потребителите. Радиосигналите винаги присъстват във въздуха (които се излъчват от станциите) и всичко, от което се нуждаем, е схема на FM приемник, която да улавя тези радиосигнали и да ги прехвърля към аудио сигнали. В предишните ни уроци създадохме и няколко други FM предаватели и приемници, които са изброени по-долу.
- FM предавател Raspberry Pi
- Raspberry Pi FM приемник радио
- FM верига на предавателя
- Схема на FM предавател без индуктор
В този урок ще изградим Arduino FM приемник и ще го добавим към нашия арсенал от проекти. Ние ще използваме RDA5807 FM приемник IC с Arduino и ще го програмираме така, възпроизвеждаме всяка FM радиостанция, която може да бъде настроена от потребителя с потенциометър. Също така ще използваме аудио усилвател заедно с веригата, за да контролираме силата на звука на нашето Arduino FM радио, звучи интересно нали? И така, нека започнем.
Общо FM радио
Радиостанциите преобразуват електрическите сигнали в радиосигнали и тези сигнали трябва да бъдат модулирани преди да бъдат предадени през антената. Има два метода, при които сигналът може да бъде модулиран, а именно AM и FM. Както подсказва името, амплитудната модулация (AM) модулира амплитудата преди предаване на сигнал, докато при честотна модулация (FM) честотата на сигнала се модулира преди предаване през антената. В радиостанциите те използват честотна модулация, за да модулират сигнала и след това да предадат данните. Сега всичко, което трябва да изградим, е приемник, който може да бъде настроен на определени честоти и да приема тези сигнали, а по-късно да преобразува тези електрически сигнали в аудио сигнали. Ще използвамеRDA5807 FM приемник модул в този проект, който опростява нашата схема.
Необходими компоненти
- Arduino Nano
- RDA5807 приемник
- Аудио усилвател
- Свързващи проводници
- Пот - 100K
- Perf Board
RDA5807 Приемник
RDA5807 е модул за стерео радио тунер с един чип и напълно интегриран синтезатор. Модулът поддържа световната честотна лента от 50 - 115MHz, контрол на силата на звука и заглушаване, програмируем де-акцент (50 / 75us), индикатор за силата на приемания сигнал и SNR, 32.768KHz кристален осцилатор, цифров автоматичен контрол на усилването и др. блок-схема на тунера RDA5807M.
Той има цифрова архитектура с нисък коефициент на IF и интегрира усилвател с нисък шум (LNA), който поддържа FM обхват (50 до 115 MHz), програмируем контрол на усилването (PGA), аналогово-цифров преобразувател с висока разделителна способност и цифрово-аналогови преобразуватели (ЦАП) с висока точност. Ограничителят предотвратява претоварването и ограничава броя на продуктите за интермодулация, създадени от съседни канали. PGA усилва изходния сигнал на миксера и след това се дигитализира с ADC. DSP ядрото управлява избора на канали, FM демодулация, стерео MPX декодер и изходен аудио сигнал. В RDA5807 Pinout схема за IC е дадена по-долу.
Модулът работи на захранване от 1,8 - 3,3V. Когато е избран за почивка и избран интерфейс за управление, модулът се нулира, когато VIO е Power up, и също така поддържа меко нулиране от спусъка на bit1 от 0 до 1 на 02H адрес. Модулът използва I2C комуникация за комуникация с MCU и интерфейсът започва с условие за стартиране, команден байт и байтове с данни. RDA5807 има 13 16-битови регистри, всеки от които изпълнява определена функция. Адресите на регистъра започват с 00H, който е определен за чип ID и завършва с 0FH. Във всички 13 регистри някои битове са запазени, докато някои са R / W. Всеки регистър изпълнява задачи като променлив обем, промяна на канали и др. В зависимост от битовете, които са им присвоени.
Не можем директно да използваме модула, когато го свързваме към верига, тъй като щифтовете са затворени от. И така, използвах перфектна дъска и няколко мъжки щифта и припоих всеки щифт на модула към всеки мъжки щифт, както е показано на снимката по-долу.
Аудио усилвател
Аудио усилвателят е електронно устройство, което усилва електронни аудио сигнали с ниска мощност до ниво, на което е достатъчно високо за управление на високоговорители или слушалки. Изградихме прост аудио усилвател, използвайки LM386, схемата за същото е показана по-долу и можете също да проверите връзката, за да научите повече за тази схема, както и други вериги за усилвател на аудио.
Схема на Arduino FM приемник
Използвахме два потенциометра за настройка на FM диапазона и контрол на силата на звука на аудио усилвателя. За да промените силата на звука, можете да променяте гърнето, което е свързано между 1 и 8 -ия щифт на LM386 или гърнето, което е свързано на щифт 3 на LM386. Долната снимка показва пълната електрическа схема за FM радио Arduino.
Направих малки промени в усилвателя. Вместо да използвам два потенциометра в усилвателя, използвах само един. Замених пота, който се използва за промяна на усилването, с резистор. Така че сега нашият проект има два потенциометра, един за настройка и един за промяна на силата на звука. Потенциометърът, който се използва за настройка на канала, е свързан с Arduino nano. Централният щифт на гърнето е свързан към щифта A0 на Arduino nano и всеки от останалите два щифта е свързан към 5V, а другият е свързан към GND. Друг съд се използва за управление на силата на звука на радиото и е свързан, както е показано на горната фиг.
Пинът A4 и A5 на Arduino са свързани към SDA и SCL щифт на RDA5807M. имайте предвид, че приемният модул работи само на 3.3V. И така, свържете 3v3 щифта на Nano към VCC щифта на приемния модул. След като бяха направени връзките, настройката ми изглеждаше така
Обяснение на Arduino FM радио кода
Кодът ще инициализира приемния модул и след това задава канала с предварително зададената честота. Когато стойността, отчетена от нано на A0 пина се променя (чрез промяна на пота), честотата се променя, което от своя страна променя канала. Пълният код е даден в края на страницата.
Започваме нашата програма с добавяне на необходимата библиотека за комуникация за комуникация с RDA5807. След това в променливата „канал“ задаваме стойността на канала. Всеки път, когато радиото се стартира, то автоматично ще бъде настроено към този канал.
#include
След това ще заредим байтове към всеки регистър на нашата RDA5807 IC, за да зададем нашата първоначална конфигурация. В този момент рестартираме приемника.
uint8_t boot_config = {/ * регистър 0x02 * / 0b11000001, 0b00000011, / * регистър 0x03 * / 0b00000000, 0b00000000, / * регистър 0x04 * / 0b00001010, 0b00000000, / * регистър 0x05 * / 0b10001000, 0b000011x0 / * 0b00000000, 0b00000000, / * регистър 0x07 * / 0b01000010, 0b00000010,};
След като рестартираме устройството, можем да настроим устройството. За настройка на канала трябва да програмираме само първите 4 байта. Тази част от кода ще промени канала на желаната честота. В I2C първоначално започваме предаването, записваме или четем данните и след това прекратяваме предаването. В този IC на приемника не е нужно да посочваме адреса, тъй като в листа с данни ясно се казва, че I2C интерфейсът има фиксиран стартов регистър, т.е. 0x02h за операция на запис и 0x0Ah за операция за четене.
uint8_t tune_config = {/ * регистър 0x02 * / 0b11000000, 0b00000001, / * регистър 0x03 * / (канал >> 2), ((канал & 0b11) << 6) - 0b00010000};
При настройката инициализираме конфигурацията за зареждане (нулиране) и след това настройваме към канал, като записваме байтове за настройка на конфигурацията в RDA5807M.
void setup () {Serial.begin (9600); pinMode (A0, INPUT); / * Свързване към FM тунер 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 (); }
Когато използвах пота за настройка на честота, се сблъсках с проблем. Стойностите, които се четат от щифта A0, не са постоянни. Има шумотевица с желаната стойност. Използвах 0.1uF керамичен кондензатор, свързан между A0 и GND, въпреки че шумът беше сведен до минимум, той не достига желаното ниво. И така, трябваше да направя някои промени в кода. Първоначално отбелязах показанията, които се влияят от шума. Разбрах, че максималната стойност на шума е 10. Затова написах програмата по такъв начин, че тя ще вземе предвид новата стойност само ако разликата между новата стойност и старата стойност на същия този щифт е по-голяма от 10 и след това се настройва на желания канал.
void loop () {int channel1 = 187, avg = 0, newA; static int oldA = 0; int резултат = 0; newA = analogRead (A0); if ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); if (newA! = oldA) {channel = channel1 + (newA / 10); myChangeChannel (канал); oldA = newA; }}} // край на цикъла
Тази функция се използва за задаване на байтовете на масива tune_config и след това предава данните към IC RDA5807M, използвайки протокола I2C.
void myChangeChannel (int channel) {/ * void, ако не се върне нищо друго 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 (); }
Работа на Arduino FM радио
Когато модулът се включи, нашият код нулира RDA5807-M IC и го задава на канал на желания от потребителя (Забележка: тази честота се приема като базова честота, при която честотата ще се увеличи). Чрез промяна на потенциометъра (свързан към A0), стойностите, прочетени от Arduino Nano, се променят. Ако разликата между новата и старата стойност е по-голяма от 10, нашият код ще вземе предвид тази нова стойност. Каналът се променя в зависимост от промяната в новата стойност от старата стойност. Увеличаването или намаляването на силата на звука зависи от потенциометъра, който е свързан между щифта 3 и GND.
В края на конструкцията и кодирането ще имате свое собствено FM радио. Пълната работа на FM радиото може да бъде намерена във видеото, свързано в долната част на тази страница. Надявам се, че проектът ви е харесал и сте научили нещо полезно. Ако имате някакви въпроси за задействане на този проект, можете да ги оставите в раздела за коментари или да използвате нашите форуми за друга техническа помощ.