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

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

Вся история разработок доступна в этой ветке статей по посвящённой разработке трансивера UA3REO.

В этой версии все изменения касаются только прошивки, не затрагивая аппаратную часть, среди них (по сравнению с версией 1.2):

+Изменён уровень усиления AGC

Уровень авто-усиления сигнала теперь не вызывает перегрузок по НЧ, можно вручную выставлять усиление через меню, а можно воспользоваться автоматикой.

+Доработана автокалибровка FFT при отсутствии сильных сигналов

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

+Используется DMA для смещения водопада в памяти

DMA позволяет проводить операции по копированию блоков памяти без использования процессора (он может выполнять иные задачи в это время). Это позволило сократить количество лагов и ускорить отрисовку водопада в 2 и более раз.

+Исправлены ошибки отображения на LCD в некоторых ситуациях

Доработана очередь отрисовки информации на LCD, что избавило от ситуаций, когда 2 процесса пытаются одновременно нарисовать что-то на экране, вызывая визуальные баги.

+Исправлены баги со звуком

Найдены и устранены ошибки с обработкой и выводом звука.

+Отображение ширины полосы на FFT

Теперь на водопаде визуально отображается ширина выбранной полосы приёма/передачи.

+Доработан АМ демодулятор

Добавлен полосовой фильтр для приёма станций, которые находятся недалеко друг от друга по частоте. Ранее принималась только самая мощная станция в полосе приёма.

+Watchdog timer от зависаний

Это специальное устройство, входящее в состав процессора, но работающее отдельно от него. Процессор обязан высылать таймеру сигналы что он работает, иначе(в случае зависаний) таймер вызывает принудительную перезагрузку устройства.

+Исправлена проблема с наводками на I2S от FSMC

FSMC шина генерирует большое количество электромагнитных помех, в данном случае шина работала на сверх-высокой скорости обмена, что предполагает очень крутые скаты меандра сигнала. При снижении скорости помехи исчезли, при этом скорость обмена осталась на достаточном уровне.

+Композитный USB (2 COM порта)

При подключении трансивера по USB определяются 2 виртуальных COM-порта одновременно. Один используется для отладки (в дальнейшем для ключа и PTT), второй для CAT Интерфейса.

+Подключение по USB CAT (эмуляция Yaesu FT-450)

Трансивер поддерживает эмуляцию протокола CAT от моего настольного трансивера Yaesu FT-450, поддерживаются все базовые команды.

+Реализация PTT через CAT команду

Поддерживается перевод в режим передачи через CAT команды вышеуказанного интерфейса.

+Доработки демодулятора

Доработаны шумодав в режиме FM (FM-SQL), а также ФНЧ(LPF) фильтрация сигналов при их демодуляции.

+Исправлены ошибки TX + доработка аудио-компрессора (NOISE GATE)

Исправлены проблемы с передачей, которые были в версии 1.2, также доработан аудио-компрессор голоса, в него добавлен пороговый уровень, который не позволяет усиливать шум микрофона во время молчания оператора.
У аудио-кодека включен High Pass фильтр, что избавляет сигнал от щелчков, возникающих при ошибках оцифровки сигнала.

+Базовые реализации режима TX для AM и FM моды

Реализован режим передачи для амплитудной и частотной модуляции, работы над ними ещё продолжаются (например у FM фиксированная ширина полосы передачи).

+Исправлены проблемы с буфером при TX

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

+Сохранение частоты при переключении между диапазонами

Для каждого диапазона, описанного в бенд-мапе, реализован механизм сохранения последней выбранной частоты.

+Задержка 10мс перед подачей ВЧ при переходе в TX (для реле)

Реализована небольшая задержка перед подачей ВЧ сигнала, необходимо для корректного срабатывания реле антенны и усилителя.

+Звуки нажатия на экран

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

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

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

