Моя паяльная станция

Miamin
Offline
Зарегистрирован: 29.02.2016

Мой скетч

/*
ver. 0.5.3


*/

#include <LiquidCrystal.h>
#include <CyberLib.h>
#include <Bounce2.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);   // Выходы для дисплея 1602

int pinSolderOut = 5;  // Выход для паяльника
int pinSolderPotenciom = A4;  // Потенциометр паяльника
int pinSolderTermopara = A3;  // Термопара паяльника
int pinSolderButton = 1;  // Кнопка вкл. и выкл. паяльника
int setSolderTemp = 0; // Выставленная температура по умолчанию (+ увеличение и уменьшение при нажатии кнопок)
int ZCpin = 2;


int pinHotAirOut = 6;  // Выход для фена
int pinHotAirIn = A2;  // Потенциометр фена
int pinHotAirTCouple = A1;  // Термопара фена
int pinHotAirCoolerOut = 3;  // Выход для вентилятора фена ( PWM )
int pinHotAirCoolerIn = A0;  // Потенциометр вентилятора фена
int pinHotAirButton = 4;  // Кнопка вкл.и выкл. фена
int setHotAirTemp = 0; //Выстовленная температура фена по умолчаниюsetНотAirTempsetНотAirTemp


#define bt_SON 1
#define bt_HAON 4
Bounce SolderOnButton = Bounce();
Bounce HotAirOnButton = Bounce();


int setHotAirTemp = 0; //Выстовленная температура фена по умолчанию
int setHotAirOld = 0 ;
int setSolderOld = 0;
int solderTCouple=0; //  Температура термопары паяльника
int PwmSolderTCouple = 0; // Показаник АЦП термопары Паяльника 
int HotAirTCouple = 0; // Температура термопары фена
int PwmHotAirTCouple = 0; // Показаник АЦП термопары фена 
int displayHotAirCooler = 0; // Значения оборотов фена  на дисплеи 
int setHotAirCooler = 0; // установленые обороты фена
volatile uint16_t ots = 9990;
float HAPower = 0.0; // 
#define Kp 1.0
#define Ki 0.005 //0.008 //0.0035
int integral = 0;




boolean need_HA_countdown = true; // 
boolean need_S_countdown = true;
int contAir = 10; // таймер работы фена
int contS = 15; // таймер работы паяльника
int Scountdown = contS;
int HAcountdown = contAir;

int TempACPSoldArray[6] = {255,287,369,430,483,560}; // массив значений АЦП  по значениям температуры 50,100,200,300,400,480
int TempACPAirArray[6] = {80,149,312,476,630,760}; //50,100,200,300,400,480

boolean FAN = true; // Переменная включения вентилятора

unsigned long prevWorkMillis = 0;
unsigned long prevDisplayMillis = 0;
unsigned long prevHAmillis = 0;
unsigned long prevSmillis = 0;

#define sKp 70




uint8_t char_cel[8] = {
  B00111, B00101, B00111, B00000, B00000, B00000, B00000
};

void setup()
{
  TCCR2B = TCCR2B & 0b11111000 | 0x05; // 
  pinMode(ZCpin,INPUT_PULLUP); //Zero cross pin

  pinMode(pinSolderButton, INPUT); //1

  pinMode(pinHotAirButton, INPUT); //4
  
    D5_Out; //pinSolderOut
    D5_Low;
    D6_Out; //pinHotAir
    D6_Low;
   
    pinMode(bt_SON,INPUT_PULLUP);
    SolderOnButton.attach(bt_SON);
    SolderOnButton.interval(5);

    pinMode(bt_HAON,INPUT_PULLUP);
    HotAirOnButton.attach(bt_HAON);
    HotAirOnButton.interval(5);
  
  lcd.begin(16, 2);
  lcd.createChar(1, char_cel);  
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("SOLDER STATION");
  lcd.setCursor(0, 1);
  lcd.print("ver. 0.5.3");
  delay_ms(1000);
   
  attachInterrupt(0, ZC, RISING); // Перывания обнуружения перехода через ноль!
 }



void loop()
{
 
  int PwnSetSolderTemp = getOversampled(pinSolderPotenciom); 
  int setTempMassSolder = map(PwnSetSolderTemp, 0, 1023, 0, 46);
  PwmSolderTCouple = getOversampled(pinSolderTermopara);
  solderTCouple = getTemp(PwmSolderTCouple,TempACPSoldArray[0],TempACPSoldArray[1],TempACPSoldArray[2],TempACPSoldArray[3],TempACPSoldArray[4],TempACPSoldArray[5]);
  int MassTempSolder[] = {200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280,
                          285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355, 360, 365,
                          370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430};
  setSolderTemp = MassTempSolder[setTempMassSolder];


 
  int PwmSetHotAirTemp = getOversampled(pinHotAirIn);
  int setTempMassAir = map(PwmSetHotAirTemp, 0, 1023, 0, 81);
  PwmHotAirTCouple = getOversampled(pinHotAirTCouple);
  HotAirTCouple = getTemp(PwmHotAirTCouple,TempACPAirArray[0],TempACPAirArray[1],TempACPAirArray[2],TempACPAirArray[3],TempACPAirArray[4],TempACPAirArray[5]);
  int MassTempAir[] = {50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145,
                       150, 155, 160, 165, 170, 175, 180, 185, 190, 195, 200, 205, 210, 215, 220, 225, 230,
                       235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315,
                       320, 325, 330, 335, 340, 345, 350, 355, 360, 365, 370, 375, 380, 385, 390, 395, 400,
                       405, 410, 415, 420, 425, 430, 435, 440, 445, 450, 455};
   setHotAirTemp = MassTempAir[setTempMassAir];
 
  setHotAirCooler = map(getOversampled(pinHotAirCoolerIn), 0, 1023, 130, 255);
  displayHotAirCooler = map(getOversampled(pinHotAirCoolerIn), 0, 1023, 0, 99);
  
  


  if (solderTCouple > 450) { //480
    setSolderTemp = 0;
  }
  if (HotAirTCouple > 450) { //460
    setHotAirTemp = 0;
  }

   // таймер фена
	if (need_HA_countdown && digitalRead(pinHotAirButton) == HIGH){
		unsigned long currHAmillis = millis();
		if (currHAmillis >= (prevHAmillis + 60000)){
			prevHAmillis = currHAmillis;
			if (HAcountdown >=2){HAcountdown--;} 
			else{
				HAcountdown = contAir;
				prevHAmillis = 0;
				need_HA_countdown = false;
				setHotAirTemp =0;
			}
		}
	} 
	
	// таймер паяльника
	if (need_S_countdown && digitalRead(pinSolderButton) == HIGH){
		unsigned long currSmillis = millis();
		if (currSmillis >= (prevSmillis + 60000)){
			prevSmillis = currSmillis;
			if (Scountdown >=2){Scountdown--;} 
			else{
				Scountdown = contS;
				prevSmillis = 0;
				need_S_countdown = false;
				setSolderTemp = 0;
			}
		}
	} 

  
    // сброс таймера фена
	if (setHotAirTemp != setHotAirOld && setHotAirTemp !=0 && digitalRead(pinHotAirButton) == HIGH){
		need_HA_countdown = true;
		HAcountdown = contAir;
		setHotAirOld = setHotAirTemp;
	}
	 // сброс таймера паяльника
	if (setSolderTemp != setSolderOld && setSolderTemp !=0 && digitalRead(pinSolderButton) == HIGH) {
		need_S_countdown = true;
		Scountdown = contS;
		setSolderOld = setSolderTemp;
	}
 
 // Работа  фена
	if (digitalRead(pinHotAirButton) == LOW){
			need_HA_countdown = true;
			HAcountdown = contAir;
			D6_Low;
	}
	else{
		 if (need_HA_countdown) {HA_PI();}
		 else{
			 setHotAirTemp =0;
			 D6_Low;
		}
	}	

// работа паяльника		
 Solder(setSolderTemp,solderTCouple);
 
 // работа вентилятора
 AirCoole();
 



 unsigned long currDisplayMillis = millis();
    if (currDisplayMillis > (prevDisplayMillis + 150))
    {
        prevDisplayMillis = currDisplayMillis;
        DispU();
    }
    
 
}

uint16_t getOversampled(uint16_t ADC_value) {
	unsigned long int result = 0;
	for (byte z = 0; z < 64; z++) result += ADC_value;
	return result >> 6;
} 

int getTemp( int PWM, int getx, int gety, int getcc, int getz, int gete,int geteb){ // функция перевода АЦП в температуру( пытаюсь реализовать программную калибровку, пока в поланах)
  if (PWM < getx) {return map(PWM,0,getx,0,50);}
  if (PWM >= getx && PWM <gety) {return map(PWM,getx,gety,50,100);}
  if (PWM >= gety && PWM <getcc) {return map(PWM,gety,getcc,100,200);}
  if (PWM >= getcc && PWM <getz) {return map(PWM,getcc,getz,200,300);}
  if (PWM >= getz && PWM <gete) {return map(PWM,getz,gete,300,400);}
  if (PWM >= gete) {return map(PWM,gete,geteb,400,480);}
}


