SDR RX стенд на STM32H723

в 16:15, , рубрики: SDR, STM32H7, tayloe mixer

Давно интересовал вопрос использования 16-битного АЦП STM32H7 для обработки I/Q сигналов в реальном времени.

Почти год ушел на эксперименты и реализацию КВ SDR приемника на базе Tayloe mixer и MCU STM32H723ZGT6, и вот что у меня получилось: принимаемый КВ диапазон 1...30МГц, вывод обработанного аудио через внутренний 12-битный ЦАП или вывод I/Q потока на ПК через UAC1.

SDR RX стенд на STM32H723 - 1

Схема PDF

Четырехслойная плата, размером 100х60мм, спроектирована таким образом, что не задействованные пины MCU выведены на PLS разъемы, для дальнейшего расширения проекта

SDR RX стенд на STM32H723 - 2

Входная часть построена на детекторе Тейло

SDR RX стенд на STM32H723 - 3

пробовал и схемы с трансформаторами, в том числе и с балансным включением, особых изменений не заметил. Пока остановился на данном варианте, но и он не лишен недостатка, разность в чувствительности между 160m и 10m диапазонами примерно 1..2dB, соответственно на десятке слабее.

С выхода смесителя на ключах сигналы поступают на инструментальные операционные усилители, которые обеспечивают хорошее подавление синфазных помех, и далее на активный ФНЧ 4-го порядка выполненный на ОУ по схеме Саллена-Ки

SDR RX стенд на STM32H723 - 4

АЧХ ФНЧ, на картинке модели двух вариантов, 48кГц и ~24кГц

SDR RX стенд на STM32H723 - 5

по факту такого ФНЧ оказалось не совсем достаточно, дело в том, что по краям спектра с полосой 48кГц, просматриваются алиасы от сильных сигналов на частотах примерно +/- 25..30 kHz от нулевой частоты после оцифровки. Но так как основная обработка сигнала выполняется вблизи нулевой частоты, с этим недостатком можно смириться!

Далее сигналы идут непосредственно на входы АЦП STM32H723ZGT6.

Ключевой смеситель тактируется дешевым генератором Si5351 с частотой х4

SDR RX стенд на STM32H723 - 6

Код программы MCU написан в среде STM32CubeIDE, используются библиотеки HAL, TinyUSB (составное USB устройство) и CMSIS-DSP (цифровая обработка сигнала) входящей в состав STM32CubeMX. Почему HAL? А потому, что использование HAL это быстрый вход в разработку приложений на MCU STM32!

На дисплее отображается текущая частота настройки, активность AGC/NOTCH, уровень принимаемого сигнала по шкале S-metr, спектр водопада в полосе +/-24 kHz от нулевой частоты, ноль — это центр спектра водопада, на спектре отображаются границы полосы пропускания при демодуляции. В нижней части дисплея отображаются режимы функциональных трех кнопок. При подключении по USB к ПК, спектр водопада и уровень сигнала S-metr, не отображаются, выводится соответствующая надпись на дисплее

SDR RX стенд на STM32H723 - 7

Все настраиваемые параметры хранятся во внешней флеш-памяти.

Управление осуществляется механическим энкодером с кнопкой, и тремя функциональными кнопками.

При подключении устройства к USB компьютера, в системе определяется составное USB устройство, COM порт, и аудио устройство записи.

Осваивал ЦОС сначала с разработки приложения на C# для оценки/обработки сигналов с АЦП STM32H723

SDR RX стенд на STM32H723 - 8

Приложение позволяет анализировать не только сырые данные I/Q, но и WAV файлы с I/Q сигналами.

На том же C# был написан генератор I/Q сигналов

SDR RX стенд на STM32H723 - 9

Режим работы АЦП MCU выбран как два независимых АЦП1/2, но тактируются они одним сигналом триггера тамера 8 с частотой 48 kHz, хотя в STM32 есть парный режим работы АЦП — Dual mode. Как утверждает документация от ST, в данном режиме выборка данных с двух АЦП происходит в один момент времени, но как я не бился с данным режимом, постоянно получал линейное увеличение зеркала сигнала при уводе частоты сигнала от нуля. Либо я читаю документацию поперек, либо что-то другое, чего я еще не знаю!

После оцифровки к сигналу применяются коррекции: DC — удаление постоянной составляющей, амплитудная и фазовая коррекции, коэффициенты этих коррекций, кроме DC для каждого диапазона свои. После коррекций сигнал отправляется в кольцевой буфер, далее в режиме подключения по USB к ПК сигналы I/Q отправляются в UAC1 для обработки на ПК, а в автономном режиме работы (без ПК), сигналы I/Q обрабатываются в MCU, выполняется быстрое преобразование Фурье (FFT) для спектра водопада, демодуляция SSB/CW, затем применяется АРУ и/или NOTCH фильтр, и в завершении своего цифрового пути, сигнал отправляется на внутренний ЦАП (цифро-аналоговый преобразователь), выход ЦАП внутри MCU направлен на внутренний операционный усилитель OPAMP1 который работает в качестве буфера, далее через простой RC ФНЧ, выполненный на R45 и C75, сигнал уже снимается либо на наушники, либо можно подать на аудио УМ для использования динамика. Вот как выглядит сигнал с внутреннего 12-ти битного ЦАП без RC ФНЧ и с RC ФНЧ

SDR RX стенд на STM32H723 - 10
SDR RX стенд на STM32H723 - 11

Внутренний ЦАП MCU тактируется тем же триггером таймера 8 что и АЦП. Внутренний ЦАП имеет разрядность 12 бит. Но если не быть аудиоманом, этого вполне достаточно для комфортного прослушивания как радиолюбительских так и вещательных КВ станций. Проводил эксперименты с подключением внешнего дешевого, но очень не плохого ЦАП на базе PCM5102 выполненного в виде отдельного модуля

SDR RX стенд на STM32H723 - 12

тут уже разрядность можно использовать от 16 до 24 бит, и соответственно звук даже в варианте 16 бит на выходе этого ЦАП более приятный для восприятия.

Фрагменты кода ЦОС, есть у меня на сайте. Там же и история проекта.

Дальше планирую кроме оптимизации наработанного, перейти и к передающей части!

В завершении данного повествования видео работы моего стенда, в ролике три сцены: работа приложения, автономная работа на внутренний ЦАП любительский диапазон 40м и вещательный диапазон 41м, сигнал с антенны CW40100, подается напрямую на вход смесителя без ДПФ.

Тут несомненно есть еще над чем работать!

73!

Автор: R9OFG

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js