Просажываются показания с термопары паяльного фена.

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем sibBIA, 14 ноя 2017.

  1. sibBIA

    sibBIA Нерд

    Сделал на ArduinoProMini паяльный фен.
    Усилитель термопары на LM358. Показания с термопары когда фен на подставке скачут примерно в пределах 5-6 градусов. Регулировка оборотов analogWrite, чем больше добавляеш обороты тем больше просаживаются показания с термопары на 18-20 градусов при 100% шим.
    Питание при этом, на LM358 и на ардуино стабильное.
    Блок питания импульсный от принтера. Напряжение на ардуинку понижаю L7809.
    LM358 запитывается уже от ардуино.
    Скачки в пределах 6 градусов еще можно терпеть, но почему такая просадка когда шим использую?
     
    Последнее редактирование: 14 ноя 2017
  2. MXXX

    MXXX Гик

    Без полной схемы никто подсказать не сможет.
    1. Какой двигатель? На постоянном токе что ли, если analogWrite?
    2. Как выполняется коммутация двигателя и нагревателя?
    3. Термопара с металлическими частями корпуса не контактирует?
    С термопарами всегда много проблем от наводок. У меня есть проект фена, правда не паяльный, а промышленный, высокой мощности. Двигатель применяется коллекторный на переменном токе с коммутацией по длине импульса по детектору пересечения нуля (диммер). Сигнал термопары обрабатывают через MAX6675. Нагреватель на переменном токе, коммутация через твердотельное реле с коммутацией по пересечению нуля. Все это хозяйстве работает стабильно.

    Ваши проблемы могут быть связаны и с электро-магнитными наводками на термопару и со спецификой работы двигателя/нагревателя и с несовершенством алгоритма управления.
     
  3. sibBIA

    sibBIA Нерд

    Фен стандартная китайская ручка с встроенным вентилятором на 24в постоянка (управляю шимом).
    Нагреватель на 220в (управление вкл., выкл,).
    Термопара соеденяется своим минусовым выводом т с одним выводом геркона.
    Все провода идут в одном кабеле, провод термопары тоже и он не экранирован.
    Но работают же заводские и самодельные паяльные станции на таких ручках.
    Алгоритм управления простейший.
    Вот скетч:
    Код (C++):

    #include <Adafruit_GFX.h>
    #include <Adafruit_PCD8544.h>
    // pin 7 - Serial clock out (SCLK)
    // pin 6 - Serial data out (DIN)
    // pin 5 - Data/Command select (D/C)
    // pin 4 - LCD chip select (CS)
    // pin 3 - LCD reset (RST)
    Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

    #define SpirPIN 9 //Pin Нагревателя
    #define CoolPIN 10 //Pin кулера
    int PotFen ;    // потенциометр фена
    int PotCuller; // потенциометр кулера
    boolean Gerkon;         // геркон
    int TempF; // температура фена
    int TpFen; // термопара фена
    int SetTempF;       // установленная температура фена

    //----------------------------------------

    void setup(){
    pinMode(SpirPIN,OUTPUT);
    display.begin();
    display.setContrast(23);//контраст

    pinMode(12,INPUT_PULLUP); //Подтяжка пина геркона к плюсу

    //______________________Установка частоты шим_____________________________________
    //      я выбрал низкую частоту шим чтобы кулер не свистел

    TCCR1B = TCCR1B & 0b11111000 | 0x04; //Частота шим | 0x01;
                                         //Константа   Делитель          Частота(Гц)
                                         //   0x01       1                 31250
                                         //   0x02       8                 3906.25
                                         //   0x03       64                488.28125
                                         //   0x04       256               122.0703125
                                         //   0x05       1024              30.517578125

    }
    //________________________________________________________________________________
    void loop() {
    PotFen = analogRead(0);               // Установка температуры фена
    PotCuller = analogRead(1);            // Установка оборотов куллера
    TpFen = analogRead(2);                // Данные с термопары фена
    TempF=map(TpFen,2,560,0,500);         //преобразование температуры  map(TpFen,2,576,0,500);
    SetTempF=(map(PotFen,0,1023,50,480)); //установка температуры
    Gerkon= digitalRead(12);               //состояние геркона
    //delay(50);
    //____________________________________________________________________________________________________

    ///.......Вывод на дисплей.........
    display.clearDisplay();

      //display.setTextColor(BLACK);
      display.setCursor(4,0);
      display.setTextSize(2);
      display.print("T=");
      display.print(TempF);                                  // Вывод на экран текущей температуры фена
      display.setTextSize(1);
      display.setCursor(66,0);
      display.print("o");
      display.setCursor(71,7);
      display.setTextSize(1);
      display.print("C  ");
    display.setTextSize(2);
    display.setCursor(0,16);
    display.print("Set=");
    display.print(SetTempF);            // Вывод на экран заданной температуры фена
    display.setTextSize(2);
    display.setCursor(0,32);
    display.print("Cul=");display.print(map(PotCuller,0,1023,1,99));display.print("%"); // Вывод на экран оборотов куллера
                                            // установка оборотов куллера
    display.display();
    //*/------отключение на подставке--------------------
    if ((Gerkon == false)&& TempF > 45)        // если фен на подставке и температура > 35с то включаем кулер на полную
    {
      analogWrite(CoolPIN,255);       //то включаем кулер на полную
      digitalWrite(SpirPIN, 0);        // и выключаем нагреватель
      display.setCursor(0,32);
      delay(3000);
    }
      if ((Gerkon == false)&& TempF < 35)        // если фен на подставке и температура < 35с то выключаем кулер
    {
      analogWrite(CoolPIN,0);       //то выключаем кулер
      digitalWrite(SpirPIN, 0);        // и выключаем нагреватель

    }
      if (Gerkon == true)
    {
      analogWrite(CoolPIN,map(PotCuller,0,1023,90,255)); //если фен поднят запускаем кулер на установленные обороты
    }
    //*/
    //------------------------------Регулирование температуры фена------------------------------------

    if ((SetTempF > TempF) && Gerkon == true)
      {
      digitalWrite(SpirPIN, 1);

      }
      else{
        digitalWrite(SpirPIN, 0);
      }
      //---------регулировка скорости нагрева с помощью задержек----------------------
     
      delay(map(TempF,50,480,10,90));          //время включенного нагрев
           
        digitalWrite(SpirPIN, 0);
       delay(map(SetTempF,50,480,170,80));           //время выключенного нагрева
    }

    //==============================================
     
     
    Последнее редактирование: 15 ноя 2017
  4. MXXX

    MXXX Гик

    Я может вопрос изначально не понял. У вас просто падает температура при добавлении оборотов? Так она и должна падать. Обороты больше, больше поток воздуха, нагреватель остывает. На моих фенах регулировка мощности работает по оптимальной прогнозируемой динамике температуры. Скачки +- 1 градус. При резком увеличении/уменьшении оборотов температура разумеется тоже падает/растет. Требуется несколько секунд чтобы подобрать оптимальную мощность нагревателя под новый напор воздуха.