Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Bien, para que todo esto funcione, dividiré el desarrollo del proyecto en dos
etapas:
Etapa de control
Etapa de Potencia (se incluye la protección contra cortos)
Etapa de Control
Material:
4 potenciometros de 1kohm
2 leds
3 resistencias 330 ohms
1 pic16f887
1 pantalla lcd (JHD 162A)
1 LM35 (sensor de Temperatura de Precisión)
He aquí el esquemático:
Como se muestra en la imagen pueden armar el circuito de control de
temperatura y simularlo en Isis Proteus.
/*
Programa de Control de Temperatura con un PIC
Permite variar el DutyCicle y Frecuencia de una señal PWM
que controla la corriente que recibe una resistencia de carga
INFO:
El comportamiento es simple, por medio del sensor LM35 se procede a medir la
temperatura
si esta no ha llegado aún a la temperatura deseada (SetPoint) manda un PWM
con un DutyCicle
proporcional a la diferencia entre la temperatura medida y la deseada, si la
diferencia es grande
el DutyCicle tambíen lo será y viceversa
Al llegar a la teperatura deseada el Control la mantiene.
El circuito está diseñado sólo para calentar no para enfriar por tanto
si se elige un SetPoint abajo de temperatura ambiente, el DutyCicle siempre
permanecerá en 0%.
*/
//Prototipos de Funciones
void Refresh_lcd(float _Frecuencia_, float _DutyCicle_, float _SP_, float
_Temperatura_);
float Get_Lectura(int channel);
float Relacion_LineaRecta_m(float m, float valorEjeIndep);
float Calcula_PR2(float _Frecuencia);
void Refresh_PWM_Duty(float _DCValue);
void Refresh_PWM_Frec(float _Period2);
float Calcula_Value_DC(float _SP_, float _Temp_);
float CalculaPendiente (float Xmin, float Ymin, float Xmax, float Ymax);
void main()
{
//int i = 0;
delay_ms(5);
while(1)
{
PWMValue = bits_dutyCicle;
Period2 = Calcula_PR2(Frecuencia);
if(PWMValue != PWMValue_)
{Refresh_PWM_Duty(PWMValue);}
if(Period2 != Period2_)
{Refresh_PWM_Frec(Period2);}
PWMValue_ = PWMValue;
Period2_ = Period2;
//Metodo que calcula y regresa la pendiente para una recta que posee los
puntos
//(Xmax,Ymax) y (Xmin,Ymin)
float CalculaPendiente (float Xmin, float Ymin, float Xmax, float Ymax)
{
float m = 0.0;
float num = 0.0;
float den = 0.0;
return m;
}
if(Value_DC < 0)
{ Value_DC = 0; }
return Value_DC;
}
return _PR2;
}