void Solder(int setTemp,int TemCouple) {
  
	if ( digitalRead(pinSolderButton) == HIGH) {
		if (need_S_countdown){
				int err = setTemp - TemCouple;
				int TempPower = sKp * err;
				uint16_t SPower = constrain(TempPower, 0, 255);
				analogWrite(pinSolderOut, SPower);
		}
		else{
		  analogWrite(pinSolderOut, 0);
		  setSolderTemp = 0;
		}
	}
	else{
		  analogWrite(pinSolderOut, 0);
		  need_S_countdown = true;
		  Scountdown = contS;
	}
}
void  Air(int setAirTemp,int HotAirTemp )
{
 if (setAirTemp >= HotAirTemp && digitalRead(pinHotAirButton) == HIGH)
  {
    D6_High;
	//digitalWrite(pinHotAirOut, HIGH);
    delay_ms(120);
    //digitalWrite(pinHotAirOut, LOW);
	D6_Low;
  }
  else {
    //digitalWrite(pinHotAirOut, LOW);
	D6_Low;
  }
}

void DispU() 
 {
	  lcd.clear();
	  lcd.print("S:");
	  lcd.setCursor(2, 0);
	  if (digitalRead(pinSolderButton) == HIGH)
	  {
  		if (solderTCouple < 460)
    		{
    		  lcd.print(setSolderTemp);
    		  lcd.setCursor(6, 0);
    		  lcd.print(solderTCouple);
    		  lcd.setCursor(10, 0);
    		  lcd.print(PwmSolderTCouple);
			    lcd.setCursor(14, 0);
			    lcd.print(Scountdown);
    		}
  		else
    		{
    		  lcd.print("Er");
    		  lcd.setCursor(10, 0);
    		  lcd.print(PwmSolderTCouple);
    		  setSolderTemp = 0;
    		}
	  }
	  else
  	  {
    		lcd.print("Off");
    		lcd.setCursor(6, 0);
    		lcd.print(solderTCouple);
    		lcd.print("\1");
    		setSolderTemp = 0;
  	  }
//ФЕН
		  lcd.setCursor(0, 1);
		  lcd.print("A:");
		  lcd.setCursor(2, 1);
		  if (digitalRead(pinHotAirButton) == HIGH)
		  {
				if (HotAirTCouple < 465)
					{
					  lcd.print(setHotAirTemp);
					  lcd.setCursor(6, 1);
					  lcd.print(HotAirTCouple);
					  lcd.setCursor(10, 1);
					  lcd.print(HAcountdown);
					  lcd.setCursor(14, 1);
					  lcd.print(displayHotAirCooler);
					  
					}
				else 
					 {
						  lcd.print("Er");
						  lcd.setCursor(7, 1);
						  lcd.print(PwmHotAirTCouple);
						  setHotAirTemp = 0;
					  }
		  }
		  else
		  {
				lcd.print("Off");
				lcd.setCursor(6, 1);
				lcd.print(HotAirTCouple);
				lcd.print("\1");
		
				lcd.setCursor(14, 1);
				lcd.print(displayHotAirCooler);
				setHotAirTemp = 0;
		   }
 
 }
 
 void AirCoole()
 {
	 if (HotAirTCouple > 50 && digitalRead(pinHotAirButton) == LOW && FAN) 
	  { 
		analogWrite(pinHotAirCoolerOut, 255);
	  } 
	  else if (HotAirTCouple <= 50 && digitalRead(pinHotAirButton) == LOW && FAN) 
			{
				analogWrite(pinHotAirCoolerOut, 0);
				FAN = false;
			}
	  else if (HotAirTCouple < 100 && digitalRead(pinHotAirButton) == LOW && FAN == false)
			{
				analogWrite(pinHotAirCoolerOut, 0);
			} 
	  else if (HotAirTCouple > 100 && digitalRead(pinHotAirButton) == LOW && FAN == false )
			{
			    FAN  = true;
				analogWrite(pinHotAirCoolerOut, 255);         
			}
	  else if (HotAirTCouple > 50 && need_HA_countdown==false)
		    {
				analogWrite(pinHotAirCoolerOut, 255);
				FAN = true;
			  }
	  else  if (HotAirTCouple < 50 && need_HA_countdown==false)
			{
				analogWrite(pinHotAirCoolerOut, 0);
				FAN = true;
			}	
	  else
	    {
				analogWrite(pinHotAirCoolerOut, setHotAirCooler);	
				FAN = true;	
			}
	 
 
 }

 void ZC() {
    StartTimer1(HeaterOn, ots);
    RestartTimer1();
}
 
void HeaterOn() {
    if (digitalRead(pinHotAirButton) == HIGH && need_HA_countdown)
      {
          if (HAPower > 0.0)
            {
                D6_High;
    			delay_us(100);
                D6_Low;
            } 
          else {D6_Low;}
      }
    StopTimer1();
} 
   
void HA_PI() {
    int err = setHotAirTemp - HotAirTCouple;
    float TempPower = ((Kp * err) + (Ki * integral));
	if (TempPower < 100.0 && TempPower > 0.0) integral += err;
    HAPower = constrain(TempPower, 0.0, 100.0);
    CalctImpulseControl();
}

