Например TDA7294

РадиоКот > Схемы > Цифровые устройства > Примочки к ПК

USB FM-передатчик

Автор - Aheir, aheir@radiokot.ru
Опубликовано 24.11.2009

Есть у нас в Питере такое развлечение: на выходные, праздники или в отпуск съездить на несколько дней в Финляндию, благо что до границы недалеко, а визу получить несложно. И все бы хорошо, но приходится по дороге пересекать границу, а поскольку желающих бывает много, процесс этот часто растягивается часа на 2-3, а то и больше. Как можно провести это время, сидя в собственном автомобиле? Мы с супругой предпочитаем посмотреть на ноутбуке какой-нибудь фильм, и вот в какой-то момент мне подумалось, что выводить при этом звук через динамики ноутбука, имея аудиосистему в авто, как-то неправильно. Обычно этот вопрос решается с помощь так называемых автомобильных FM-модуляторов (кто не знает, это такое небольшое устройство, которое втыкается в разъем прикуривателя и умеет передавать в эфир звуковые файлы со встроенной или подключенной к нему USB-флешки или сигнал с линейного входа, достаточно настроить приемник автомобиля на заданную на модуляторе частоту, чтобы услышать этот звук через аудиосистему авто), однако при этом занят разъем прикуривателя, который был бы больше полезен для зарядки ноутбука, и появляется дополнительный провод от выхода звуковой карты ноутбука к модулятору — не сильно удобно, как мне кажется, да и вообще, не наш метод. После анализа существующих на данный момент решений, мне больше всего приглянулось одно, о котором и пойдет речь ниже...

Итак, встречаем: семейство микросхем от Silabs SI47XX, включающее в себя довольно много чипов, предназначенных для приема и передачи радиосигналов. Конкретно нас будет интересовать микросхема SI4711, представляющая собой FM-передатчик со встроенным процессором RDS.

SI4711

Несколько расстраивает политика фирмы Silabs, согласно которой документация на большинство их изделий предоставляется разработчикам только после заключения партнерского соглашения, но Интернет - великая вещь, так что нам вполне хватит для начала того, что выложено здесь. Да и корпус QFN не радует особо, ну да это меньшая из проблем.

Коротко об этой микросхеме. Как уже сказано, это FM-передатчик. Работает в диапазоне 76..108 МГц. Имеет аналоговый стереовход, а также способен принимать звук в распространенном цифровом формате I2S. Понравилась возможность работать в широком диапазоне тактовых частот: в качестве опорной чип использует частоту 32768 ±5% Гц (31130.. 34406 Гц), которая получается из входной частоты RCLK в диапазоне 31130 Hz..40 МГц путем деления ее на число 1..4095 (настраиваемый предделитель). Например, я использовал частоту 12 МГц и для получения из нее допустимых 32000 Гц опорной частоты задавал значение предделителя равным 375. Общение с внешним миром может осуществляться посредством последовательных интерфейсов нескольких типов (I2C, SPI, трехпроводный последовательный), выбор интерфейса осуществляется исходя из состояния входов GPO1/GPO2 микросхемы в момент выхода из состояния «Сброс» (при переходе 0->1 на ножке RST). Через последовательный интерфейс осуществляется перевод микросхемы в активный режим, начальное конфигурирование управляющих регистров, управление параметрами передачи и первичной обработки звука, загрузка данных RDS, а при желании — даже обновление прошивки чипа. Обо всем об этом, и даже гораздо больше, можно почитать в документации, доступной по ссылке выше. Настоятельно рекомендую изучить, если появился интерес к микросхеме.

В качестве эксперимента я единовременно разработал две платы для конструкций на базе микросхемы SI4711: ориентированную на более простое программирование для изучения непосредственно нюансов работы с микросхемой и имеющую при этом существенные размеры, и максимально портативную для использования в связке с ноутбуком. Аппаратное обеспечение в обоих случаях отличается не сильно, но конструкции заслуживают отдельных описаний.

Вариант первый, «габаритный», собран вот по такой схеме:

Подключение к ПК — USB, далее — хаб TUSB2046 (см. статью), к которому подключены преобразователь USB-RS232 FT232BM (см. статью), USB аудио-декодер PCM2702, USB флешка (ну не оставлять же порт свободным) и внешний разъем Mini-USB типа B (все таки пришлось оставить один порт, по сути, пустым). С преобразователем интерфейсов связан управляющий микроконтроллер Atmega8, реализующий все сервисные функции в системе. Сигнал с аналогового выхода PCM2702 поступает на вход SI4711, управление которой осуществляет уже упомянутый микроконтроллер (в качестве интерфейса взаимодействия выбрана шина I2C). На ОУ собран простейший усилитель сигнала с внешнего источника, его выход также подключен к аналоговому входу SI4711, тем самым позволяя передавать в эфир сигнал с внешних источников, подключаемых к 3,5 мм разъему типа мини-джек. Разъем там хитрый (см. фото ниже), от CD-плеера, и поэтому содержит 4 дополнительных контакта. На них на всякий случай выведено питание и аналоговый выход PCM2702: при необходимости можно прицепить внешний усилитель для наушников, например. Также на плате расположены управляющая кнопка и набор светодиодов. Питание (кому из микросхем какое требуется) 5 или 3,3 В, последнее получается с помощью LDO стабилизатора LM1117-3.3. Также имеется простейший усилитель мощности на транзисторе BFG541, исходный вариант схемы взят отсюда, спасибо коллеге m818181, он не против ее использования и распространения.

На этапе сборки и отладки выглядело все это безобразие следующим образом:

Плата 1

В окончательном варианте добавился разъем для флешки рядом с кварцем на 6 МГц и мини-USB разъем рядом с кнопкой, а также экран на ВЧ-части. Кстати, решил сэкономить на кварцах и затактовал чип хаба и FT232 от одного резонатора — работает без вопросов. Ну а SI4711 изначально не имеет встроенного генератора, так что на нее подается тактовая частота 7,3728 МГц с генератора Atmega8. В конце статьи доступны для скачивания проект в P-CAD, содержащий следующие файлы: схема, по которой собиралось (1v1.sch); исходная плата, на которой все собиралось (1v0.pcb); плата, на которой стоило бы все собирать, т.е. с исправленными неточностями и максимально соответствующая схеме (1v1.pcb).

Программа для управляющего МК написана на С в среде CodeVision AVR. Наибольший интерес и ценность представляет библиотека взаимодействия с микросхемой SI4711. Как уже говорилось, в моем случае общение с микросхемой происходит по I2C. Библиотека включает в себя краткое описание параметров и команд микросхемы, функции для установки этих параметров, а также пример инициализации микросхемы. Сейчас за исключением значений опорной частоты, предделителя и некоторых других происходит инициализация микросхемы параметрами по умолчанию. Представляет интерес изучение поведения микросхемы при изменении некоторых базовых величин, а также параметров компрессии звука и т.д. - для этого в прошивке имеется возможность изменения значений параметров через терминал. Теоретически, библиотека может использоваться и для других микросхем (например, SI4710 — без поддержки RDS). Исходники доступны для скачивания в конце статьи. Фьюзы выставлены вот так:

Fuses

При подключении устройства к ПК исходно обнаруживается три устройства: универсальный USB-концентратор, виртуальный COM-порт (FT232BM) и «Динамики USB» (PCM2702). СОМ-порт потребует установки драйверов (доступны на сайте производителя микросхемы, см. статью), PCM-ке ничего не нужно (это устройство становится «устройством вывода звука по умолчанию»). Параметры СОМ-порта — 115200 8N1. При длительном нажатии на кнопку (удержании до звукового сигнала) происходит подача питания на флешку, в терминал выдается сообщение «USB disk on-line» и в системе появляется дополнительный съемный носитель данных — флешка.

Устройства

Флешку можно использовать для хранения, например, необходимых устройству драйверов, управляющей программы, плеера, музыки и т.п. Отключение — аналогично, удержанием кнопки.

После включения устройство выдает в терминал лог инициализации микросхемы SI4711, там можно посмотреть возникающие в процессе ошибки и некоторые установленные значения.

Лог

Устройство запоминает последнюю частоту, на которой происходила передача, в энергонезависимой памяти и при включении устанавливает этот параметр и активирует передатчик. Таким образом, практически сразу после включения устройства начинается передача в эфир как звуковых данных, так и предустановленного сообщения RDS (в текущей версии прошивки сообщение RDS задается при программировании микроконтроллера). Короткими нажатиями на кнопку можно переключать частоту передачи в диапазоне 88-108 МГц с шагом в 1 МГц (всего 21 «пресет»), номер «пресета» отображается в двоичном коде 5-ю светодиодами на лицевой панели. По команде из терминала «АА ХХ ХХ» (в шестнадцатеричном виде), где ХХ ХХ — желаемая частота в явном написании, можно установить любую допустимую частоту вещания. Например, для перехода на частоту 102,3 МГц следует набрать «АА 10 23», а для 98 МГц - «АА 09 80». По команде «ВВ ХХ ХХ», где ХХ ХХ — код параметра микросхемы по даташиту, в терминал выводится значение этого параметра и байт с флагами занятости и ошибками микросхемы. Команда «СС ХХ ХХ YY YY» устанавливает значение параметра XX XX равным значению YY YY, в терминал выводится байт с флагами занятости и ошибками микросхемы. Команда «55» приводит к переинициализации микросхемы (полезно, например, при смене антенны и т.п.). При работе передатчика на частоте, заданной через терминал, 5 зеленых светодиодов отображают в двоичном коде значение циклически инкрементируемой переменной — просто чтобы что-то отображать. При активности микросхемы PCM2702 (если через нее выводится звук) мигает красный светодиод D3, в остальное время он просто горит.

