Fm приемник с цифровой шкалой своими руками

Fm приемник с цифровой шкалой своими руками

Цифровая шкала для FM приемников.

Автор: Primus
Опубликовано 12.04.2007

Цифровая шкала предназначена для использования совместно с FM-приёмниками супергетеродинного типа на ИМС СХА1191, СХА1238, ТА2003, ТА8127, ТА8164, ТА8167, ТЕА5711 и др. (кроме К174ХА34, А7021, TDA7021, TDA7088,KA22429).
Кстати, схему приемника на CXA1238 можно посмотреть вот тут.
Устройство состоит из СВЧ усилителя (эмиттерного повторителя), цифрового и индикаторного блоков.
Смотрим схему:

Усилитель цифровой шкалы припаивается штырьком к плате тюнера непосредственно в точке соединения контура и гетеродина с микросхемой тюнера: СХА1191-(вывод 7), СХА1238-(вывод 22), ТА8127-(вывод 21), ТА8164-(вывод 13), ТА8167-(вывод 21), ТЕА5711-(вывод 23). При этом, за счёт внесения дополнительной емкости усилителя, возможно небольшое смещение FM-диапазона. Для возврата к исходному состоянию необходимо (ориентируясь по показаниям шкалы ) немного растянуть витки гетеродинной катушки.
Изначально была изготовлена шкала с шагом 100кГц, после изучения даташитов была изготовлена шкала с шагом 50кГц.
Для второго варианта необходима точная настройка тюнера — последний раряд не устойчив, цифры скачут. Цифровой дисплей сделан в двух вариантах: 4-х разрядный на АЛС324Б и 5-и разрядный на дискретных светодидах АЛ307, который с лицевой стороны прикрыт маской с сегментами цифр.

Печатную плату в формате Srint Layout 4.0 можно взять тут.

Источник

Радиоконструктор: FM радио на базе Atmega328-P и RDA5807M

Добрый день, уважаемые хабражители!

Меня зовут Михаил Матвеев, и я хотел бы представить Вашему вниманию проект современного «радиоконструктора», основанного на МК Atmega328 и чипе RDA5807M.

Предыстория

Я думаю, многие из вас не только слышали, но и непосредственно сталкивались с такой платформой, как Arduino. И как показывает моя личная статистика, очень немногие заходят дальше, чем поморгать светодиодами. Когда я познакомился с Arduino в первый раз, меня останавливало то, что не было идей, как именно я бы мог использовать все возможности того же UNO на «полную катушку». Хватило только на сборку простенького робота на двух колёсах и сигнализации. Вместе с тем, хотелось сделать что-то более основательное.

Тогда я вспомнил о своем детстве, в котором были так называемые «радиоконструкторы». Суровый советский DIY Kit, который при правильной сборке и грамотной пайке даже начинал работать, и ловил радиостанции в различных диапазонах: Юность, Электрон-М и другие.

Ни один из таких Kit’ов мне не достался, зато достался ЭКОН-1:

Основной «фишкой» этого конструктора было то, что с его помощью можно было быстро и просто собрать большое количество различных устройств, от простых «пищалок» до вполне полноценного радиоприемника.
ЭКОН-1 — одна из многих причин, по которой я вообще оказался в сфере IT. И мне пришло в голову, что было бы неплохо создать современную версию подобного конструктора, чтобы все желающие могли получить удовольствие от только что собранного своими руками девайса.

Прототип на монтажной плате

Мой друг, талантливый инженер Константин Томаревский, поддержал идею, и мы начали думать о том, как сделать первый прототип.

Идея была в том, чтобы создать FM приемник, которым можно было бы управлять через МК.
Первый прототип был собран на монтажке, и стало понятно, что это работает 🙂

Для самой первой версии были выбраны следующие компоненты:

1. МК Atmega328P-PU
2. RDA5807M
3. Дисплей Nokia 5110

Такой микроконтроллер используется в Arduino UNO, соответственно, наше устройство совместимо с UNO на аппаратном уровне.

RDA5807M — «сердце» нашего конструктора. Этот тюнер имеет следующие возможности:

— Технология КМОП
— Монолитный корпус, не требует внешних компонентов (почти)
— Полоса частот: 50-115 МГц
— Шаг между каналами – от 200 до 25 кГц
— RDS/RBDS
— АЦП и встроенный синтезатор частот
— Адаптивное подавление шума
— Цифровой интерфейс (I2C)
— Уровень сигнала (RSSI)
— Усилитель
— Регулировка громкости звука

