DUC-DDC ТРАНСИВЕР UA3REO: РЕЛИЗ ВЕРСИИ 1.6

Очередное обновление проекта в программной и аппаратной части.

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

+HARDW: Обновлена плата АЦП
Исправлены проблемы в согласовании цепей.

+HARDW: Подготовлены экспериментальные версии плат RF-UNIT и MOTHERBOARD
Добавлены функции электронного ключа, клавиатура, WiFi и прочее.

+STM32: Новый дизайн FFT от RA4ASN

Градиентная подсветка пиков на ФФТ.

+STM32: Кнопка A=B, копирующая настройки VFO
+STM32: DNR (цифровое шумоподавление)

На основе LMS фильтра.

+STM32: Исправление прерываний энкодера
+STM32: Мелкие исправления и доработки
+STM32: Новая, оптимизированная и упрощённая версия AGC
+STM32: Реализован Zoom FFT (приближение спектра) в 2,4,8,16 раз
+STM32: Управление полосовыми фильтрами на пин-диодах, ФНЧ и ФВЧ
+STM32: Управление аттенюатором -12dB
+STM32: Управление коммутацией TX/RX реле на плате
+STM32: Управление усреднением FFT через системные настройки | Thx to RA4ASN
+STM32: Уровень громкости теперь не влияет на громкость сигнала в USB | Thx to RA4ASN

Файлы проекта доступны в 2х версиях (в архиве на момент публикации, и в репозитории github, постоянно обновляемые и с исправлениями ошибок), в них включены файлы и исходные коды прошивок, даташиты, схемы и чертежи плат.

Архив проекта версии 1.6
Репозиторий проекта на GitHub
Архив статей по проекту

