Hola Thulsa_Doom
Estuve revisando tus avances la verdad que seria bueno que publiques tus avances para los menos avanzandos ya que tambien me gusta experimentar con algo ya adelantado, claro si puedes, saludos.
Prototipo de Control de Horno con Pic16F876 + MAX6675
- DOMUSPRIME
- Hot Gun
- Mensajes: 26
- Registrado: Dom Abr 17, 2011 12:07 am
------------------------------------------------- :> ------------------------------------------
"Todo lo que somos es el resultado de lo que hemos pensado; está fundado en nuestros pensamientos y está hecho de nuestros pensamientos". (Sidhartha Gautama - Fundador del budismo).
"Todo lo que somos es el resultado de lo que hemos pensado; está fundado en nuestros pensamientos y está hecho de nuestros pensamientos". (Sidhartha Gautama - Fundador del budismo).
- Thulsa_Doom
- Reboleador Extremo
- Mensajes: 557
- Registrado: Lun Ago 24, 2009 3:24 pm
Hola, en este momento no puedo publicarlo.
El motivo es que no tengo tiempo de hacer una documentación en condiciones, no tengo el diseño de las pistas para que puedan hacerse la placa ustedes mismo ya que el prototipo que tengo ha evolucionado según las necesidades y no he hecho un esquema (eso al final) y otras cosas que no están preparadas.
Ahoramismo estoy liado en otros asuntos e intentando desarrollar el nuevo control, para ello le he pedido ayuda a un amigo porque he llegado a un nivel donde no puedo seguir yo solo.
El mayor escollo al que me enfrento es con una función matemática creada por Ziegler/Nichols que es para el control de sistemas continuos y eso ya es de ingeniería de control y yo no soy ingeniero, así que hay que esperar un poco.
Del desarrollo de esta función (y otras) se saca el algoritmo para el control de la temperatura, no voy a entrar en detalles que esto se que aburre.
ya iré informando
El motivo es que no tengo tiempo de hacer una documentación en condiciones, no tengo el diseño de las pistas para que puedan hacerse la placa ustedes mismo ya que el prototipo que tengo ha evolucionado según las necesidades y no he hecho un esquema (eso al final) y otras cosas que no están preparadas.
Ahoramismo estoy liado en otros asuntos e intentando desarrollar el nuevo control, para ello le he pedido ayuda a un amigo porque he llegado a un nivel donde no puedo seguir yo solo.
El mayor escollo al que me enfrento es con una función matemática creada por Ziegler/Nichols que es para el control de sistemas continuos y eso ya es de ingeniería de control y yo no soy ingeniero, así que hay que esperar un poco.
Del desarrollo de esta función (y otras) se saca el algoritmo para el control de la temperatura, no voy a entrar en detalles que esto se que aburre.
ya iré informando
Si cada vez que se dice manteca, dios mata un gatito, no os preocupéis, en el callejón de al lado de mi edificio hay un contenedor de basura que por las noches está lleno
ZM5860C
Horno de reflujo casero con un control fabricado por mi en evolución
ZM5860C
Horno de reflujo casero con un control fabricado por mi en evolución
- DOMUSPRIME
- Hot Gun
- Mensajes: 26
- Registrado: Dom Abr 17, 2011 12:07 am
Si, te entiedo a mi me pasa lo mismo, si te puedo ayudar no dudes en solicitarlo, estudie ing. industrial algo me acuerdo de termodinamica y balance, bueno cuando puedas estare revisando tus adelantos.
------------------------------------------------- :> ------------------------------------------
"Todo lo que somos es el resultado de lo que hemos pensado; está fundado en nuestros pensamientos y está hecho de nuestros pensamientos". (Sidhartha Gautama - Fundador del budismo).
"Todo lo que somos es el resultado de lo que hemos pensado; está fundado en nuestros pensamientos y está hecho de nuestros pensamientos". (Sidhartha Gautama - Fundador del budismo).
Hola Thulsa_Domm, te felicito por tu proyecto, yo hace tiempo y continúo experimentando con sistemas Pid,
analizando comportamientos de calefactores, utilziando transformadas de Laplace, aproximación de curvas por mínimo cuadrado, con polinomios de 4º orden(que churros de ecuaciones, al despejar incógnitas), integrales, etc... y casi siempre los métodos emprícos para un buen tuning del Pid. Puedes jugar con las variables pid, dependiendo del rizado, etc..
Si puedo ayudarte, de momento te envío esta parte de código, es un Pid donde te ajusta el PWM, creo
que es lo que buscabas.
Espero a ver te ayudado, aunque sea un poco. Ánimo con tu proyecto.
#INCLUDE <16F877A.H>
#DEVICE ADC=10
#USE DELAY(CLOCK=4000000)
#FUSES XT,NOWDT
VOID MAIN(){
INT16 valor, control; //Variables para lectura de ADC y señal de Control a modulo CCP
FLOAT a,b,c; //Constantes para parámetros de controlador PID
FLOAT TEMPERATURA_LIMITE; //Referencia de Temperatura
FLOAT rt,eT,iT,dT,yT,uT,iT0,eT0; //Variables de controlador PID
FLOAT max,min; //Variables para anti-windup
min=0.0;
max=1000.0;
iT0=0.0;
eT0=0.0;
a=0.1243;
b=0.0062;
c=0.6215;
TEMPERATURA_LIMITE=1200.0; //Set Point r(kT)= 120°C
setup_timer_2(t2_div_by_4,249,1); //Configuracion de Timer 2 para establecer frec. PWM a 1kHz
setup_ccp1(ccp_pwm); //Configurar modulo CCP1 en modo PWM
setup_adc_ports(all_analog); //Configurar ADC
setup_adc(adc_clock_internal);
set_adc_channel(0); //Seleccionar Canal 0 para sensor de Temperatura
while(true){
valor=read_adc(); //Leer ADC
yT=5000.0*valor/1024.0; //Escalizar señal de salida y(kT)
rT=TEMPERATURA_LIMITE;
eT=rT-yT; //Calcular senal de error e(kT)
iT=b*eT+iT0; //Calcular termino integrativo i(kT)
dT=c*(eT-eT0); //Calcular termino derivativo d(kT)
uT=iT+a*eT+dT; //Calcular senal de control u(kT)
if (uT>max){ //Anti-windup
uT=max;
}
else {
if (uT<min){
uT=min;
}
}
control=uT;
set_pwm1_duty(control); //Transferencia de senal de control al actuador
iT0=iT;
eT0=eT;
delay_ms(100); //Periodo de muestreo T=0.1s
}
}
Saludos
analizando comportamientos de calefactores, utilziando transformadas de Laplace, aproximación de curvas por mínimo cuadrado, con polinomios de 4º orden(que churros de ecuaciones, al despejar incógnitas), integrales, etc... y casi siempre los métodos emprícos para un buen tuning del Pid. Puedes jugar con las variables pid, dependiendo del rizado, etc..
Si puedo ayudarte, de momento te envío esta parte de código, es un Pid donde te ajusta el PWM, creo
que es lo que buscabas.
Espero a ver te ayudado, aunque sea un poco. Ánimo con tu proyecto.
#INCLUDE <16F877A.H>
#DEVICE ADC=10
#USE DELAY(CLOCK=4000000)
#FUSES XT,NOWDT
VOID MAIN(){
INT16 valor, control; //Variables para lectura de ADC y señal de Control a modulo CCP
FLOAT a,b,c; //Constantes para parámetros de controlador PID
FLOAT TEMPERATURA_LIMITE; //Referencia de Temperatura
FLOAT rt,eT,iT,dT,yT,uT,iT0,eT0; //Variables de controlador PID
FLOAT max,min; //Variables para anti-windup
min=0.0;
max=1000.0;
iT0=0.0;
eT0=0.0;
a=0.1243;
b=0.0062;
c=0.6215;
TEMPERATURA_LIMITE=1200.0; //Set Point r(kT)= 120°C
setup_timer_2(t2_div_by_4,249,1); //Configuracion de Timer 2 para establecer frec. PWM a 1kHz
setup_ccp1(ccp_pwm); //Configurar modulo CCP1 en modo PWM
setup_adc_ports(all_analog); //Configurar ADC
setup_adc(adc_clock_internal);
set_adc_channel(0); //Seleccionar Canal 0 para sensor de Temperatura
while(true){
valor=read_adc(); //Leer ADC
yT=5000.0*valor/1024.0; //Escalizar señal de salida y(kT)
rT=TEMPERATURA_LIMITE;
eT=rT-yT; //Calcular senal de error e(kT)
iT=b*eT+iT0; //Calcular termino integrativo i(kT)
dT=c*(eT-eT0); //Calcular termino derivativo d(kT)
uT=iT+a*eT+dT; //Calcular senal de control u(kT)
if (uT>max){ //Anti-windup
uT=max;
}
else {
if (uT<min){
uT=min;
}
}
control=uT;
set_pwm1_duty(control); //Transferencia de senal de control al actuador
iT0=iT;
eT0=eT;
delay_ms(100); //Periodo de muestreo T=0.1s
}
}
Saludos
- Thulsa_Doom
- Reboleador Extremo
- Mensajes: 557
- Registrado: Lun Ago 24, 2009 3:24 pm
Hola, gracias por tu ayuda e interés.
ese algoritmo se me parece mucho a uno que me traía el libro "compilador C CCS y simulador Proteus
y no conseguí que funcionara, en la simulación iba perfecto pero en la realidad entraba en bucle, y a parte de eso, el comportamiento no era el adecuado, de todas maneras he estado hablando con un amigo que estudio el caso y pensamos en crear el algoritmo de 0 lo que pasa que por causas de trabajo mi amigo ya no puede, espero que dentro de un mes más o menos podamos retomar el asunto.
ese algoritmo se me parece mucho a uno que me traía el libro "compilador C CCS y simulador Proteus
y no conseguí que funcionara, en la simulación iba perfecto pero en la realidad entraba en bucle, y a parte de eso, el comportamiento no era el adecuado, de todas maneras he estado hablando con un amigo que estudio el caso y pensamos en crear el algoritmo de 0 lo que pasa que por causas de trabajo mi amigo ya no puede, espero que dentro de un mes más o menos podamos retomar el asunto.
Si cada vez que se dice manteca, dios mata un gatito, no os preocupéis, en el callejón de al lado de mi edificio hay un contenedor de basura que por las noches está lleno
ZM5860C
Horno de reflujo casero con un control fabricado por mi en evolución
ZM5860C
Horno de reflujo casero con un control fabricado por mi en evolución
- Thulsa_Doom
- Reboleador Extremo
- Mensajes: 557
- Registrado: Lun Ago 24, 2009 3:24 pm
De todas maneras lo que he dicho no significa que no acepte ayuda de nadie más, si se te ocurre cualquier cosa no dudes en comentarla, saludos y muchas gracias
Si cada vez que se dice manteca, dios mata un gatito, no os preocupéis, en el callejón de al lado de mi edificio hay un contenedor de basura que por las noches está lleno
ZM5860C
Horno de reflujo casero con un control fabricado por mi en evolución
ZM5860C
Horno de reflujo casero con un control fabricado por mi en evolución
Bueno, yo te puedo decir que implementar la función Pid no es nada complejo, si el tuning. No se que tipo de resistencias utilizas en tu horno, si son de cuarzo, podías implementar un Pid Proporcional, el mas básico, tienen buena inercia térmica
y no tendrás que pelearte con las variables integrales y derivativas. De hecho siempre que se implementa un Pid, se comienza con el proporcional, aunque esto supongo que ya lo sabías, si has simulado con proteus.
Tengo un código interesante, hecho en Visual Basic, es un Pid para control de una válvula que controla el llenado de un depósito de agua, si quieres te lo mando. Es una buena forma de documentarse.
Aunque es mas apasionante, hacer tus cálculos e implementarlo, eso si necesitarás un dataloger de temperaturas para trazar la línea de máxima pendiente y empezar.
Mira encontré algo interesante, te lo envío, hasta que encuentre el código en Visual b.
Creo que hay mas información que la que pueda aportarte tu amigo.
http://www.megaupload.com/?d=OORLDGCV
Saludos
y no tendrás que pelearte con las variables integrales y derivativas. De hecho siempre que se implementa un Pid, se comienza con el proporcional, aunque esto supongo que ya lo sabías, si has simulado con proteus.
Tengo un código interesante, hecho en Visual Basic, es un Pid para control de una válvula que controla el llenado de un depósito de agua, si quieres te lo mando. Es una buena forma de documentarse.
Aunque es mas apasionante, hacer tus cálculos e implementarlo, eso si necesitarás un dataloger de temperaturas para trazar la línea de máxima pendiente y empezar.
Mira encontré algo interesante, te lo envío, hasta que encuentre el código en Visual b.
Creo que hay mas información que la que pueda aportarte tu amigo.
http://www.megaupload.com/?d=OORLDGCV
Saludos
Thulsa, te envió un código para pic, es un pid completo, no se si llegaste a probarlo, pero por si acaso.
Por problemas con megaupload, quito el enlace, de todas formas me dí cuenta que era un código Pid, para
Pic (joer parezco un pájaro
), está orientado a estabilizar un péndulo.
Lo siento, de todas maneras el enlace anterior, tiene suficiente información, y un simulador.
Saludos
Por problemas con megaupload, quito el enlace, de todas formas me dí cuenta que era un código Pid, para
Pic (joer parezco un pájaro
Lo siento, de todas maneras el enlace anterior, tiene suficiente información, y un simulador.
Saludos
Última edición por dmingo el Mar Jun 28, 2011 8:49 pm, editado 1 vez en total.
- DOMUSPRIME
- Hot Gun
- Mensajes: 26
- Registrado: Dom Abr 17, 2011 12:07 am
"dmingo" Bueno el material, obtuve información que tenia confusa respecto al funcionamiento de un PID, se agradece el material, el ultimo archivo no esta vigente si puedes subirlo nuevamente. Gracias por el aporte.
------------------------------------------------- :> ------------------------------------------
"Todo lo que somos es el resultado de lo que hemos pensado; está fundado en nuestros pensamientos y está hecho de nuestros pensamientos". (Sidhartha Gautama - Fundador del budismo).
"Todo lo que somos es el resultado de lo que hemos pensado; está fundado en nuestros pensamientos y está hecho de nuestros pensamientos". (Sidhartha Gautama - Fundador del budismo).