Дисплей Nokia — черно-белый, 84х48 пикселей. Он очень прост в подключении и управлении.

После пайки на монтажной плате получилось как-то так:

Было решено использовать Bootloader от Arduino, это позволило сохранить совместимость со всеми многочисленными библиотеками и существенно снизить порог вхождения для тех, кто уже имел какой-либо опыт работы с платформой.
Интерфейс взаимодействия с пользователем реализован следующим образом. Три кнопки, подключенные к аналоговому входу МК через резисторы, используются для переключения режимов и управления приемником. Еще одна кнопка служит для перезагрузки МК. Экран, соответственно, отображает информацию о громкости, станции и т.д.

ЛУТ, фоторезист и отладка

После успешных испытаний на монтажной плате мы решили создать ещё несколько прототипов методом ЛУТ (а в дальнейшем — фоторезистом). Также мы решили усовершенствовать приемник, добавив туда ещё один усилитель звука для подключения не только наушников, но и внешнего динамика. Выбор пал на PAM8403, это простой и недорогой усилитель, который требует питания 5В.

Первый прототип, изготовленный методом ЛУТ, выглядел следующим образом:

ЛУТ — хорошая штука для относительно быстрого прототипирования в домашних условиях, но когда дело доходит до двухсторонних плат, начинаются сложности. Количество компонентов на плате увеличивалось — например, мы решили разместить на плате разъем для программатора, чтобы не было необходимости каждый раз извлекать МК для перепрошивки. Так, последующий прототип стал двухсторонним, был изготовлен методом фоторезиста и стал выглядеть намного приятнее:

Следующим шагом был отказ от «навесных» компонентов, которые мы размещали на плате при помощи однорядных PINов. Так, было принято заменить усилитель на LM386N, установить преобразователь уровней CD4050BE. Всё это усложнило конструкцию, но устройство стало выглядеть намного лучше.

Итоговый прототип, изготовленный нами в домашних условиях, выглядел так:

Заказ печатных плат

В Китае можно заказать печатные платы, выполненные промышленным способом. Стоимость выходит относительно небольшой даже при малых тиражах, а время ожидания (включая доставку) как правило не превышает 2-3 недель.

Первую «партию» плат заказали на PCBWay. Так она выглядела:

Одна из проблем, с которой мы по неопытности столкнулись: металлизация «съедает» значительную часть размера самого отверстия, поэтому некоторые компоненты с трудом «влезали» в нужные отверстия. При проектировании схемы необходимо учитывать этот момент.

По результатам тестирования мы ещё немного доработали конструкцию, добавив несколько конденсаторов для более стабильной работы устройства. Собрали ещё один прототип:

Разъём USB используется для питания приёмника. Питание также подаётся при подключении программатора.

Прошивка

Отдельно стоит остановиться на прошивке. Она написана на C++ и мы распространяем её по лицензии GPLv3: https://github.com/xtremespb/fm_receiver.Я практически не разрабатывал на C/C++, поэтому (вероятно) код далёк от идеала и может содержать ошибки, но GPL на то и GPL, чтобы можно было его дорабатывать сообществом 🙂

Текущие возможности прошивки включат в себя:

— Ручную и автоматическую настройку станций
— RDS
— Управление громкостью
— Включение режима усиленных басов
— Включение и отключение подсветки дисплея
— Отображение и динамическая визуализация уровня сигнала

В следующей, четвёртой по счёту ревизии, мы сделаем ещё несколько полезных «фишек»: подключим левый и правый каналы к аналоговым входам на МК, что позволить «визуализировать» поступающий аудиосигнал.

Кстати, возможности устройства не ограничиваются радио! Никто не мешает, например, написать какую-нибудь игру (интереса ради я сделал старый добрый Arkanoid) или другую программу, использующую возможности платы.

Production

Разработка устройства от идеи до реализации заняла около 6 месяцев, что, с практически полным отсутствием опыта в данной области, не так уж и плохо.

На данный момент у нас есть около 10 полностью собранных комплектов, которые включают в себя всё необходимое для сборки своего собственного устройства:

— МК Atmega328P-PU
— Преобразователь уровня CD4050BE
— Дисплей Nokia 5110
— Приемник RDA5807M
— Программатор USBasp
— Операционный усилитель LM386N
— Разъемы под МК и программатор
— USB B, Audio Jack 3.5, три кнопки, провода, однорядные коннекторы
— 11 резисторов и 12 конденсаторов, 4 индуктивности, кварц, стабилитрон и светодиод
— Динамик
— Печатная плата

