Еще одно FM радио на RDA5807 под управлением Ардуино
На эту тему было много толковых публикаций, однако я сделал все по-своему, вдобавок создал трехмерную модель корпуса с практичным и оригинальным дизайном. В результате получился вполне законченный проект, достаточно простой для повторения начинающим любителем электроники. Счастливый владелец 3D принтера сможет похвастаться красивой самоделкой, способной конкурировать с фабричной продукцией.
Хочешь разорить друга — подари ему фотоаппарат. Хочешь заставить раскошелиться радиолюбителя — подкинь ему ссылку на китайский модуль RDA5807.
Крохотный квадратик размером около сантиметра и ценой около двадцати рублей. На удивление, внутри вполне приличный цифровой радиоприемник с автопоиском радиостанций и умеющий читать RDS.
Скажу честно: обольщаться на дешевизну модуля RDA5807 не стоит, чтоб запустить эту прелесть, нужно все остальное: ардуинка, усилитель с динамиками, и маленький дисплейчик для большой красоты. Вместо батареек просится аккумулятор, значит добавляем в проект контроллер заряда от USB. Скетч можно отладить на макетной плате, но для готового устройства нужен приличный корпус. Внешнее оформление — вопрос очень творческий, но к нам на помощь приходит технология 3D печати.
Стараемся сделать все максимально просто и дешево. Ардуинку берем такую:
дисплей — вот такой:
питание от аккумулятора 18650, а для него такой вот контроллер заряда.
Усилитель низкой частоты — стандартный элемент для очень многих проектов, а потому имеем в запасе вот такие самодельные модули.
Полная электрическая схема получается вот такой.
Вместо дефицитной советской микросхемы К174УН14 применяем доступную TDA2003. Диод D1 нужен, чтобы при максимальном заряде аккумулятора напряжение на модуле приемника оставалось ниже четырех вольт. Надо заметить, RDA5807 не перегорает даже от пяти вольт, но на повышенном напряжении либо вообще не работает, либо ловит всякий шум вместо радиостанций. Для него четыре вольта — уже многовато, по очень хорошему надо бы питать через кренку на 3.3 вольта.
При напряжении ниже трех вольт устройство перестает реагировать на кнопки, поскольку затыкается ардуинка. Но даже при 2.5 вольт RDA5807 стойко держит прежнюю частоту и качество приема не ухудшается.
Если подключить аккумулятор к контроллеру заряда напрямую, то при выключенном USB зарядник превращается в нагрузку, вытягивая из аккумулятора ток примерно в 2 микроампера. Много это или мало — не знаю, но сам факт просто возмутительный. В качестве решения ставим герконовое реле K1, которое при подключении USB замыкает контакты K1.1.
Релюшка самодельная, изготавливается путем намотки в навал эмалированного провода диаметром не более 0,1 мм непосредственно на корпус геркона. Чем больше провода удастся намотать, и чем тоньше он будет — тем меньше будет потребляемый ток. Намотать слишком много, так, чтобы не хватало пяти вольт для срабатывания, адекватный человек не сможет, здравый смысл заставит вовремя остановиться.
Как китайцы крепят контроллер заряда, — не знаю. Могу предложить припереть винтиками с боков.
Чтоб было видно индикацию, пришлось заменить планарный светодиод на обыкновенный. Можно было бы сделать световод из толстой рыболовной лески или прозрачного прутка для 3D принтера, но ничего, сойдет и так.
Теперь пишем скетч, библиотеки берем стандартные SSD1306Ascii для дисплея и RDA5807M для радио.
Оказалось, в строке RDS есть хитрости. Там три блока: текущее время, имя радиостанции и собственно сама информационная строка. Я так и не понял, то ли в библиотеке кривой парсер, то ли радиостанция как то не так транслирует текущее время. Вразумительные цифры там появляются далеко не всегда. В результате первый блок был отброшен. А если читать саму строку, выясняется, что там ничего нет, кроме телефонов рекламной службы. Пришлось оставить только имя радиостанции, никакой другой пользы из строки RDS извлечь не удалось. Кроме названия радио, дисплей показывает силу сигнала, заряд аккумулятора и рабочую частоту.
Планировал делать память для рабочих частот, но лень матушка меня остановила. Не захотел я делать много кнопок, оставил всего две: одну для запуска автопоиска, другую для регулировки громкости. С одной кнопки поиск идет по кругу, потому иногда для выбора нужной станции приходится пробегать весь диапазон. К счастью, у нас не слишком много передатчиков, чтобы такой серфинг сильно напрягал.
Регулировка громкости происходит так: при первом нажатии уровень сбрасывается на самый минимум, и далее при каждом последующем нажатии увеличивается на одну ступень. Если возникает пауза более двух секунд — очередное нажатие считается первым. Таким образом, за все про все две кнопки.
Два динамика, смотрящие в противоположные стороны и включенные противофазно, орут как надо: на самом первом уровне громкости вполне нормально слушать. Если немного добавить — услышат даже соседи.
Как люди жили без 3D принтера я помню, но это была не жизнь, а кошмарный сон. В наши дни корпус можно просто распечатать. Разве что, его надо сперва нарисовать. Но это намного проще, чем разворачивать полномасштабные слесарные работы. Могу поделиться своими моделями, замечу только, что они рассчитаны для динамиков 3-ГДШ-8. Все материалы проекта выложены на GitHub.
Я не маркетолог, но не мог не заметить, насколько мощно модуль RDA5807 стимулирует продажи.
Все происходит за счет цепочки расходов, каждый из которых кажется сущей мелочью. Ардуинка за 120 руб, но только если доставка Super Economy. Иными словами, посылка не отслеживаемая и срок может растянуться на три месяца Хочешь получить трек номер и получить быстрее — заплати побольше. Дисплейчик — тоже 120 рублей — и снова Super Economy. Контроллер заряда совсем дешевый, но продается только пачками, еще сто рублей. Самое дорогое — аккумулятор, разброс цен широкий, но неизбежно более двухсот рублей. Усилитель можно купить готовым модулем, а можно собирать из компонентов самому. В любом случае меньше сотни не получается. Не забываем про динамики — их два, значит дважды по сто рублей.
В моем случае корпус получился очень дешевым. На печать ушло около 40 метров прутка ABS, это на самом деле не так много. Трудно рассчитать, сколько это в деньгах, но явно пустяки. А если решать проблему корпуса как-то иначе, он превратится в самую дорогую деталь, в смысле расходов, и в смысле головной боли.
У радиолюбителя многие компоненты давно лежат в запасе, а потому кажется, будто достались даром. Но если непреклонно складывать все подряд, общая стоимость проекта приближается к тысяче. Готовый китайский приемник, вполне симпатичный, можно купить за пятьсот рублей, другое дело, что информационный повод с этого никакой. Вот почему мы чертим схемы и пишем скетчи. Иначе неинтересно.
Arduino All Band Receiver LW, MW, SW, FM with Improved Code
Covers all commercial stations with Si4730 IC, plus all amateur radio bands when you use Si4732 or Si4735.
Hardware components