/* Calculate delay for triac */
void CalctImpulseControl() {
    ots = (uint16_t)(acos(HAPower / 50.0 - 1.0 ) * 9900.0 / pi);
}

 

ellpigy
ellpigy аватар
Offline
Зарегистрирован: 08.05.2016

А эти массивы зачем? Разве регулировка не линейная?

Miamin
Offline
Зарегистрирован: 29.02.2016

 Мне не особо нравится установка температуры по 1 градусу, другой  способ не нашел чтобы устанавливать темпертаруту по 5, 10 градусов.

Да еще помогае убрать прыгание темп-ры, т.е если устанавливаем 250, а показывается 249-250-251. Можно конечно добавить конденцатор, но я решил программно убрать.

Maverik
Offline
Зарегистрирован: 12.09.2012

Друзья, снова я со своими вопросами.

Приехал мой паяльник. Подключил к плате - эффект примерно такой же, как и у фена  (подробности здесь:  http://arduino.ru/forum/proekty/moya-payalnaya-stantsiya?page=7#comment-194224 ) . На всякий случай заменил ОУ.

Что имеем на данный момент:

1) Потенциометры, кнопки, экран - работают корректно. На экране корректно отображается температура, выставляемая потенциометрами фена и паяльника.  Атемега живая, всегда корректно прошивается подпаял к нужным ногам разъем для программатора. 5 вольт на месте.

2) Термопары фена и паяльника, похоже, исправны, по крайней мере звонятся обе по 1.9 - 2.1 ома. Да и вероятность одновременно неисправных термопар невеликиа.

3) Температура с термопар, (на выходах ОУ)  отображается некорректно. При отключенных контактах термопар паяльника и фена, отображается для паяльника и фена ОДИНАКОВАЯ но неправильная температура, она немного" плавает",  разница в показаниях фена и паяльника не больше 1 градуса но в течении долей секунд выравнивается.  При подключении через блок питания, на обоих отображается температура около 473-476 градусов. При питании от программатора отображается температура около 438-445 градусов, тоже немного "плавает" но тоже при этом одинаковая у фена и паяльника.

4) Самое веселое. На подстроечные резисторы температура термопар не реагирует.  При подключении контактов термопар (не важно паяльника или фена и не важно какая ПОЛЯРНОСТЬ) , температура термпоары того прибора, который подключили, сбрасывается в НОЛЬ, температура второго продолжает "плавать" без изменений.  Если отключить контакты этой термопары, температура начинает от нуля быстро подниматься до температуры второго прибора (не мгновенно, секунд за семь) и достигнув ее, они продолжают "плавать" синхронно.  Светодиод паяльника корректно загорается при превышении выставленной температуры над  показаниями термопары, паяльник при этом начинает греться. 

Впечатление, что где-то на плате ошибка. В какую сторону копать уже не знаю. Ну и как и говорил -чей совет реально поможет, тот получает пару бутылочек хорошего пива  (не виртуального :-)  ).

 

 

 

 

saloed111
Offline
Зарегистрирован: 07.04.2016

Посмотрел твою перчатку, могу ошибаться, проверь от полюса термопары фена на ногу усилителя стоит резистор, а рядом на минус тоже резистор, а должен вроде быть кондер. Сейчас на работе с телефона, вечером на компе гляну хорошо...
В общем с 5 ноги LM проверь, все ли правильно

Maverik
Offline
Зарегистрирован: 12.09.2012

Превед салоед )  Да, на схеме там два резистора, но номиналы  смдшек при пайке я брал с оригинальной платы,которая чуть ниже, поэтому вряд ли на реальной плате ошибка.  Вечером гляну, надеюсь всё же что ошибка именно там.  Хотя, тогда бы, наверное, не глючило второй канал ОУ .

Maverik
Offline
Зарегистрирован: 12.09.2012

Проверил, с 5й ноги ОУ всё разведено правильно.  

Maverik
Offline
Зарегистрирован: 12.09.2012

нашел на фликере типовую схему подключения термопары к аналоговому пину ардуины через LM358.

https://www.flickr.com/photos/28521811@N04/15632729689/in/photostream/

номиналы другие совсем - например подстроечник на 100 КОм, а в нашей схеме - 10 КОм.

может попробовать заменить ?

saloed111
Offline
Зарегистрирован: 07.04.2016

У меня тоже на 10к стоят, все работает норм, не думаю, что тут проблема, у меня плата разведена как у автора, может в разводке платы где ошибка досадная, мне аж самому интересно, где же проблема...

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

это регулировка КУ операционника, там важно соотношение резистора по входу и в цепи обратной связи.

в данном случае КУ зверский (1 к 220)