Плата разрабатывалась под корпус GSM-модема, в качестве антенного использован разъем SMA. Антенна переделана из GSM-антенны (удалено все лишнее, противовесы и т.д.) и представляет собой, по сути, просто штырь длиной около 12 см.

Антенна

С такой антенной передача устойчива на расстоянии до 50 м в городских условиях (но в прямой видимости), при применении в качестве антенны отрезка провода около метра длиной дальность передачи возрастает примерно вдвое, устойчиво покрывается весь мой двор («коробочка» из 4 пятиэтажек), пробиваются перекрытия всех 5 этажей. В качестве приемника использовался MP3-плеер с радио.

Второй, портативный вариант, выполнен вот по такой схеме:

Отличия следующие: отсутствие органов управления, отсутствие усилителя, не используется преобразователь USB-RS232 (хотя изображен на схеме и разведен на плате — TUSB3410). Плата выглядит следующим образом:

Плата 2

Окончательно собранный вариант, с установленной флешкой:

Плата 2

Здесь с тактированием получилось еще веселее, чем раньше: от кварца 12 МГц тактуется Atmega8, от нее — PCM2702, к выходу ее буфера подключен к SI4711 — все работает. Только у TUSB2046 собственный резонатор на 6 МГц. Как видно — все корпуса (кроме PCM-ки) — QFN или аналогичные. На выход «Play» PCM-ки подключен светодиод для индицирования ее активности. Флешка подключена навесным монтажом. Один момент: я использовал микроконтроллер Atmega8L (других не удалось приобрести), что неверно при питании 3,3В на частоте 12 МГц. У меня все работает стабильно, но это отдельный случай. Здесь нужно использовать МК без индекса «L». Как и ранее, в конце статьи доступны для скачивания проект в P-CAD, содержащий следующие файлы: схема, по которой собиралось (2v1.sch); исходная плата, на которой все собиралось (2v0.pcb); плата, на которой стоило бы все собирать, т.е. с исправленными неточностями и максимально соответствующая схеме (2v1.pcb).

Для первичной проверки функционирования этой платы был сделан тестовый проект в CVAVR'e, однако основная версия прошивки писалась в AVR Studio на базе исходников отсюда. Это один из вариантов реализации софтового USB на AVR микроконтроллерах, конкретно — виртуального COM-порта. Я интегрировал в исходники библиотеки для поддержки I2C и микросхемы SI4711, также вклинился в процедуру обработки данных USB, так что появилась возможность инициализировать SI4711 и управлять ею. Фьюзы такие же, как и в предыдущем варианте.

Несколько переписана библиотека для SI4711, отключен вывод отладочной информации, система команд упрощена до предела: по команде из терминала «АА ХХ ХХ» (в шестнадцатеричном виде), где ХХ ХХ — желаемая частота в явном написании, можно установить любую допустимую частоту вещания, что подтверждается сообщением «FF XX XX 0C»; «ВВ» выводит в терминал текущее значение частоты, «СС» - переинициализация микросхемы. Работать с устройством из терминала можно на любой скорости от 9600 до 115200 (настраивается автоматически), формат данных 8N1.

Лог

После включения устройство вещает на частоте 100.0 МГц, передавая в том числе и RDS-сообщение, которое также жестко задано в прошивке.

При подключении к ПК обнаруживаются следующие устройства:

Устройства

Для «USB FM Transmitter» потребуется установка драйвера. Вообще, название устройства, а также пару VIP/PID идентификаторов USB можно настроить в конфигурационном файле USB в исходниках. Я поменял VIP/PID (в исходнике и в драйвере), поскольку в исходном варианте устройство прикидывалось программатором AVR910 от Prottoss’a, так как они разработаны на основе одного и того же кода и драйверы совместимы.

Плата разрабатывалась под корпус от кард-ридера, в качестве антенны используется просто отрезок провода, который в свернутом виде замечательно помещается под откидную крышку:

Внешний вид

Дальность не великая, но метров 10 обеспечивает, в пределах квартиры работает, в машине при подключении к ноуту тоже проблем не замечено.

Окончательно оба устройства выглядят так:

Внешний вид

В принципе, впечатления от знакомства с микросхемой SI4711 остались положительные. Хотя есть и ряд негативных моментов. Помимо цены решения, это еще и проблемы с доступонстью микросхем: приходится их поискать. Из двух приобретенных сначала микросхем заработала одна, хорошо что та, с которой я начал опыты. У второй работала только цифровая часть. Проходила инициализация, и – все. Тишина в эфире. Т.е. не тишина, а помехи, поскольку несущей нет. Запаял микросхему из другой партии – завелась без проблем.

Ну а вообще, там еще есть куда копать, так что прошу…

Файлы:
Схема и плата варианта №1 (P-CAD)
Исходники CVAVR для варианта №1
Схема и плата варианта №2 (P-CAD)
Исходники тестового проекта CVAVR для варианта №2
Исходники AVRStudio и драйвер для варианта №2

Ну а все вопросы, как всегда, в Форум.


ID: 352