Arduino Nano R3 |
Si4730 Radio module |
Small class «D» audio amplifier module |

Rotary potentiometer (generic) |

Rotary Encoder with Push-Button |

Adafruit Standard LCD — 16×2 White on Blue |
MW ferite Antenna |
resistors, capacitors |
Hand tools and fabrication machines

Soldering iron (generic) |

Solder Wire, Lead Free |
This is a small DIY radio that covers all commercial radio stations with Si4730 IC, plus all amateur radio bands when you use Si4732 or Si4735 IC.
The reason for the re-introduction of this radio is the new library created by Mr.Ricardo Lima Caratti for SI4735, which contains an updated sketch specifically created for this small receiver. If you are using a SI4735-D60 or SI4732-A10 based circuit, you can also use this sketch to add the SSB functionality to the original project. If you are using the original SI4730-D60 based circuit, the SSB will not work. However, the STEP, FM/RDS, MODE, AGC, Attenuation, bandwidth, Soft Mute, Audio Volume, and Shortwave will work fine. This sketch is very similar to the previous sketch (MIRKO_V1.ino). The new features of the MIRKO_V2.ino are shown below.
The receiver current status is stored into Arduino EEPROM;
FM frequency step;
FM bandwidth control.
Detailed instructions on how to make this little radio can be found in one of my previous videos:
You can download the MIRKO_V2.ino sketch on GitHub:
Всеволновое радио (LW, MW, SW, FM) на Arduino и модуле Si4730
По запросу “радио на Arduino” вы в сети интернет найдете, в основном, проекты радиоприемников на основе платы Arduino, которые работают в современном FM диапазоне (88-108 МГц в Европе). Тем не менее, для многих наверняка представляют интерес и диапазоны LW, MW и SW, которые занимают диапазон частот от 0,2 до 30 МГц. Особенно интерес диапазон коротких волн (SW) – радиоволны в этом диапазоне отражаются от ионосферы и, таким образом, могут распространяться на огромные расстояния, и даже огибать земной шар.
В данной статье мы рассмотрим создание на основе платы Arduino и модуля Si4730 радиоприемника с хорошими характеристиками, работающего в широком диапазоне длин волн (LW, MW, SW, FM).
Необходимые компоненты
- Плата Arduino Nano (купить на AliExpress).
- ЖК дисплей 16х2 (купить на AliExpress).
- Модуль Si4730 (купить на AliExpress).
- Инкрементальный энкодер c кнопкой (Rotary Encoder) (купить на AliExpress — не уверен в том, что в нем есть кнопка, но она точно есть в этом лоте — купить на AliExpress № 2, но он продается, к сожалению, только по 5 штук).
- Модуль усилителя звуковой частоты (класс D), например, PAM8403 (купить на AliExpress).
- Громкоговоритель (Speaker) 0,25 Вт, 8 Ом.
- Ползунковый переключатель.
- Ферритовый стержень от старого радиоприемника средних волн (MW).
- Резисторы и конденсаторы согласно схеме, представленной ниже.
Общие принципы работы радиоприемника
“Сердцем” нашего проекта является модуль Si4730 от компании Silicon Labs, который можно купить на AliExpress в форме небольшой платы для разработки всего за несколько долларов (даташит на модуль Si4730) или в форме отдельной микросхемы (менее 100 рублей).
Данным модулем можно управлять с помощью платы Arduino по протоколу I2C с помощью библиотеки Si4735-I2C-R4 (ее можно скачать по ссылке, приведенной в разделе “исходный код программы” данной статьи), написанной Julio C. Rosa. Хотя производитель утверждает, что чип Si4730 работает только в диапазонах AM и FM, тем не менее, он может работать и в диапазоне коротких волн (SW) (хотя если верить последней версии даташита на данный модуль, он работает во всех диапазонах — LW, MW, SW, FM). Для усиления звуковой частоты с выхода модуля автор проекта (ссылка на оригинал приведена в конце статьи) использовал плату цифрового усилителя 2*3W PAM8403 Class D, которая отличается приемлемым функционалом и сравнительно дешево стоит (33 рубля на алиэкспрессе). Данный усилитель ранее уже был использован в проекте радиостанций на Arduino на нашем сайте.
Автор проекта собрал данный радиоприемник в компактном корпусе (см. фото и видео) и прикрепил к нему антенну для диапазона метровых волн. По его утверждению, качество приема рассмотренного проекта радиоприемника не уступает промышленным компактным моделям радиоприемников. К слову сказать, модуль Si4730 используют в своих устройствах такие известные производители компактных радиоприемников как TECSUN, DEGEN, SANGEAN и другие.
Схема проекта
Схема всеволнового радиоприемника на Arduino и модуле Si4730 представлена на следующем рисунке.
Данную схему также можно скачать в форме pdf файла (в более хорошем качестве).
К выходу модуля Si4730 не забудьте подключить усилитель звуковой частоты, например PAM8403, с выхода которого уже и подавайте сигнал на громкоговоритель.
Исходный код программы (скетча)
Библиотеку для работы с модулем Si4730 можно скачать по этой ссылке.
Секреты SI473X. Делаем приемник и ищем скрытые возможности микросхемы SDR
Содержание статьи
Как радиоприемники стали ширпотребом
Прогресс не стоит на месте: в течение предыдущего столетия стоимость радиоприемников снижалась, при этом их характеристики становились все лучше. Так, в 20-е годы XX века основной вклад в стоимость вносили радиолампы — вспомни хотя бы первый супергетеродин Армстронга, который мы уже упоминали, говоря об истории супергетеродина.
На момент своего появления он казался совершенно безумным, так как содержал восемь ламп — огромное количество для того времени. А ведь ему нужны были еще батарейки общим размером с небольшой чемодан!
В 1930-х подобный приемник уже был вполне реален и даже производился серийно, а кроме того, появились лампы косвенного накала, которые можно было запитать от сети. Да и цены стали не такие заоблачные. В итоге приемник стоил примерно как сейчас айфон, и его уже можно было поставить на стол, не рискуя сломать последний.
Следующий этап удешевления и миниатюризации проходил достаточно медленно, лампы дешевели и уменьшались в размерах, совершенствовалась схемотехника. Продолжалось это вплоть до 1960-х годов. А прорыв случился в начале пятидесятых, когда появились первые серийные транзисторы и на них построили первый серийный приемник Regency TR-1.
По характеристикам он уступал ламповым того времени и стоил заметно дороже, но его уже можно было положить в карман. А дальше транзисторы потихоньку дешевели, их параметры улучшались, а вместе с ними становились меньше и экономичнее приемники. Появились интегральные схемы, и где‑то к 1970-м годам количество транзисторов в устройстве перестало существенно влиять на цену. Все больший вклад в размер и цену стали вносить контуры промежуточной частоты и входные перестраиваемые цепи.
Очередной рывок произошел в начале восьмидесятых, когда инженерам фирмы Philips удалось уместить весь радиочастотный тракт в одну микросхему. А кроме того, за счет схемотехнических ухищрений избавиться от всех контуров, кроме гетеродинного. Микросхема получила название TDA7000, а прототип приемника, представленный в рекламных целях, выглядел довольно‑таки необычно.
Прототип приемника на TDA7000
Штука получилась на редкость удачная, поэтому вскоре появились TDA7021 (PDF) с поддержкой стереокодирования и TDA7088 (PDF), где добавилась возможность автопоиска станций. В последней микросхеме использовалась небольшая цифровая часть, которая за этот самый поиск отвечала. Впрочем, там все было устроено достаточно примитивно, но продержалась такая конструкция достаточно долго. Это именно те приемники, которые встраивали чуть ли не в зажигалки в начале 2000-х.
Российские разработчики хоть и отставали, но переняли опыт, в результате чего появилась знаменитые К174ХА34 (TDA7021), К174ХА42 (TDA7000) и очень забавная гибридная схема СХА058.
СХА058
А вот на создание аналога TDA7088 ресурсов у отечественного производителя уже не хватило, или, скорее, стало не до того. В любом случае, сейчас все эти чипы считаются устаревшими и не производятся, за исключением клонов TDA7088, но и ему, видать, недолго осталось.
Сегодня наступила эра SDR/DSP-приемников, в которых основная обработка сигнала выполняется математически на оцифрованных данных, мы это уже обсуждали, когда собирали ZetaSDR. Но там обработка оцифрованного сигнала происходила на ПК. А можно ли обойтись без компьютера? Да легко: в 2001 году Philips выпустила чип TEA5767 (PDF), представляющий собой однокристальный цифровой приемник. Этот чип требовал минимум обвязки, имел цифровое управление и позиционировался (PDF) как удобный вариант для встраивания в различные гаджеты типа MP3-плееров и мобильных телефонов. Среди его достоинств — кварцевая стабилизация частоты и возможность декодировать стерео.
TEA5767 с полной обвязкой
Чуть позже появился более совершенный чип RDA5807. Он избавился от последнего колебательного контура в обвязке. Собственно, там и обвязки‑то не осталось, при этом принимаемый диапазон был заметно расширен (64–108 МГц), появилась поддержка RDS. Чувствительность стала повыше, качество звука тоже, и, что самое удивительное, эта кроха способна тянуть 32-омные наушники без дополнительного усилителя. И все это меньше чем за десять рублей! А сверх того, чип имеет обратную совместимость с RDA5807, да и вообще способен работать без управляющего микроконтроллера. Но с контроллером все же веселее.
RDA5807 с обвязкой
Но даже все перечисленное не предел: в чип можно запихнуть еще и ДВ/СВ/КВ‑приемник, как это сделано в KT0915 (PDF), AKC6951 (PDF) (тут еще и первые несколько каналов TV принимать можно) и SI473Х, о которых мы и будем говорить дальше.
Мы создадим современный радиоприемник, подобный современным коммерческим образцам, таким как PL330 и ETON SATELLIT. Но наше изделие будет при этом максимально простым и эффективным.
PL330
ETON SATELLIT
Почему SI4734
SI4735 отличается от других упомянутых чипов тем, что поддерживает патчи прошивки, а это открывает доступ к дополнительным функциям. Так, в сети есть патч, который позволяет принимать сигналы с SSB-модуляцией. Что в ней такого, спросишь ты? Да в общем, ничего особенного, просто на ней работают любители в КВ‑диапазонах, и их порой интересно послушать. И это, наверное, самый простой вариант такого приемника.
Хорошо, с SI4735 разобрались, а почему в заголовке значится SI4734? Дело в том, что все микросхемы SI473X совместимы «pin в pin» и отличаются только набором функций. Младшие модели (SI4730, SI4731) поддерживают длинные волны и FM, а старшие модели (SI4732, SI4735) поддерживают еще и короткие волны и RDS. SI4734 поддерживает КВ, но не умеет RDS. Кроме всего прочего, они здорово различаются по цене: SI4730 стоит примерно 100 рублей, SI4734 — 150, SI4735 — порядка 500 рублей. Правда, всего год назад они были минимум в три раза дешевле, ну да это известная сейчас проблема.
Патч официально поддерживает только SI4735, на ней я и хотел экспериментировать. Но купленный мною экземпляр оказался нерабочим, поэтому я поставил SI4734-D60, который имелся в загашнике. А заодно попробовал скормить этому чипу патч, и, к моему удивлению, он сработал. Так что, если тебе не нужен RDS, можно сэкономить.
Обрадовавшись такому успеху, я попробовал поковырять SI4730-D60, тем более что в сети проскальзывала информация, будто некоторые из этих чипов могут работать на КВ. Однако у меня они не заработали и патч на них тоже не встал. Очень вероятно, что патч сработает и на SI4732, поскольку китайцы часто добавляют эту микросхему в наборы своих приемников и заявляют о поддержке SSB.
Схемотехника
Для наших экспериментов мы соберем относительно несложную конструкцию, состоящую из двух блоков: блока управления и блока приемника. Блок управления соберем на STM32F030, добавим к нему энкодер, дисплей OLED и восемь кнопок. От кнопок можно вовсе отказаться, но с ними управлять приемником намного удобнее. За клавиатуру будет отвечать PCF8574, очень удобная микросхема — расширитель портов с I2C-интерфейсом. Введение расширителя портов хоть и усложняет схему, но упрощает разводку платы и опрос кнопок. Питать все это дело удобно с помощью LiPO-аккумулятора, поэтому добавим туда еще контроллер заряда и DC/DC-преобразователь на RT9136 для питания контроллера. Использование активного преобразователя целесообразно в плане повышения КПД.
Схема приемника
Выходной мощности SI4735 недостаточно для раскачки стандартных 32-омных наушников, поэтому нужен аудиоусилитель, даже два, так как у нас стерео. В качестве усилителя использована микросхема TDA2822 (PDF) в стандартном включении. Это не лучший вариант по двум причинам: во‑первых, у нее слишком высок коэффициент усиления, а во‑вторых, на мой вкус, она слишком шумит. Лучше на эту роль подойдет LM4863 (PDF), но у меня ее не оказалось под рукой. Тем не менее TDA2822 недурно справляется со своей задачей.
В заводских решениях обычно используется УВЧ и магнитная антенна, мы же поступим проще: поставим на вход фильтр 5-го порядка с частотой среза и будем использовать полноразмерную антенну — все равно на штырь в квартире можно ловить только помехи, FM и пару китайских станций в хороший день. Что же касается FM-входа, то ему комфортно и без входных цепей. Кроме того, саму SI4734 вместе со входными цепями мы поместим в экран из жести (плата двухсторонняя, вторая сторона — сплошная медь), благо это совсем не сложно. Использование внешней полноразмерной антенны сильно снизит наводки от цифровой части и избавит от УВЧ.
Что касается этой самой цифровой части, то тут каких‑либо особенностей нет. Схема, платы и прочее лежат на GitHub. Вешать постоянно обновляющийся дисплей и клавиатуру на одну шину с SI4734 — не очень хорошая идея из‑за возможных помех, однако остановка контроллера и выключение дисплея на слух не вносит изменений. Отсюда можно сделать вывод, что в городе гораздо больший вклад в качество приема вносит зашумленность эфира.
Оформлено это в достаточно минималистичном стиле, впрочем, корпуса я делать никогда не любил. У меня получилось что‑то среднее между макетом и законченным устройством, но транспортировку и полевое использование приемник пережил не поморщившись.
Предвидя вопросы, скажу сразу, что управляющий блок можно собрать и на Blue Pill, и на ARDUINO, в последнем случае на Али можно купить уже собранную плату. Обойдется это примерно в 3000 рублей. А за дополнительные деньги к этому делу можно докупить корпус. Но это не наш метод, мы же собрались поковыряться с SI4734!
Прошивка
В сети достаточно руководств по сборке приемников на SI4735, однако большинство авторов делают акцент на схемотехнику и сборку на макете, после чего туда заливают один из вариантов готовой прошивки. Мы же попробуем разобраться, как написать такую прошивку самостоятельно почти с нуля, поэтому все нижесказанное достаточно легко перенести на любой другой микроконтроллер, лишь бы у него хватало памяти для хранения патча.
Итак, что же за зверь SI4734 и с чем его едят? Этот чип управляется по шине I2C, и каждая посылка представляет собой адрес микросхемы (с битом переключения запись/чтение), 1 байт команды и до 7 байт аргументов. У каждой команды свое количество аргументов, впрочем, даташит говорит, что посылки можно сделать и фиксированной длины, если вместо неиспользуемых аргументов слать 0x00 . Для наших целей понадобится не так много команд, поэтому мы можем позволить себе написать для каждой свою функцию. Результатом выполнения команды можно считать ответ, состоящий из байта статуса и до 7 байт собственно ответа, причем и здесь допускается унификация длины: можно читать по 8 байт, все неиспользуемые будут 0x00 .
Но тут есть нюанс: команда выполняется не мгновенно, а с задержкой, до истечения которой микросхема будет отвечать только нулями. Поэтому, когда нам необходим ответ, мы с некоторой периодичностью будем его считывать, пока первый байт ответа не будет равен 0x80 , что свидетельствует о завершении исполнения команды. Следом можно считать байты ответа и/или отправлять следующую команду.
Для отправки и чтения пакетов по I2C мы будем использовать уже известную нам команду библиотеки LibopenCM3 i2c_transfer7( SI4734I2C, SI4734ADR . ) , где SI4734I2C — используемая шина I2C (I2C1), а SI4734ADR — семибитный адрес SI4734 0x11 . О бите записи/чтения за нас позаботится библиотека. В итоге работа с микросхемой вкратце будет представлять собой следующую последовательность действий: инициализация, настройка режима работы, настройка на нужную частоту. Все описанное ниже опирается на содержание документов AN332 «Si47XX Programming Guide» и AN332SSB.
Инициализация
Прежде всего SI4734 нужно инициализировать. Сделать это можно в одном из трех режимов: AM, FM или SSB. Перед началом инициализации документация рекомендует выполнить сброс. Делается это тривиально: надо ненадолго подтянуть к земле REST-пин SI4734. Для задержки используется совершенно ленивая функция, благо точность тут не имеет особого значения.