Autor Tema: Dudas PID  (Leído 13107 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Dudas PID
« Respuesta #15 en: 31 de Diciembre de 2009, 13:37:19 »
Sí, tiene buena pinta, y en castellano. Ya estoy empollándolo.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Dudas PID
« Respuesta #16 en: 31 de Diciembre de 2009, 14:12:31 »
Al principio estaba la duda de como medir la velocidad, en este caso debes medir la velocidad instantánea y no la promedio en un periodo de tiempo, por ello debes medir el ancho de pulso del encoder.

Y con respecto a la dinámica del sistema, es cierto que el motor actuará de distinta forma dependiendo de la carga, pendiente, suelo, ect, pero podríamos tomar estos aspectos como perturbaciones al sistema, y si el control PID se hace de manera correcta esto debería de poderse controlar.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Dudas PID
« Respuesta #17 en: 31 de Diciembre de 2009, 14:50:16 »
Hola.

Una cosa es calcular una función que describa los cambios entre PWM y frecuencia y otra muy diferente calcular la función de transferencia del motor. Para la primera, se toma datos de velocidad para cada valor de PWM, sale una tablita relacionando una variable con otra, pero esa función no nos sirve para hacer el PID. La funcion que se necesita se obtiene al imprimir una función escalón en un rango del 15% al 20% de la señal total del PWM y medir como se comporta la velocidad.

Es muy importante el patrón de medida, ya que es con respecto a él quien tomas las medidas.

La función con la que se calcula el PID es una función con base en el tiempo, ya que si haces la tabla de relacion entre una variable y la otra, solo haces corresponder un valor de velocidad a un valor de PWM y en ese caso no hay control.

El PID es efectivo para sistemas de 1 o 2 orden, para sistemas de orden superior, el PID se torna inestable. Para garantizar que a tu sistema si se le puede aplicar un PID, la función de transferencia de la planta (motor) debe darte una funcion exponencial. Si hay mas variables de perturbación, la cosa cambia, ya que tocaría diseñar un sistema de control un poco mas robusto, como un Fuzzy o un RST.

El ejemplo clásico es el del horno, en el cual la variable a controlar es la temperatura, y la función de transferencia del sistema la sacas inyectando un potencial a la resistencia y mides la temperatura con respecto al tiempo y de ahi se calculan los valores del sistema. En tu caso se inyectaría una señal de voltaje también, y debes medir el cambio de velocidad en el sistema con respecto al tiempo, ya con eso puedes plantear tooooda la matematica para calcular el PID.

Si el motor va a tener carga, debes verificar el par motor de motor y el sistema final ya es mas complejo, pero se puede hacer. O puedes hacerte un variador de velocidad en el cual el par motor permance constante, es otra opcion.

Saludos
El papel lo aguanta todo

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Dudas PID
« Respuesta #18 en: 31 de Diciembre de 2009, 14:58:06 »
¿Cómo es eso del variador de velocidad con par constante?

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Dudas PID
« Respuesta #19 en: 31 de Diciembre de 2009, 15:02:13 »
Hola

Aqui hay lo básico para comenzar.

Saludos
El papel lo aguanta todo

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Dudas PID
« Respuesta #20 en: 31 de Diciembre de 2009, 15:21:25 »
Que yo recuerde todo modelo se puede aproximar a una fdt de segundo orden, (quitando polos alejados, quitando polos con ceros cercanos, dejando los polos más significativos, es decir los más cercanos a cero, etc...), así que ahí no hay problemas. Por otro lado las perturbaciones (son inherentes a cualquier sistema) las puedes simular poniendo un sumador a la salida del bloque del PID y metiendole las perturbaciones para hacer la simulaciones y ver si el PID que has realizado es robusto o no. De esto último hay mucha información en san google o si quieres echale un vistazo al libro de ingeniería de control moderna de Ogata.

Un saludete.

Desconectado Jorge555

  • PIC18
  • ****
  • Mensajes: 496
    • JMN
Re: Dudas PID
« Respuesta #21 en: 31 de Diciembre de 2009, 17:47:38 »
Te pego una forma rápida de hacer un PID y ajustar las constantes de manera experimental:

        // The "proportional" term should be 0 when we are on the line.
        int proportional = ((int)position) - 2000;

        // Compute the derivative (change) and integral (sum) of the
        // position.
        int derivative = proportional - last_proportional;
        integral += proportional;

        // Remember the last position.
        last_proportional = proportional;

        // Compute the difference between the two motor power settings,
        // m1 - m2.  If this is a positive number the robot will turn
        // to the right.  If it is a negative number, the robot will
        // turn to the left, and the magnitude of the number determines
        // the sharpness of the turn.
        int power_difference = proportional/20 + integral/10000 + derivative*2;

En este caso position sería la medida de la salida en tu caso sería la velocidad.

        int proportional = ((int)position) - 2000;

Sería la parte proporcional del regulador, siendo 2000 la salida/velocidad deseada, es decir la diferencia entra la salida medida y la salida deseada nos da el error proporcional.

        int derivative = proportional - last_proportional;

Aquí se calcula la velocidad de cambio del error, es decir su derivada. La diferencia entre los dos errores divididos por el tiempo ed muestro, la división no se hace ya que este tiempo de muestreo va a ser fijo por lo que acaba siendo una constante y va dentro de la constante derivativa que vamos a utilizar.

       integral += proportional;

Esta es la parte integral del error que es ir acumulando todos los errores que se van midiendo.

        int power_difference = proportional/20 + integral/10000 + derivative*2;

Por último se asigna una constante a cada error para realizar el ajuste del regulador, power_difference en tu caso generaría el valor del ciclo alto de la señal de pwm.

Esto es una forma de hacer un PID válido.

Puede ser interesante calcular el error mediante el ancho de pulso teniendo en cuenta tu frecuencia de muestreo y la velocidad del motor, ya que tendrás una medida mucho más precisa de la derivada del error que si lo haces contando pulsos del encoder en un intervalo de tiempo.

Con esto te puede llegar para hacer el regulador PID correcto y que funcione bien, no sé que es lo que necesitas, si no quieres meterte a sacar la planta  y realizar medidas puedes probar a hacerlo así y ver si te llega.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Dudas PID
« Respuesta #22 en: 01 de Enero de 2010, 00:35:19 »
Hola.

No necesariamente se puede aproximar. Lo que se suele hacer es linealizar por tramos. Si se quiere aproximar, se requiere un tratamiento matemático mas amplio. Otra cosa que se usa muy a menudo es forzar la respuesta del sistema a uno de 1 o 2 orden mediante la regresión exponencial hecha por algun software, pero implica que no se esta describiendo el sistema como se debe y eso puede llevar a problemas cuando se implementa.

Esto del control es apasionante para el nuevo año jeje

Saludos
El papel lo aguanta todo

Desconectado Eyedol

  • PIC16
  • ***
  • Mensajes: 129
Re: Dudas PID
« Respuesta #23 en: 01 de Enero de 2010, 23:53:03 »
Saludos nocturno Creo que para hacer un PID no hace falta tantas cosas hay formas sencillas de hacerlo y hasta donde se es una simple resta.  :lol: :lol: :lol: este algoritmo lo copie de PID_controllerPID wikipedia pero en ingles:

previous_error = 0
integral = 0
start:
  error = setpoint - actual_position
  integral = integral + (error*dt)
  derivative = (error - previous_error)/dt
  output = (Kp*error) + (Ki*integral) + (Kd*derivative)
  previous_error = error
  wait(dt)
  goto start


Creo que con eso puedes escribir facilito un codigo en C no?  :lol: :lol: :lol:

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Dudas PID
« Respuesta #24 en: 02 de Enero de 2010, 01:38:20 »
Saludos nocturno Creo que para hacer un PID no hace falta tantas cosas hay formas sencillas de hacerlo y hasta donde se es una simple resta.  :lol: :lol: :lol: este algoritmo lo copie de PID_controllerPID wikipedia pero en ingles:

previous_error = 0
integral = 0
start:
  error = setpoint - actual_position
  integral = integral + (error*dt)
  derivative = (error - previous_error)/dt
  output = (Kp*error) + (Ki*integral) + (Kd*derivative)
  previous_error = error
  wait(dt)
  goto start


Creo que con eso puedes escribir facilito un codigo en C no?  :lol: :lol: :lol:

Realizar un código puede ser sencillo, pero diseñar un PID debe hacerse de forma correcta para obtener un sistema de control adecuado  :? No es simplemente una resta  :D Hay que determinar de forma correcta las constantes Kp, Kd y Ki, eso es lo "complicado"  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Dudas PID
« Respuesta #25 en: 02 de Enero de 2010, 14:44:01 »
Exactamente, ya que depende del modelo de planta a controlar, de hecho, me ha tocado instalar varios controladores PID genéricos, a los cuales se les ingresa por teclado las constantes para que comience a trabajar y me he encontrado con comentarios como: El controlador no sirve, ya que le han ingresado cualquier dato y lógicamente no se va a comportar como se quiere  :D

Saludos
El papel lo aguanta todo

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Dudas PID
« Respuesta #26 en: 02 de Enero de 2010, 15:36:39 »
Pues gracias a vuestra ayuda, jugando con ese algoritmo y con multitud de valores de Kp, Kd y Ki he conseguido algo que se aproxima bastante a lo que necesito.

Os dejo unas capturas de la señal de potencia del PIC al motor en tres circunstancias diferentes. Ojo, no es la gráfica de la velocidad real, sino de la potencia del motor, por lo que para interpretarla correctamente hay que tener en cuenta que la rueda tiene inercia.

Aceleración de 0Hz a 200Hz


Deceleración de 200Hz a 50Hz (baja más por lo que os decía de la inercia de la rueda, y luego recupera el suministro de potencia para mantener velocidad)


Aquí freno la rueda con la mano, por lo que la potencia se aumenta para mantener la velocidad constante

Desconectado Eyedol

  • PIC16
  • ***
  • Mensajes: 129
Re: Dudas PID
« Respuesta #27 en: 02 de Enero de 2010, 16:14:10 »
Citar
Realizar un código puede ser sencillo, pero diseñar un PID debe hacerse de forma correcta para obtener un sistema de control adecuado  Confused No es simplemente una resta  lol Hay que determinar de forma correcta las constantes Kp, Kd y Ki, eso es lo "complicado"

Esta bien hay tantos caminos para llegar a roma! muchisimos procesos dicho de otra forma un alto porcentaje permite hacer ciertos ajustes a travez de metodos de entonacion (hallar los valores correctos de Kp Ki Kd) ejemplo el metodo de  Ziegler-Nichols o mas atevido aun un simple metodo de tanteo donde en resumen se van disminuyendo los valores hasta obterner la estabilidad, tal y como lo comprueba nocturno con su juego con el algoritmo, es algo tan sencillo que esta en nuestra naturaleza, para resolver problemas sencillos no hace falta 10000 años de estudio y matematicas. Gracias por tu Aclaratoria amigo la verdad a pesar de que he entonado muchisimos lazos en mi corta vida me falta aprender mas sobre lo que tu recomiendas.

Citar
Pues gracias a vuestra ayuda, jugando con ese algoritmo y con multitud de valores de Kp, Kd y Ki he conseguido algo que se aproxima bastante a lo que necesito.

Felicitaciones he recivido tanta ayuda de este foro espero que te halla servido de ayuda! :-/ :-/ :-/


Desconectado Eyedol

  • PIC16
  • ***
  • Mensajes: 129
Re: Dudas PID
« Respuesta #28 en: 02 de Enero de 2010, 16:18:05 »
Citar

Por cierto nocturno que programa es ese que usas para mostrar esas graficas????? :?

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Dudas PID
« Respuesta #29 en: 02 de Enero de 2010, 16:42:47 »
Ninguno, son capturas de pantalla de mi osciloscopio


 

anything