Для сборки понадобится припой, флюс и паяльник, больше ничего не нужно.
Все комплектующие упакованы в небольшую коробку из «крафтового» картона:

Исходники прошивки уже выложены на Github; Gerber-файл, принципиальная схема и инструкция по сборке будут также опубликованы позднее.

Источник

Простой цифровой радиоприёмник

Решил-таки и я разразиться статьей на тему, которая интересна мне. Тема: цифровое радио, причем это не то псевдо радио, которое передается по сети интернет или вещание в цифровом формате, а нормальное (тру) коротковолновое радио (хотя ничто не мешает работать и с УКВ), только вот весь тракт самого радиоприемника реализован математическим путем.

Весь принцип в нескольких словах чтобы было понятнее: взяли антенну и подключили ее к АЦП, а дальше преобразование, детектирование, усиление, фильтрацию выполнили математическим путем и с помощью ЦАП-а или ШИМ вывели сигнал на динамик… и… слушали и радовались: о).

Зачем вообще это надо, паяли бы себе все как раньше аналоговым способом и не парили бы мозг? Ну, во-первых, это круто, во вторых за этим будущее (и даже уже давно настоящее). Ну а в третьих, как бы ни казалось странным, это схемотехническая простота, возможность нахерачить таких приемников внутри хоть десятки и с одной антенны принимать все сразу одновременно, видеть спектр, как участка, так и всего принимаемого диапазона в реальном времени. Фильтровать и декодировать сигналы, так, как аналоговым способом никогда не получиться и прочее, прочее, прочее… Ну что? Интересно? Если да, то поехали дальше…

Собственно говоря, тема сложная, как среди радиолюбителей, так и среди профессионалов. В принципе то, что я буду рассказывать ниже, это самый примитив, да и так никто в реальности не делает: о), однако примитив позволяет хотя бы по минимуму въехать в тему и получить первые положительные результаты с относительно дешевым железом. Т.е. смысл этой писанины не в самой писанине, а в том возникнет ли интерес у местных обитателей творить в данном направлении. Если интерес будет, то возможно, если меня не одолеет мегалень, я напишу продолжение…

Дискламер

Я не являюсь специалистом в области ЦОС и ПЛИС. И я не несу никакой ответственности за потраченное вами время, деньги, испорченные детали, и/или разрыв шаблона, ниасилил, что это было, и других батхёртов – нужное подчеркнуть, вызванных этой статьёй.

TTX приемника

Тип приемника: связной
Диапазон принимаемых частот: 0.1 – 30Мгц
Тип принимаемой модуляции: SSB, DSB
Полоса пропускания: 200 – 3000 Гц
На этом собсно, и все… для начала хватит, думаю и этого.: о)

Структура

Итак, структура нашего радиоприемника будет такая:

Это гетеродинный приемник, по сути, приемник прямого преобразования. Преимущество такой структуры это ее простота. Дальше преимущества все заканчиваются: о), но это вас не должно пугать т.к. это работает …

Что тут есть: Z1 – это входной полосовой фильтр увеличивающий селективность приемника; G1 – гетеродин приемника, перестраивая частоту которого мы можем настраиваться на радиостанции; Z2 – НЧ фильтр основной селекции; U1 – смеситель, в нем переносится спектр сигнала на нулевую частоту. (это так называемый Digital down converter) Т.е. на выходе смесителя образуется частота fсм = fвх – fгет, а так же будет приниматься fсм = fгет – fвх, и прием станции возможен, если частота fсм попадает в полосу пропускания фильтра основной селекции Z2. Где, fгет – частота колебаний гетеродина, fвх – частота принимаемой радиостанции.

Принцип работы в картинках

Подробнее о работе приемника прямого преобразования читайте в [1], переписывать книжки мне лень…

Но это структура аналогового приемника, а нам надо родить структуру цифрового, что делать? Ну что поделать, придется рожать… При этом мы родим тоже самое, только исходя из цифровых реалий.

Фильтр Z1 хоть и полезен, но на первых парах мы ограничимся онтиалиазинговым фильтром. Я думаю все догадались для чего он нужен. Далее нам понадобиться входной усилитель и одновременно он будет драйвером АЦП. В принципе можно и без усилителя обойтись, однако, это относительно актуально при АЦП начиная от 14 бит. Но они довольно дороги и ради эксперимента мало кто осилит, поэтому придется ставить усилитель.

