Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Страница 6 из 124 ПерваяПервая ... 34567891656106 ... ПоследняяПоследняя
Показано с 51 по 60 из 1234

Тема: Контроллер с LCD дисплеем для транзисторного УМ на MEGA2560

  1. #1
    Аватар для D0ITC
    Регистрация
    16.11.2008
    Адрес
    г. Снежное
    Сообщений
    1,113
    Позывной
    D0ITC

    Контроллер с LCD дисплеем для транзисторного УМ на MEGA2560

    Контроллер для транзисторного усилителя можности на Arduino MEGA2560 от US2IT и UT0IS/D0ISM
    Описание:

    Скрытый текст

    Проект открытый, возможно будут некоторые изменения. И еще, мы никогда не эксплуатировали и не делали достаточно мощных транзисторных усилителей мощности, у нас нет импортных трансиверов. Проверить готовый блок с усилителем мощности нам негде. Ситуация в регионе сами знаете какая. Я постараюсь сделать ознакомительное видео в ближайшем будущем, сейчас немного анонсирую некоторые возможности, дабы исключить часть вопросов. Устройство управляется четырьмя кнопками. Каждая кнопка имеет по две функции, при загрузке есть сброс настроек по умолчанию. Кнопки могут работать с бипером, эта функция отключается. Все текущие настройки хранятся во внутренней Flash памяти и каждый раз сохраняются перед отключением питания (переход в BYPASS). Информация отображается на дисплее и разбита на функциональные окна - выходная мощность, состояние BYPASS/POWER ON, КСВ, входная мощность, окно режима переключения диапазонов Manual/Yaesu/Icom/Auto, отображение тока, напряжения и температуры.

    Блок управления имеет защиты:
    - по превышению тока
    - по нижнему порогу напряжения питания
    - по верхнему порогу напряжения питания
    - по температуре
    - по превышению КСВ
    - по превышению входной мощности

    Ток, напряжение, температура и КСВ контролируются непрерывно. В окне входной мощности отображается текущая авария красным шрифтом. В аварийной ситуации блок управления переводит усилитель в режим BYPASS и принудительно отключает передачу усилителя. При этом экран моргает красной рамкой и звуковой сигнализацией. По каждой аварии имеется свой звуковой код и частота сигнализации. Входная мощность отображается в двух масштабах - 30 и 120Вт. В режиме POWER ON масштаб 30Вт, в BYPASS 120Вт. Это позволяет использовать блок управления и усилитель в режиме BYPASS, например работая трансивером полной мощностью через усилитель. При этом можно контролировать мощность с трансивера и КСВ на выходе усилителя мощности. При включенном питании масштаб 30Вт выбран из условия, что этой мощности достаточно для раскачки любого транзистоного усилителя мощности. Лишнюю мощность можно погасить на входных аттенюаторах, блоком предусмотрено включение двух аттенюаторов по 3дБ каждый, т.е. суммарно 6дБ. Это даст ослабление в 4 раза по мощности и при масштабе 30Вт получим 7.5Вт на входе усилителя мощности. Аттенюаторы подключаются нажатием кнопки по кольцу - ATT OFF, ATT -3dB, ATT -6dB, ATT AUTO. В авто режиме блок управления "следит" за входной мощностью и в случае его превышения автоматически подключает аттенюатор -3dB. Контроль мощности как входной, так и выходной осуществляется по градусникам. Для входной мощности имеется 30 кубиков, т.е. 1Вт на 1 кубик. Для выходной мощности есть 50 кубиков градусника, т.е. 20Вт на 1 кубик. Для измерительных данных или для настройки усилителя есть возможность отображения мощности в цифровой форме над шкалой выходной мощности. Это функция отключаема и может сохраняться при загрузке.
    В блок управления встроена функция высокочастотного вокса (VOX). Причем работать VOX может по двум каналам одновременно - наличие аналогового сигнала с датчика прямой волны входной мощности и наличие частоты на счетном входе платы Ардуино (цифровой VOX). В автоматическом определении рабочего диапазона работает только цифровой VOX. Реализован режим автоматического определения диапазона по ВЧ сигналу. Входящая частота после платы формирователя-делителя поступает на вход Ардуино, где происходит цифровая фильтрация полученного сигнала и подключение нужного ФНЧ с задержкой на передачу, если текущий диапазон не совпадает с новым.
    Вот такие основные функции реализованы в этом блоке управления.



    Прошивка от 09.03.18. Описание изменений в постах 40 и 41.
    Прошивка от 12.03.18. Описание. п.48
    Прошивка от 15.03.18 Описание пост 60
    PA_control_unit_prot ection_AUTO_menu_v2_ 1.rar


    схема от 09.03.18.



    Комментарий модератора

    1. UN7RX:
    2. Прошу всех учесть - это авторская тема, в ней запрещены какие либо отклонения содержимого от названия темы, кроме тех что вносят сами авторы, любые претензии к авторам в любой форме, флуд и прочее. Нарушения будут строго наказываться.
    Последний раз редактировалось UN7RX; 30.05.2019 в 05:37.



  2. #51
    Аватар для ru4ng
    Регистрация
    04.02.2010
    Адрес
    КИРОВ
    Сообщений
    49
    Позывной
    RU4NG
    Ясно. Просто современные аппараты выдают 100 Вт, и как правило начальный выброс мощности даже при минимально выставленной стремится к максимуму. Поэтому -3 мне кажется будет маловато. Это мое мнение. Еще в меню выбора защиты по КСВ, я бы сделал регулировку не+-1, а +- 0.1. Что бы можно было выставить к примеру 2.5. А вообще хочу поблагодарить за хорошо проделанную работу. Убеждаюсь уже не первый проект, как хорошо написаны скетчи. Все прокомментировано. Без особого труда можно поправить под себя. По ним хорошо учится писать самому.
    Игорь

  3. #52

    Регистрация
    01.08.2013
    Адрес
    г. Полтава
    Сообщений
    572
    Позывной
    UR7HFO
    Вопрос небольшой.
    Вот имеем такое #define RefreshTime 20
    Затем , по моему избыточные измерения в основном цикле

    unsigned long AverageLevel = millis(); //назначаем переменную отсчета времени усреднения входных сигналов AverageLevel
    float U1,U2,U5=0; //напряжения прямой и обратной волны выходной мощности, входной мощности
    int ReadCnt=0; //назначаем переменную инкрементного счетчика
    while ((millis()-AverageLevel)<Refres hTime){ //пока отсчет времени не сравняется с константой RefreshTime:
    U1 += analogRead(A0); //суммируем значения U1 с порта А0
    U2 += analogRead(A1); //суммируем значения U2 с порта А1
    U5 += analogRead(A6); //суммируем значения U5 с порта А6
    ReadCnt++;} //увеличиваем значение счетчика ReadCnt на 1(26раз)
    U1 = U1 / ReadCnt; //усредняем значение U1
    U2 = U2 / ReadCnt; //усредняем значение U2
    U5 = U5 / ReadCnt;

    Итого мы тут минимум 20 миллисекунд тратим на избыточные измерения.
    В итоге все защиты будут работать с запаздыванием на 20 миллисекунд + время работы основного кода.
    Проще наверное проверить это все многоканальным логическим анализатором, то есть измерить время реакции на возникшую аварию (превышение ксв, напряжений, температуры)
    Померить еще бы сколько времени пройдет от нажатия PTT, до появления сигнала на PTT-OUT.
    А так да , весьма симпатичный приборчик вышел. Да и еще и с исходником в свободном доступе.
    73! Дмитрий http://www.qrz.com/db/UR7HFO

  4. #53
    Аватар для D0ITC
    Регистрация
    16.11.2008
    Адрес
    г. Снежное
    Сообщений
    1,113
    Позывной
    D0ITC
    Цитата Сообщение от ru4ng Посмотреть сообщение
    По ним хорошо учится писать самому.
    Мы тоже только учимся, на ардуино уно я первый раз помигал светодиодом в августе прошлого года.
    Цитата Сообщение от ru4ng Посмотреть сообщение
    я бы сделал регулировку не+-1, а +- 0.1
    Это следующий шаг, разберёмся как сохранять значения с плавающей точкой в EEPROM и сделаем хоть с сотыми.
    Не давало мне покоя пустое место на второй странице меню. Решил сделать 16-тым пунктом включение-выключение бипера, а то было не очень удобно когда при входе в меню включался или выключался бипер. Управление им было сделано длинным нажатием на кнопку "BYPASS/POWER ON". Сейчас эта кнопка только для включения-выключения блока, сброса аварий и входа-выхода в меню.

    Добавлено через 9 минут(ы):

    Цитата Сообщение от ur7hfo Посмотреть сообщение
    Проще наверное проверить это все многоканальным логическим анализатором
    Наверно проще, но нет у нас здесь такой возможности. Если у вас есть возможность то было бы полезно иметь выше перечисленные значения. А вообще-то, можно легко уменьшить значение RefreshTime и тем самым сократить количество "усреднений". Пробовали мы по всякому, но остановились на этом.
    Вложения Вложения
    Последний раз редактировалось D0ITC; 13.03.2018 в 15:40.

  5. Спасибо от ru4ng

  6. #54
    Цитата Сообщение от ur7hfo Посмотреть сообщение
    Проще наверное проверить это все многоканальным логическим анализатором, то есть измерить время реакции на возникшую аварию (превышение ксв, напряжений, температуры)
    Померить еще бы сколько времени пройдет от нажатия PTT, до появления сигнала на PTT-OUT.
    Кому проще? Ну ок, Александр все померит у себя - у меня все временные параметры будут абсолютно другие, у третьего свои и так далее. Такой контроллер будет личной разработкой и совершенно бесполезным хламом для остальных.

  7. #55

    Регистрация
    01.08.2013
    Адрес
    г. Полтава
    Сообщений
    572
    Позывной
    UR7HFO
    Цитата Сообщение от US2IT Посмотреть сообщение
    Наверно проще, но нет у нас здесь такой возможности. Если у вас есть возможность то было бы полезно иметь выше перечисленные значения.
    Постараюсь на днях измерить, но скорее всего ближе к выходным.

    Цитата Сообщение от UN7RX Посмотреть сообщение
    у меня все временные параметры будут абсолютно другие, у третьего свои и так далее.
    Время реакции данного контроллера УМ на аварию, будет у всех одинаково, оно определяется кодом, и типом примененного цпу (для ардуино мега это - ATmega2560 ).
    Конечно если правки в коде сделаете, то и задержки будут другими.
    73! Дмитрий http://www.qrz.com/db/UR7HFO

  8. #56
    Ну так код непрерывно меняется, модифицируется - каждый раз перемерить все? Чем страшны 20мс? Я например вообще не представляю, чтобы завести защиту только через Ардуино. Как воспомогательную, как индикатор событий, да, но все аварии должны отрабатываться только "железно", это не лампы, для транзисторов микросекунды бывают велики.

  9. #57
    Аватар для ru4ng
    Регистрация
    04.02.2010
    Адрес
    КИРОВ
    Сообщений
    49
    Позывной
    RU4NG
    UN7RX, согласен на все 100, так сделано по ссылке что вы давали выше. Вот освоюсь немного с этим проектом, начну пробу пера для УКВ.
    Игорь

  10. #58

    Регистрация
    01.08.2013
    Адрес
    г. Полтава
    Сообщений
    572
    Позывной
    UR7HFO
    Цитата Сообщение от US2IT Посмотреть сообщение
    разберёмся как сохранять значения с плавающей точкой в EEPROM
    Я у себя в проектах делал так
    Код:
    double input  = 1010102.50;
    double output = 0.0;
    EEPROM.writeFloat(addressFloat,input);
    output = EEPROM.readFloat(addressFloat);
    Библиотека тут - https://github.com/ryantenney/EEPROMex
    Примеры там есть.

    Второй способ это использование avr-libc

    #include <avr/eeprom.h>
    функции этой либы (Standard C library for AVR-GCC) тут - https://www.nongnu.org/avr-libc/user...r__eeprom.html

    Цитата Сообщение от UN7RX Посмотреть сообщение
    Как воспомогательную, как индикатор событий, да, но все аварии должны отрабатываться только "железно
    Все понял, вопросов нет.
    Последний раз редактировалось ur7hfo; 13.03.2018 в 22:25.
    73! Дмитрий http://www.qrz.com/db/UR7HFO

  11. Спасибо от D0ITC

  12. #59

    Регистрация
    01.08.2013
    Адрес
    г. Полтава
    Сообщений
    572
    Позывной
    UR7HFO
    Маленькое предложение авторам.
    Если есть желание, Вы можете добавить (используя например выводы А7,А8,А9,А10) управление (получение информации о включенном на трансивере бэнде) по стандарту Yaesu BCD, это добавит универсальности контроллеру УМ.
    Вот готовая функция

    Код:
    // BCD input pins 
    #define BCD_A_IN  A7 
    #define BCD_B_IN  A8
    #define BCD_C_IN  A9
    #define BCD_D_IN  A10
    
    void setup()
    {
      // BCD Input.  
      pinMode(BCD_A_IN, INPUT);
      pinMode(BCD_B_IN, INPUT);
      pinMode(BCD_C_IN, INPUT);
      pinMode(BCD_D_IN, INPUT); 
    
    }
    
    int bcd_INPUT()
    {
      boolean bcdA = 0; // Yaesu DIN8 connector pin 4. 
      boolean bcdB = 0; // Yaesu DIN8 connector pin 5. 
      boolean bcdC = 0; // Yaesu DIN8 connector pin 6. 
      boolean bcdD = 0; // Yaesu DIN8 connector pin 7.
      
      // 409 = 2V = HIGH = true 
      
      if( analogRead(BCD_A_IN) > 409 ) { bcdA = true; }
      else { bcdA = false; } 
      
      if( analogRead(BCD_B_IN) > 409 ) { bcdB = true; }
      else { bcdB = false; }
      
      if( analogRead(BCD_C_IN) > 409 ) { bcdC = true; }
      else { bcdC = false; }
    
    
      if( analogRead(BCD_D_IN) > 409 ) { bcdD = true; }
      else { bcdD = false; }
      
      // 1 0 0 0  - 160 m
      if( bcdA && !bcdB && !bcdC && !bcdD ) { return 160; }
      
      // 0 1 0 0  - 80 m
      if( !bcdA && bcdB && !bcdC && !bcdD ) { return 80; }
      
      // 1 1 0 0  - 40 m
      if( bcdA && bcdB && !bcdC && !bcdD ) { return 40; }
      
      // 0 0 1 0  - 30 m
      if( !bcdA && !bcdB && bcdC && !bcdD ) { return 30; }
      
      // 1 0 1 0  - 20 m
      if( bcdA && !bcdB && bcdC && !bcdD ) { return 20; }
      
       // 0 1 1 0  - 17 m
      if( !bcdA && bcdB && bcdC && !bcdD ) { return 17; }
      
       // 1 1 1 0  - 15 m
      if( bcdA && bcdB && bcdC && !bcdD ) { return 15; }
      
      // 0 0 0 1  - 12 m
      if( !bcdA && !bcdB && !bcdC && bcdD ) { return 12; }
      
      // 1 0 0 1  - 10 m
      if( bcdA && !bcdB && !bcdC && bcdD ) { return 10; }
      
      // 0 1 0 1  - 6 m 
      if( !bcdA && bcdB && !bcdC && bcdD ) { return 6; }
      
      return 0;
    }

    Могу и сам добавить, но разработка Ваша, и Вам решать добавлять такую функцию , или нет.
    А там глядишь и созреете к выпуску набора плат, плата контроллера + плата усилителя например rd100hhf1.
    73! Дмитрий http://www.qrz.com/db/UR7HFO


  13. #60
    Аватар для D0ITC
    Регистрация
    16.11.2008
    Адрес
    г. Снежное
    Сообщений
    1,113
    Позывной
    D0ITC
    Разобрался как хранить в EEPROM переменные типа float, во вложении скетч с регулировкой в меню пределов срабатывания по SWR с десятыми от 1.0 до 9.9, оно то может столько и не нужно, какая же это защита с таким КСВ, но раз получается то пусть будет. Изменить пределы легко.

    Цитата Сообщение от ur7hfo Посмотреть сообщение
    Если есть желание, Вы можете добавить
    Разберёмся с этим вопросом.
    Вложения Вложения

  14. Спасибо от tomcat, UR6HCF, ur7hfo

Страница 6 из 124 ПерваяПервая ... 34567891656106 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Мой усилитель на ГУ74Б с цветным TFT дисплеем
    от DL2BDA в разделе КВ усилители
    Ответов: 34
    Последнее сообщение: 17.02.2021, 22:34
  2. Синтез с графическим дисплеем
    от Алексеич в разделе Технический кабинет
    Ответов: 2
    Последнее сообщение: 20.03.2009, 23:18
  3. FT-726 Проблема с дисплеем
    от RA2FF в разделе Технический кабинет
    Ответов: 1
    Последнее сообщение: 04.09.2008, 18:55

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •