Autor Tema: AYUDA! Implementación controladores de estados  (Leído 3836 veces)

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

Desconectado _LAB_

  • PIC10
  • *
  • Mensajes: 36
AYUDA! Implementación controladores de estados
« en: 08 de Marzo de 2013, 17:24:15 »
Hola!. Bueno voy directo a tema...
He tratado por más de una semana esta implementación.
Anteriormente ya implementé un controlador PI discreto, discretizando uno obtenido en continua con los métodos ya conocidos...
El punto es que ahora estoy metido con ESPACIO DE ESTADOS, he desarrollado un controlador para dos motores acoplados.. algo simple para empezar (eso pense.. xD)

Realizé el controlador+el observador+integrador, todo en tiempo discreto....
La verdad nunca he visto como se implementan estos controladores (en espacio de estados), por lo que solo he experimentado. El dilema es que en MATLAB, todo funciona a la perfección, pero al implementarlo (he usado las ecuaciones obtenidas directamente) el sistema no responde de hecho creo que es totalmente inestable.
La planta la obtuve desde el ident de matlab con 86% de "aproximanción". Por ello creo que no está mala.
No se creo que me falta algún secretillo quizás que alguno de ustedes con más experiencia maneje...
dejo todo los datos obtenidos.
LA PLANTA
G=[-0.06144   -0.2171
   0.2514    0.7931];
H=[-0.3735
   0.1098];
C=[-0.3714    8.768];
considerando
x[n+1]=G*x[n]+H*u[n];
y[n]=C*x[n]

LA MATRIZ DEL OBSERVADOR
Go=[-0.0699   -0.0173
    0.2820    0.0699];
H=[-0.3735
   0.1098];
C=[-0.3714    8.768];

LA GANANCIA DEL INTEGRADOR
Ki=0.3843;
con su ecuacion
V(n)=V(n-1)+r(n)-y(n);

LA ECUACION DE SALIDA
K=[9.1877   28.7854];
u(k)=-K*[xo1(k);xo2(n)]+ki*V(n);

donde xo me refiero a los estados observador.

Bueno cualquiera que pesa algo y puede guiarme algo en la implementación de este controlador lo agradecería mucho!!!
Gracias.

La implementacion que he usado es la siguiente
//obtengo del ADC el valor de salida de planta
//obtengo del ADC el valor de referencia
V(k+1)=V(k)+r(k)-y(k);---->calculo el integrador

xo1(k+1)=-0.0699*xo1(k)-0.0173*xo2(k)-0.3735*u(k)-0.0228*y(k);
xo2(k+1)=0.2820*xo1(k)+0.0699*xo2(k)+0.1098*u(k)+0.0825*y(k);--->calculo los estados

u(k)=-9.1877*xo1(k)-28.7854*xo2(k)+0.3843*V(k+1);---->obtengo la salida
//LA mando directamente al PWM este valor
//espero 100ms
//repito bucle...
Espero su ayuda!!!! :)

Desconectado _LAB_

  • PIC10
  • *
  • Mensajes: 36
Re: AYUDA! Implementación controladores de estados
« Respuesta #1 en: 09 de Marzo de 2013, 20:15:55 »
Hola de nuevo!!
Nadie sabe alguna cosa que sea...
No se si se requiere proporcionar más información o algo, tengo todo hecho paso a paso....
He pensado que hay que transformarlo a funcion de transferencia pero la verdad siempre quedo limitado por el tema de la adicion integral y no he encontrado el modelo equivalente en ningún lado... la verdad soy bastante novato en esto y pues no se por que empezar...
Si se requiere más informacion no tengo problemas en darla...
Bueno gracias a los que han leído y más a los que puedan ayudar.
Saludos

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: AYUDA! Implementación controladores de estados
« Respuesta #2 en: 10 de Marzo de 2013, 11:14:03 »
Hola! Dos cosas a revisar, primero la frecuencia de muestreo, que sea adecuada para el sistema. El sistema discreto seguramente lo sacaste a partir de cierta frecuencia de muestreo, implementas la misma para el control?

Luego, es adecuado enviar el valor de u(k) directamente al PWM? O hay que aplicar algún factor de escala? El rango de 0-5 V que puede generar el PWM es adecuado para la señal de control que necesita el sistema o tienes que aplicar alguna ganancia a eso?


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

Desconectado _LAB_

  • PIC10
  • *
  • Mensajes: 36
Re: AYUDA! Implementación controladores de estados
« Respuesta #3 en: 10 de Marzo de 2013, 13:32:39 »
Gracias por contestar!. :-/
Voy paso a paso...
Primero con el PIC tomé muestras cada 5[ms] de la salida del sistema y de la entrada de este. (debo decir que acá hice una aprox. pues no logro medir directamente la salida PWM (20Khz) con el mismo pic como es obvio). Además antes de ingresar la señal de salida de los motores acoplados usé un filtro de 1er orden cercano a los 25Hz de tal manera de no tener problemas de aliasing. Así obtuve el modelo digital a 5ms.
Luego transforme este sistema con matlab y un 'zoh' a un modelo de 100[ms].
De acá en adelante usé este modelo para los calculos de control.
...
Claro, debo hacer ciertas adaptaciones de señal para el sistema... la salida pwm se conecta a un mosfet de potencia con máx. alimentacion de 12[V] así que el motor vé un PWM de 12[V]-0[V].
Respecto a las mediciones de referencia todo está considerado...
Mi PIC es de 3.3V por lo que tendremos que 1023(ADC 10bit)=3.3V(3.27 especificamente)
Luego la señal de salida del motor la debo adecuar, esto lo hice con un AO, el cual a 8V de entrada entrega 1.8[V] de salida, variando de forma lineal...
Consideré que 8V sería el "Tope" del sistema o referencia maxima alcanzable.
Entonces lo que hice fue lo siguiente...
- consideré que 1023=8V (variando de forma lineal la lectura del potenciometro de referencia)
- como el PIC es de 3.3V, cuando ingresan los 1.8V (lectura del motor) el pic obtiene 558(ADC) esto lo multiplico por 1.83 y obtengo referencias similares (aprox).
- Luego de igualar "lecturas" calculo todo como lo habia descrito y ahí envio del PWM.
Hasta donde creo no hay error en esto (aunque puedo estar mal). Tambien he intentado transformando las conversiones a valores de voltajes (0[V]-8[V]) procesar y re-transformar pero siempre es igual el sistema es inestable...
Bueno, cualquier sugerencia estoy atento... Muchas gracias.


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: AYUDA! Implementación controladores de estados
« Respuesta #4 en: 10 de Marzo de 2013, 14:19:04 »
Hola! Si tiene un A.O. implementado, en lugar de 1.8 V intentaría obtener unos 3 V, como para mejorar las resolución. Después probaría no de implementar el lazo cerrado, sino colocar un valor fijo de PWM y observar el comportamiento. También con un valor fijo de PWM observar que mide el ADC y con que error. Puede que el diseño del circuito no sea el correcto y el ruido eléctrico este corrompiendo la parte digital.


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

Desconectado _LAB_

  • PIC10
  • *
  • Mensajes: 36
Re: AYUDA! Implementación controladores de estados
« Respuesta #5 en: 10 de Marzo de 2013, 14:40:55 »
OKA! gracias por los consejos...
Voy a cambiar la resolucion de la realimentación y ver como anda.
Lo de realimentación a lazo abierto lo he hecho con labview con un programa simple que envia un valor de 10bit al pic que se le implementa directamente PWM.
Ahora que mensionas esto quisiera mensionar que tengo un problema con sistema, resulta que los motores acoplado no "arrancan" sino hasta que los alimento con 3[V] por lo que  al pwm para que haga moverse a los motores debo aplicar un pwm superior a los 250-300(10 bit). Lo que hice para solucionar este dilema es hacer una recta lineal que le adiciono a la salida del controlador, es decir, si tengo como señal de control (suponiendo niveles 0V-8V) valla al pwm de 250-1023(PWM de 10bits).
No se si eso puede influir en el sistema.
Más tarde comento resultados, según lo aconsejado!!
Saludos.
Y gracias!  

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: AYUDA! Implementación controladores de estados
« Respuesta #6 en: 10 de Marzo de 2013, 14:45:53 »
Si antes funcionaba bien con un PID ¿Que tiempo de muestreo tenía?

Si los motores tienen un tiempo de respuesta pequeño (por ejemplo 20ms) el tiempo de muestreo debería ser 10 veces menor (2ms)

Saludos.

Desconectado _LAB_

  • PIC10
  • *
  • Mensajes: 36
Re: AYUDA! Implementación controladores de estados
« Respuesta #7 en: 10 de Marzo de 2013, 18:38:12 »
Hola picuino.
Bueno debo aclarar que para el control PI use otros motores.
Respecto a lo que mensionas del tiempo de muestreo, tengo una duda, resulta que cuando diseñe mi PI+planta(Gc*Gp) lo hice en el dominio frecuencial o de laplace, para calcular el tiempo de muestreo minimo para digitalizar el sistema, calculé el margen de fase del sistema completo, Gc*Gp, con el margen de fase y según el libro NISE 6ta edicion mi tiempo de muestreo debería estar entre 0.5/(margen de fase) a 0.15/(margen de fase). Con estos limites obtuve mi tiempo de muestreo.
Ahora para el motor especificamente supongo que te refieres al tiempo en que tarda el motor en establecerse o alcanzar su estado estacionario no?
Como mencioné, adicioné un filtro pasa bajos (RC) a la salida de los motores acoplados de tal manera de eliminar cualquier frecuencia superior a la de muestreo usada, el filtro fue calculado a cortar a los 25[Hz], por lo que a un muestreo de 5[ms]-->200[Hz] estamos claramente dentro del margen para el cual no debería existir aliasing. Esta es la primera vez que realizo el muestreo de una planta por lo que si el filtro no es solución válida por favor haganlo saber...
El sistema lo he diseñado para establecerse dentro de un periodo de 5[sg], así creo que un control con T=100[ms] no debería estar mal...
Bueno, por favor cualquier cosa equivocada diganla pues estoy aprendiendo y como dicen echando a perder se aprende!!  :D
Saludos
  
« Última modificación: 10 de Marzo de 2013, 18:44:06 por _LAB_ »

Desconectado _LAB_

  • PIC10
  • *
  • Mensajes: 36
Re: AYUDA! Implementación controladores de estados
« Respuesta #8 en: 10 de Marzo de 2013, 21:21:22 »
Bueno he realizado algunas pruebas...
Resulta que tengo mucho ruido en la entrada del sistema. Al medir con el tester me muestra variaciones de +-10[mV] en las muestras. Sin embargo al usar el ADC del PIC tenermos que 3.3/1023=3.23[mV] y las conversiones muestran variaciones cercanas a los 40 a 50 bits, es decir, 0.13[V] a 0.16[V] muy distinto a lo medido con el tester. El problema es que el sistema ya tiene un filtro y además estas variaciones se presentan así siendo que ya estoy promediando 10 muestras antes de enviar el "dato válido".
Ahora fuera de todos estos problemas... la implementación del controlador que he realizado es correcta, es decir, las ecuaciones las envio directamente o qué??
Pues si de partida la implementacion es mala todo es una perdida de tiempo no??
Bueno espero comentarios y recomendaciones para el sistema.
Saludos!!!!
Y gracias a todos los que han ayudado e interesado en el tema!

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: AYUDA! Implementación controladores de estados
« Respuesta #9 en: 11 de Marzo de 2013, 13:46:59 »
El tiempo de muestreo no se calcula con el margen de fase (que es un ángulo)
De todas formas con 5ms no deberías tener problemas para controlar motores. El problema creo que está en el filtro de entrada, que es muy fuerte y está introduciendo un polo dominante de baja frecuencia.

Puedes intentar controlar el sistema primero con un PID digital hasta que soluciones el problema del ruido de entrada, y después utilizar esa misma solución para controlar en el espacio de estados.

Puedes contar algo más del modelo de planta (potencias, inercias, etc.)?

Saludos

Desconectado _LAB_

  • PIC10
  • *
  • Mensajes: 36
Re: AYUDA! Implementación controladores de estados
« Respuesta #10 en: 12 de Marzo de 2013, 07:37:28 »
Gracias Picuino...
Revisé un poco tú pag. y claro te referías al tiempo que tarda el sistema en establecerse.
He pensado lo mismo, lo de incluir primero un PID y luego tratar de pasarlo a modelo de estados. Al parecer el modelo de estados es mucho más sensible a cambios... la verdad no lo sé!!!  :?
Lo malo que ahora no puedo avanzar muy rápido pues ya entre a clases y pues el tiempo se reduce...
Por lo que voy a implementar un PID para el sistema y luego comento... claro me demoraré un poco.
Comento resultados apenas los tenga... :-/
Saludos y gracias!!!

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: AYUDA! Implementación controladores de estados
« Respuesta #11 en: 12 de Marzo de 2013, 11:37:13 »
El PID también te va a dar problemas con el ruido de entrada.
Es un tema que tengo que estudiar más antes de publicar sobre él, de forma que puedo ayudarte y eso me dará contenidos.

¿Qué es lo que controlas en los motores (velocidad, posición, par)?

¿Con que sensor lo mides (tacodinamo, encoder, etc)?

Saludos.

Desconectado _LAB_

  • PIC10
  • *
  • Mensajes: 36
Re: AYUDA! Implementación controladores de estados
« Respuesta #12 en: 12 de Marzo de 2013, 21:04:31 »
Bueno como mencioné son simplemente 2 motores acoplados por lo que simplemente mido lo generado por el motor acoplado...
Podría decirse que se estaría controlando el par, pues la idea es que el motor "generador" mantenga el nivel de voltaje constante en la salida aun cuando le apliquemos alguna carga...
He mirado algo sobre filtros digitales pero colocarlo para filtrar el ruido sería en teoría lo mismo que usar uno filtro analógico no??
Respecto a lo que dices a como mido, he pensado en cambiarme a un encoder incremental o digital de manera de evitar cualquier ruido. También he pensado en pasar mi conversor de 10bit a 8bit se que podia hacerse con los primeros micros que use 16F87X pero con los 18F no se aunque no debiese cambiar significativamente...
Creo que al usar muchos bit estoy adicionando valores de señales sin relevancia pues hasta con el tester obtengo variaciones del rango de los +-0.1V.
Bueno esas son las pruebas que quiero aplicar proximamente luego comentaré resultados...
Saludos.
 

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: AYUDA! Implementación controladores de estados
« Respuesta #13 en: 13 de Marzo de 2013, 13:06:44 »
Entonces estás controlando la velocidad del primer motor. El segundo motor está actuando como tacogenerador o tacodinamo.

Un motor normal suele hacer bastante ruido en su salida. Lo mejor es que le pongas un filtro RC para eliminar las señales de alta frecuencia. Los filtros digitales no filtran bien las frecuencias altas porque estas frecuencias se "reflejan" en ocasiones como bajas frecuencias.
Lo mejor es hacer un filtro analógico antes y programar uno digital después si es necesario.

Por otra parte conviene que controles la tensión del motor de tal manera que aumente cuando aumenta el consumo de corriente. Esto mantiene al motor funcionando con una velocidad casi constante independientemente de la carga mecánica. Las pequeñas variaciones que se produzcan las puedes controlar con el PID u otro controlador.

Saludos.

Desconectado marqueses

  • PIC12
  • **
  • Mensajes: 80
    • Alberto Marqueses Blog
Re: AYUDA! Implementación controladores de estados
« Respuesta #14 en: 13 de Marzo de 2013, 19:13:28 »
¿Que microcontrolador estas usando? ¿A que frecuencia? Estás usando matrices, realizando calculo matricial y eso consume muuuucho tiempo y sin mencionar las interrupciones cada 5ms... Si lo haces con un pic16 o pic18 olvídate de que te funcione. Con un dsp todavía habría opciones...

Lo que te quiero decir es que compruebes que estás ejecutando todo el código antes de los 100ms, por que si no volverías a comenzar sin tener terminados los cálculos...

Eso explicaría por que el PID funcionaba sin problema y el controlador de estados no. (Por experiencia propia... :()

Para testear puedes usar un LCD que muestre por pantalla el valor de u(k) y el esperado calculado a mano o con matlab.

Un saludo.
Alberto Aragón Marqueses
albertomarqueses.wordpress.com


 

anything