АЦП – понятное дело что высокоскоростной, конвейерный с параллельным интерфейсом, про конкретные модели я напишу позднее, для начала пусть будет 12 бит 80 Msps. С такими харками используя первую зону Найквиста мы сможем принимать сигналы этим приемником от 100 Кгц (теоретически можно от 1 Гц и даже меньше) до 40Мгц в теории, в реальности сделаем небольшой запас, например до 30 Мгц.

Далее идут уже цифровые блоки
G1 – гетеродин. В данном случае нам нужен цифровой синусоидальный генератор, а именно генератор с потоком данных формирующим колебания по синусоидальному закону. Для этой цели нам подойдет DDS генератор прямого цифрового синтеза, нам надо будет его реализовать программно. Чтобы настраиваться на станции он должен быть перестраиваемый.

U1 – смеситель. Ммм, а что такое смеситель с математической точки зрения? Это обычный знаковый умножитель, в данном случае двух дискретных потоков данных. На один из его входов поступает поток данных 960 Мбит/c (12*80М) от АЦП включающий в себя всю информацию, творящуюся на диапазоне от 100 КГц до 30МГц. На другой вход смесителя подается поток данных с гетеродина. Смеситель производит знаковое перемножение этих двух потоков, в результате на выходе имеются данные с той же скоростью 80М слов в секунду но уже с большей разрядностью. При этом фазы колебаний складываются, а амплитуды перемножаются. В результате спектр принимаемого сигнала переноситься на нулевую частоту.

Так, после смесителя у нас поток данных с бешеным оверсеплингом (80Msps), а по условию нам надо всего то полосу пропускания до 3КГц. Очевидно, что никаких ресурсов не хватит, чтобы с ходу такой поток данных сразу отфильтровать до 3Кгц. Поэтому нам нужно выполнить децимацию (уменьшение частоты дискретизации), до приемлемого уровня, например до 78125 Гц. Почему до такой частоты? Да в принципе можно до любой, просто 80 000 000/1024 = 78125. До любой, это я конечно погорячился, но про это как-нибудь в другой раз: о). Эту функцию у нас выполняет некий CIC фильтр, он же дециматор и по совместительству фильтр. Почему какой то еще фильтр в дециматоре, почитайте например, тут.

Кроме того, CIC фильтр увеличивает разрядность и тем самым увеличивает динамический диапазон нашего приемника, но для наших целей, это пока не особо актуально, про это как-нибудь тоже в другой раз…

Теперь у нас на выходе CIC фильтра имеет место поток данных с частотой следования 78.125 КГц. Этот поток мы уже без всяких проблем можем фильтровать обычными цифровыми фильтрами.

Далее у нас по списку FIR фильтр основной селекции. Это обычный КИХ фильтр с полосой пропускания 200 – 3000Гц. В данном случае полосовой фильтр. Порядок фильтра и коэффициенты посчитаем чуть позже. Почему от 200 Гц? Да можно и от нуля, однако, в этом случае может появляться от наводок сети фон переменного тока, что не очень приятно. Поэтому мы заранее его обрежем, на качестве сигнала это сильно не отразится, так как приемник у нас связной, а не радиовещательный.

Усилитель, здесь я думаю, вопросов не возникнет, это обычная функция умножения на коэффициент или сложение сигнала с самим собой.

Далее сигнал подается на ЦАП, ну или на ШИМ формирователь НЧ сигнала. Тут думаю понятно.

Железо

Пунктирной линией на структурной схеме выделена та часть, которую мы должны реализовать программно. Теперь давайте подумаем, что в состоянии в реальном времени пережевывать поток данных 960 Мбит/c? Очевидно, что только ПЛИС. Какая-нибудь FPGA – шка, в принципе для наших целей пойдет почти любая мелкая, например спартанец XC6SLX9. Сейчас демки с такими плисками довольно дешевы. Я буду использовать XC6SLX9.

АЦП – для экспериментов рекомендую смотреть на какие-нибудь 12 битники, типа AD9236, AD9235 или аналогичные, можно применить и менее скоростные версии этих АЦП, они дешевле (если повезет, может даже семпл дадут; о) ), однако не забываем менять проект под характеристики АЦП. Про динамический диапазон и остальные критерии выбора АЦП как-нибудь в другой раз…

Тактовый генератор для АЦП и плис, тут в принципе можно на первых парах использовать любой с прямоугольными импульсами на выходе. Для серьезных целей конечно подобный ширпотреб не применим по фазовым шумам, но об этом тоже как-нибудь в другой раз: о)