Maverik
Offline
Зарегистрирован: 12.09.2012

а, т.е. чем меньше значение сопротивления на подстроечнике, тем меньше усиление ? тогда мне не нужно большое сопротивление, отображает и так больше 400 градусов ((

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

 

 

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

дело не в отображении, дело в напряжении(=КУ) на выходе ОУ (=входе МК), которое завист от исходного сигнала с датчика температуры.

а показавать може 400 градусов, а по факту и 40 не будет - зависит от настройки и программы(как она обрабатывает приходящее на измерительный вход напряжение с ОУ).

как-то так.

а в цепи обратной связи ставьте 20-60 кОм  постоянный и 50-100 кОм подстроечник (можно и наоборот, но важно понимать где будет регулировка - в начале и конце диапазона).

Maverik
Offline
Зарегистрирован: 12.09.2012

с переменником понятно, а постоянные  20-60 кОм это вместо тех, которые сейчас на 10кОм рядом с разъемами термопар ? какой смысл заменять постоянные, если подстроечник будет на 100 кОм ? 

ellpigy
ellpigy аватар
Offline
Зарегистрирован: 08.05.2016

Maverik, а в скетче все верно написано? Что касается подстроечного резистора то может и 1 кОм хватить(если на обратку 220 кОм), смотря сколько миливольт выдает термопара при максимальной нагрузке.

murygin_exp
Offline
Зарегистрирован: 18.06.2016

У меня паяльник с датчиком-терморезистором. Подключил датчик через подтягивающий подстроечный резистор к выводу 26 контроллера. С измерением температуры паяльника начался бардак. Настроить не получается, температуру держит не ту что выставил и меряет не правильно. Что делать? Подскажите, кто-нибудь, пожалуйста! Форум просмотрел но конкретного решения по данному вопросу не нашел. Ткните носом если можно, где смотреть? 

 

murygin_exp
Offline
Зарегистрирован: 18.06.2016

Да забыл сказать, с термопарой все замечательно работало, температуру держала четко. Настраивал все по мультиметру с измерителем темературы. А потом термопара оборвалась (я ее немного выдвинул из керамики для лучшего контакта с жалом) .

A753
Offline
Зарегистрирован: 12.06.2016

Здравствуйте!

Хочу собрать станцию вот по этой сылке http://d-serviss.lv/index.php?mod=pages&pageName=solderingstation Подскажите,размер платы.

Или может ктото чёт другое подсоветуйте!

 

saloed111
Offline
Зарегистрирован: 07.04.2016

A753 пишет:

Здравствуйте!

Хочу собрать станцию вот по этой сылке http://d-serviss.lv/index.php?mod=pages&pageName=solderingstation Подскажите,размер платы.

Или может ктото чёт другое подсоветуйте!

 

Я собирал станцию с этого сайта, плату тоже брал оттуда, размер 50*80 мм, паяльник и фен заказывал у китайцев. Пока вроде все нормально работает. Другие версии платы не пробовал чтобы не танцевать с бубном, но кое что сейчас бы переделал, потому что походу добавил геркон фена и защиту на реле...

vismut
Offline
Зарегистрирован: 18.10.2013

saloed111 в 38 посте написано как задействовать геркон. Надеюсь подсказка поможет :).

Maverik
Offline
Зарегистрирован: 12.09.2012

у меня заработал один канал.  на нем работают термопары и у паяльника и у фена.  другой по прежднему ни в какую.  уже и оу менял и резисторы, и атмегу.  загадко...

saloed111
Offline
Зарегистрирован: 07.04.2016

vismut пишет:

saloed111 в 38 посте написано как задействовать геркон. Надеюсь подсказка поможет :).

Я его и так задейтвовал, просто на плате пришлось все на весу допаивать, вот я и написал, что плату маленько сейчас бы переделал, а так спасибо за подсказку...

ellpigy
ellpigy аватар
Offline
Зарегистрирован: 08.05.2016

Maverik пишет:

  на нем работают термопары и у паяльника и у фена

Не понял это как так на одном канале и термопара фена и паяльника работать может?

saloed111
Offline
Зарегистрирован: 07.04.2016

Maverik пишет:

у меня заработал один канал.  на нем работают термопары и у паяльника и у фена.  другой по прежднему ни в какую.  уже и оу менял и резисторы, и атмегу.  загадко...

Странно, оба канала же одинаковые, если один заработал, то надо как то и второй подогнать по первому...

Maverik
Offline
Зарегистрирован: 12.09.2012

вот именно, странно.   "подогнать по первому" не получается никак...

saloed111
Offline
Зарегистрирован: 07.04.2016

Maverik пишет:

вот именно, странно.   "подогнать по первому" не получается никак...

Попробуй переделать плату как у автора, так, для эксперимента, запуститься нормально или нет???

