Многодиапазонный CW-маяк на MAX2870 (23.5мгц — 6ггц)

Телеграфный маяк для настройки аппаратуры под бенды 12m/10m/6m/4m/2m/70cm/23cm/13cm/6cm.

Давно хотел сделать универсальный УКВ\СВЧ маяк для проверки антенн\трансиверов\трасвертеров. Ну и чтобы сборка не требовала пайки своей платы, настройки и прочих проблем. Решил разработать маяк под себя.

Выбор генератора пал на модуль VCO MX2870 с алиэкспресс.

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

Выбор пал на STM32F103C8T6


Опционально, если требуется, потребуются термостатированный OCXO генератор (чтобы не гуляла частота маяка) и небольшой широкополосный усилитель.

Все элементы монтируются по следующей схеме.

Чтобы получить из дифференциального выхода MAX2870 небалансный (обычный коаксиальный), применяем балун на ТДЛ из 3-4 витков коаксиала на кольце с высокой проницаемостью.

Например вот так, только укоротить лишние провода:

Далее дело за прошивкой STM32 контроллера. Прошивки и исходные коды я выложил в репозиторий https://github.com/XGudron/UA3REO-Beacon

В корне лежат 2 готовых прошивки под кварц 25мгц (встроенный в плату MAX2870) и для 10мгц (в случае использования OCXO генератора). Эти прошивки настроены на частоты 2м,70см,23см,6см бендов, а маяк передаёт «CQ CQ Beacon 73» на скорости 25WPM.

Чтобы настроить прошивку под себя необходимо установить Keil IDE (среда разработки), открыть файл STM32/Core/Inc/config.h и изменить там частоты\скорость\текст\мощность под себя.

Для прошивки используется обычный USB кабель и программа STM32CubeProgrammer или любая другая DFU утилита, умеющая работать с hex файлами stm32.

В итоге получается достаточно компактная, функциональная и главное простая в сборке конструкция. Питается от 5 вольт обычным павер-банком, что обеспечивает мобильность маяка.

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

UPD: добавил и проверил возможность работы маяка на 10ггц диапазоне — в режиме излучения третьей гармоники. Идеально для настройки аппаратуры.

Успехов в сборке, 73 de UA3REO.

44 мысли о “Многодиапазонный CW-маяк на MAX2870 (23.5мгц — 6ггц)”

  1. подутратил навыки радиолюбительские, извиняюсь…

    можно фотку «балун на ТДЛ из 3-4 витков коаксиала на кольце с высокой проницаемостью» и марку колечка?

    и

    Keil IDE — я зашел на их сайт, а там куча всяких IDE — а узнать какую конкретно надо качать, чтобы поправить программу маяка

    спасибо!

    1. Доброго дня!
      Фотку приложил в статью, по хорошему только длину проводников и земли надо укротить, но если не стоит цель выжать максимум мощности и дальнобойности — не страшно.
      Подключение согласно схеме над фото. Кабель RG-178, 4 витка, кольцо точно не обмерял, но вроде М1000НМ, первым делом стоит поэкспериментировать с теми что есть у вас в наличии. В отличие от классических трансформаторов где марка влияет на частоту, в ТДЛ вся трансформация происходит внутри кабеля.

      1. Скачал поставил, но пришлось пошаманить:
        Открыл проект \UA3REO-Beacon-main\STM32\MDK-ARM\UA3REO-Beacon.uvprojx

        The following Device Family Pack(s) are required by the project: Keil:STM32F1xx_DFP:2.4.0

        Refresh Pack descriptions
        SSL caching disabled in Windows Internet settings. Switched to offline mode.
        Cannot download file http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.4.0.pack: No internet connection — Please check your internet settings

        Error #550: Requested device STM32F103C8(STMicroelectronics) not found for target ‘UA3REO-Beacon’

        1. Скачал http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.4.0.pack
        Импортировал Import
        Открыл проект все ОК

        Build:

        Build started: Project: UA3REO-Beacon
        *** Target ‘UA3REO-Beacon’ uses ARM-Compiler ‘Default Compiler Version 5’ which is not available.
        *** Please review the installed ARM Compiler Versions:
        ‘Manage Project Items — Folders/Extensions’ to manage ARM Compiler Versions.
        ‘Options for Target — Target’ to select an ARM Compiler Version for the target.
        *** Build aborted.

        2. Скачал https://www.mediafire.com/file/gyqs39w66v1tkq7/ARMCC.zip/file

        Архив содержит каталог ARM CC. Это компилятор v5 из MDK-ARM v5.36. Скопировал его в каталог \Keil_v5\ARM\

        В файл \Keil_v5\TOOLS.INI в конце добавил:

        ARMCCPATH1=».\ARMCC» («5.06 update 7 (build 960)»)
        BOOK12=»ARMCC\sw\info\releasenotes.html» («Release Notes for ARMCC 5.06u7″,GEN)
        BOOK13=»HLP\DUI0375G_02_mdk_armcc_user_guide.pdf» («ARM Compiler v5.06 for µVision (PDF)»,GEN)
        BOOK14=»HLP\DUI0377G_02_mdk_armlink_user_guide.pdf» («ARM Linker v5.06 for µVision (PDF)»,GEN)
        DEFAULT_ARMCC_VERSION_AC5=»V5.06 update 7 (build 960)»

        Все скомпилировалось нормально

        1. Спасибо! перевёл проект на 6ю версию компилятора, который идёт в комплекте с Keil, чтобы упростить жизнь другим конструкторам.

          Кольцо использую небольшое: 6мм высота, 12мм внешний диаметр, 8мм внутренний. Размер влияет только на то, чтобы уместились витки, а ограничение по мощности в данном случае не важно.

          По стабильности частоты стандартного генератора не подскажу — почти сразу его демонтировал после первых запусков, и подключил OCXO. Но тут скорее зависит от цели маяка. Если делать общественный маяк, находящийся на улице и по которому другие радиолюбители смогут подстраивать частоту своих приёмников — OCXO будет необходим. Если личный маяк для настройки антенн — то гуляние частоты не должно мешать, она ведь не дрожит как бешенная, просто смещена в зависимости от температуры и погрешности.

          1. да, все компилируется, спасибо!
            получил компоненты сегодня, на днях буду креативить.
            OCXO буду брать, крайне нужна стабильность.

              1. Поставьте перемычку BOOT0 в единицу, BOOT1 в ноль, при включении в таком режиме микроконтроллер переходит в DFU режим для прошивки

                1. да, делал и так…
                  и поставил драйвера насильно STM Device in DFU Mode…

                  один результат на W10:
                  Запуск этого устройства невозможен. (Код 10) Сбой запроса дескриптора USB-устройства.

                2. ну и ST-LINK V2 тоже не работает…
                  что-то у меня с системой
                  жаль, что в самом начале словил стену
                  вообще непонятно что делать

                  1. Мне кажется это плата STM32 убитая, если DFU не работает, то что-то с процессором явно

                    1. STLINK V2 китайский — не работает, хотя вроде serial номер выдает какой-то

                      перепробовал несколько STM32 не определяются

                      явно что-то с системой

                      однако Arduino работает без проблем всегда

                    2. поставил на другой комп — все тоже самое…
                      неужели все STM битые мне прислали?
                      ну тогда я бессилен.
                      Ардуино здравствуй.

                    3. можете мне скинуть ваши драйвера/программы?
                      чтобы уж наверняка
                      я не знаю что еще сделать

                    4. короче,
                      на другом компе запустился STLINK V2
                      обновил версию прошивки

                      запустился STLINK V2 и на первом компе

                      STCUBEPROGRAMMER не коннектится

                      21:30:59 : ST-LINK SN : 300037000900004A4735544E
                      21:30:59 : ST-LINK Firmware version : V2J37S7
                      21:30:59 : Connected via SWD.
                      21:30:59 : SWD Frequency = 4,0 MHz.
                      21:30:59 : Connection mode : Normal.
                      21:30:59 : Debug in Low Power mode enabled.
                      21:30:59 : Device ID:0x410
                      21:30:59 : Device flash Size : 128KBytes
                      21:30:59 : Device family :STM32F10xx Medium-density

                  2. Если пишет сбой декриптора, то значит до драйверов даже дело не доходит, компьютер просто не может получить ответ от устройства.
                    Может USB кабель другой попробовать?

                    Но на всякий случай — вот дистрибутив что я ставил, он же и драйвера должен установить https://www.dropbox.com/s/9ftkojmrjtn922m/SetupSTM32CubeProgrammer_win64_v2.9.0.exe?dl=1

                    1. прошитый через STLINK STM работает, светодиод мигает
                      но как его не включай (в т.ч. boot0=1), на двух компах — сбой дескриптора всегда

                      новые из упаковки 4 шт C8 и 1 шт C6 — тоже самое

                  3. Тогда можно попробовать прошить напрямую из Keil, он тоже умеет работать с ST-Link v2, кнопка F8 после компиляции прошивки

                    1. нажал F8
                      Keil пишет — Error: Not a genuine ST Device! Abort connection.
                      Erase Done.
                      Programming Done.
                      Verify OK.
                      Flash Load finished at 22:11:24

                      и после этого STM перестал мигать светодиодом, даже после перепрошивки HEXa через ST-LINK UTILITY…

                      прошил свежий STM через ST-LINK UTILITY — тот мигает (судя по всему под азбуку морзе)

                      а я ведь уже припаял ножки к тому экзмепляру STM
                      и хотел спросить как коннектить ножки питания с MAX
                      🙁

                  4. Какая-то магия, 5 STM32 и за ним ещё ST-Link чтобы сгорели это что-то невероятное 🙁 надо искать проблему, может компьютер статикой шьёт или ещё что-то нехорошее 🙁

                    1. я думаю так и есть, что-то с USB у него не то
                      через UART все заработало

  2. а насколько гуляет частота маяка допуcтим для частоты 1 Ghz ?
    это я к потребности в «OCXO генератор (чтобы не гуляла частота маяка)»
    думаю брать не брать…

  3. вобщем все, катастрофа полная

    перестал определяться и ST-LINK V2… сбой дескриптора …. на всех компах…

    время и деньги потрачены впустую…

    запустить MAX2870 на Arduino не хватит мозгов…

  4. подключил через UART FTDI232, BOOT0 = 1, TX232 на A10, RX232 на A9
    работает CubeProgrammer 🙂
    вопрос с программированием решен

  5. следующая проблема настигла:
    прошивал, светодиод мигает
    припаивал гребенку A3-A7 — после чего перестает мигать светодиод на STM в такт морзе — на двух STM

    на 3-м припаял — светодиод мигает
    подключаю к MAX — горит синий и все не мигает, отключаю — мигает

    в SDRSharp не вижу несущей

    как все это оттестировать — непонятно, где и как искать трабл
    должен мигать светодиод или нет

    можете мне прошивку скинуть без OCXO, например на 1000 мГц на одну частоту — для отладки?

    я у себя частоты менял — прошиваю — светодиод не мигает

    1. судя по всему не инициализируется MAX с STM
      или ответа нет или что
      светодиоды красные горят непрерывно и все
      зеленый на MAX не горит (если что)
      пытался как то вывести статус на светодиод — но как на один вывести все статусы? 🙂
      через UART я провода задолбался подключать отключать

      без отладчика не реально понять что происходит абсолютно

      наверно придется статусные светодиоды припаивать к разным ногам 🙂

    2. Андрей, доброго дня! рад что заработала прошивка.
      В корне проекта на github лежит прошивка без ocxo, для стандартного кварца max на 25мгц UA3REO-Beacon-25Mhz-XO.hex
      Светодиод должен мигать всегда, и с max и без. Если тухнет, то что-то зависает на этапе инициализации max’а.
      С отладкой на портах и на одну частоту сделаю чуть позже, напишу отдельно как будет готово.

      1. сделал отладочные сигналы светодиодом
        итоги

        подключенный к MAX STM32 виснет на TRANSMITTER_Init();

        что еще заметил — неподключенный к MAX STM32 запускается, но не мигает CW
        потом рукой коснешься А3-А7 все вместе — начинает мигать CW, то есть TRANSMITTER_Init(); проходит только в ручном режиме

        еще:
        почему то STM32 не реагирует на кнопку reset, только отключение питания и потом включение перезапускает его на начало исполнения программы

        1. виснет в void MAX2870_Init(uint64_t Frequency) вот здесь

          while(HAL_GPIO_ReadPin(MAX_LD_GPIO_Port, MAX_LD_Pin) == GPIO_PIN_RESET) {
          HAL_Delay(1);
          }

          1. Ножку LD MAX2870 держит в нуле пока настраивает PLL внутри, ждёт захвата петли ФАПЧ. STM32 ждёт пока сигнал не станет единицей (захват произошёл).
            С генератором точно всё в порядке? сигнал есть? В файле main/STM32/Core/Inc/config.h частота соответствует частоте генератора на плате?

            1. я установил «под кварц 25мгц (встроенный в плату MAX2870)»
              #define REFERENCE_CLOCK 25000000 //by default 10000000 //

              у меня только MAX плата и STM сцеплены

              на частоте 100 мГц несущая есть (кварц MAX)
              на 25 мГц несущей нет

              1. errcode = MAX2870_SetReference(REFERENCE_CLOCK, 1, MAX2870_REF_UNDIVIDED); // int MAX2870_ERROR_NONE
                errcode = MAX2870_SetFrequency(Frequency, POWER_LEVEL, 0, MAX2870_AUX_FUNDAMENTAL, true, 0, 10000); // int MAX2870_ERROR_NONE

                проверял — обе дают errcode == MAX2870_ERROR_NONE

                1. собственно, MAX2870_SetReference и MAX2870_SetFrequency
                  обе выдают MAX2870_ERROR_NONE и без подключения к MAX, так что это ни о чем не говорит

            2. проверьте пожалуйста, может у вас тоже не работает от встроенного 25 мГц ?
              может надо переключить MAX на встроенный генератор?

              1. нужно ли выходы MAX подключать?
                а то у меня нет колечка, я просто провод воткнул в один из выходов

                1. Андрей, доброго дня!
                  Провода в один из выходов будет достаточно, на работу не влияет. Встроенный генератор также сразу подключен на заводской плате.
                  Я загрузил в github обновление прошивки — снизил скорость обмена по шине данными и добавил задержки, чтобы срабатывание было более чётким, опробуйте как будет возможность.

                  1. спасибо за помощь!
                    попробовал:
                    STM теперь устойчиво выходит на режим «CW мигания»
                    MAX на режим зеленого огня — не выходит…
                    несущая 100мГц есть, в остальных местах — нет

                    мне бы как то проверить — MAX вообще работает?
                    где расположить проверочный код? не могу соориентироваться в управлении MAX
                    получить от него статус какойнибудь чтоли…

                    1. В прошивке и драйвере нет режима чтения, только запись 🙁 линия на чтение даже не подключена за ненадобностью
                      А есть осфиллограф под рукой? проверить хоть наличие сигнала на генераторе и что управляющие сигналы с STM32 доходят до MAX

  6. большая просьба — добавить в проект вывод в COM порт А9 А10 отладочной информации

    я никак не могу разобраться, по сравнению с ардуино все просто космически непонятное…

  7. «В прошивке и драйвере нет режима чтения, только запись 🙁 линия на чтение даже не подключена за ненадобностью
    А есть осциллограф под рукой? проверить хоть наличие сигнала на генераторе и что управляющие сигналы с STM32 доходят до MAX»

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

    а можно ли подключить линию на чтение и чтото прочитать? или там в МАХ плате не предусмотрено вообще это?
    может инструкция есть по взаимодействию с MAX? я поискал но не нашел вразумительного кроме про чип

    без взаимодействия с MAXв обе стороны отладить невозможно… или был бы у него режим управления светодиодом например, чтобы статус сообщить

    в инструкции к МАХ нашел:

    For a clean clock at start up, after power on, follow this sequence of programming:
    • Register 5, Address 0X05. Wait 20ms
    • Register 4, set bit 4 and 8 to 0 to keep RFOUT disabled
    • Register 3, Address 0X03
    • Register 2, Address 0X02
    • Register 1, Address 0X01
    • Register 0, Address 0X00
    • Register 5, Address 0X05
    • Register 4, set bit 4 and 8 to 0 to keep RFOUT disabled
    • Register 3, Address 0X03
    • Register 2, Address 0X02
    • Register 1, Address 0X01
    • Register 0, Address 0X00
    To enable RFOUT, Register 4, Address 0X04, set bit 4 and 8 to 0.
    Register programming order should be address 0x05, 0x04, 0x03, 0x02, 0x01, and 0x00. Several bits are double-buffered to update the settings at the same time. See the register descriptions for double-buffered settings.

    Read Sequence
    Register 0x06 can be read back through MUX_OUT. The user must set MUX = 1100. To begin the read sequence, set LE to logic-low, send 32 periods of CLK, and set LE to logic-high. While the CLK is running, the DATA pin can be held at logic-high or logic-low for 29 clocks, but the last 3 bits must be 110 to indicate register 6. Then finally, send 1 period of the clock. The MSB of register 0x06 appears on the falling edge of the next clock and continues to shift out for the next 29 clock cycles (Figure 2). After the LSB of register 0x06 has been read, the user can reset MUX = 0000.

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

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