TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Nocturno en 30 de Diciembre de 2009, 16:48:47

Título: Dudas PID
Publicado por: Nocturno en 30 de Diciembre de 2009, 16:48:47
Hola amigos, tengo que diseñar un control PID para motores y me gustaría consultaros alguna duda.

Los motores disponen de un encóder óptico que me permite monitorizar su velocidad real, y los controlo mediante un puente-H basado en L298.

La velocidad mínima que quiero controlar es la equivalente a una frecuencia de 12Hz en los encoders; la máxima equivale a 260Hz.

Se me plantean varias dudas:
- ¿hago la lectura de velocidad de los encoders por recuento del número de pulsos en un periodo conocido, o midiendo la duración de cada pulso?. Me inclino más por la segunda opción dado que a bajas frecuencias tardaré bastante en tener una muestra de pulsos representativa para calcular la velocidad real, pero me gustaría conocer vuestra opinión.
- ¿a qué frecuencia me recomendáis que haga los cálculos del PID y la realimentación a los motores con los nuevos parámetros?

Gracias
Título: Re: Dudas PID
Publicado por: c4_esp_VR en 30 de Diciembre de 2009, 17:32:30
Hola Nocturno:

Yo optaría por medir el número de pulsos en un periodo conocido, en este caso en 0.083 ms es decir (1/12Hz) ya que es tu mínima lectura. Esto es lo más común a la hora de contar pulsos al menos con autómatas.

Respecto a la tasa de muestreo la realizaría siguiendo el teorema del muestreo o el teorema de Nyquist, ya que imagino que el modelo de la planta que sigue tu sistema es un modelo continuo y por tanto al implementarlo en un uC tendrás que discretizarlo, eso si antes de discretizar la señal pásale un filtro antialiasing para atenuar las frecuancia de alta frecuencia o el ruido. En esta última parte no me hagas mucho caso ya que creo recordar (de hace muchos años en automática) que esto se realiza de dicha forma, de todas formas mírate esto del teorema del muestreo por san google.

Un saludete y espero que te sirva.
Título: Re: Dudas PID
Publicado por: MLO__ en 30 de Diciembre de 2009, 18:43:38
Hola.

Lo esencial para que tu PID funcione es la función de transferencia del sistema, en este caso la del motor; la variable de entrada es la velocidad (medida por tu encoder) y la variable de salida es el voltaje en PWM.

Hay que aplicarle una función escalón al motor en lazo abierto entre el mínimo y un 20% de la escala total de voltaje y registras los valores de velocidad, de ahí sacas los valores para el sistema en tiempo continuo.

De acuerdo a eso, lo mas viable sería medir el numero de pulsos en determinado periodo de tiempo. Ese sería el tiempo de muestreo, el cual es importante a la hora de discretizar el sistema.

Saludos
Título: Re: Dudas PID
Publicado por: c4_esp_VR en 31 de Diciembre de 2009, 05:30:00
Como bien dice MLO__, lo más importante es tener un modelo que se parezca lo máximo posible a la realizadad. En este caso como sacas lo parámetros del motor , te los da el fabricante o los sacas tú mediante ensayos técnicos. De ser esta última, podrías comentarnos como los has sacado.

Un saludete.
Título: Re: Dudas PID
Publicado por: Nocturno en 31 de Diciembre de 2009, 06:55:50
Pues estoy verde con las matemáticas, pero a ver qué sale.

He medido la frecuencia de los motores a distintos duty aplicados al driver, siendo estos los resultados:
PWM   Frecuencia leída
74   15
78   22
82   31
86   38
90   45
94   51
98   58
102   66
106   74
110   82
114   92
118   100
122   108
126   115
130   121
134   129
138   137
142   145
146   153
150   161
154   168
158   176
162   181
166   188
170   194
174   200
178   205
182   210
186   216
190   220
194   225
198   230
202   233
206   237
210   240
214   243
218   246
222   248
226   250
230   252
234   254
238   255
242   256
246   256
250   256
254   256

Tras pasarlo por Eureqa (http://ccsl.mae.cornell.edu/eureqa) obtengo la siguiente función, siendo "f" la frecuencia a la que quiero hacer correr a los motores:

PWM = 59.59 + 0.55 * f  + ( 476.1 / ( 266.41 - f ))

Estos cálculos están probados con el motor conectado a la rueda en vacío, sin resistencia alguna.

Dejo el Excel por si queréis jugar con él.
Título: Re: Dudas PID
Publicado por: Suky en 31 de Diciembre de 2009, 09:20:11
Lo que hay que obtener es f=F(PWM), osea una función para determinar la frecuencia (Salida del sistema, y) a partir del PWM (Entrada, u). Para obtener una función de transferencia adecuada (Conocer bien la dinámica) se debe aplicar un escalón PWM, por ejemplo al 50%, esperar que la frecuencia se estabilice, aumentar al 80%, bajar al 30%, ect. siempre esperando que se estabilice. Hacer varios escalones y después ingresar los datos a Matlab o Eurega (No se si sirve  :?) y con ello determinar una función de transferencia. Teniendo la función de transferencia puedes determinar el ancho de banda del sistema, y con ello puedes fijar una velocidad de muestro para el sistema de control digital que suele ser 10 veces más rápido que el ancho de banda.


Saludos!
Título: Re: Dudas PID
Publicado por: Nocturno en 31 de Diciembre de 2009, 09:34:19
También tengo esa función, es esta:

frec = 89.44 + pwm - ( 12.040 / pwm )

La he obtenido haciendo escalones de PWM de 4 en 4, desde Duty=80 que es el primero que hacía moverse al motor hasta Duty = 238 porque por encima el motor no corría más. En total han sido 42 lecturas las que me han permitido obtener esa fórmula.

¿Cómo se calcula ese ancho de banda?
Título: Re: Dudas PID
Publicado por: MGLSOFT en 31 de Diciembre de 2009, 10:09:52
Esto tal vez te pueda ayudar Manolo:
http://uploadbox.com/files/42XIl5t9Do (http://uploadbox.com/files/42XIl5t9Do)

Menos pregunta Dios y perdona...
Título: Re: Dudas PID
Publicado por: Suky en 31 de Diciembre de 2009, 11:45:11
Seria ideal aplicar escalones de PWM que lleven la velocidad hasta unos 80%, luego la baje, así se puede obtener la dinámica de aceleración y des-aceleración. No es correcto como has obtenido esa función, porque como lo has realizado es más la aplicación de una rampa  :? Tiene que ser de 0 a 80%, de ahí a 30%, por ejemplo.

El ancho de banda con la función de transferencia y Matlab es sencillo, sino hay que realizar un bode.


Saludos!
Título: Re: Dudas PID
Publicado por: Nocturno en 31 de Diciembre de 2009, 12:11:46
Pero esa dinámica de aceleración y desaceleración será diferente según la carga de los motores en cada momento, ¿no?
No será lo mismo si las ruedas van sobre ruedo liso o alfombra, o si van cuesta abajo o cuesta arriba.

Marcos, me has dejado lectura hasta el día de Reyes  :(
Título: Re: Dudas PID
Publicado por: c4_esp_VR en 31 de Diciembre de 2009, 12:32:43
Si quieres hacer un PID, mi recomendación es que saques los parámetros característicos del motor que estes usando y a partir de ahí sacas el modelo de la planta, ya que de esta forma tu modelo será más exacto a la realidad.

¿¿¿Esta forma que estas implementando a la hora de sacar el modelo en que se basa???
Título: Re: Dudas PID
Publicado por: Nocturno en 31 de Diciembre de 2009, 12:39:15
No sé a qué te refieres con los parámetros característicos del motor. Este es el motor:
http://www.superrobotica.com/S330100.htm

Respecto a tu pregunta, lo que estoy haciendo o sé si estará apoyado por alguna teoría, únicamente me he dedicado a obtener los valores de velocidad de giro del motor según la potencia aplicada, con la esperanza de que esos datos sirvan para obtener el algoritmo.
Título: Re: Dudas PID
Publicado por: c4_esp_VR en 31 de Diciembre de 2009, 13:09:56
Me refiero a sacar la planta del sistema...mira esta simulación y los parámetros que puedes variar dependen de los parámetros o características del motor.

http://www.fceia.unr.edu.ar/tesys/vlab/MCCSimulationFranco.htm

Mira este paper para que sepas a que me refiero, seguro que de esta forma te será mucho más sencillo implementar un PID.

http://automatica.li2.uchile.cl/exp/files/man_motor/modelacion_motor_cc.pdf

Espero que te sirva.
Título: Re: Dudas PID
Publicado por: Nocturno en 31 de Diciembre de 2009, 13:17:08
Tengo que estudiar más, ejecuto esa animación pero no me entero de nada  :shock:
Título: Re: Dudas PID
Publicado por: c4_esp_VR en 31 de Diciembre de 2009, 13:33:51
Es simplemente una simulación, si le das a gráfica y luego a run verás la evolución del sistema ante una señal de control de tipo rampa, pero en lo que realmente te tienes que fijar es en el paper, en como se basan para sacar el modelo de la planta del motor a través de dos técnicas diferentes, o bien a través de medición experimental de los parámetros de los motores o basada en la información de entrada o salida.

Si te fijas yo te propuse la primea de éstas ya que es la que siempre he estudiado y el modelo es más exacto y en tu caso por lo que veo estas usando la segunda.
Título: Re: Dudas PID
Publicado por: Nocturno en 31 de Diciembre de 2009, 13:37:19
Sí, tiene buena pinta, y en castellano. Ya estoy empollándolo.
Título: Re: Dudas PID
Publicado por: Suky 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!
Título: Re: Dudas PID
Publicado por: MLO__ 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
Título: Re: Dudas PID
Publicado por: Nocturno en 31 de Diciembre de 2009, 14:58:06
¿Cómo es eso del variador de velocidad con par constante?
Título: Re: Dudas PID
Publicado por: MLO__ en 31 de Diciembre de 2009, 15:02:13
Hola

Aqui (http://es.wikipedia.org/wiki/Variador_de_velocidad) hay lo básico para comenzar.

Saludos
Título: Re: Dudas PID
Publicado por: c4_esp_VR 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.
Título: Re: Dudas PID
Publicado por: Jorge555 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.
Título: Re: Dudas PID
Publicado por: MLO__ 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
Título: Re: Dudas PID
Publicado por: Eyedol 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 (http://en.wikipedia.org/wiki/PID_controller) 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:
Título: Re: Dudas PID
Publicado por: Suky 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 (http://en.wikipedia.org/wiki/PID_controller) 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!
Título: Re: Dudas PID
Publicado por: MLO__ 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
Título: Re: Dudas PID
Publicado por: Nocturno 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
(http://img80.imageshack.us/img80/2593/aceleracionde0a200.png)

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)
(http://img502.imageshack.us/img502/9370/reduccionde200a50.png)

Aquí freno la rueda con la mano, por lo que la potencia se aumenta para mantener la velocidad constante
(http://img17.imageshack.us/img17/9032/frenandoconlamano.png)
Título: Re: Dudas PID
Publicado por: Eyedol 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! :-/ :-/ :-/

Título: Re: Dudas PID
Publicado por: Eyedol en 02 de Enero de 2010, 16:18:05
Citar
(http://img80.imageshack.us/img80/2593/aceleracionde0a200.png)

Por cierto nocturno que programa es ese que usas para mostrar esas graficas????? :?
Título: Re: Dudas PID
Publicado por: Nocturno en 02 de Enero de 2010, 16:42:47
Ninguno, son capturas de pantalla de mi osciloscopio
Título: Re: Dudas PID
Publicado por: Suky en 02 de Enero de 2010, 17:29:54
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.

Jejeje! Pero debe haber uno que sea mas rápido, que se necesite menos gasto de energía, ect. y a prueba y error (Sin haber hecho un pequeño estudio del sistema anteriormente) veo difícil que logre encontrar el mejor debido a la subjetividad de la propia ignorancia  :? Con esto no quiero atacar a nadie ni mucho menos, solo quiero que se sepa que tiene su nivel de complejidad, que necesita ser entendido para saber fijar un objetivo, encararlo, saber explicar las respuestas acertadas y des-acertadas para obtener un resultado adecuado a las necesidades. Que al final va a ser lo más reconfortante  :lol:


Saludos!
Título: Re: Dudas PID
Publicado por: Eyedol en 02 de Enero de 2010, 18:05:33
Citar
Jejeje! Pero debe haber uno que sea mas rápido, que se necesite menos gasto de energía, ect. y a prueba y error (Sin haber hecho un pequeño estudio del sistema anteriormente) veo difícil que logre encontrar el mejor debido a la subjetividad de la propia ignorancia  Confused Con esto no quiero atacar a nadie ni mucho menos, solo quiero que se sepa que tiene su nivel de complejidad, que necesita ser entendido para saber fijar un objetivo, encararlo, saber explicar las respuestas acertadas y des-acertadas para obtener un resultado adecuado a las necesidades. Que al final va a ser lo más reconfortante  Laughing

 :o jajajajajaja bien bien no puedo luchar contra las matematicas, tienes razon con el analisis previo lograras con gran precision buen resultado estoy totalmente deacuerdo contigo. Solo espero Tambien puedas aceptar que no siempre se requieren tales niveles de precision y con un poco de habilidad se logra el objetivo. Generalmente no me gusta utilizar la palabra complejidad la gente tiende a asociarla con complicado o dificil  y para mi tal cosa solo existe en la mente de cada persona! si tu puedes hacerlo de dificil no tiene nada, si abordas un problema desde el principio pensando que sera dificil de resolver (pesimismo) creo que sera tal y como lo has imaginado (dificil). Por ultimo muchas de las mejores cosas que se hacen comienzan siendo simples bocetos o modelos experimentales que poco a poco se mejoran hasta obtener Excelentes resultados y no siempre tratar de lograr la excelencia a la primera . Buena charla Saludos amigo suky!
Título: Re: Dudas PID
Publicado por: bigluis en 02 de Enero de 2010, 19:14:01
Es muy interesante todo lo que han hecho. Pero me gustaria saber si es posible realizar algun tipo de controlador auto-tunning, es decir que el mismo controlador sea el que se ajuste a la planta y los valores que nosotros deseamos.

Mi otra duda es que cada vez que nosotros ponemos un compensador, lo que hace este es que realiza convoluciones instantanesa en cada instante de tiempo por lo tanto queria saber si era posible hacer un algoritmo que realice estas convoluciones y obtenga los parametros del controlador automaticamente.
Título: Re: Dudas PID
Publicado por: Suky en 02 de Enero de 2010, 21:04:54
:o jajajajajaja bien bien no puedo luchar contra las matematicas, tienes razon con el analisis previo lograras con gran precision buen resultado estoy totalmente deacuerdo contigo. Solo espero Tambien puedas aceptar que no siempre se requieren tales niveles de precision y con un poco de habilidad se logra el objetivo. Generalmente no me gusta utilizar la palabra complejidad la gente tiende a asociarla con complicado o dificil  y para mi tal cosa solo existe en la mente de cada persona! si tu puedes hacerlo de dificil no tiene nada, si abordas un problema desde el principio pensando que sera dificil de resolver (pesimismo) creo que sera tal y como lo has imaginado (dificil). Por ultimo muchas de las mejores cosas que se hacen comienzan siendo simples bocetos o modelos experimentales que poco a poco se mejoran hasta obtener Excelentes resultados y no siempre tratar de lograr la excelencia a la primera . Buena charla Saludos amigo suky!

jejeje! La experiencia es una arma que aveces no se la puede combatir con la teoría  :? Eso lo tengo clarito  ;-) Y también pienso exactamente igual con respecto a la complejidad, si ya nos metalizamos que es complejo difícilmente logremos romper esa barrera.

Es muy interesante todo lo que han hecho. Pero me gustaria saber si es posible realizar algun tipo de controlador auto-tunning, es decir que el mismo controlador sea el que se ajuste a la planta y los valores que nosotros deseamos.

Mi otra duda es que cada vez que nosotros ponemos un compensador, lo que hace este es que realiza convoluciones instantanesa en cada instante de tiempo por lo tanto queria saber si era posible hacer un algoritmo que realice estas convoluciones y obtenga los parametros del controlador automaticamente.

Si se puede, hay PID autosintonizados, buscando por la red encontraras que utilizan redes neuronales, que seguramente utilizan cierto periodos de muestreo para aprender y luego determinar las constantes. Es solo una idea que expongo con el poco conocimiento de redes que poseo  :? Otros tienen identificación en linea y modelo de referencia, hay que leer al respecto  :mrgreen:


Saludos!
Título: Re: Dudas PID
Publicado por: Eyedol en 02 de Enero de 2010, 21:46:48
Siempre me he preguntado sobre la auto entonacion tambien, una idea Tambien puede ser aun algo mas rudimentaria utilizar el metodo de entonacion de Ziegler-Nichols Pero digamos en automatico uno de estos es el de la ganancia ultima pero deben hacer oscilar los lazos de control en un momento y este es un metodo grafico que igualmente se puede colocor a un pic a tomar esos datos para la luego aplicar la formulita que han dado estos genios. Es una idea muy posible aun de plano detecto la primera inconveniencia de hacer oscilar momentaneamente el proceso para lograrlo ya que esto abeces no es posible, pero siempre hay posibilidades no!

aqui  (http://www.angelfire.com/electronic/jagp/sem7/pidcont1.html)mas info sobre este metodo!
Título: Re: Dudas PID
Publicado por: c4_esp_VR en 03 de Enero de 2010, 06:31:39
Primero mi más felicitaciones por tan enorme esfuerzo y tan vistosos resultados y además muchas gracias por compartir tu tan estupendo trabajo y esfuerzo compañero Nocturno. Pero ahora me quedo con la duda de como has implementado al final el PID, es decir, has recogido datos y has obtenido posteriormente la fdt como decía Suky

Citar
Lo que hay que obtener es f=F(PWM), osea una función para determinar la frecuencia (Salida del sistema, y) a partir del PWM (Entrada, u). Para obtener una función de transferencia adecuada (Conocer bien la dinámica) se debe aplicar un escalón PWM, por ejemplo al 50%, esperar que la frecuencia se estabilice, aumentar al 80%, bajar al 30%, ect. siempre esperando que se estabilice. Hacer varios escalones y después ingresar los datos a Matlab o Eurega (No se si sirve  Confused) y con ello determinar una función de transferencia. Teniendo la función de transferencia puedes determinar el ancho de banda del sistema, y con ello puedes fijar una velocidad de muestro para el sistema de control digital que suele ser 10 veces más rápido que el ancho de banda.

Has obtenido los parámetros característicos del motor como te comenté anteriormente

Citar
Si quieres hacer un PID, mi recomendación es que saques los parámetros característicos del motor que estes usando y a partir de ahí sacas el modelo de la planta, ya que de esta forma tu modelo será más exacto a la realidad.

Me refiero a sacar la planta del sistema...mira esta simulación y los parámetros que puedes variar dependen de los parámetros o características del motor.
http://www.fceia.unr.edu.ar/tesys/vlab/MCCSimulationFranco.htm
Mira este paper para que sepas a que me refiero, seguro que de esta forma te será mucho más sencillo implementar un PID.
http://automatica.li2.uchile.cl/exp/files/man_motor/modelacion_motor_cc.pdf

o al final no has realizado ninguno de estos dos anteriores y has realizado algún método "nuevo".

Un saludete.
Título: Re: Dudas PID
Publicado por: Nocturno en 03 de Enero de 2010, 06:53:40
Pues el algoritmo ha quedado básicamente así:
    pError1 = ((float)VDeseada1 - (float)Velocidad1);
    Potencia1 = PotenciaBase1 + (Kp * (float)pError1 + Kd*(pError1 - ErrorAnterior1) + Ki*Ierror1)/Ko;
    if (Potencia1<0) Potencia1=0;
    if (Potencia1>255) Potencia1=255;
    ErrorAnterior1=pError1;
    Ierror1 += pError1;   
   set_pwm1_duty((int8)Potencia1);

Como se puede ver, hay una variable llamada PotenciaBase1 que calculo mediante la fórmula que obtuve con Eureqa, y que en teoría es la potencia necesaria para conseguir la velocidad deseada. A partir de ese valor, el pid trabaja corrigiendo al alza o la baja las desviaciones para mantener la velocidad constante.

Para calcular las constantes Kp, Kd y Ki he utilizado el método de poner a Kd=Ki=0 y buscar el Kp más alto posible hasta que el sistema oscile. Una vez encontrado, lo he reducido al 60% y he incrementado Kd de la misma manera.

Creo que todavía se puede depurar más, pero de momento los valores con los que estoy trabajando, que son los de las gráficas anteriores, son estos:
#define Kp              3.0
#define Kd              1.5
#define Ki               0.0
#define Ko              1.0
Título: Re: Dudas PID
Publicado por: TREMENS en 23 de Julio de 2010, 18:26:45
hola
Antes q nada felicitaciones.
Dado que tenés la curva de respuesta del sistema al escalón, podés probar con otros métdos de sintonía no necesariamente empíricos que creo te darían un mejor cálculo de las constantes.
También me parece que tuviste una buena idea en inicializar con lo que obtuviste haciendo una regresión de la curva.
Estaría interesante probar alguno de los métodos de autosintonía.

Saludos