Радиоприёмник FM диапазона
Собрал радиоприёмник FM диапазона. Как обычно, цель была «собрать что-нибудь полезное и по пути изучить что-нибудь новое». Волнующую новизну этому проекту придавал микроконтроллер STM32 с которым до сих пор я не работал, хотя в закромах лежат несколько штук разных отладочных плат и программаторов. Ещё очень хотелось использовать провод наушников в качестве антенны, как в промышленной аппаратуре.
Мозгом схемы стал микроконтроллер STM32F103. Выбор был очень прост — у меня они есть. Я уже делал попытку разобраться с этой архитектурой, но безуспешно. К счастью, прогресс не стоит на месте и можно без особых проблем использовать фреймворк Arduino, который берёт на себя все начальные настройки при старте — в прошлый раз именно это меня и остановило.
Первый вариант был собран на модуле TEA5767 — их полно на Алиэкспресс. Управление по шине I2C, дополнительной обвески нужно не очень много, стоят недорго.
Увы, модуль оказался не слишком хорошим. Частота постоянно куда-то «уплывает», сигнал теряется.
Следующая попытка была на модуле RDA5807, с ним этой проблемы не было. По подключению совместим с предыдущим, можно впаять на то же самое место. Для него не нужен дополнительный усилитель, встроенный в микросхему вполне тянет наушники. Вообще, микросхему есть смысл отпаять от модуля вместе с кварцем — и развести для них место на плате. С предыдущим модулем такой фокус проделать будет не так просто.
Ещё пришлось поэкспериментировать с фильтром для разделения антенного и аудио-сигнала. Самый очевидный вариант — отправить общий провод и оплётку наушников на землю через индуктивность, а высокочастотный сигнал в приёмник — заработал, но принимал только две самых сильных радиостанции и то, с помехами. Проблема решилась с добавлением ферритовых фильтров на оба аудио-канала. Оказалось, есть прямо специальные фильтры как раз на диапазон 100 МГц, на схеме они обозначены F1 и F2. Так сигнал с другого конца не утекает в аудио усилитель.
В остальнм схема проста и очевидна — микроконтроллер, питание от литиевого аккумулятора, зарядка при помощи TP4054 через разъём USB Type C. Экран — OLED 128×32. Для управления — джойстик. Влево-вправо — выбор станции, вверх-вниз — громкость.
Экран умеет показывать частоту приёма, уровень сигнала, заряд батареи. Еще в нём есть RDS — название станции и программы в текстовом формате. Но его пока заставить работать не получилось — по большей части показывает кракозябры.
Прошивать микроконтроллер оказалось крайне просто, для этого нужно всего пять проводов. Причём по этим пяти проводам работает полноценный отладчик — можно поставить точку останова в любом месте программы и посмотреть переменные, это гораздо удобнее, нежели выводить всё в консоль.
Управление микросхемой приёмника, экран, кнопки — всё управляется уже готовыми библиотеками, нужно было просто связать всё в единую прошивку.
Завершил проект напечатанный на 3Д-принтере корпус яркого зелёного цвета. Без изысков — прямоугольная коробочка с закруглёнными углами.
Весь проект занял полгода с небольшим — с первого раза не получилось, пришлось делать четыре или пять вариантов схемы, пока всё не заработало (почти) как надо. Так и не удалось заставить купленные неизвестно где и когда микроконтроллеры правильно показывать напряжение батареи, видимо они не оригинальные и аналого-цифровой преобразователь там больше для красоты. RDS глючит, как я писал выше. Но это уже ерунда, пользоваться вполне можно и так.