saloed111
Offline
Зарегистрирован: 07.04.2016

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

Maverik
Offline
Зарегистрирован: 12.09.2012

Так отож.  Ведь работало же в варианте от SERG_AG , нет, нужно было переделать, а та плата уже раздербанена и ушла в утиль ))

Выводил специально под смд 1206 и чтобы расстояние между дорожками было побольше, еще выводы оставил под ISCP интерфейс. вроде больше ничего не менял.  Уже дело принципа довести до ума, попробую еще исходную плату Олега, сначала разведу только обвязку атмеги, ОУ, потенциометры и выводы дисплея, запитаю от 5 вольт напрямую, посмотрим что будет ) 

кстати, если ОУ вытащен из кроватки, на lcd отображаются значения температуры около 14-18 градусов для обоих каналов. так и должно быть ?

ОУ менял, даже другие пробовал, атмегу менял. 

saloed111
Offline
Зарегистрирован: 07.04.2016

Я не пробовал подключать схему без усилителя, даже не знаю сколько там, без подключения термопар показывал ошибку, в скетче отключал защиту и показания были где то 490 градусов, поэтому и показывал ошибку, когда подключил термопары, все стало нормально, только подкорректировал температуры подстроечниками, да перепутал полярность на паяльнике (тоже выдавал ошибку), я намучился с дисплеем, постоянно начинали бежать крякозябры переодически, но вроде сейчас решил, все норм работает. Я бы сейчас немного переделал плату (времени нет), увеличил бы размеры и немного растащил бы силовую часть от цифровой, еще хотел бы запитать цифровую часть от отдельного источника питания на 5 вольт, но пока не до станции, тем более она нормально работает и выполняет свои функции на 100%...

Alexsnek
Offline
Зарегистрирован: 24.06.2016

Приветствую ребята.

Собрал станцию, а вот дальше беда небольшая с определением температуры. Брал разные прошивки, последняя 0.6 от saloed111.  При включении фена, все потенциометры на нуле, термопара фена показывается температуру ну очень хаотично, скачки очень большие, причем начинается нагрев, видно по светодиоду, что промаргивает. С паяльником все нормально. Попробывал в скетче поменять порты термопар. Температура фена стала показывать четко, с паяльником стала беда. Но теперь еще когда включить фен на обдув, тен в ноль и включить паяльник с потенциометром в ноль, начинает греть паяльник. LM менял. Куда дальше лезть не догадываюсь. Вот плата на которой спаено

Плата

murygin_exp
Offline
Зарегистрирован: 18.06.2016

Я собрал станцию точно на такой же плате, все работает. Внимательно проверь монтаж и наличие К.З., особенно в местах пайки smd деталей. У меня с прошивкой 0.5 все отлчно рабоает. Попробуй другую прошивку. Удачи! 

murygin_exp
Offline
Зарегистрирован: 18.06.2016

 Несколькими постами выше я задавал вопрос о применении паяльника с терморезистором в данном проэкте, но мне так никто и не помог. Поэтому пришлось разобраться самому. Дело в том что подключение терморезистора напрямую к Atmega328, с использованием подтягивающего резистора результатов не дает, показания температуры неправильные. Пришлось собрать схемку усилителя для терморезистора на LM358 и после несложной подстройки все заработало как надо. Грелка паяльника HAKKO 900 907 908 913 914 керамическая со встроенным тонкопленочным терморезистором сопротивлением 43 Ом. Схема проверена на практике, все работает( плата немного отличается от схемы: добавлен конденсатор по питанию 100n и С1 установлен перед R2 можно еще на выходе в паралель поставить конденсатор100n). Если не будете использовать второй канал операционного усилителя то выводы 6 и 7 желательно замкнуть между собой, а вывод 5 замкнуть на минус.             

Miamin
Offline
Зарегистрирован: 29.02.2016

murygin_exp пишет:

 Дело в том что подключение терморезистора напрямую к Atmega328, с использованием подтягивающего резистора результатов не дает,  

В соседней ветке форума, есть проект как раз для терморезистора, и там пероначально делалось с подтигивающем резисторам. Получался делитель напряжения. Я так тоже сделал,у меня работает. Не спроста для делителя выбрали резистор от 100 до 220 ом, есть такое понятие гистерезис. Если номинал резистора 100 ом, то получается линейная зависимость напряжения от температуры, а далее все уже нужно делать в прошивке, экспрементально подбирать значекния.

Но скажу, если чесно ,мне больше нравится вариант с ОУ, из за того что можно дабится на и лучшей точности.  Лень матушка пока недает заняться переделкой!))

Miamin
Offline
Зарегистрирован: 29.02.2016

