Hello everyone, I would really appreciate if you could help me
Im making a mini fridge controller (PID), using a 4n25 optocoupler, an IRFZ44n Mosfet and a tec peltier
I connect it to a 12v and 3 A and arduino 5v
As soon as the arduino code is uploaded and I connect it, the mosfet starts to get very hot
what should I do to fix this??
I show you the diagram:
This is my code:
}
Im making a mini fridge controller (PID), using a 4n25 optocoupler, an IRFZ44n Mosfet and a tec peltier
I connect it to a 12v and 3 A and arduino 5v
As soon as the arduino code is uploaded and I connect it, the mosfet starts to get very hot
what should I do to fix this??
I show you the diagram:
This is my code:
C++:
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire ourWire(2);
DallasTemperature sensors(&ourWire);
#define PWM 13 //-------------Aquà definimos las constantes que se van a utilizar en el programa
const int analogin_potA = A0;
byte man_byte=0; //Valor final del cambio escalon. (max = 255)
float Kc=96; //---- Constante proporcional del PID // con kc mas grande el sistema es mas rapido
float Taui=63; //----- Constante integral del PID // SETPOINT de temperatura taoui//
float Taud=0; //----- Constante derivativa del PID
float T=0.5; //------ Periodo de muestreo de la variable de proceso
float Mk=0; //----Manipulación del PID actual //potencia_1
float Mk1=0; //----- Manipulación del PID del tiempo de muestreo anterior //potencia_2
float E=0; //----- Error actual
float E1=0; //----- Error anterior
float E2=0; //------- Eerror 2 veces atrás del tiempo de muestreo actual
float Ref_Temp=5; //-------- Referencia de la temperatura (°C)
float Temp=0; //----- Variable de proceso (temperatura)
//---------------- Constantes del PID digital ---------------
float BC1=0;
float BC2=0;
float BC3=0;
//----------------
void setup() { // SETUP
delay(1000);
Serial.begin(9600);
sensors.begin(); //Se inicia el sensor
pinMode(analogin_potA, INPUT);
BC1=Kc*(1+(T/Taui)+(Taud/T));
BC2=Kc*(-1-(2*Taud/T));
BC3=Kc*Taud/T;
}
void loop() { // Este es la función que se ejecuta cÃclicamente dentro del Arduino
sensors.requestTemperatures(); //Se envía el comando para leer la temperatura
Temp = analogRead(analogin_potA);
// Aquà va la calibración del sensor para convertir los volts leidos en °C
float Temp= sensors.getTempCByIndex(0); //Se obtiene la temperatura en ºC
Serial.print("Temperatura= ");
Serial.print(Temp);
Serial.println(" C");
delay(100);
//
E = Ref_Temp - Temp;
Mk=Mk1+BC1*E+BC2*E1+BC3*E2; // Esta es la ecuación del PID que calcula la manipulación actual (Mk)
// Aquà estamos limitando el valor máximo y mÃnimo de la manipulación a 0-255
if (Mk > 255){
Mk=255;}
if (Mk < 0){
Mk=0;}
man_byte=Mk;
analogWrite(PWM, man_byte); //Aquà mandamos la manipulación actual al pin generador de PWM (pin 5 del arduino)
//Aquà recorremos la manipulación actual a la manipulación anterior, el error actual al error anterior y el error 2 veces anterior al error anterior.
Mk1=Mk;
E2=E1;
E1=E;
//Aquà irÃa la comunicaci+on serial con la computadora para desplegar el valor de la temperatura y leer el valor de la referencia.
Serial.println("Temperatura_1");
Serial.print(Temp);
delay(100);
//
Attachments
-
43.4 KB Views: 42
Last edited by a moderator: