При переустановке ПО столкнулся с тем, что ST просто не даёт скачивать своё IDE с сайта. Пришлось получать актуальную версию обновлением старой
Сегодня STM32CubeIDE в очередной раз обновился и сломал мне весь проект. С трудом "откатил" версию HAL с STM32Cube_FW_F4_V1.27.0 на STM32Cube_FW_F4_V1.26.2.
На более младшей версии не работает буфер I2S, на более старшей переделали структуру устройства USB
На более младшей версии не работает буфер I2S, на более старшей переделали структуру устройства USB
18 апреля в День радиолюбителя опубликовал статью про связь на Си-Би:
https://habr.com/ru/company/ruvds/blog/660037/
https://habr.com/ru/company/ruvds/blog/660037/
Хабр
Что ещё слышно в радиоэфире? Связь на СиБи
В начале 80-х годов прошлого века в кинотеатрах СССР с большим успехом шёл американский фильм «Конвой». Сейчас бы он воспринимался как обычный «road movie», но тогда… Представьте ослепительное солнце...
На День радио публиковаться не стал, хотя есть идея о "пермском периоде" А.С. Попова.
С Днём радио! 73!
С Днём радио! 73!
Третью неделю веду расследование по делу о "поражённых точках". Их очень много: около каждой частоты, кратной 1000 кГц, на частотах 12288 кГц и 24576 кГц, около 25000 кГц и на многих случайных частотах. Экранирование частотозадающих частей эффекта не дало.
Помеха на частотах 12288 кГц и 24576 кГц, скорее всего, идёт из кодека: надо собрать радиочастотный тракт на другой плате, разнести его с кодеком и посмотреть, что будет с уровнями помех на этих "поражённых точках".
Помехи на частотах, кратных 1000 кГц. Случайно обнаружил мощную помеху на частоте около 8333,33 кГц, сразу проверил частоту 16666,67 кГц: похоже, генератор 25 МГц работает на третьей гармонике. Сигнал на выходе - достаточно мощный. Вход синтезатора - перегружен. Схема Tayloe чувствительна к высшим гармоникам...
Надо будет попробовать запустить синтезатор от кварца
Помеха на частотах 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.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. Из схемы балансного квадратурного детектора (состояние «Было») по подозрению в паразитных резонансах на частотах порядка 25 МГц был исключён трансформатор.
2. На тех же комплектующих был собран типичный для подавляющего большинства SDR-радиостанций QSD (состояние «Стало»).
3. Уровень помех от кодека возрос.
4. Балансировка QSD значительно ухудшилась: подавление «зеркального» канала практически не происходило.
5. При восстановлении схемы в состояние «Было» характеристики QSD стали прежними.
Планы на ближайшее будущее:
1. Нужно будет собрать радиочастотный тракт на макетной плате и повозиться с ним.
2. Разместить MCU, LCD, кодек и синтезатор на отдельной плате и закрыть эту всю электронику каким-нибудь стандартным экраном.
1. Нужно будет собрать радиочастотный тракт на макетной плате и повозиться с ним.
2. Разместить MCU, LCD, кодек и синтезатор на отдельной плате и закрыть эту всю электронику каким-нибудь стандартным экраном.
Решил перед отпуском обеспечить небольшой задел по обработке сигналов и начал «выпиливать» из проекта uSDX алгоритмы для обработки IQ-сигнала.
Надеюсь, если это работает на Arduino Uno, то и на stm32f411ceu6 это все можно приспособить
Надеюсь, если это работает на Arduino Uno, то и на stm32f411ceu6 это все можно приспособить
GitHub
GitHub - threeme3/usdx: Simple and experimental (class-E driven) SSB transceiver.
Simple and experimental (class-E driven) SSB transceiver. - threeme3/usdx
Собрал для отладки плату с MCU, синтезатором частоты и аудиокодеком. Исключил радиотракт, дисплей, клавиатуру и энкодер.
Отрабатываю пока схему синхронизации потоков, предложенную здесь:
https://habr.com/ru/post/662141/
Затем возьмусь за сигма-дельта модуляцию, чтобы исключить кодек.
Следующее на очереди: превратить 12-битный поток от встроенного в MCU АЦП в 16-битный
Отрабатываю пока схему синхронизации потоков, предложенную здесь:
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 кГц
Дальнейшая обработка: 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.
Оказалось, что для того, чтобы повысить разрядность на один бит, нужно в четыре раза поднять частоту, просуммировать четыре сэмпла и сдвинуть результат на бит влево.
Два бита: четыре в квадрате, 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
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
https://qrp-labs.com/images/news/dayton2018/fdim2018.pdf
«Драйвер исправно выдаёт квадратурный сигнал на частотах выше 3500 кГц. За выходные перепробовал всё, чтобы понизить этот предел до 1480 кГц (как написано в комментариях), но безрезультатно»
Поразительно, но si5351a, который я использовал в публикации про CAT-интерфейс работает на частотах ниже 3500 кГц как ни в чём не бывало...
UPD: Судя по маркировке «041» на неработающих на низких частотах чипах, они изготовлены на 41-й неделе 2010 года. Скорее всего, это Rev. A, а не B.
Печально это, хоть заказывай в КНР платки и синтезаторы с них «сдувай» 😜
Поразительно, но 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»
6. Звуковая карта USB на STM32. Часть 1: Используем кодек I2S
7. Звуковая карта USB на STM32. Часть 2: Используем встроенный АЦП
Предыдущие публикации цикла:
Составное устройство USB на STM32. Часть 1 - 4
CAT-интерфейс для трансивера «Радио-76»
«Добил» цикл про операционные усилители:
Операционные усилители. Часть 7: Операционные усилители на лампах
И послал всё это на номинацию «Серия статей» на «Технотекст-2022». Вероятность ещё одной победы призрачна, но...
Операционные усилители. Часть 7: Операционные усилители на лампах
И послал всё это на номинацию «Серия статей» на «Технотекст-2022». Вероятность ещё одной победы призрачна, но...
Хабр
Операционные усилители. Часть 7: Операционные усилители на лампах
Планировалось, что эта публикация будет открывать цикл «Операционные усилители». Однако при работе над циклом оказалось, что туда просто необходимо включить большой объём данных и писать очень сухо,...
Поразительно, но публикация получила достаточно высокий рейтинг: +68, при всего 3800 просмотрах...