42 мысли о “DUC-DDC ТРАНСИВЕР UA3REO: РЕЛИЗ ВЕРСИИ 1.3”

  1. В дополнение к послу на форуме:
    Закомментировал строку 312 в usb_dev_cat.c, лишние перерисовки экрана пропали, информация обновляется моментально. Понизил приоритет прерывания USB до 6, звук почти не рвется. Также есть нестыковки в модуляции по диапазонам в bands.c -для .mode = TRX_MODE_DIGI_U надо .startFreq = 3573000. Но есть проблема с обновлением текущего вида модуляции — после переключения диапазона по CAT примерно на полсекунды выводится правильная мода, потом сразу переключается на USB (на 3,573 к примеру).

    1. Вот это очень странно, 312 строка вызывается при смене моды, но она меняется же не на постоянной основе, а только при смене диапазона. Это WSJT-X так посылками спамит получается?
      Частоты брал из https://digital.gov.ru/uploaded/files/prilozhenie-k-resheniyu-gkrch—15-35-02.pdf , разве появилась более свежая редакция? если да то прошу поделиться.

      1. Ну, по крайней мере, на 3573 частота FT8, а ширина CW там точно не подойдет )
        Вечером сниму и выложу на ютуб поведение экрана при раскомментированной строке 312, поставлю приоритет USB пониже, чтобы было лучше видно. Насчет спама не уверен, но в дебаге много нераспознанных команд.

          1. Версия 2.0.1. Вчера было вроде бы больше команд, сейчас unknown только FT1 и VS1. Еще трансивер стал переходить на передачу при открытии отладочного порта ), а при закрытии щелчок в наушниках.

            1. Возможно, это потому что нужно драйвера com-портов на Ваши обновить, но они без подписи, потом с ней буду разбираться.

            2. Это я тут в дев-ветке экспериментировал с управлением через DTR, теперь DTR на дебаг-порту управляет CW ключом, сегодня доделал.
              В терминале, где смотрите отладку DTR отключите и не будет донимать.

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

      2. Многократно перерисовывается не вся верхняя часть экрана, а только кнопки. Закомменировал, все стало отлично. Видимо, лишняя команда все-таки в этом месте )

        1. Если без неё, может быть ситуация, когда бенд-мап выключен, через CAT мода изменилась, а в верхнем меню это не отобразилось.

          1. Тогда, возможно, стоит проверять предыдущее состояние кнопок и перерисовывать только изменившиеся? Эта многократная перерисовка очень заметна, причем чем ниже приоритет USB, тем она заметнее.
            А достаточно ли у процессора остается ресурсов, чтобы всю отрисовку делать не прямо в видеопамять, а в промежуточный массив, который потом по DMA передавать в видеопамять? Т.к. практически на всех меню очень заметна перерисовка, ибо против приоритетов прерываний не попрешь ) А так можно даже несколько массивов хранить, если памяти хватит.

            1. Мне сложно это сделать, т.к. я вообще перерисовки не вижу во время работы с JTDX/WSJT, но попробую сделать «на ощупь», добавлю проверок)
              А насчёт промежуточных массивов — памяти не хватит, нужно 320*240*16бит=153 600 байта. Сейчас перевёл заполнение квадратов и экрана цветом на DMA, тоже должно заметно ускорить работу.

              1. Почему же у меня эта перерисовка так заметна? Тайминги FSMC сильно не отличаются от Ваших, скорее всего дело в неоптимальной инициализации контроллера дисплея, которая передрана с китайского диска с примерами от платы stm32f103rbt6 ) На выходных повожусь с кодом в этом направлении, давно его пора привести в порядок для работы с Вашим проектом. Там отличается следующее: адрес для обмена данными, блок инициализации, команды ориентации экрана и установки области курсора. Вышлю Вам код, как подготовлю его.

    2. Понял, у вас в WSJT в настройках CAT стоит мода USB по умолчанию, выключите, чтобы трансивер мог по бендмапу сам выбирать. Поэтому он сначала выбирает моду из бендмапа (когда WSJT меняет частоту), а потом WSJT досылает моду, и она переключается в USB.

  2. FPGA еще раз скачал, перенес свою распиновку, залил и тишина, точнее — шум. Лишь по центру красная полоса.

    1. Пока даже идей нет что это может быть, по сути изменения не такие кардинальные, отброшен лишний бит в смесителе RX и объединён NCO.

      1. А если в качестве эксперимента я Вам выложу свою распиновку (только скажите, в каком виде), Вы откомпилируете прошивку и я ее залью с свою плату, тогда можно будет понять, на каком этапе возникает проблема. Возможно, у меня что-то с квартусом, но предыдущие версии прошивок работают без проблем.

        1. Без проблем, проставляйте в пинпланнере всё что необходимо, скидывайте мне файлик UA3REO.qsf на почту XGudron(собакен)gmail.com
          В ответ пришлю JIC файл с прошивкой

          1. Скомпилировал только что выложенную dev версию, такой же шум, но появились однотонные писки в случайные моменты времени.

          2. 2 раза вчера отвечал на сообщение, но ответ так и не отобразился )
            Залил присланный файл, все то же самое. Скачал обновленную dev-версию, прошился, такой же шум, только добавились попискивания в рандомные моменты времени.

  3. Короче, все это время я пытался принимать с реле в положении передачи )) У меня то оно инверсное относительно Вашего варианта, и в 1.2 я выход на пин реле подавал в обход элемента НЕ, а в эти разы что-то про него и позабыл )

    1. О, это хорошие новости)) как в целом приёмный тракт сейчас? стоит в релиз включать? попробовал частоту аудио к 48000 подбить, но пришёл к выводу, что нужен кварц на 49.152MHZ нужен, чтобы получить 48000 делением степенью двойки, иначе либо АЧХ едет, либо щелчки идут. Заказал с китая вот, жду.

      1. С моей антенной трудно судить об чувствительности, но я бы не сказал, что общая картина кардинально улучшилась. По сравнению с предыдущей редакцией софта для плис есть некоторая проблема, сейчас сниму на видео и вышлю почтой ссылку, на водопаде есть проседания уровней в одном и том же месте на всех диапазонах. Также в нулевом положении линия на водопаде, желтая или красная.

        1. Появление полосы это наоборот хорошо и знак увеличения чувствительности)
          Вы теперь принимаете помехи от аудио-кодека и смещение FFT по постоянному току (нулевые биения), которые как раз думаю как автоматически компенсировать. Проседания уровней также похоже на то что теперь видны нелинейности АЧХ CIC и компенсатора, проверю, спасибо!

  4. Обновился до dev-версии, пропала связь с fpga. Залил в stm32 предыдущую прошивку от 27 марта — все работает.

    1. в последних версиях появилась поддержка ARM компилятора 6й версии, попробуйте в нём скомпилировать.

          1. В основном тест завершается на 1-м пине, пару раз было на 2-м. Пробовал подкидывать fpga.c из предыдущей версии, но в итоге те же ошибки теста.

              1. Обмен данными с fpga появился, но теперь тормозит вывод на экран (уровень оптимизации 3, как и был раньше).

                  1. clk и sync у меня не отличаются от Ваших. Сейчас решил еще раз перекомпилировать на 6-м, заработало ) Пробовал разные варианты оптимизации, работает, остановился на О3. Не понял что-то, чего ему вчера надо было )
                    BUF сейчас горит постоянно.

                    1. Так, BUF на приём загорается, когда DMA кодека просит данных, а аудио-процессор их ещё не подготовил.

                      Пришлите, пожалуйста, значения отладочных переменных из stm32f4xx_it.c:
                      FPGA Samples
                      Audio DMA samples
                      Audioproc cycles A
                      Audioproc cycles B
                      Audioproc timer counter

    1. В целом всё ок, должен успевать, странно.
      Попробуйте уменьшить интервал срабатывания таймера TIM5 (тот что аудиопроцессором заведует).
      в IQ моде тоже BUF горит? или только LSB/USB?

        1. При смене моды в буффере ничего не меняется, единственное предположение — вызывается LCD_redraw который перекрашивает экран и надпись исчезает.
          Может с буффером всё ок, просто статус на экране не обновляется. Когда буфер горит, чему переменная WM8731_Buffer_underrun равна?

  5. Сейчас вот сижу, ковыряю код ili9325, при очередной прошивке FPGA BUS PIN 0 ERROR )

Добавить комментарий для Аркадий RA4ASN Отменить ответ

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