Остальные детальки, посмотрите в схеме моего макета, иначе эта статья никогда не закончиться.
Не забываем про то, что интерфейс у АЦП – параллельный LVCMOS, что накладывает некоторые ограничения на способ монтажа. Если будете лепить АЦП на отдельной платке и приклеивать ее к демке с плисиной, постарайтесь выбрать линии минимальной длинны. Тоже касается и к цепям тактирования АЦП и плис.

Программная реализация

Ну что? Если с плисиной определились, запускаем Xilinx ISE и создаем новый проект. Я не буду описывать полностью весь процесс создания проекта, а расскажу только о тех его частях, которые непосредственно относятся к структуре приемника. С остальным думаю, разберетесь сами, не маленькие: о).

Начнем с гетеродина, т.е. с DDS генератора. Для его реализации удобно воспользоваться уже готовым логическим ядром от Xilinx. Там уже за нас все придумали, и изобретать велосипеды смысла не вижу.
Тут в принципе все просто, задаем системную частоту 80 МГц, 12 битный выход. Разрешение 10Гц, один выход типа SIN, установим возможность программировать аккумулятор фазы, что позволит перестраивать его по частоте. Режим выхода по амплитуде – полный диапазон. Установим начальную выходную частоту 7.030 МГц.
Выглядит это примерно так:





Такс, собственно гетеродин у нас теперь есть.
Идем дальше, смеситель. В качестве смесителя можно воспользоваться готовым умножителем, но я для разнообразия набросал его на Verilog-е.

Как видно приходится выходную амплитуду ограничивать, иначе на выходе будет чрезмерно большая разрядность. CIC фильтр может пережевать только 20 бит, поэтому последние 4 бита отбрасываем. Это равносильно делению на 16.

Далее у нас на очереди создание дециматора – CIC фильтра. Тут тоже нас спасет логическое ядро от Xilinx. Коэффициент децимации 1024, частота 80 Мгц, вход 20 бит, выход 24.



Дальше по списку у нас FIR фильтр основной селекции. Как вы уже наверное догадались, опять воспользуемся логическим ядром от Xilinx, но для начала рассчитаем коэффициенты фильтра.

Расчет коэффициентов фильтра основной селекции.

Для расчета воспользуемся простой бесплатной програмулькой WinFilter. Устанавливаем фильтр FIR, тип Band Pass (полосовой фильтр). Модель Raised Cosine (косинусоидальный – обеспечивает наилучшие характеристики фильтра при малых количествах коэффициентов). Частоты среза по уровню -3дб, 200Гц и 3000Гц. Фактор скатов фильтра Roll off Factor устанавливаем самый крутой 0.1, чем больше это число, тем более пологий скат фильтра. Порядок фильтра – кол-во коэффициентов 151, разрядность 16 бит.

АЧХ фильтра

Сохраняем все в C коде, затем из получившегося файла копируем коэффициенты в соответствующую строку логического ядра при синтезе FIR фильтра.
Он же, но подробнее в логическом ядре FIR фильтра.

В настройках устанавливаем частоту семплов 78.125 Кгц, клок 80Мгц. Разрядность коэффициентов 16 бит, знаковые целые, квантизованные. Вход 24 бит, выход 16 бит. Выглядит это так.




Остальные вспомогательные блоки посмотрите в проекте. В принципе все достаточно просто. Очень многого конечно я не рассказал, но и так уже портянка получилась страшная… Возможно, как-нибудь в другой раз.

Что может приемник. При включении частота приема 7.030 Мгц (любительский диапазон 40 м), с помощью энекодера частоту можно крутить туда-сюда, шаг 10Гц. Энкодер висит на разъеме J3, пины 5 и 7. Светодиодик D4 сигнализирует о том, что сигнал на входе АЦП занимает весь диапазон, т.е. типа клиппирование.

А это мой макетик

Видос, качество хреновое конечно… что поделать. Так как я в последнее время радиосвязью занимаюсь по стольку по скольку, в основном конструированием, а антенну оторвали товарищи прокладывающие кабельное ТВ, прием велся на кусок провода 5М, да и прохождение в этот вечер было не ахти, выловил только пендоса в контесте орущего…: о).

Ну вот собственно и все, теперь у вас в руках полностью цифровой радиоприемник. Собирайте, пробуйте, эксперимиентируйте. Надеюсь было интересно.: о) Спасибо за внимание!

В архиве найдете: Схему, проект в Xilinx ISE.

Источник

Читайте также:  Детская бочка своими руками
Оцените статью