И еще в этом проекте http://arduino.ru/forum/proekty/ocherednaya-payalnaya-stantsiya реализован вариант с ОУ. Фишка в том, что используются 2 подстоечника, тем самым данные АЦП = температуре. Можно проста отказаться от функции map, проста считывать  данные с аналогово порта и  показания будут прямыми для температуры. 

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Miamin пишет:
Можно проста отказаться от функции map

Упрощённый вариант с простым усилителем и масштабированием (map) возможно не так и плох, но многие не учитывают следующего:
Задавая преобразование в таком виде map(analogRead(pinSolderIn), 0, 1023, 0, 480), где 1023 - максимально ожидаемый код АЦП, который для не для rail-to-rail ОУ никогда не будет достигнут. Для ОУ, типа 358, это значение примерно может быть равным 700-800, максимум, после чего не будет изменяться при увеличении сигнала на входе, т.е. ОУ войдёт в насыщение. Соответственно, выставив температуру, к примеру, градусов 400, в этом случае получаем, что нагреватель нагреется до температуры 300-350 градусов, выход ОУ "упрётся в потолок", контроллер же видя, что температура ниже заданной, будет его "кочегарить до белого каления".
Таким образом, вместо величины 1023 в функцию нужно передавать меньшее значение, которое стОит определить заранее - загнать ОУ в насыщение и измерить напряжение на его выходе. Ну, или записать то значение, которое будет выдавать ОУ при реальной максимальной температуре на выходе фена. Фен в этом случае лучше подключить к ЛАТРу или внешнему регулятору и потихоньку греть, контролируя температуру.

Также, резистор в обратной связи ОУ определяет "крутизну" характеристики преобразования - загнать ОУ в насыщение можно будет и при 10 мВ на входе и при 20 мВ, взависимости от величины этого резистора. Поэтому его не мешает подбирать, иначе можно получить сильно сжатую характеристику преобразования или наоборот.

 

murygin_exp
Offline
Зарегистрирован: 18.06.2016

Видать рано я обрадовался, что все работает.... Сегодня пришел фен из китая, мотор на 24в. Запаял разъемы, подключил, а он не работает как надо.

Нагреватель я не подключал. Подключил турбинку и термопару. Реальную температуру показывает "0" (по данным термопары), регулятором выставляется температура нормально от "0" до "480", обороты турбинки регулируются нормально "0" до "99", после незначительной "пляски с бубном".

Полярность включения термопары проверил, плату на КЗ и правильность монтажа проверил раз сто, правильность распайки разьема проверял, LM358 менял (правда она у меня одна, не факт что рабочая), Atmega328 менял на другую (грешил на нерабочий вход) но ничего не изменилось.

В канале паяльника та же картина, хотя неделю назад все работало с термопарой. А с дополнительным усилителем настроенным на работу с терморезистором паяльник работает и показания на дисплее отображаются правильно.

Может кто идею подбросит, где еще копать? 

Miamin
Offline
Зарегистрирован: 29.02.2016

murygin_exp пишет:

Видать рано я обрадовался, что все работает.... Сегодня пришел фен из китая, мотор на 24в. Запаял разъемы, подключил, а он не работает как надо.

Нагреватель я не подключал. Подключил турбинку и термопару. Реальную температуру показывает "0" (по данным термопары), регулятором выставляется температура нормально от "0" до "480", обороты турбинки регулируются нормально "0" до "99", после незначительной "пляски с бубном".

Полярность включения термопары проверил, плату на КЗ и правильность монтажа проверил раз сто, правильность распайки разьема проверял, LM358 менял (правда она у меня одна, не факт что рабочая), Atmega328 менял на другую (грешил на нерабочий вход) но ничего не изменилось.

В канале паяльника та же картина, хотя неделю назад все работало с термопарой. А с дополнительным усилителем настроенным на работу с терморезистором паяльник работает и показания на дисплее отображаются правильно.

Может кто идею подбросит, где еще копать? 

Не особо понял проблему)) так не работает фен или паяльник? Нет набора температуры?

Surikat
Offline
Зарегистрирован: 13.07.2016

0добрый день!мне нужно архив на проект arduino nano паяльной станции !!!:) ссылки на архив устарели и не могу скачать!

saloed111
Offline
Зарегистрирован: 07.04.2016

Surikat пишет:
0добрый день!мне нужно архив на проект arduino nano паяльной станции !!!:) ссылки на архив устарели и не могу скачать!

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

murygin_exp
Offline
Зарегистрирован: 18.06.2016

Не работает канал измерения температуры фена. Подключил термопару и турбинку, а нагреватель не подключал. При включении фена турбинка работает с минимальными оборотами и нормально регулируется. Переменным резистором регулируется заданная температура от 0 до 480, а подстроечным начальная (фактическая) температура фена не регулируется, на дисплее показывает постоянно 0 (хотя должна быть равна комнатной). Набор температуры идет бесконтрольно а на дисплее 0. Та же история и с каналом паяльника при работе с термопарой. Ранее канал паяльника с термопарой работал нормально. Может быть входы lm358 "накрылись..."? На днях закуплю штук пять lm358 и буду эксперементировать.

