Проект Селенит
560 subscribers
118 photos
1 video
18 files
84 links
Download Telegram
При переустановке ПО столкнулся с тем, что ST просто не даёт скачивать своё IDE с сайта. Пришлось получать актуальную версию обновлением старой
Сегодня STM32CubeIDE в очередной раз обновился и сломал мне весь проект. С трудом "откатил" версию HAL с STM32Cube_FW_F4_V1.27.0 на STM32Cube_FW_F4_V1.26.2.

На более младшей версии не работает буфер I2S, на более старшей переделали структуру устройства USB
На День радио публиковаться не стал, хотя есть идея о "пермском периоде" А.С. Попова.

С Днём радио! 73!
Третью неделю веду расследование по делу о "поражённых точках". Их очень много: около каждой частоты, кратной 1000 кГц, на частотах 12288 кГц и 24576 кГц, около 25000 кГц и на многих случайных частотах. Экранирование частотозадающих частей эффекта не дало.

Помеха на частотах 12288 кГц и 24576 кГц, скорее всего, идёт из кодека: надо собрать радиочастотный тракт на другой плате, разнести его с кодеком и посмотреть, что будет с уровнями помех на этих "поражённых точках".

Помехи на частотах, кратных 1000 кГц. Случайно обнаружил мощную помеху на частоте около 8333,33 кГц, сразу проверил частоту 16666,67 кГц: похоже, генератор 25 МГц работает на третьей гармонике. Сигнал на выходе - достаточно мощный. Вход синтезатора - перегружен. Схема Tayloe чувствительна к высшим гармоникам...

Надо будет попробовать запустить синтезатор от кварца
Запустил синтезатор от кварца 25000 кГц: помеха на частоте около 8333,33 кГц пропала, помеха на частоте 16666,67 кГц осталась, помеха на частоте 25000 кГц значительно ослабла.

Вывод: схема с генератором не только дороже, но и хуже работает 🤷‍♂️
На фото выше - иллюстрация, как непросто припаивать провода при шаге ножек микросхемы 0,5 мм.

Промежуточные итоги по замене генератора кварцевым резонатором:

1. Кварцевый резонатор был выпаян из старой материнской платы. Частота по маркировке 25.000. При ёмкости входных цепей 8 пФ встроенный генератор Si5351a запустился на частоте 25009367 Гц. При ёмкости 10 пФ - на частоте 25008045 Гц.

2. Осталась сильная помеха на частоте около 16672030 Гц. Очень похоже на приём на третьей гармонике второй гармоники встроенного генератора (50016090 Гц).

3. Помеха на частоте 24576 кГц (I2S MCLK) никуда не ушла. Помеха на частоте 12288 кГц ослабла. Помехи на частотах, кратных 3072 (I2S BCLK), заметны, начиная с частоты 15360 кГц и выше.
Промежуточный итог борьбы с помехами от кодека:

1. Из схемы балансного квадратурного детектора (состояние «Было») по подозрению в паразитных резонансах на частотах порядка 25 МГц был исключён трансформатор.

2. На тех же комплектующих был собран типичный для подавляющего большинства SDR-радиостанций QSD (состояние «Стало»).

3. Уровень помех от кодека возрос.

4. Балансировка QSD значительно ухудшилась: подавление «зеркального» канала практически не происходило.

5. При восстановлении схемы в состояние «Было» характеристики QSD стали прежними.
Планы на ближайшее будущее:

1. Нужно будет собрать радиочастотный тракт на макетной плате и повозиться с ним.

2. Разместить MCU, LCD, кодек и синтезатор на отдельной плате и закрыть эту всю электронику каким-нибудь стандартным экраном.
Решил перед отпуском обеспечить небольшой задел по обработке сигналов и начал «выпиливать» из проекта uSDX алгоритмы для обработки IQ-сигнала.

Надеюсь, если это работает на Arduino Uno, то и на stm32f411ceu6 это все можно приспособить
Собрал для отладки плату с MCU, синтезатором частоты и аудиокодеком. Исключил радиотракт, дисплей, клавиатуру и энкодер.

Отрабатываю пока схему синхронизации потоков, предложенную здесь:
https://habr.com/ru/post/662141/

Затем возьмусь за сигма-дельта модуляцию, чтобы исключить кодек.

Следующее на очереди: превратить 12-битный поток от встроенного в MCU АЦП в 16-битный
Удалось извлечь модуль с сигма-дельта модуляцией из проекта, описанного здесь: https://habr.com/ru/post/662141/

Модуль не желал работать до тех пор, пока не включил в компиляторе оптимизацию кода
С АЦП в общих чертах разобрался: вменяемый звук удалось получить при частоте сэмплирования 192 кГц с длительностью обработки 28 циклов на канал и включенном DMA.

Дальнейшая обработка: 12-битный поток 192 кГц преобразуется в 14-битный поток 48 кГц простым суммированием четырёх соседних отсчетов. Чтобы не усложнять дальнейшую обработку, полученный результат умножается на четыре (получаем 16 бит), а затем из него вычитается 32768, чтобы из uint16_t получить int16_t.

Синхронизация с USB: когда поток с АЦП опережает поток через USB, при суммировании отсчётов из буфера DMA отбрасывается каждый 96-й отсчёт, и вместо 48-ми 16-битных отсчётов получаем 47; при отставании каждый 96-й отсчёт дублируется, и получаем уже 49 16-битных отсчётов.

Особенности: модуль с сигма-дельта модуляцией при включении забирает слишком много ресурсов. Пришлось включить в компиляторе оптимизацию по скорости.

Требуемые доработки: поставить на входы АЦП нормирующий усилитель с Ku = 2 и ФНЧ с частотой среза 23 кГц
👍1
avr121-8003a.pdf
118 KB
Вдумчиво изучил этот замечательный документ.

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

Два бита: четыре в квадрате, 16 сэмплов, два бита влево. Три бита: четыре в кубе, 64 сэмпла, три бита влево и т.д.

Удалось частоту выборки поднять только в восемь раз, но результат - потрясающий: динамический диапазон 46.6 dB, SNR -47 dB.

Скромно, конечно, но это в полтора раза по уровню лучше, чем при увеличении частоты в четыре раза: динамический диапазон 43.9 dB, SNR -43.7 dB.

А без "оверсэмплинга" всё очень скромно: динамический диапазон 37.4 dB, SNR -37.1 dB.
Подготовил к публикации результаты экспериментов с встроенной АЦП, код проекта выложил на:
https://github.com/dmitrii-rudnev/selenite-habr-uac

При работе над проектом поменял в нём драйвер синтезатора si5351a. За основу взял драйвер из uSDX:
https://github.com/threeme3/QCX-SSB.

Драйвер исправно выдаёт квадратурный сигнал на частотах выше 3500 кГц. За выходные перепробовал всё, чтобы понизить этот предел до 1480 кГц (как написано в комментариях), но безрезультатно.

Чтобы получить квадратурный выход на частоте 1480 кГц, нужно понизить частоту PLL до 1.48 * 126 = 186.48 МГц.

Оказалось, это непросто: не все чипы на такое способны. В результате удалось получить квадратурный сигнал только на частотах выше 2700 кГц, т.е. понизить частоту PLL ниже 352 МГц не удалось.

Самые вменяемые материалы по теме:
1) http://zl2ctm.blogspot.com/2019/01/si5351-quadrature-clock-output-down-to.html
2) https://groups.io/g/BITX20/topic/si5351a_facts_and_myths/5430607
Неплохое описание трансивера QCX от Hans Summers (G0UPL):
https://qrp-labs.com/images/news/dayton2018/fdim2018.pdf
«Драйвер исправно выдаёт квадратурный сигнал на частотах выше 3500 кГц. За выходные перепробовал всё, чтобы понизить этот предел до 1480 кГц (как написано в комментариях), но безрезультатно»

Поразительно, но si5351a, который я использовал в публикации про CAT-интерфейс работает на частотах ниже 3500 кГц как ни в чём не бывало...

UPD: Судя по маркировке «041» на неработающих на низких частотах чипах, они изготовлены на 41-й неделе 2010 года. Скорее всего, это Rev. A, а не B.

Печально это, хоть заказывай в КНР платки и синтезаторы с них «сдувай» 😜
Дополнил цикл про составное устройство USB двумя публикациями по его доработке в полноценную звуковую карту USB:

6. Звуковая карта USB на STM32. Часть 1: Используем кодек I2S

7. Звуковая карта USB на STM32. Часть 2: Используем встроенный АЦП

Предыдущие публикации цикла:

Составное устройство USB на STM32. Часть 1 - 4

CAT-интерфейс для трансивера «Радио-76»
Поразительно, но публикация получила достаточно высокий рейтинг: +68, при всего 3800 просмотрах...