Страница 21 из 37 ПерваяПервая ... 111819202122232431 ... ПоследняяПоследняя
Показано с 201 по 210 из 365

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

  1. #1
    Аватар для D0ITC
    Регистрация
    16.11.2008
    Адрес
    г. Снежное
    Сообщений
    966
    Позывной
    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; 16.03.2018 в 22:01.



  2. #201

    Регистрация
    01.08.2013
    Адрес
    г. Полтава
    Сообщений
    410
    Позывной
    UR7HFO
    veso74, спасибо, в общем как временное решение, принудительно загнать датчик в 9-битный режим точности, и ввести задержку приблизительно в 95 мс.
    73! Дмитрий http://www.qrz.com/db/UR7HFO

  3. #202
    Аватар для veso74
    Регистрация
    12.09.2006
    Адрес
    Болгария, Силистра, KN34PC
    Сообщений
    174
    Позывной
    LZ2WSG
    Однако изменение температуры является чрезвычайно инертным явлением.
    Я бы попробовал измерить температура с датчика по состояние флага (в main), а сам флаг управляется (примерно) по timer2 interrupt через 5-10 сек.
    Так датчик будет в состоянии покоя пока мы хотим, а и не будем замедлять работу процессора до ненужного (для delay).
    Плюс (не в последнюю очередь): не теряем разрешающая способность датчика (можно работать и в 12 bit).
    (Учитывать, что delay, millis(), micros() мешает, если таймер timer0).
    Последний раз редактировалось veso74; 15.04.2018 в 22:47.

  4. #203

    Регистрация
    01.08.2013
    Адрес
    г. Полтава
    Сообщений
    410
    Позывной
    UR7HFO
    Цитата Сообщение от veso74 Посмотреть сообщение
    измерить температура с датчика по состояние флага (в main), а сам флаг управляется (примерно) по timer2 interrupt
    Да , это самое правильное решение, так как уберем тормоза от вызовов delay();

    Можно попробовать использовать такую конструкцию :
    long time = 0;

    if(millis() > time + 1000) // 1 s.
    {
    time = millis();
    // тут что то делаем ... например :
    ds.reset();
    ds.write(0xCC);
    ds.write(0x44);

    // потом выставляем глобальный флаг, что мол запрос температуры отправлен
    request_transmit = true;

    }
    73! Дмитрий http://www.qrz.com/db/UR7HFO

  5. #204
    Загрузил из примеров в библиотеке OneWire скетч DS18x20_Temperature. ino - для выхода А3 все работает! На мониторе цифирки исправно скачут... Так что будем "пилить" софт....
    Прочие манипуляции со скетчем для контроллера: добавление пауз, сбросов и прочих команд (пробовал даже инициализацию по новой) эффекта не дало...
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	36.png 
Просмотров:	37 
Размер:	21.6 Кб 
ID:	287156  

  6. #205

    Регистрация
    01.08.2013
    Адрес
    г. Полтава
    Сообщений
    410
    Позывной
    UR7HFO
    Вот может быть авторам будет интересно, пример асинхронного неблокирующего чтения датчика температуры
    https://github.com/milesburton/Ardui...onversion2.pde

    Я когда то использовал эту библиотеку с таким же датчиком температуры , работало нормально, библиотека там же
    https://github.com/milesburton/Ardui...ontrol-Library

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

    Victor72, А можете попробовать этот скетч с Вашим датчиком ? Необходимая библиотека внутри архива есть.
    PA_control_unit_protection_AUTO_menu_v2.1.1-ur7hfo.zip
    Последний раз редактировалось ur7hfo; 16.04.2018 в 22:32.
    73! Дмитрий http://www.qrz.com/db/UR7HFO

  7. #206
    Аватар для Integral
    Регистрация
    08.02.2007
    Адрес
    г. Снежное
    Сообщений
    2,228
    Записей в дневнике
    1
    Позывной
    UT0IS/D0ISM
    ur7hfo, не хотелось связываться еще с библиотекой Dallas, хотя мысль ваша из скетча понятна - делать задержку времени по функции millis(). Сейчас я набросал код с этой функцией и поигрался временем опроса DS_UPDATE_TIME от 1000 до 3000мс, все работает. Реакция температуры на прикосновение к датчику отрабатывает эту выдержку:

    Код:
       
    #define DS_UPDATE_TIME 1000                                             //интервал времени опроса датчика темпертуры
    unsigned long dsLastUpdateTime=0;                                       //переменная цикла опроса ОЗУ датчика температуры
    
        byte data[0];                                                       //выделяем два байта для чтения массива данных из датчика
      if(millis()-dsLastUpdateTime>DS_UPDATE_TIME){                         //если текущее значение времени больше заданного DS_UPDATE_TIME
        dsLastUpdateTime=millis();                                          //выравниваем значения dsLastUpdateTime с текущим значением времени
        ds.reset();                                                         //сбрасываем датчик температуры
        ds.write(0xCC);                                                     //пропускаем поиск ROM, так как на шине один датчик
        ds.write(0x44);                                                     //запускаем конвертацию температуры датчиком
        ds.reset();                                                         //сбрасываем датчик температуры
        ds.write(0xCC);                                                     //пропускаем поиск ROM
        ds.write(0xBE);                                                     //считываем ОЗУ датчика
        data[0] = ds.read(); data[1] = ds.read();                           //читаем из датчика два байта значений температуры
        int16_t raw=(data[1]<<8)|data[0];                                   //конвертируем полученные данные
        temp=(float)raw/16.0;}                                              //приводим значение температуры к градусам цельсия
    Теперь его можно вставить в проект и регулировать интервал времени опроса, уменьшая его до пределов работоспособности датчика.
    Интеграл от человеческих заблуждений - истина, производная - безумие.

  8. Спасибо от ur7hfo

  9. #207

    Регистрация
    01.08.2013
    Адрес
    г. Полтава
    Сообщений
    410
    Позывной
    UR7HFO
    Integral, Да да, Вы правильно поняли идею, спасибо.
    73! Дмитрий http://www.qrz.com/db/UR7HFO

  10. #208
    Аватар для Integral
    Регистрация
    08.02.2007
    Адрес
    г. Снежное
    Сообщений
    2,228
    Записей в дневнике
    1
    Позывной
    UT0IS/D0ISM
    У кого были проблемы с датчиком температуры, пробуйте этот скетч. По умолчанию опрос датчика происходит один раз в 1000мс, т.е. в 1секунду. Кому покажется много, можно в строке #define DS_UPDATE_TIME 1000 уменьшить до предела работоспособности чтения с датчика DS18B20.

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

    Сейчас уменьшал у себя интервал времени опроса датчика, дошел до нуля, т.е. фактически без задержки и данные температуры не теряются. Видимо хороший датчик мне попался
    Вложения Вложения
    Последний раз редактировалось Integral; 16.04.2018 в 23:52.
    Интеграл от человеческих заблуждений - истина, производная - безумие.

  11. #209
    Проверил новую версию - не работает.
    Алгоритм должен быть следующим:
    1.сброс
    2. Запись 0хСС
    3. Запись 0х44
    4. Пауза 750 мс
    5. Запись 0хСС
    6. Запись 0хВЕ
    7. Чтение двух байт и т.д.
    А у вас получилось:
    ...с учетом подготовки DS
    1. Сброс
    2. Запись 0хСС
    3. Запись 0х44
    4. Пауза 2 сек
    5. Установка условия на проверку 1000 мсек, и далее опять
    6. Сброс
    7. Запись 0хСС
    8. Запись 0х44
    9. Сброс
    10. Запись 0хСС
    11. Запись 0хВЕ
    12.Чтение 2 байт и далее...
    ...нет паузы между командой на преобразование и чтением температуры. Просто считывается значение после сброса - а оно по умолчанию 85 градусов.

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

    Вот так заработало!!!! , а также закоментировал все манипуляции в подготовке DS c паузой на 2 сек.
    void set_temp(){//******************** ******************** ******************** ******************** ************** Датчик DS18B20 температура радиатора
    //byte data[0]; //выделяем два байта для чтения массива данных из датчика
    //byte i;
    byte present = 0;
    //byte type_s;
    byte data[12];
    //byte addr[8];
    //ds.reset(); //сбрасываем датчик температуры
    //ds.write(0xCC); //пропускаем поиск ROM, так как на шине один датчик
    //ds.write(0x44); //запускаем конвертацию температуры датчиком
    //delay(1000);
    //ds.reset(); //сбрасываем датчик температуры
    //ds.write(0xCC); //пропускаем поиск ROM
    //ds.write(0xBE); //считываем ОЗУ датчика
    ds.reset();
    ds.write(0xCC);
    ds.write(0x44, 1); // start conversion, with parasite power on at the end

    delay(1000); // maybe 750ms is enough, maybe not
    // we might do a ds.depower() here, but the reset will take care of it.

    present = ds.reset();
    ds.write(0xCC);
    ds.write(0xBE); // Read Scratchpad
    data[0] = ds.read ();
    data[1] = ds.read (); //считываем побайтно озу датчика
    int16_t raw = (data[1] << 8) | data[0]; //конвертируем полученные данные

    Осталось это закрутить теперь через таймер, а то обновление всех данных и градусников через 1 сек
    Последний раз редактировалось Victor72; 17.04.2018 в 19:53.


  12. #210
    Аватар для Integral
    Регистрация
    08.02.2007
    Адрес
    г. Снежное
    Сообщений
    2,228
    Записей в дневнике
    1
    Позывной
    UT0IS/D0ISM
    Victor72, трудно искать причину сбоя, если я ее у себя не могу смоделировать. ВСЕ датчики DS18B20, которые у нас были с Александром, работают в разных проектах и на разных процессорах.

    Выбрасывать подготовку датчика температуры из Setup-а нельзя, т.к. при первом включении датчик возвращает температуру 85oC. А это в свою очередь вызывает аварию по температуре. Поэтому первоначальный запуск датчика и был перенесен в заставку, где пауза в 2 секунды решает эту проблему.

    Теперь что касается куска кода, который у вас заработал. Команда ds.write(0x44, 1); конфигурирует работу датчика С ПАРАЗИТНЫМ ПИТАНИЕМ! ​Вот мне этот момент совсем не понятен.
    Интеграл от человеческих заблуждений - истина, производная - безумие.

Страница 21 из 37 ПерваяПервая ... 111819202122232431 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Мой усилитель на ГУ74Б с цветным TFT дисплеем
    от DL2BDA в разделе КВ усилители
    Ответов: 27
    Последнее сообщение: 27.05.2017, 01:53
  2. Синтез с графическим дисплеем
    от Алексеич в разделе Технический кабинет
    Ответов: 2
    Последнее сообщение: 20.03.2009, 23:18
  3. FT-726 Проблема с дисплеем
    от RA2FF в разделе Технический кабинет
    Ответов: 1
    Последнее сообщение: 04.09.2008, 18:55
  4. Контроллер с графическим дисплеем для транзисторного УМ на MEGA2560
    от в разделе Конструкции на микроконтроллерах для радиолюбителей
    Ответов: 0
    Последнее сообщение: 01.01.1970, 03:00

Ваши права

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