Однажды на страницах Aliexpress наткнулся на интересную и недорогую микросхему – RDA5807m. Это FM тюнер, в распоряжении которого имеется I2C интерфейс, стерео выход звука, цифровые настройки громкости звука, частоты радиостанции, поддерживается RDS. Такое радио часто можно встретить в формате модуля, на котором расположена микросхема тюнера, кварц на частоту 32,768 кГц и пара конденсаторов – ничего особенного просто чуть удобнее паять. И в честь этой покупки предлагаю рассмотреть конструкцию на микроконтроллере несложного радиоприемника.
Характеристики FM-тюнера RDA5807m:
- Все в одном корпусе, практически не требуется внешних компонентов
- КМОП технология
- Полоса частот от 50 МГц до 115 МГц
- Настраиваемый шаг между каналами – 200 кГц, 100 кГц, 50 кГц, 25 кГц
- Поддерживает RDS/RBDS
- Высококачественный АЦП
- Синтезатор частот полностью встроен в микросхему
- Автоматическая регулировка усиления
- Цифровое адаптивное подавление шума
- Поддержка выхода звука как в моно, так и в стерео
- Индикатор уровня сигнала (Receive signal strength indicator - RSSI) и SNR
- Усилитель низких частот
- Регулировка звука и функция mute
- Цифровой интерфейс I2C
- Нагрузка на выходе звукового канала 32 Ом
- Встроенный LDO регулятор
- Корпус MSOP (10 выводов)
Электрические параметры FM тюнера RDA5807m:
- Напряжение питания - 3 вольта (от 1,8 до 3,3 вольт)
- Температура окружающей среды - 27 градусов Цельсия (от -20 до +75 градусов Цельсия)
- Ток потребления в рабочем режиме - до 21 мА
- Ток потребления в спящем режиме – 5 мкА
- Коэффициент нелинейных искажений – 0,15 – 0,2 %
- Максимальная частота I2C – 400 кГц
Схема радиоприемника на базе тюнера RDA5807m:
В качестве микроконтроллера будем использовать ATmega8a. Это очень популярный и общедоступный микроконтроллер. Использовать его можно как в DIP корпусе, так и в TQFP (здесь только расположение выводов различается для этой схемы). Для продолжительной корректной работы этого микроконтроллера на выводе reset должен быть положительный уровень напряжения, для этой цели используется резистор R1, который подтягивает напряжение питания, создавая надежный потенциал, что предотвращает самопроизвольное перезапускание микроконтроллера. Кнопка S1 предназначена для ручной перезагрузки микроконтроллера. В качестве тактового генератора используется внутренний RC генератор на частоту 8 МГц. В качестве индикатора в схеме используется ЖК дисплей на базе микроконтроллера PCD8544 или более известен этот экран по названию Nokia 5110 или Nokia 3110. Для подключения такого дисплея к микроконтроллеру не нужны дополнительные компоненты, все соединяется в соответствии со схемой. Вся схема устройства питается от напряжения 3,3 вольта, которые получаем посредством стабилизатора AMS1117-3,3. Однако для получения звука достаточной громкости необходимо использовать усилитель звука, который питается от более высокого напряжения. В схеме применен усилитель на базе микросхемы TDA7056B, однако этот усилитель можно заменить на абсолютно любой другой, подходящий для вас. Данный усилитель звука имеет регулировку громкости потенциометром R6. Схема усилителя построена в соответствии с даташитом, хотя ее можно и доработать для более качественного звука. TDA7056B является моно усилителем, поэтому от модуля RDA5807m берем только один канал звука, либо параллелим их вместе. Если использовать наушники с сопротивлением 32 Ом, то можно слушать радио без усилителя, согласно даташиту на тюнер. Для усилителя на TDA7056B оптимально использовать динамик с сопротивлением 8 Ом. Модуль радио RDA5807m получает настройки от микроконтроллера посредством цифрового интерфейса I2C. Для работы I2C необходимы резисторы R3 и R5, которые формируют положительный перепад напряжения на линиях передачи данных. Из особенностей I2C в RDA5807m необходимо отметить, что в модуля нет возможности обратиться к конкретному регистру, чтобы настроить параметры в одном регистре, необходимо перезаписать и все остальные. После старта I2C и передачи адреса микросхемы с битом чтения или записи указатель регистра автоматически становится на начало регистров чтения или на начало регистров записи и после обращения к одному (первому) регистру указатель автоматически переходит на другой (второй, третий и так далее) регистр. Диаграмму формирования сигналов по линиям I2C для модуля RDA5807m можно посмотреть в даташите, который прилагается в конце статьи. Там же находится и карта регистров радио. Мое мнение, такая организация управления достаточно неудобная, хотя и имеет место быть. Ну и наконец, в схеме есть четыре кнопки – S2 – S5, которыми можно настраивать частоту радиостанции или перебирать список радиостанций для города Минска.
По поводу работы радио. Принимает модуль RDA5807m сигнал радио достаточно уверенно, иногда лучше радио, встроенного в мобильный телефон, иногда хуже. При этом в качестве антенны использовался кусок провода (примерно 50 см) и к тому же все это располагалось вблизи от WiFi антенны, которая, скорее всего, вносила помехи в прием. В разное время суток качество сигнала может отличаться по множеству причин.
Все это безобразие собиралось, проверялось на отладочной плате:
Усилитель на TDA7056B собран на отдельной плате в виде небольшого модуля:
Форм фактор модуля RDA5807m не очень удобный, поэтому был изготовлен небольшой переходник на штыревые соединения с шагом между гребенками для установки на беспаечную макетную плату:
Распиновка модуля радио, согласно источникам, изготавливавших этот продукт:
Переходник на штырьки сохраняет порядок расположения выводов исходного модуля.
Ну, и микроконтроллер Atmega8a в минимальной отладочной плате:
В память микроконтроллер изначально записаны 15 популярных радиостанций города Минска (к слову схема адаптирована только к этому городу по сохраненным в памяти частотам радиостанций, однако при желании можно настроить под любой другой город, либо вручную сохранять заданное количество станций). Перебор сохраненных станций осуществляется кнопками S4 и S5, последняя выбранная станция сохраняется в eeprom и загружается при следующем включении. Обычный поиск радиостанций осуществляется кнопками S2 и S3, шаг составляет 100 кГц. Будем считать данный функционал основой, а любые изменения можно внести в исходный код, предоставленный в конце статьи, перекомпилировать и получить новую прошивку.
В целом RDA5807m достаточно неплохой тюнер среднего уровня, набор настроек позволяет использовать практически любые функции, связанные с приемом радиосигнала. Размер же самой микросхемы и отсутствие необходимости в обвязке большим количеством дополнительных элементов позволяет встраивать радио почти в любое устройство.
Для программирования микроконтроллера необходимо знать конфигурацию фьюз битов, скриншот из AVR Studio:
К статье прилагается прошивка для микроконтроллера ATmega8a, исходный код в программе AVR Studio 4, даташит на RDA5807m и небольшое видео.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
IC1 | МК AVR 8-бит | ATmega8A | 1 | Поиск в магазине Отрон | ||
IC2 | Аудио усилителья | TDA7056B | 1 | Или любой другой усилитель | Поиск в магазине Отрон | |
IC3 | Радио модуль | RDA5807M | 1 | Готовый модуль с обвязкой | Поиск в магазине Отрон | |
VR1 | Линейный регулятор | L7805AB | 1 | Поиск в магазине Отрон | ||
VR2 | Линейный регулятор | AMS1117-3.3 | 1 | Поиск в магазине Отрон | ||
C1, C4, C5, C7, C12 | Конденсатор | 100 нФ | 5 | Поиск в магазине Отрон | ||
C2 | Электролитический конденсатор | 470 мкФ | 1 | Поиск в магазине Отрон | ||
C3, C9 | Электролитический конденсатор | 10 мкФ | 2 | Поиск в магазине Отрон | ||
C6, C10 | Электролитический конденсатор | 220 мкФ | 2 | Поиск в магазине Отрон | ||
C8 | Конденсатор | 470 нФ | 1 | Пленочный | Поиск в магазине Отрон | |
C11 | Конденсатор | 1 мкФ | 1 | Поиск в магазине Отрон | ||
R1, R3, R5 | Резистор | 10 кОм | 3 | Поиск в магазине Отрон | ||
R2 | Резистор | 4.7 кОм | 1 | Поиск в магазине Отрон | ||
R4 | Резистор | 100 кОм | 1 | Поиск в магазине Отрон | ||
R6 | Переменный резистор | 1 МОм | 1 | Поиск в магазине Отрон | ||
HG1 | LCD-дисплей | PCD8544 | 1 | Nokia 5110 | Поиск в магазине Отрон | |
S1-S5 | Тактовая кнопка | TC-A109 | 5 | Поиск в магазине Отрон | ||
Ls1 | Динамик | 3 Вт | 1 | Сопротивление 8 - 32 Ом | Поиск в магазине Отрон | |
Скачать список элементов (PDF)
Прикрепленные файлы:
- 59.hex (21 Кб)
- 59.rar (95 Кб)
- RDA5807M_datasheet_v1.pdf (757 Кб)
Комментарии (75) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
[Автор]
[Автор]
[Автор]
[Автор]
[Автор]
[Автор]
wrBuf[3] |= RDA5807_TUNE | ((chan & 0x03) << 6);
[Автор]
Для большей точности можно установить шаг 50 кГц также - так с большей вероятностью можно цеплять станции, к тому же часто частота станций кратна 50 кГц в некоторых регионах
Пользуете просто как радио?
[Автор]
[Автор]
[Автор]
[Автор]
[Автор]
[Автор]
Собрал этот приемничек в спешке - уже на печатке с дисплеем и унч. С тюнера дал на унч напрямую, думал регулировка громкости программно с меги (невнимательно прочитал статью). Теперь или резать-сверлить-выводить регулятор или .... Может кто столкнулся с такой проблемой, или у автора есть доработка с регулировкой громкости.
[Автор]
[Автор]
P.S. Спасибо автору за понятный (с комментами) исходник!
С уважением Ал.
Внешне работа приемника по данной схеме не изменилась, в исходнике очень много лишнего. Все лишнее удалил, упростил опрос клавиатуры, также переделал вывод названий радиостанций. И все таки I2C использовал автор программный. Исходник в поправленном мною варианте прикрепляю. Да, список радиостанций делал под себя (г.Запорожье). Есть еще исходник для STM8S003F3P6, но простенький без дисплея.
[Автор]
[Автор]
воспользуйтесь фьюз бит калькулятором для перевода из шестнадцатеричной формы в галочки. в дуде можно выставлять их походу
Сразу все встало на свои места. Переключает точно и быстро. Можно смело прикручивать энкодер
[Автор]
[Автор]
[Автор]
В статье схема собрана на этой плате http://cxem.net/mc/mc292.php
[Автор]
[Автор]
А нельзя ли этот модуль использовать напрямую без дополнительных примочек.
Подсоединить антенну, питание, наушники?
Как в таком случае делать поиск и переключение каналов? Спасибо.
// Задать уровень громкости (значение от 0 до 15)
void Set_volume (uint8_t vol) {
writeBuf[7] |= vol;
I2C_write();
}
Что то у меня не получается , делаю это так
case 2:
if(i==1) {volume++; if(volume>15) {volume=15;} Set_volume(volume);}
if(i==3) {volume--; if(volume
void Set_volume (uint8_t vol)
{
writeBuf[7] &= 0b11110000;
writeBuf[7] |= vol;
I2C_write();
}
Регулировка заработала , но с косяком , при уменьшении громкости , когда достигает самого минимума , громкость должна отключится , а она становится максимальной ?
volume--; if(volume < 0) volume = 0;
Переменная volume это же unsigned char, то есть, она не станет < 0. По идее, она должна быть знаковой, то есть просто тип char.
[Автор]
01 = 76–91 MHz (Japan)
10 = 76–108 MHz (world wide)
11 = = 65 –76 MHz (East Europe)или 50-65MHz