50 мыслей о “DUC-DDC ТРАНСИВЕР UA3REO: РЕЛИЗ ВЕРСИИ 1.6”

  1. Добрый день. Пытаюсь обновиться до dev-версии, не получается что-то сходу ) FPGA Samples = ~47200, Audio DMA samples примерно столько же, а вот First bytes of I и Q по нулям. Что-то опять упустил, наверное. В fpga.c порты на свои поменял, но видимо что-то еще не заметил. Жаль, что нету больше теста шины при старте. Надо похоже купить еще 1 модуль на VET6, благо теперь есть куда его воткнуть )), и использовать этот трансивер как повседневный вариант (другого у меня нет).

    1. Добрый день! тест на шине восстановлю, он пока не совместим с новыми изменениями, а Вы кстати не забыли прошивку FPGA обновить? там появились дополнительные модули. Я вот тоже мечтаю довести трансивер до повседневного состояния, пока конечно не дотягивает, но всё в процессе)))

      1. FPGA первым делом обновил. Свою распиновку шины побитно сравнивал со схемой матплаты, все по аналогии, но обмена данными почему-то нет. Впрочем, это уже не особо важно, vet6 в пути ) Пока придет, остальные платы подготовлю.

        1. Добрый день! тест шины снова в строю, надо ещё раз обновить FPGA и соответственно STM’ку.

          1. Если шину разъединяю, тест выдает ошибки связи по всем пинам, при соединенной шине ошибок нет, но и обмена данными также нет. Какой-то шум на fft присутствует, но реакции на команды (preamp, например) нет. FPGA samples = ~46k, байты нулевые.

            1. Немного скорректировал PullUP резисторы, может поможет, можете вывести сигнал state из stm32_module на FPGA? пробами

              1. Эффекта не оказало. stage_debug значение 500 не принял ни разу при перезагрузке stm32, в основном 999, и 202-203 изредка. Но такой нюанс: вчера при обновлении забыл переменить порт на свой в fpga.c, и ошибок при тесте шины не возникло. Повторил этот момент сейчас — все так же, при неверном порту ошибок не возникает. У меня шина висит на порту F, синхронизация как у вас — на С, по пинам идентично. При обновлении меняю GPIOA на GPIOF в fpga.c, раньше такая схема работала 🙂
                Сейчас попробую на предыдущей рабочей конфигурации ПЛИС добавить пробы, посмотрю, что там выводится при ресете stm32.

  2. Как обычно, проблема решалась просто: у меня был инвертирован порядок сигналов 4-битных шин в прошлой версии, и я их так и переносил. Поправил, обмен данными и реакции на команды появились. Но теперь вылезли жуткие тормоза fft, хрип в динамике и FPGA Samples под 66к+. Помнится, как-то решал аналогичную проблему, но сходу вспомнить не могу. Может быть, завтра осенит 🙂

    1. Ну хотя бы обмен пошёл, хорошо! 66к+ скорее всего из-за тормозов, просто счетчик не каждую секунду срабатывает, а реже. Вот причину уже интересно отловить… в IQ моде тормоза продолжаются? она сама не затратная на процессор.

      1. Еще вот что заметил: FPGA Samples увеличивается пропорционально диапазону — на 28 мгц под 100к. Правда, у меня сейчас не подключен кодек, переразводил плату, это же не должно влиять? На старой версии прошивки работает без кодека.
        Если допустить, что я что-то упустил при обновлении, то что? Настройки DMA, таймеров и прерываний я не трогаю, добавляю 8-й таймер для энкодера, переставляю несколько пинов местами, в т.ч. EXTI5->1, эта схема ранее работала 🙂 Я же верно понимаю, что у Вас в данный момент все работает нормально?

        1. FPGA samples идёт в инкремент при получении каждой пары IQ сигналов в FPGA_fpgadata_iqclock(). При этом её вызов происходит по внешнему прерыванию тактового сигнала, идущего от FPGA (48кгц) EXTI15_10_IRQHandler(). Т.е. выше тактового сигнала она не может быть в принципе (исключение — когда идут тормоза, ежесекундный счётчик отрабатывает реже и показывает больший интервал).

          DMA кодека участвует в обработке сигналов, по скорости его обработки происходит обновление флага Processor_NeedRXBuffer, по которому аудио_процессор обрабатывает новую порцию данных, и отправляет в кодек и в usb. Эта шина в 12.288мгц идёт для тактования аудио-кодека и I2S микропроцессора (тоже идёт из FPGA).

          У меня да, сейчас всё работает как часы, но хочется понять в чём косяк, из глобальных изменений переход на 8битную двухстороннюю шину (раньше было 4 в одну и 4 в другую), но вроде в ней всё отлажено сейчас.

          1. Ладно, не стоит тогда заморачиваться, vet6 я заказал (но уже прошла неделя, а номер так и не начал трекаться 🙁 ), платы практически готовы, как придет — перейду на последнюю версию ПО, а пока что буду пользоваться старой.

  3. Заказал я stm32f767g-disco, надо еще 1 ПЛИС и будет куда AD9640 пристроить 🙂 А vet6 так и не трекается до сих пор :(, 2 недели уже прошло. Спор открывать, чтоли?

    1. Думаю да, 2 недели уже перебор, проще открыть спор. Кстати есть вариант использовать STM32H743VIT6 — его можно впаять вместо 407го не меняя плату.

  4. Сомнения у меня, что vet6 приедет 🙂 Что-то отзывы в последнее время у этого продавца так себе, многие пишут, что товар не получили и он не отправлялся, хотя именно у него zet6 и покупал. Ну да и ладно, открою спор позже, вон дискавери едет (надеюсь 😀 ), портирую на нее проект, а также попробую совместить векторный антенный анализатор EU1KY и трансивер в одном корпусе.
    А пока попробую обновить проект с минимальным ремаппингом пинов, может быть это поможет решить проблему с тормозами на dev-версии.

  5. Заказал ПЛИС (номер 32949281189), с распаянной памятью и импульсными источниками напряжения, на удивление недорогая плата. Решил я делать 2 проекта: один — максимально приближенный к Вашему, и второй — на stm32f746g-disco, этой ПЛИС и AD9640, будет 3 в 1: трансивер, осциллограф и VNA. Надеюсь, смогу все это осилить )

    1. FPGAшка вроде EP4CE15, а не 22я, поменьше места будет, много фильтров туда не засунешь, да и с двойным приёмным трактом могут быть вопросы. Но в целом плата интересная!
      Классные идеи, делитесь прогрессом разработок, будет интересно почитать.

      1. Мне в данный момент больше надо ПЛИС с памятью, т.к. во всех найденных мной проектах осциллографов используется буферная память, но объем кода мизерный, поэтому количество элементов пока не критично.
        Скорее всего на f7 буду переносить старую версию кода, где используется 4-битная шина, т.к. он 100% рабочий у меня. Вообще пока с трудом представляю, как это буду делать )) На f7 проект кубом не экспортируется, все руками придется править, dma явно другие будут, что с кодеком на sai делать, пока что понятия не имею ) К слову, я же могу с целью освобождения места в будущем гильберта обратно в stm32 вернуть?

  6. Короче, боролся я все это время с ветряными мельницами ))) Видимо, в связи с увеличением объема данных, передаваемых по шине, да еще и в обе стороны теперь, увеличились наводки на 48к линию, экранировал 12к и 48к витой парой — тормоза пропали и число семплов нормализовалось ) Правда, пока еще 1 проблема осталась — зеркальная картинка на водопаде, и в IQ mode шум лишь в одном канале. Сейчас полностью переделываю шину, экранирую сигнальные проводники попеременно землей, должно хватить, по идее.

    1. Попеременно с землей не прокатило, похоже придется каждый проводник витой парой экранировать.

  7. Спор я выиграл, хотя до этого продавец через личные сообщения прислал еще 1 номер 🙂 Но он также не трекается (пока что).
    Экранировка линий данных витой парой эффекта не принесла 🙁 Пробовал добавить подтягивающие резисторы, но в процессе компиляции выходят предупреждения о невозможности их установить, поэтому вернул прежний вариант и откатился на ПО с двойной 4х-битной шиной. Попробую так резисторов натыкать 🙂
    На плате АЦП между драйвером и АЦП без дросселей совсем никак или можно перемычки? Вообще, smd индуктивности какой-то слабо доступный товар 🙂 В чипдипе цены на них какие-то конские, а где их еще брать (понемногу, а не по 50 шт) — непонятно.

    1. Сбылась мечта идиота, получил stm32f746g-disco ))) Будем осваивать. Но и тут без косяка не обошлось — вход внешнего питания закорочен, или стабилизатор, или конденсатор пробит. Написал продавцу, посмотрим что ответит.
      Плата ПЛИС также пришла, выглядит ну очень красиво, аж паять жалко ) Выполнена намного качественнее имеющейся.

      1. Классно, поздравляю! делитесь результатами, очень интересно как будет работать.

        1. Пока что собрал антенный анализатор EU1KY, посмотрел им свою антенну и понял, что лучше бы и не смотрел ))
          В планах собрать второй РЧ фронтенд на свежекупленной ПЛИС, довести его до рабочего состояния на zet6, после чего каким-то образом портировать проект на f7. Еще и с 8-битной шиной что-то делать надо, только вот не понятно — что )

          1. А что у вас за антенна сейчас?
            Сейчас примеряю Вашу идею по оптимизации FPGA_writePacket (а заодно и к read), ещё 100мс выйграл, спасибо!
            По шине — может наоборот, слегка затормозить её, добавить __asm(«nop»); в функции чтения/записи, а также сделать медленней GPIO порты в stm32cube. Поидее с увеличением rise/fall перепадов будет меньше помех.

            1. Диполь, на 40 вроде бы, не помню уже ) Лет 10 назад его вешал под крышей двухэтажного дома. Проблема в кабеле, он и изначально был не ахти, телевизионный 75-омный, с непаяющейся оплеткой, а за это время весь потрескался уже. Придется наверно в чипе взять РК-50-2-11, других доступных вариантов у меня особо нет. К слову, когда там комплектовал заказ для анализатора, совсем недорого вышло. Думал, si5351a будет как бентли стоить ), но нет, всего 140 рублей.

              1. Я одно время сидел на RG-58 кабеле от китайцев, долго не понимал почему на 100вт меня плохо слышат, а когда воткнул измеритель мощности между антенной и кабелем (а не у трансивера как обычно), и увидел что почти вся мощность ушла в никуда — сменил на RG-213.
                С антенным анализатором я конечно схалявил — не стал делать свой как Вы, купил в китая подобный https://ru.aliexpress.com/item/32914689051.html

                1. Свой вариант я собрал лишь потому, что он построен на плате stm32f746g-discо. Очень, кстати, неплохой прибор вышел, ПО от KD8CEC. К слову, вчера вечером открыл спор по поводу пробитого входа 5В, и уже сегодня утром он закрылся в мою пользу на 1100р ) Подозреваю, что продавец был в курсе этой проблемы, раз он так быстро согласился без возражений.
                  RG-213 неплохой кабель, судя по описанию, но не потяну я его, к сожалению.

                  1. Как выяснилось, стабилизатор в порядке, а замыкание было из-за поврежденной маски около 5В входа. Но и это не последняя проблема с платой, оказался неисправен мост USB HS, впрочем, мне он не особо нужен, заменю при случае.

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

    1. Можно и без него, использовать кварц на кодеке, а STM32 будет тактовать свою I2S подсистему сам. Но могут возникнуть разницы в частотах, что будет приводить к избытку/недостатку данных в буфере.

      1. Как внезапно выяснилось, I2S_CKIN наружу не выведен, но в принципе к сигналу есть доступ, можно подпаяться. Впрочем, до звука в наушниках еще далеко, с какой стороны к этому кодеку подступаться, пока не знаю.
        Вот в чем намного большая засада — так это в шине обмена с ПЛИС ) Сигналы с разъема камеры, который я буду использовать для этой цели, практически по всем портам раскиданы. Так что моя ранее высланная Вам оптимизация тут не прокатит (

        1. Итогом сегодняшнего дня стал вывод в 48000 FPGA_samples на stm32f746g-disco ) Шина, стало быть, работает (старый 4-битный вариант). Также обеспечил вывод интерфейса с меню (без fft пока еще). Хочу сначала привести проект к исходной работоспособности, а уже потом перекраивать его в соответствии с более мощной платформой. К слову, тач на плате шикарный ) Он емкостной, не требует калибровки, очень точный, на 5 прикосновений, еще и жесты поддерживает. Потом сделаю инерционную перестройку по частоте )

          1. Вопрос: в у вас кварц на кодеке случаем не установлен? у меня был случай, что он помехи внешнему такту создавал, пришлось отпаять.

            1. Нет, последние варианты плат кодека я разводил без кварца. Уже набралась кучка этих плат разных вариантов ), в т.ч. для матплаты. Тут есть вариант, что удастся её ввести в эксплуатацию, т.к. внезапно начала трекаться посылка предположительно с vet6, посмотрим как на ней будет себя вести последняя версия ПО. Да и на F7 тоже буду ее пробовать, старую версию начал переносить лишь потому, что она у меня 100% работает и есть с чем сравнить поведение плат.

              Библиотека USB_device, примененная у Вас, рассчитана только для F4 или от платформы не зависит? Что-то сходу её не удалось запустить, при подключении спустя секунд 20 ПК пишет, что устройство не опознано. Для инициализации нужно в кубе выставить USB_OTG_FS=Device only, потом вызывать MX_USB_DEVICE_Init?

              1. Это библиотека куба, просто переделанная под композитные устройства, я отдельно создал CDC и Audio устройства, а потом сделал, чтобы они не конфликтовали друг с другом. В целом, она опирается на всё тотже HAL_PCD, просто обвязка «вынесена», чтобы куб её не переписывал своей реализацией USB. Поэтому, особой разницы в платформе я не вижу, за исключением того, что на F7 требуются какие-то дополнительные параметры при инициализации, нужно сравнить MX_USB_DEVICE_Init / USBD_Init / USBD_LL_Init с тем, что предлагает куб для этой платформы.
                Ну и также сравнить дескрипторы, и в целом что творится на USB программой вроде Device Monitoring Studio или USBLyzer

  8. Вы не делали замеров мощности на выходе OPA2674? У меня почему-то выходит меньше, чем на старом варианте с одним только трансформатором.

    1. До 200мВт максимум у меня получилось его раскачать, дальше грелась как сумасшедшая. Но этого как раз достаточно для раскачки оконечника.

  9. По какой причине USB может генерировать постоянные прерывания, даже при отключенном кабеле? При нулевом приоритете (как в исходном проекте) полностью блокируется работа платы. В отладке видно, что постоянно вызывается OTG_FS_IRQHandler.

    1. Все как обычно — только написал вопрос, так сразу нашел ответ )) В прерывание передавалась неверная структура, хотя делал все по исходному проекту. USBlyzer показывает 3 устройства. Промежуточный итог достигнут )

  10. Наконец-то! Наконец-то я услышал первые звуки эфирного шума через stm32f746g-disco ))) Правда, с хрипом и прерываниями, но это уже нюансы. Так что все не зря )

  11. Пришел модуль vet6, и матплата с последней версией ПО успешно введена в эксплуатацию. Запустилось все практически сразу, лишь переназначил несколько пинов ПЛИС в соответствии с разводкой 8-й ревизии матплаты. Работает все замечательно, могу лишь отметить некоторую дерганость усреднения fft, особенно заметную непосредственно сразу после включения трансивера.

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

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