Детектор Tayloe и цифровая обработка сигналов #13 отчет о проделанной работе

Автор: | 26.03.2026

Теперь можно подвести и промежуточные итоги! Текста не мало, но обещаю, будет интересно!

Почти год ушел на эксперименты, в итоге получился SDR стенд приемной части, построенный на схеме детектора Тейло и MCU STM32H723ZGT6
текущая схема

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

на этой стороне можно еще что-то разместить, например внешний ЦАП!

Питание платы +6…12V, с учетом того, что при питании выше 8V, понижающий стабилизатор на 5V может нагреваться, разница просто уходит в тепло, можно и внедрить DC-DC понижающий, но пока не вижу в нем острой необходимости.

Отдельно стоит отметить, что цена производства плат в соседней стране крайне не высокая! Тут все зависит от количество заказываемых плат, мне 5шт. обошлись в 2700р. по текущим ценам. Общая стоимость стенда плата+компоненты ~5…6 тыс./руб. Но стоит с осторожностью принимать решения при покупке ОУ TS972 на алиэкспрессе, коллега и партнер по данному проекту 4L/R0AFJ при повторении SDR стенда имел печальный опыт покупки пере-маркированных микросхем.

Теперь про изменения в схеме, первое — изменилась входная часть, а именно убран повышающий трансформатор, конечно +5 dB не лишние, но дело в том, что выше 15 MHz  увеличивается разность по чувствительности, т.е. на 10-ке разница по чувствительности с 160m диапазоном составляет уже ~5 dB. В текущем варианте, трансформатор не используется

Разность по чувствительности уже всего около 1…2 dB. Причина в варианте включения смесителя на ключах, исправить это возможно используя другой вариант включения, но об этих экспериментах в следующий раз.

Второе — изменения в аналоговой части, изменились номиналы конденсаторов в активном ФНЧ после которого сигналы I/Q уже подаются на входы АЦП MCU

при данных номиналах полоса ФНЧ уже не 48 kHz (желтый график на картинке ниже), а около 24 kHz (зеленый график)

на зеленом графике можно заметить небольшой подъем АЧХ в конце полосы пропускания фильтра, это связано со стандартными номиналами конденсаторов, можно и ровнее сделать, если вместо 33n поставить 30n

такого номинала у меня не оказалось, а напаивать бутербродом не захотел. Альтернативно сузить полосу этого ФНЧ, не меняя номиналы конденсаторов первоначального варианта, достаточно увеличить номиналы резисторов с 1k до 2,2k. Но в таком случае ухудшается устойчивость работы схемы и при увеличении R взаимодействие с входной емкостью ОУ создает дополнительный фазовый сдвиг, хоть и не значительный. Значит более правильный вариант изменить номиналы конденсаторов в схеме активного ФНЧ.

Буду честным, в первую очередь перед собой, данной крутизны ската фильтра не совсем достаточно. Дело в том, что при сильных сигналах выше уровня S9, которые будут за границей полосы пропускания в 48 kHz, примерно на частотах +/- 25..30 kHz от нулевой частоты после оцифровки, будем наблюдать, на спектре по краям полосы, алиасинг (наложение спектров при оцифровке), т.е. зеркальное отображение сигнала находящегося на частотах +/- 25..30 kHz от нулевой частоты, если мощные сигналы находятся дальше от границ полосы пропускания то они уже практически полностью подавляются. На спектре водопада дисплея стенда этого практически не видно, на ПК, так как разрешение спектра тут в десятки раз выше, этот алиасинг будет видно. Расплата за простоту! А так как обработка сигнала (демодуляция) находится вблизи нулевой частоты, то это вообще ни как не мешает!

Усиление сигнала после смесителя на ключах подбирается номиналами резисторов R23 и R24, таким образом, чтобы не было перегрузки входа АЦП MCU. Номиналы этих резисторов должны быть максимально одинаковыми, от разности их фактического сопротивления напрямую зависит амплитудный разбаланс I/Q сигналов. У меня он получился минимальным, и спокойно корректируется математикой в коде. Еще, что замечу, при подборе номиналов R23 и R24  я обращал внимание не только на перегруз АЦП, но и на уровни собственного шума схемы и шума при подключенной антенне на диапазоне 10m, т.е. подбирал так, чтобы уровень шума с подключенной антенной на 10-ке был чуть выше уровня собственного шума схемы, в таком случае использование УРЧ (усилителя радио частоты) в будущей схеме ДПФ практически не имеет смысла, т.к. УРЧ будет усиливать и эфирный шум вместе с полезным сигналом. А вот в будущей схеме ДПФ, наличие перестраиваемого аттенюатора будет оправдано, особенно это заметно при сигналах выше уровня S9+30 на НЧ диапазонах.

Далее разговор пойдет о программной реализации работы SDR стенда приемной части.

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

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

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

Управление:

  • Механический энкодер с кнопкой
  • Три функциональных кнопки
  • Кнопка RESET — сброс STM32H723ZGT6
  • Кнопка BOOT — режим программирования STM32H723ZGT6 через USB

Старт MCU:

  • Зажата правая кнопка при подаче питания — вывод содержимого страницы внешней флеш-памяти на дисплей, правая кнопка пролистывание дампа вперед, левая кнопка пролистывание дампа назад

  • Зажата средняя кнопка при подаче питания — стирание внешней флеш-памяти, все параметры принимают значения по умолчанию.
  • Зажата левая кнопка при подаче питания — вход в режим настроек.
  • Если ни одна кнопка не зажата при подаче питания — запускается рабочий режим.

