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

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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Dudas PID
« 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

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Dudas PID
« Respuesta #1 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.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Dudas PID
« Respuesta #2 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
El papel lo aguanta todo

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Dudas PID
« Respuesta #3 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.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Dudas PID
« Respuesta #4 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 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.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Dudas PID
« Respuesta #5 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!
No contesto mensajes privados, las consultas en el foro

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Dudas PID
« Respuesta #6 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?

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Dudas PID
« Respuesta #7 en: 31 de Diciembre de 2009, 10:09:52 »
Esto tal vez te pueda ayudar Manolo:
http://uploadbox.com/files/42XIl5t9Do

Menos pregunta Dios y perdona...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Dudas PID
« Respuesta #8 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!
No contesto mensajes privados, las consultas en el foro

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Dudas PID
« Respuesta #9 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  :(

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Dudas PID
« Respuesta #10 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???

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Dudas PID
« Respuesta #11 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.

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Dudas PID
« Respuesta #12 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.
« Última modificación: 31 de Diciembre de 2009, 13:16:50 por c4_esp_VR »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Dudas PID
« Respuesta #13 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:

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Dudas PID
« Respuesta #14 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.