Regulace teplotní desky pro 3D tisk pomocí arduina

31.01.2020 Arduino #arduino #regulace #mosfet

Zapojení obvodu pro regulace teploty na teplotní desce pro 3D tisk s využitím obvodu MOSFET.


Pro 3D tisk se používají speciální řídící desky, které umožňují přímé napojení dalších komponent bez nutnosti jejich inovací. Příkladem je regulace teploty vyhřívané desky. Většinou jsou na řídící desce tiskárny regulační obvody přímo zapojené a uživatel připojí pouze konektor z tepelné desky.

Pokud budeme chtít řídit tepelnou desku pomocí jiných řídících obvodů, jakými jsou například desky Arduino, musí být k dispozici další komponenty. Zásadní problém je jak napájet a regulovat vyhřívanou desku. Většina vyhřívaných desek pracuje z 12V. Některé desky mají v sobě integrovaný teplotní čidlo, který pracuje s 5V. Zatímco přímé teplotní čidla lze připojit přímo k desce Arduino, protože ty poskytují na výstupu 5V, napájení teplotní desky se nedá realizovat. Teplotní deska má své napájení 12V. Pokud se má regulovat teplota, lze využít některé ho z dodávaných obvodů s tranzistorem MOSFET. Tyto tranzistory opět pracují ve většině případů opět z 12V a tudíž je nelze připojit přímo na desky Arduino, protože 5V je málo na otevření obvodu MOSFET.

K tomu, aby vše fungovalo lze využít dvou přístupů:

  1. Může se vytvořit jednoduchý obvod s tranzistorem MOSFET a zapojit do něj obvod s nějakým NPN tranzistorem, jako zesilovačem.
  2. Nebo můžeme použít MOSFET modul ANET, který disponuje zapojeným MOSFET tranzistorem a poskytuje připravený obvod pro připojení tepelné desky a připojení signálních vodičů k arduinu. Nicméně obvod ze zesilovačem pomocí NPN tranzistoru tam musí být také.

Zapojení MOSFET

fet2

Zapojení Heat Bed s modulem ANET

navrh-regulace-heatbed_bb

navrh-regulace-heatbed_schem

#include <PID_v1.h>

//Thermometer with thermistor

/*thermistor parameters:
 * RT0: 100 000 Ω
 * B: 3950 K +- 0.75%
 * T0:  25 C
 * +- 5%
 */

//These values are in the datasheet
#define RT0 100000                    // Ω
#define B 3950                        // K
//--------------------------------------


#define VCC 5                         //Supply voltage
#define R 100000                      //R=100KΩ
#define SAMPLETIME 1000               // how long between pid/sampling
#define NUMSAMPLES 5                  // how many samples to take and average
#define outputPin 9                   // Analog output pin

//Variables
float RT, VR, ln, TX, T0, VRT, VRTa;
double setPoint, currentTemp, Output;

PID myPID(¤tTemp, &Output, &setPoint,15,.3,0, DIRECT);

void setup() {
  Serial.begin(9600);
  //analogReference(EXTERNAL);  
  setPoint = 35;
  myPID.SetMode(AUTOMATIC);
  myPID.SetSampleTime(SAMPLETIME);
  
  T0 = 25 + 273.15;                   //Temperature T0 from datasheet, conversion from Celsius to kelvin
}

void loop() {

  if (Serial.available() > 0) {
    // get incoming byte:
    setPoint = Serial.parseFloat();
  }

  uint8_t i;
  VRTa = 0;
  // take N samples in a row, with a slight delay
  for (i = 0; i < NUMSAMPLES; i++) {
    VRTa += analogRead(A0);           //Acquisition analog value of VRT
    delay(10);
  }
  VRTa /= NUMSAMPLES;

  
  //-----------------------------
  VRT = (5.00 / 1023.00) * VRTa;      //Conversion to voltage
  VR = VCC - VRT;
  RT = VRT / (VR / R);                //Resistance of RT
  ln = log(RT / RT0);
  TX = (1 / ((ln / B) + (1 / T0)));   //Temperature from thermistor
  currentTemp = TX - 273.15;          //Conversion to Celsius
  //-----------------------------

  myPID.Compute();
  analogWrite(outputPin, Output); 

  
  Serial.print("Temperature:");
  Serial.print("\ t");
  Serial.print(currentTemp);
  Serial.print("C\ t \ t");
  Serial.print(currentTemp + 273.15);          //Conversion to Kelvin
  Serial.print("K\ t\ t");
  Serial.print((currentTemp * 1.8) + 32);      //Conversion to Fahrenheit
  Serial.print("F");
  Serial.print("\ t\ t A0 ");
  Serial.print(VRTa);
  Serial.print("\ t\ t");
  Serial.print(Output);
  Serial.println("\ t \ t");
  delay(SAMPLETIME);

}

Knihovna PID - https://github.com/br3ttb/Arduino-PID-Library