Управление через терминал (COM порт), при подключении устройства к ПК через порт USB:

Для данного функционала доработал приложение для обмена со стендом

  • tim8_pwm_on — enable PWM on PC7 — контроль частоты таймера ацп и цап
  • tim8_pwm_off — disable PWM on PC7
  • tim8_pwm_status — show tim8_pwm status
  • xt_freq_set <hz> — set XTall frequency (1000000…29999999 Hz) — установка частоты опорника SI5351, калибровка LO
  • xt_freq_status — show current XTall freq
  • si_driver_set — set SI5351 driver value — установка тока драйвера Si5351
  • si_driver_status — show SI5351 driver value
  • swap_iq_uac_on — enable Swap IQ UAC — инверсия каналов I/Q для передачи в UAC1
  • swap_iq_uac_off — disable Swap IQ UAC
  • swap_iq_uac_status — show Swap IQ UAC status
  • swap_rt_enc_on — enable Swap Rotate Encoder — инверсия направление вращения энкодера
  • swap_rt_enc_off — disable Swap Rotate Encoder
  • swap_rt_enc_status — show Swap Rotate Encoder status
  • dc_on — enable DC correction — коррекция постоянной составляющей
  • dc_off — disable DC correction
  • dc_status — show DC correction status
  • amp_on — enable I/Q amplitude correction — амплитудная коррекция, индивидуальная для каждого из 9-ти диапазонов
  • amp_off — disable I/Q amplitude correction
  • amp_set <val> — set Q/I ratio (0.500…1.500), значение применяется/сохраняется для текущего диапазона
  • amp_status — show AMP correction status
  • phase_on — enable I/Q phase correction — фазовая коррекция, индивидуальная для каждого из 9-ти диапазонов
  • phase_off — disable I/Q phase correction
  • phase_set <deg> — set phase offset (-10.0000…+10.0000 deg), значение применяется/сохраняется для текущего диапазона
  • agc_on — enable AGC DAC output — автоматическая регулировка усиления по аудио выходу с цап
  • agc_off — disable AGC DAC output
  • agc_status — show AGC DAC output status
  • lo_freq_set <hz> — set LO frequency (1000000…29999999 Hz) — установка частоты настройки
  • lo_freq_status — show current LO freq
  • mode_set usb — set USB mode on active band — переключение моды на активном диапазоне
  • mode_set lsb — set LSB mode on active band
  • mode_set cw — set CW mode on active band
  • mode_status — show mode status on active band

Режим настроек:

Вращением энкодера устанавливаются значения параметров настроек.
LO в режиме настроек настроен на частоту 9 995 000Гц — на этой частоте передают эталонные сигналы частоты и времени, а значит легким движением колесика мышки при наведенном курсоре на нужный разряд поля частоты XTall в приложении, можно откалибровать частоту LO по нулям

SETUP page 1:

  • SI Xtall freq — частота опорного резонатора SI5351, левая кнопка — смена шага перестройки
  • SI Clk drv — значение тока драйвера SI5351
  • Swap IQ UAC1 — инверсия каналов I/Q для вывода в UAC1
  • Swap ENC — инверсия направления вращения энкодера

SETUP page 2:

  • DC corr — DC коррекция
  • AMP corr — Амплитудная коррекция
  • PH corr — Фазовая коррекция
  • AGC — Автоматическая регулировка усиления по аудио

SETUP page 3:

  • S-metr corr — Коррекция показаний S-metra
  • Plot top — Верхняя граница спектра водопада
  • Plot range — Диапазон спектра водопада

Рабочий режим RX:

В скобках номера режимов трех функциональных кнопок.

  • Кнопка энкодера — смена режима функциональных кнопок
  • Правая кнопка — (1)выбор шага перестройки белая метка под разрядом частоты смена на 1, красная метка под разрядом частоты на 5, (2)смена моды на текущем диапазоне
  • Средняя кнопка — (1)смена диапазона++, (2)включение/выключение NOTHC фильтра
  • Левая кнопка — (1)смена диапазона—, (2)включение/выключение AGC (автоматическая регулировка усиления аудио сигнала после обработки)

Режим работы АЦП 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 ФНЧ

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

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

Как реализована цифровая обработка сигнала в коде? Ниже архив на модули ЦОС и спектра водопада. Можно посмотреть, если кто, что и подскажет, либо поругает — буду признателен! При копировании просьба указывать ссылку на первоисточник, уважайте многочасовой/многосуточный труд, эта часть для меня была самая тяжелая!

Вот текущая прошивка

Попробовать можно и на китайской отладке FK723M1ZGT6

подключив кнопки, энкодер и дисплей к соответствующим пинам согласно схеме, но нужно быть готовым к тому, что спектр получим такого вида

«холмики» вблизи нулевой частоты, от того, что на китайской отладке аналоговое питание и аналоговая «земля» оставляю желать лучшего. На картинке подан I/Q сигнал на входы АЦП, его видно на +5 kHz. Если подключать например аудио выход трансивера/приемника SoftRock, то нужно обеспечить минимальную длину проводников до входов АЦП MCU, и не стоит забывать, что в схеме софтрока после ОУ нет ФНЧ, т.к. он разрабатывался для использования с аудикартами. И конечно софтрок от стмки управляться не будет.

Если интересуют герберы платы моего стенда, обращайтесь, поделюсь.

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

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

Ютуб
Рутуб

Продолжение следует…

73!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *