Autor Tema: Controlador PID - Nivel Basico (Comentarios)  (Leído 40228 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Controlador PID - Nivel Basico (Comentarios)
« Respuesta #60 en: 28 de Abril de 2010, 16:16:17 »
Ehhh Vivo!!
Eso se llama AutoTunning !!! :D :D :D :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Controlador PID - Nivel Basico (Comentarios)
« Respuesta #61 en: 28 de Abril de 2010, 19:18:13 »
Ehhh Vivo!!
Eso se llama AutoTunning !!! :D :D :D :D :D

 :lol: yo se que se llama autotunning.

Lo que me interesa es hacer uno, y me gustaría que el foro ayudara.

 :idea: Primeramente deberíamos hacer un programa para el pic que obtenga la funcion de transferencia de la planta y luego otro que busque el compensador necesario para esa planta.
« Última modificación: 28 de Abril de 2010, 23:49:31 por bigluis »
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Controlador PID - Nivel Basico (Comentarios)
« Respuesta #62 en: 29 de Abril de 2010, 01:00:44 »
Me estoy poniendo al corriente del curso!!

Excelente pana MLO !!

Saludos!

Desconectado capo

  • PIC10
  • *
  • Mensajes: 3
Re: Controlador PID - Nivel Basico (Comentarios)
« Respuesta #63 en: 30 de Abril de 2010, 15:54:36 »
Les cuento que en mi trabajo  para la sintonia  ocupamos solo proporcional y derivativo  para el control de temperatura
puesto k este es lento  ,cuando es un control rapido como control de posicion o velocidad sumamos la integrativa..
Otro datos k les cuento es el de trabajar con tres controles pid dependiendo si es muy critico el proceso (hacerlos por software)
Les comento que programando un plc para una caldera  tuve que programar tres pid para el control de un solo lazo   ya que a distintas
temperaturas o presiones  las constantes no sirve para todos los rangos (da muy buenos resultados)

eso  y saludos desde chile

mil años que no posteaba  por aca

Desconectado capo

  • PIC10
  • *
  • Mensajes: 3
Re: Controlador PID - Nivel Basico (Comentarios)
« Respuesta #64 en: 30 de Abril de 2010, 16:13:35 »
Este es el pid que estoy implementando en mi lab


DValue VAR WORD                     
  SetPoint VAR WORD                 
  Direction var PortB.7               

  Setpoint = 512             

  INCLUDE "incPID.pbp"                 'Include the PID routine.

   ,asignar valores
    pid_Kp = $0700                     'Set Kp to 7.0
    pid_Ki = $0080                     'Set Ki to 0.5
    pid_Kd = $0225                     'Set Kd to 2.14
    pid_Ti = 8                         'Update I-term every 8th call to PID
    pid_I_Clamp = 100                  'Clamp I-term to max ±100
    pid_Out_Clamp = 511                'Clamp the final output to ±511
     
  Start:
    Gosub GetAD                        'Get position from AD - NOT SHOWN HERE.
                                     
    pid_Error = Setpoint - ADValue     'Calculate the error
    Gosub PID                          'Result returned in pid_Drive
    Direction = pid_Out.15             'Set direction pin accordning to sign
    pid_Out = ABS pid_Out              'Convert from two's comp. to absolute
    HPWM 1, pid_Out, 10000             'Set PWM output
    Pause 10                           'Wait....
  Goto Start                           '...and do it again.


como ven esta re simple lo estoy simulando en proteus aplicado a otro proseco

aki la web
pid  pic basic

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Controlador PID - Nivel Basico (Comentarios)
« Respuesta #65 en: 01 de Mayo de 2010, 13:50:37 »
Hola.

Ehhh Vivo!!
Eso se llama AutoTunning !!! :D :D :D :D :D

 :lol: yo se que se llama autotunning.

Lo que me interesa es hacer uno, y me gustaría que el foro ayudara.

 :idea: Primeramente deberíamos hacer un programa para el pic que obtenga la funcion de transferencia de la planta y luego otro que busque el compensador necesario para esa planta.

Claro que se puede, lo ùnico serìa que el micro tenga el suficiente espacio para hacer todos los calculos no? El controlador que se va a construir aca no es autoT, pero tiene la opcion de controlar al actuador y ademas llevara la cuenta del tiempo para una toma de datos manual. Si se quiere conectar al PC, tambien se podria hacer, solo basta agregar la interfaz respectiva (RS232 o USB) y listo. Yo creo que con uno de los nuevos PICs como el PIC32 si que se podria, sale sobrado ...  :mrgreen: serìa muy interesante construirlo.

No hace mucho diseñe y construi un controlador para un horno que alcanzaba los 1200C, y no tenia problema con alcanzar cualquier punto del SetPoint ... creo que el truco esta en no asignarlo (al SetPoint) como escalon si no como rampa, ya que se asignaba una velocidad de subida en la temperatura.

Saludos
El papel lo aguanta todo

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Controlador PID - Nivel Basico (Comentarios)
« Respuesta #66 en: 01 de Mayo de 2010, 13:57:22 »
En este momento me encuentro en un aprieto. Loq ue necesito es hacer un PID digital para controlar temperaura, he estado revisando el link y en verdad es de mucha ayuda lo que se plantea ahi, pero ahora me encuentro con otro problema se ha llegado a una ecuacion final la cual es la discretizacion de una ecuacion continua pormedio de la transformada z, cual es la forma de atacar y programar esta ecuacion en un microcontrolador.

Hola pipipi en este link he posteado algo similar a lo que estas buscando talvez te interese.
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Controlador PID - Nivel Basico (Comentarios)
« Respuesta #67 en: 05 de Mayo de 2010, 19:34:29 »
MLO, he estado estudiando sobre el PID y ya entendí hasta la parte de la determinación de los valores K.

Se supone que uno introduce una entrada escalón de bajo valor al sistema y se muestrean los cambios en la variable de salida hasta que se llegue a un estado estacionario. Con esos valores se tabula una gráfica, se mide el tiempo L y se calcula la pendiente M/T.

De acuerdo a lo último ya se puede despejar el conjunto de valores K.

Dudas a partir de aquí...

- Cuando hablas sobre "restricciones de tiempos" en tu apunte, ¿a qué te refieres con tiempo muerto y constante de tiempo del sistema?

- El valor de la entrada escalón debe ser bajo, ¿pero qué tan bajo? ¿Un 10% a 20% sería correcto?

- ¿Esta sintonización sirve para cualquier valor deseado a la salida (valor de consigna)? Por ejemplo, si deseo que mi sistema mantenga una Temperatura de 50°C, un día después cambio de parecer y quiero que sea de 65°C, ¿puedo usar la misma sintonización inicial o debo sintonizar de nuevo? Creo que la sintonización sólo se debe actualizar si el sistema cambia, no cuando el valor de consigna cambia.

Gracias  :mrgreen:
« Última modificación: 05 de Mayo de 2010, 19:51:41 por migsantiago »

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Controlador PID - Nivel Basico (Comentarios)
« Respuesta #68 en: 06 de Mayo de 2010, 16:36:24 »
Hola.

El tiempo muerto es el tiempo que transcurre desde que inyectas el escalón al sistema hasta que el sistema reacciona, en este caso con un cambio de temperatura.
La constante de tiempo del sistema es el tiempo relacionado con la reacción del sistema.
Normalmente la amplitud del escalón es del orden del 10% al 20% de la amplitud total.
Se supone que la sintonización sirve para el rango de trabajo operativo que se ha previsto, eso depende de que tanta potencia calórica puedan generar las resistencias eléctricas (para el caso del horno)

Saludos.
El papel lo aguanta todo

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Controlador PID - Nivel Basico (Comentarios)
« Respuesta #69 en: 06 de Mayo de 2010, 16:51:58 »
Entonces de acuerdo a esta gráfica...

http://img79.imageshack.us/img79/7161/ziegrle.png


¿L es el tiempo muerto y T es la constante de tiempo del sistema?

Si lo anterior es cierto, entonces Ziegler-Nichols es útil cuando

0.1 < L/T <1.0

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Controlador PID - Nivel Basico (Comentarios)
« Respuesta #70 en: 06 de Mayo de 2010, 19:14:57 »
Hola mig.

En ese caso no hay tiempo muerto (eso es muy pero muy raro en un caso real). T es el tiempo con el que se calcula la máxima pendiente (razón de cambio) del sistema.

Saludos
El papel lo aguanta todo

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Controlador PID - Nivel Basico (Comentarios)
« Respuesta #71 en: 09 de Mayo de 2010, 15:00:24 »
Hola!!
Muy interesante el post MLO!! Lo estoy siguiendo bien de cerca.
Tengo una pequeña duda (o mas bien sugerencia) sobre el tema de la media movil. Por que guardas los valores obtenidos del ADC en un arreglo?? No es mas facil usar un acumulador? Ademas utilizamos menos memoria.

Quedaria algo asi:
Código: C
  1. int16 FiltroADC(void)//................................................................................................Filtro ADC
  2. {
  3.         int8 i=0;
  4.         int16 Sumatoria=0;
  5.         float Resultado;
  6.  
  7.         set_adc_channel(0);
  8.         for(i=0;i<NumeroMuestras;i++)
  9.         {
  10.                 delay_us(50);
  11.                 Sumatoria += read_adc();
  12.         }
  13.  
  14.         Resultado = Sumatoria/NumeroMuestras*0.0061428;
  15.         return((int16)(Resultado*100/0.41322));//Operaciones para pasar el valor digital a temperatura usando Termocupla J
  16. }

Otra cosita q no entiendo bien son las operaciones q haces al final. Por q multiplicas el resultado por 0.0061428? Y la ultima operacion supnogo q es para pasar del valor binario a ºC, no?
Graciasss!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Controlador PID - Nivel Basico (Comentarios)
« Respuesta #72 en: 09 de Mayo de 2010, 20:14:32 »
Hombre, Gera, pues ya es la costumbre de gastar memoria en vano no?  :D  (el acumulador esta justamente despues  :D ) Excelente tu aporte, muchas gracias.

Respecto al valor 0.0061428, es por corrección soft para que el valor se acerque mas al real medido por mi voltimetro, aunque debería ser 0.004828125, el resto de operaciones es justamente para eso: para pasar el valor digital a °C (tal como dice en el comentario  ;-) )

Saludos
El papel lo aguanta todo

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Controlador PID - Nivel Basico (Comentarios)
« Respuesta #73 en: 09 de Mayo de 2010, 22:51:47 »
Ahh, muy practica esa solucion. La verdad q el ADC de los pics deja mucho q desear..
Gracias por la explicacion MLO, sigo atento al tema! :)

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Controlador PID - Nivel Basico (Comentarios)
« Respuesta #74 en: 16 de Mayo de 2010, 12:42:42 »
Hola MLO

Unas dudas...

- Cuando el sistema es recién encendido, ¿hay que igualar a cero las variables PID.iT0 y PID.eT0?

- Sobre esta parte de tu tema:

Citar
Hay restricciones para el uso de estas ecuaciones en relación a la razón existente entre el tiempo muerto y la constante de tiempo del sistema. Si el valor de la razón entre estos dos valores está fuera de un rango de 0.10 y 1.0, no se debe usar éste método y es mejor pensar en otro.

No me quedó muy claro en la última vez que te pregunté. Viendo estos valores...

Código: [Seleccionar]
//Los valores de a, b y c, se deben calcular segun el sistema
const float a = 21.0494;
const float b = 0.327;
const float c = 338.69;

¿Cómo supiste que Ziegler-Nichols podía usarse? ¿Cuánto vale el rango?


 

anything