Surikat
Offline
Зарегистрирован: 13.07.2016

добрый день! немогу загрузить скан платы ,прошивка использовал 0,5, но сдесь в посте выше вылошена точная копия платы пост √429 25.06.2016

после монтажа и настройки выявились такие исправность мк непозывает ошибку обрыва термопары , мк не реагирует на манипуляции тумблером канал паяльника

в чем может быть проблема?

Surikat
Offline
Зарегистрирован: 13.07.2016

saloed111 пишет:

Surikat пишет:
0добрый день!мне нужно архив на проект arduino nano паяльной станции !!!:) ссылки на архив устарели и не могу скачать!

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

saloed111
Offline
Зарегистрирован: 07.04.2016

Я собирал на плате как у автора в архиве, все нормально запустилось и настроек потребовалось минимум (больше подгонял под себя), главное все хорошо проверить, весь монтаж... Плату, которая в посте №429 я видел, но досконально ее не сотрел и не проверял, может где то ошибка в разводке...

Surikat
Offline
Зарегистрирован: 13.07.2016

http://arduino.ru/sites/default/files/u21221/plata.jpg ктонибудь собирал вот поэтой печатной плате , уменя с горели порты мк328 иследел ИД ? плата рабочая??Г

Surikat
Offline
Зарегистрирован: 13.07.2016

где можно скачать прошивки к станции ? ссылку

Surikat
Offline
Зарегистрирован: 13.07.2016

saloed111 пишет:

Surikat пишет:
0добрый день!мне нужно архив на проект arduino nano паяльной станции !!!:) ссылки на архив устарели и не могу скачать!

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

по возможни скинуть ссылки на проекты котрые у вас есть!Заинтересовался проектом станций!

Surikat
Offline
Зарегистрирован: 13.07.2016

Вопрос не по теме обсуждения кто нибудь пользуется кэшбеком ! интересует лучшие и удобней пользоватся?

saloed111
Offline
Зарегистрирован: 07.04.2016

Surikat пишет:

saloed111 пишет:

Surikat пишет:
0добрый день!мне нужно архив на проект arduino nano паяльной станции !!!:) ссылки на архив устарели и не могу скачать!

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

по возможни скинуть ссылки на проекты котрые у вас есть!Заинтересовался проектом станций!

Вот то что я нарыл пока делал свою станцию

Это моя https://yadi.sk/d/5mZiBFmntLxrM

Это остальные https://yadi.sk/d/3SnRIye5tLxuL

https://yadi.sk/d/9K-Liu6stLxv9

https://yadi.sk/d/FUcF5AcRtLxwA

https://yadi.sk/d/tZjjj_98tLxx7

https://yadi.sk/d/RZeuCuZstLxxu

stayzer
Offline
Зарегистрирован: 18.07.2016

Всем привет Вот долго решался и все таки решил!)
Ребят прошу у вас помощи так как сам не технарь но по роду деятельности так уж случилось что работа в этой сфере та и нравится очень возится с всякими самоделками (пока простыми).
Собрал я себе платку по схеме автора первый запуск на ура все выводит не че не мигает не коротит (ПОКА), и тут мое гуманитарное а не техническое образование загнало меня как всегда в большую Ж.... Писал автору он молчит по тому прошу ПОМОГИТЕ (т как останавливаться на пол пути не хочется, а в схемах пока разбираюсь на уровне физики СШ и сжечь все тоже как то не хочется). Кто может и имеет время распишите подключение разъемов и потенциометров.

С потенциометрами так себе, но чуть понятно если че поправьте крайние ноги это +5 и земля, а средняя это паяльник, фен, и мотор

+5 и землю подключаем двумя проводами последовательно т как портов для подключения мало.  - если не так поправьте
 

Ну а за разъемы простите тут я не понимаю ни чего если можете распишите (или расшифруйте аббревиатуры на плате.
Еще раз извините за беспокойство мою тупизно и не судите строго.

VitaliyDF
Offline
Зарегистрирован: 02.02.2016

Подскажите можно ли сделать данную паяльную станцию на Atmega8A, у меня сейчас станция работает на ардуино нано. Есть в наличии атмега8, хотел освободить ардуино и поставить вместо нее атмегу.

ellpigy
ellpigy аватар
Offline
Зарегистрирован: 08.05.2016

stayzer пишет:

Кто может и имеет время распишите подключение разъемов и потенциометров.

 

Смотри мои статьи http://ellpigy.com/page/pajalnaja-stancija-na-arduino-chast2-sborka-i-nastrojka