Пятница, 29.11.2024, 00:20
Радиосервис - ИЗМАИЛ

Меню сайта

Статистика
Форма входа
Друзья сайта

Форум поддержки программ "Tiny Tools" (CPLD/USB-S/USB-F/USB-SPI EJTAG Tiny Tools)

Электроника на KitPost
Поиск
Наш опрос
Оцените мой сайт
1. Отлично
2. Хорошо
3. Неплохо
4. Ужасно
5. Плохо
Всего ответов: 86
Ссылки по uCoz
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    Модератор форума: Alexandr_  
    Инфракрасная паяльная станция своими руками на ARDUINO
    Alexandr_
    Дата: Среда, 08.02.2017, 19:55 | Сообщение # 1        
    Генералиссимус
    Группа: Администраторы
    Сообщений: 814
    Статус: Offline

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

    Архив по станции от hominidae с проектом efimsu ->здесь
    Проект Леонида, Leonid0071 "UNO-MAX6675-PC" и его доработки на форуме Амперки -> скачать

    Люби грешников, ненавидь сам грех!
     

    DIM
    Дата: Вторник, 11.12.2018, 14:25 | Сообщение # 361        
    Подполковник
    Группа: Пользователи
    Сообщений: 172
    Статус: Offline

    Цитата dscOlga ()
    По поводу точки в выводе ki1, ki2 пора поставить точку.
    так я и поставил точку"."
    Цитата dscOlga ()
    Сейчас это 4 и 7 соответственно.
    вот это и хотел узнать.
    пид нужно настраивать, у меня теперь совершенно другая станция получилась.
    dscOlga, с глюком что я на видио показал пальцем что делать, забить?

    Добавлено (11.12.2018, 14:36)
    ---------------------------------------------
    и кстати а что за лишний нолик, т.е. выставляю 4 и 7 соответственно, но когда захожу повторно в настройки, то вижу 4 0 и 7 0 соответственно? и с промежутком т.е. не 47 и 70.

     

    dscOlga
    Дата: Вторник, 11.12.2018, 15:03 | Сообщение # 362        
    Майор
    Группа: Пользователи
    Сообщений: 83
    Статус: Offline

    Цитата DIM ()
    с глюком что я на видио показал пальцем что делать, забить?
    Проверяйте железо, может где-то наводки на max6675.
    Цитата DIM ()
    и кстати а что за лишний нолик, т.е. выставляю 4 и 7 соответственно, но когда захожу повторно в настройки, то вижу 4 0 и 7 0 соответственно? и с промежутком т.е. не 47 и 70.
    Вот смотрите здесь
    
    Код
    lcd2.setCursor(8, 1);
          lcd2.print("I=");
          lcd2.print(ki2);
          lcd2.print(" ");
    в строке lcd2.print(" "); поставьте 2 пробела. Повторите тоже в меню для ki1, kd1,kd2.
     

    DIM
    Дата: Вторник, 11.12.2018, 15:47 | Сообщение # 363        
    Подполковник
    Группа: Пользователи
    Сообщений: 172
    Статус: Offline

    Цитата dscOlga ()
    в строке lcd2.print(" "); поставьте 2 пробела. Повторите тоже в меню для ki1, kd1,kd2.
    спс. получилось.
    Цитата dscOlga ()
    Проверяйте железо, может где-то наводки на max6675.
    проверял, наводок нет, да и не от чего, к тому же все заэкранировано, бп в норме, как бы это только с этим каналом, и всегда только при первом включении, при повторном никогда. правда промежуток должен быть в несколько секунд, не более.
     

    dscOlga
    Дата: Вторник, 11.12.2018, 16:46 | Сообщение # 364        
    Майор
    Группа: Пользователи
    Сообщений: 83
    Статус: Offline

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

    А заменить мах6675 пробовали? Или хотя бы поменять мах6675 низ с верхом.
     

    DIM
    Дата: Вторник, 11.12.2018, 17:56 | Сообщение # 365        
    Подполковник
    Группа: Пользователи
    Сообщений: 172
    Статус: Offline

    dscOlga, не скетч не причем однозначно. заменить нечем, а местами менял меняется верх с низом так что дело в максе, но что это непонятно.

    Добавлено (12.12.2018, 02:22)
    ---------------------------------------------
    мах6675 заказал новый.
    dscOlga, подскажите как в коде добавить чтобы таймер включался в момент старта, и выключался соответственно?

     

    dscOlga
    Дата: Среда, 12.12.2018, 06:41 | Сообщение # 366        
    Майор
    Группа: Пользователи
    Сообщений: 83
    Статус: Offline

    Цитата DIM ()
    дело в максе, но что это непонятно.
    Попробуйте отфильтровать питание.
    Цитата DIM ()
    подскажите как в коде добавить чтобы таймер включался в момент старта, и выключался соответственно?
    Если вы имеете в виду таймер во время пайки, то нужна отдельная переменная которую вы будете увеличивать на единицу через каждый SENSOR_SAMPLING_TIME. А потом выводите на экран. Допустим так:
    
    Код
    int timer;    

    if (millis() > nextRead1)
        {

          //Read thermocouples next sampling period
          //nextRead1 += SENSOR_SAMPLING_TIME;
          nextRead1 = millis() + SENSOR_SAMPLING_TIME;

          timer++;

          //-----------//
          //это для графиков на ПК
          sprintf(buf, "$%d %d;", int(Input_f2), int(Input_f1)); //график ПК
          //-----------//
          
          lcd2.setCursor(32, 0);
          lcd2.print("    \3");
          lcd2.setCursor(32, 0);
          if (isnan(Input1)) {
            lcd2.print("Er");
          } else {
            lcd2.print(tc1);
          }
          lcd2.setCursor(32, 1);
          lcd2.print("    \2");
          lcd2.setCursor(32, 1);
          if (isnan(Input2)) {
            lcd2.print("Er");
          } else
                      {
           /* Устанавливаем курсор в 18 столбец 1й строки. Нумерация идёт с нуля,
            * первым аргументом идёт номер столбца.
            */
           lcd.setCursor(18, 1);
           /* Выводим на дисплей число секунд, прошедших с момента старта пайки */

           lcd.print(timer);

          }
          {
            lcd2.print(tc2);
          }
        }
    В конце пайки переменную timer нужно сбросить на ноль.


    Сообщение отредактировал dscOlga - Среда, 12.12.2018, 06:43
     

    DIM
    Дата: Среда, 12.12.2018, 15:17 | Сообщение # 367        
    Подполковник
    Группа: Пользователи
    Сообщений: 172
    Статус: Offline

    dscOlga, поправил как вы показали код, но при старте пайки просто стоит "1" и все. куда рыть?
     

    dscOlga
    Дата: Среда, 12.12.2018, 20:48 | Сообщение # 368        
    Майор
    Группа: Пользователи
    Сообщений: 83
    Статус: Offline

    Цитата DIM ()
    но при старте пайки просто стоит "1" и все. куда рыть?
    Вы скорее всего определили переменную timer здесь
    
    Код
    int timer;    

    if (millis() > nextRead1)
        {


    а нужно в начале скетча, допустим так:
    
    Код
    #include <Wire.h>
    #include <EEPROM.h>
    #include <LiquidCrystal_I2C.h> //закомментировать если дисплей без I2C
    LiquidCrystal_I2C lcd(0x3f, 40, 2);  //вместо (0x27) указываем адрес своего дисплея //закомментировать если дисплей без I2C
    LiquidCrystal_I2C lcd2(0x3e, 40, 2);

    int timer=0;

    byte gradus[8] = {
    0b00110,
    0b01001,
    0b01001,
    0b00110,
    0b00000,
    0b00000,
    0b00000,
    0b00000
    }; // символ градуса

    Я думал вы догадаетесь.
    И повторю ещё раз, не забудьте обнулить переменную timer, когда закончится пайка и(или) когда нажали клавишу cancel.

    Обнулить можно вот здесь
    
    Код
    if (okSwitchState == LOW && button_state && ( millis() - ms_button) > 200)
          {
            ms_button =  millis();
            button_state = false;
            tone(buzzerPin, 1045, 500);  //звуковой сигнал при старте профиля
            //update next screen
            updateScreen = true;
            curCount = 0;
            nextRead2 = millis();
            reflowStatus = REFLOW_STATUS_ON;
            reflowState = REFLOW_STATE_STEP_RAMP;
            lcd.setCursor(16,1);
            lcd.print("     "); //затираем время из режима ожидания
            timer=0; //обнуляем таймер
          }

    Здесь же затирается таймер в режиме ожидания, иначе он наложится.

    Добавлено (12.12.2018, 22:20)
    ---------------------------------------------
    Цитата DIM ()
    вот только как еще бы разделить на секунды\минуты для информативности, а пока только в секундах.
    Вот процедура для вывода времени
    
    Код
    void print_time (int secs)
    {
      lcd.setCursor(16,1);
      if (secs/60%60<10) lcd.print("0");
      lcd.print((secs/60)%60);
      lcd.print(":");
      if (secs%60<10) lcd.print("0");
      lcd.print(secs%60);
    }
    её нужно поместить в конце скетча.
    теперь вместо
    
    Код
    lcd.setCursor(18, 1);
    lcd.print(millis()/1000);
    записываем просто
    
    Код
    print_time(millis() / 1000);

    и вместо
    
    Код
    /* Устанавливаем курсор в 18 столбец 1й строки. Нумерация идёт с нуля,
            * первым аргументом идёт номер столбца.
            */
          lcd.setCursor(18, 1);
           /* Выводим на дисплей число секунд, прошедших с момента старта Arduino */
          lcd.print(timer);

    записываем
    
    Код
    print_time(timer);


    Сообщение отредактировал dscOlga - Среда, 12.12.2018, 22:21
     

    DIM
    Дата: Четверг, 13.12.2018, 13:04 | Сообщение # 369        
    Подполковник
    Группа: Пользователи
    Сообщений: 172
    Статус: Offline

    Цитата dscOlga ()
    lcd.print(timer);
    а где это у меня?

    Добавлено (13.12.2018, 14:04)
    ---------------------------------------------
    сам таймер работает, спасибо, и стартует при включении ардуино (так и хотел), но при старте пайки не обнуляется (а хотелось бы считать с нуля), а продолжает считать. и при остановки пайки тоже не обнуляется (лучше и не обнулять, а напротив останавливать таймер).

    Сообщение отредактировал DIM - Четверг, 13.12.2018, 13:14
     

    dscOlga
    Дата: Четверг, 13.12.2018, 14:26 | Сообщение # 370        
    Майор
    Группа: Пользователи
    Сообщений: 83
    Статус: Offline

    Цитата DIM ()
    lcd.print(timer);а где это у меня?
    если сделали все из сообщения 366, то должны знать где.

    если нет, то у вас это должно быть вот здесь
    Код
    if (millis() > nextRead1)
        {

          //Read thermocouples next sampling period
          //nextRead1 += SENSOR_SAMPLING_TIME;
          nextRead1 = millis() + SENSOR_SAMPLING_TIME;
          
          //-----------//
          //это для графиков на ПК
          sprintf(buf, "$%d %d;", int(Input_f2), int(Input_f1)); //график ПК
          //-----------//
          
          lcd2.setCursor(32, 0);
          lcd2.print("    \3");
          lcd2.setCursor(32, 0);
          if (isnan(Input1)) {
            lcd2.print("Er");
          } else {
            lcd2.print(tc1);
          }
          lcd2.setCursor(32, 1);
          lcd2.print("    \2");
          lcd2.setCursor(32, 1);
          if (isnan(Input2)) {
            lcd2.print("Er");
          } else
                      {
           /* Устанавливаем курсор в 18 столбец 1й строки. Нумерация идёт с нуля,
            * первым аргументом идёт номер столбца.
            */
           lcd.setCursor(18, 1);
           /* Выводим на дисплей число секунд, прошедших с момента старта Arduino */
           lcd.print(millis() / 1000);
          }
          {
            lcd2.print(tc2);
          }
        }


    вместо
          
    Код
    lcd.setCursor(18, 1);
           /* Выводим на дисплей число секунд, прошедших с момента старта Arduino */
           lcd.print(millis() / 1000);
    поставьте вот это
    Код
    print_time(timer);

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


    Сообщение отредактировал dscOlga - Четверг, 13.12.2018, 14:29
     

    DIM
    Дата: Четверг, 13.12.2018, 15:25 | Сообщение # 371        
    Подполковник
    Группа: Пользователи
    Сообщений: 172
    Статус: Offline

    спс. еще раз, все работает.
    Прикрепления: 4306432.ino (48.6 Kb)


    Сообщение отредактировал DIM - Пятница, 14.12.2018, 13:10
     

    DIM
    Дата: Среда, 19.12.2018, 13:49 | Сообщение # 372        
    Подполковник
    Группа: Пользователи
    Сообщений: 172
    Статус: Offline

    Cinema, попробовал подцепить к пк и посмотреть прогой что вы дали, вот что получилось:

    Добавлено (19.12.2018, 13:50)
    ---------------------------------------------
    какие выводы можно сделать по этому графику?

    Прикрепления: 7614990.png (37.5 Kb)
     

    dscOlga
    Дата: Среда, 19.12.2018, 14:48 | Сообщение # 373        
    Майор
    Группа: Пользователи
    Сообщений: 83
    Статус: Offline

    Цитата DIM ()
    какие выводы можно сделать по этому графику?
    Надо поднастроить ПИД для низа и для верха.
     

    DIM
    Дата: Среда, 19.12.2018, 15:23 | Сообщение # 374        
    Подполковник
    Группа: Пользователи
    Сообщений: 172
    Статус: Offline

    Цитата dscOlga ()
    Надо поднастроить ПИД
    как, и какие параметры подправить? вообще какой алгоритм? т.е. в какую сторону и что "убавить\добавить"?


    Сообщение отредактировал DIM - Четверг, 20.12.2018, 02:26
     

    dscOlga
    Дата: Четверг, 20.12.2018, 06:12 | Сообщение # 375        
    Майор
    Группа: Пользователи
    Сообщений: 83
    Статус: Offline

    Цитата DIM ()
    как, и какие параметры подправить? вообще какой алгоритм?
    Cinema выкладывал алгоритм настройки, посмотрите в теме. А вообще настройка ПИД это, к сожалению, процесс больше творческий, чем алгоритмический. По вашему графику можно сказать, что у вас скорость нагрева верхом великовата, можно и скорость низа немного уменьшить. Для начала попробуйте ограничить максимальную мощность нагревателей и посмотрите как изменится график. Потом можно немного покрутить коэффициенты ПИД, чтобы не было перелётов и колебаний.
     

    Поиск: