Autor Tema: PID DISCRETO.  (Leído 64753 veces)

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

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: PID DISCRETO.
« Respuesta #45 en: 20 de Octubre de 2006, 00:01:22 »
Hola Mario pues todo fue bueno y todo fue malo.

Malo por que los mosfet se quemaron, era el IRF7410, el problema realmente no es cuando el PWM, a 2.5 Khz, esta al maximo ciclo de trabajo. Ya que ahi el MOSFET no esta dicipando calor. Pero cuando ponemos el motor a un pequeño ciclo de trabajo se comienza a calentar (Tiene su disipador) y el motor se empieza a acelerar. TIPICO. A quien no le ha pasado?

En cuanto a la funcion de tranferencia pues ya tambien es momento de comenzar a analizarla. Lo cual hoy comenzamos pero tubimos unos errores de concideraciones. asi que pienso trabajar en eso parte de la noche.

Ahora otra cosa mas estuve pensando en la parte rutina de atencion del error (TIMER2) y pues esta mal unas consideraciones anteriores o bueno hay que corregir un par de detalles. La primer idea esta bien pero algo que implicitamente esta pensado pero no se esta haciendo es meditar en que el uk es la veriable que se necesita escalar, no el error (Gracias Profe Eulalio).

Código: Matlab M
  1. #int_TIMER2
  2. TIMER2_isr(){
  3.  
  4.         Retroalimentacion = read_adc()*Calibracion;
  5.         Error_k2 = error_k1;
  6.         Error_k1 = error_k0;
  7.         Error_k0 = (velocidad - Retroalimentacion)*0.730714;
  8.         uk = a0*Error_k0+a1*Error_k1+a2*Error_k2+uk_anterior;
  9.         uk_anterior= uk;
  10.  
  11.                 uk=uk*(CALIBRACION_PARA_EL_PWM)
  12.                 if(uk=>1024)
  13.                 uk=1024;
  14.  
  15.                 if(uk=<0)
  16.                 uk=0;
  17.  
  18.         set_pwm1_duty(uk);
  19.  
  20. }

Por lo tanto es ahi donde devemos saber los valores maximo de uk, los cuales van a estar en funcion de las constantes PID. Asi que por eso se necesita comenzar a analizar la funcion de tranferencia que ya se ha calculado y mostrado. Asi consderamos el valor mayor de uk , escalamos y cargamos al PWM.

¿Que les parece todo lo que se realizo hoy?

El plan de mañana es montar el motor ya en el sistema Dinamico (Con carga) ya que los analisis hasta ahorita han sido en analisis Estatico. Haber como queda



« Última modificación: 20 de Octubre de 2006, 00:04:21 por pantera »
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: PID DISCRETO.
« Respuesta #46 en: 20 de Octubre de 2006, 02:00:49 »
Pues a analizar en MATLAB 6.5 Los venden en cualquier tienda del los tiangis caracteristicos de Mexico. Son tres discos
Uno del programa y los otros discos son ayudas
« Última modificación: 20 de Octubre de 2006, 02:07:23 por pantera »
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: PID DISCRETO.
« Respuesta #47 en: 20 de Octubre de 2006, 03:13:00 »
Ese es el comentario que se le hacía a Letal en el otro tema.

No importa si tu P es negativo, lo que importa es la exitación total, que es la que debe "escalarse" o acotarse y dicha señal es la que debe ir en el PWM.

Por eso escribí que creí haber entendido tu duda, la cual traté de explicar en el otro tema de PID con PBP.

Es básicamente lo mismo que te dijo tu maestro, regulas la u(k) contigo, allá regulamos la exitación total, que es lo mismo que el término P+I+D que es lo mismo que el cálculo del error por la constante P o I o D.


Lo bueno es que se quemó el material y no el cerebro  :D
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado LETAL

  • PIC16
  • ***
  • Mensajes: 101
Re: PID DISCRETO.
« Respuesta #48 en: 21 de Octubre de 2006, 12:14:35 »
Hicistes pruebas del controlador en proteus pantera??

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: PID DISCRETO.
« Respuesta #49 en: 21 de Octubre de 2006, 20:21:00 »
Hola Mario y Letal. Que tal van?

Yo pues lo de los MOSFET lo soluciono hasta el lunes por las tiendas.

Además llevamos a montar el motor con un herrero pensamos acoplarlo a otra polea, por medio de una Banda. La polea estará corriendo sobre un tornillo y vamos a apretar o aflojar la polea con el tornillo, para ejercer la carga.


Estoy ya trabajando en la Discretización de la planta y pues creo que todo va bien. Por el momento ya debo ir buscando las cortantes del controlador solo que todavía me ando peleando un poco con MATLAB. Esperemos las cosas salgan bien y ya las estoy documentando.

LETAL a que  clase de pruebas te refieres? He estado simulando la respuesta pero en MATLAB.
Que clases de pruebas hay en Proteus que me sirvan para lo que he andado haciendo?

¿Suena interesante?
« Última modificación: 21 de Octubre de 2006, 23:30:11 por pantera »
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: PID DISCRETO.
« Respuesta #50 en: 21 de Octubre de 2006, 23:51:39 »
Estos son algunos LINKs del Programa MATLAB que me han servido un poco:

Laplace

Hola miren esta es la idea, Aqui esta para una frecuencia de muestreo de Ts = 0.01 simplemente baje la frecuencia para que se vea la discretizacion
« Última modificación: 22 de Octubre de 2006, 01:11:27 por pantera »
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: PID DISCRETO.
« Respuesta #51 en: 22 de Octubre de 2006, 01:13:48 »
Pues yo no he hecho muchos avances, la maestría y el trabajo y la novia y demás situaciones me lo han impedido (avances = 0   :D )


Tengo entendido que puedes simular con un motor de C.C. en proteus (apenas estoy viendo tutoriales).

Si se puede hacer así, creo que pudieras medir la fuerza contraelectromotiz para regular la velocidad; claro que el motor simulado debe presentar esa característica.

Luego que te salga todo, tomas video y demás; en mi correo me dan una página y la voy a usar para µicros, aún no la he echado a volar pero me gustaría incluir tu proyecto ahí :)


Y luego, para colmo de males, mi primo tiene mi PS2 desde hace como un año y ayer me lo trae porque no enciende. Es un "slim" (de los delgados) y al parecer le voló la pista donde conectas la fuente, la pista de voltaje  :(

Quedó una parte de la pista, trataré de soldar para que haga contacto, si no, tendré que cortar la protección y tratar de soldar sobre el cobre (pero tendré que desarmar todo  :()




La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: PID DISCRETO.
« Respuesta #52 en: 22 de Octubre de 2006, 13:21:46 »
Hola en general ya tengo la funcion discreta de la planta, la del controlador PID pero ahora nose bien como debo simular la respuesta del sistema. Como determinar las constantes PID pero en la variable discreta supongo yo que al tener una naturaleza continua deben de ser las mismas, o no ?

Por otro lado alguien sabe alguna herramienta en la cual pudiera analizar el sistema y el controlador. Yo solo conosco el SISOTOOL de MATLAB pero solo me deja variar una ganancia y por lo que he entendido solo sirven para crear compensadores.

Alguien tiene alguna idea?
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado LETAL

  • PIC16
  • ***
  • Mensajes: 101
Re: PID DISCRETO.
« Respuesta #53 en: 22 de Octubre de 2006, 16:48:17 »
En teoría para diseñar el controlador pid discreto lo primero que debes hacer es identificar la planta experimentalmente. Luego, analizas la respuesta del pid continuo junto con la planta a escalón en matlab.
También sería interesante analizar la respuesta a escalón de las acciones por separado del controlador solo y/o junto con la planta. Otra cosa que me parece útil es analizar la respuesta a una planta tipo 1/s+1 y 1/s+1*s+2, por ejemplo. Más adelante te darás cuenta porque es interesante más allá de uq no sea tu planta.

Después discretizas la estructura pid de tiempo contiuo que usaste, que creo que usaste la del apunte que dejaste en anterior oportunidad(en ese apunte puedes la relación entre las constantes de tiempo continuo y discreto). Una vez obtenida la función discreta analizas la respuesta en matlab de la misma forma que te dije `para el tiempo continuo, y para las misma cttes. , teniendo cuenta la relación del apunte, deberían tener respuesta muy similar.


Luego implementas el algoritmo en el micro, y puedes simular en proteus la respuesta al escalón usando la 1/s+1 y 1/s+1*2s+1 que te dije anteriormente. El proteus tiene unos bloques de transformada de laplace y herraminetas de analisis gráfico.
La repuesta debería ser muy semejante al analisis de matlab.

Por último haces las mismos análisis de respuesta, con la implementación física del pid , y del pid junto con la planta usando una tarjeta de adquisición. Obviamente la respuesta debe asemejarse bastante a la de proteus, que debe también coincidir con la de matlab.


Es decir con matlab analizas el modelado matemático, comn proteus simulas para ver si tu programa es correcto, o sea si  están bien implementadas las ecuaciones y luego pasas a la verificación experimental. La otra opción es pasar directamentre de matlab a experiemntar físicamente.


Otra cosita: recuerda que la forma de un filtro de primer orden pasivo es 1/TS+1 y dos en cascada 1/T1S+1*1/T2S+1, por lo que en la realidad también podrías comparar los resultados con los que obtuviste en la pc.

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: PID DISCRETO.
« Respuesta #54 en: 23 de Octubre de 2006, 01:31:25 »
Hola LETAL
Código: Matlab M
  1. En teoría para diseñar el controlador pid discreto lo primero que debes hacer es identificar
  2.  la planta experimentalmente. Luego, analizas la respuesta del pid continuo junto con la
  3. planta a escalón en matlab.

LETAL por lo que se no se puede hacer eso que me comentas, No puedes diseñar un control en la variable S y simplemente digitalizarlo e utilizarlo de la misma forma. No es lo mismo tengo un trabajo de un motor de eso y no se puede ya que se toman otra consideraciones diferentes. Y por el hecho de muestrear la señal todo cambia.

Código: Matlab M
  1. También sería interesante analizar la respuesta a escalón de las acciones por separado del
  2. controlador solo y/o junto con la planta. Otra cosa que me parece útil es analizar la
  3. respuesta a una planta tipo  1/s+1 y 1/s+1*s+2, por ejemplo.
  4. Más adelante te darás cuenta porque es interesante más allá de uq no sea tu planta.

Pues si seria interesante pero por falta de tiempo tengo que analizar unicamente en MATLAB encontrar las variables Ki,Kp y Kd para  programarlas en el microcontrolador unicamente de la planta que tengo ademas el rograma proteus casi puede llevarme el mismo tiempo el cual pienso que seria mejor invertir directamente en el Motor. Pero gracias por el consejo, Por cierto que version tienes del proteus.

Por cierto aqui pongo un poco de los avances que tengo en MATLAB y SIMULINK . Ahora necesito ver cuales van hacer las constantes PI, PD y Pk para programarlas en SIMULINK.




« Última modificación: 23 de Octubre de 2006, 01:34:41 por pantera »
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado LETAL

  • PIC16
  • ***
  • Mensajes: 101
Re: PID DISCRETO.
« Respuesta #55 en: 23 de Octubre de 2006, 08:43:42 »
Por lo que tengo entendido, en cuanto a controladores discretos (sea o no pid), existen metodos de diseño. Uno sería diseñar en S mediante algún método de diseño y luego discrteizar(también hay varias formas distintas de discretizar). La otra variante consiste en utilizar métodos de diseño propios del tiempo discreto, es decir hacer el diseño del controlador desde un principio en Z(también hay varios métodos.)
Según he leído(no pude encontrar donde para mostrarte), es mejor usar un método de diseño discreto directamente que discretizar un controlador en s, pero no significa que no sea una opción (básicamente depende del metodo de discretizacion usado lo bueno de la aproximación) .

En cuanto al PID, vale lo mencionado anteriormente, ya que eso es para todos los controladores discretos.
 En el caso concreto de los pid se suele usan dos algoritmos uno de posicón y otro de velocidad.

Es válida usar algún método de discretización, y tomar consideraciones si hacen falta. 
De hecho el modelado en simulink que haces es una discretización de un controlador PID en S

En cuanto a lo de perder tiempo con proteus, es posible todo depende del apuro, de la metodología de trabajo que te pidan en el instituto y de la disponobilidad del laboratorio.
En mi caso tengo apuro, debo usar el proteus por metología y tengo una disponimilidad muuuuuuy limitada del laboratorio.
« Última modificación: 23 de Octubre de 2006, 08:47:29 por LETAL »

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: PID DISCRETO.
« Respuesta #56 en: 27 de Octubre de 2006, 03:27:07 »
Hola ya tenía un rato atorado en los actuadores.

Nunca  pensé que fuera tan impórtate y determinante estas cosas.

Por que?

Pues bueno la primera cosa que tuvimos que hacer fue opto acoplar, obvio pensaran muchos, Pero la cosa no es tan fácil. Primero que nada por la respuesta que dan a la salida los OPTOS. El diodo interno tarda un poco en prender y tarda mucho más en apagarse. Pues ahí esta el primer retardo. Después va apagándose gradualmente por lo cual tuvimos que poner un comparador, LM311, es lo más apropiado  ya que con los LM741 o TL081 la señal tarda mucho más. Y para colmo por el trabajo efectivo del PWM se queda corto.

Lo que tenemos en el micro y medido son:
Código: Matlab M
  1. setup_ccp1(CCP_PWM);   // Configure CCP1 as a PWM
  2.         setup_timer_2(T2_DIV_BY_16, 255, 1);
  3.                 // (1/48000000)*4*16*255 = 2.941 KHZ
  4.                 // Ts = 1/(2.941 KHZ) =  340 micro segudos

Entonces primera observación tuvimos que buscar y probar varios optos. Ahora no tengo los números, pero finalmente el que hemos decidido todavía tiene un retardo considerable el cual por más que corregimos la comparación no se puede lograr hacer que la señal del PWM sea similar a la del comparador (Por el problema del apagado).

El comparador es importante ya que es necesario trabajar al MOSFET en las zonas correctas en corte y saturación o algo así.

Posteriormente por fin probamos un MOSFET poderoso, IRFP450. El cual pues ya probamos un buen rato y no se ha quemado o fallado. Los cuales fueron algo caros unos 2.5 dólares.

Pues bueno creo que esta semana hemos avanzado algo. Hoy planeamos un plan para antes que programar la rutina del controlador PID probar únicamente un controlador P para ver como responde el sistema en lazo cerrado.

Deséenme suerte el día de mañana al cerrar el lazo.
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: PID DISCRETO.
« Respuesta #57 en: 27 de Octubre de 2006, 18:44:18 »
Joel, ¿te llegó la información de los motores? ¿cómo determinar la corriente necesaria?
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: PID DISCRETO.
« Respuesta #58 en: 29 de Octubre de 2006, 15:15:59 »
Hola Mario si me llego la informacion pero ya he solucionado eso, solo que tengo un retardo por parte de los actuadores, como sabes tengo que optoacoplar la potencia del control al meter el optoacoplador tarda un poco en encender el LED interno y tarda mas en apagarse pero pues creo que ya he hecho lo que he podido respecto a eso. Pienso que el control va a compensar eso al final.

Ya tengo rato que no escribia nada

Los avaces que he logrado hasta ahora es por fin  definir la estapa de potencia por medio de un MOSFET bien poderoso quizas muy sobrado. Pero pues bueno ya no ha pasado nada. Ya esta jalando el PWM

Por el momento hemos hecho el plan de programar solo un controlador P de la siguiente forma:

Código: Matlab M
  1. #int_TIMER2
  2. TIMER2_isr(){
  3.  
  4.         Retroalimentacion = read_adc();
  5.         Error_k0 = velocidad - Retroalimentacion;  // velocidad => BITS
  6.         uk = Error_k0*Kp;
  7.         Error=uk;
  8.         set_pwm1_duty(Error);
  9. }

Por fin hemos podido conectar la retroalimentacion como pueden ver.

Por el momento no hemos podido hacer mas ya que se vino el viernes, pero pues el controlador jalo muy bien. Solo que LETAL siempre si habia error negativo en mi motor creo que me falto analizar un poco mas las cosas pero pues ya las vi en el programa del microcontrolador jalando. SI HAY ERROR NEGATIVO.

La unica cosa que se debe hacer el limitar el error a cero cuando sea negativo, al menos voy a tratar eso ademas me suena logico?
« Última modificación: 29 de Octubre de 2006, 15:20:18 por pantera »
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: PID DISCRETO.
« Respuesta #59 en: 29 de Octubre de 2006, 16:22:27 »
Eso pudiera ser cierto.

Como le comenté a Letal en el otro tema, lo único que sucede cuando es negativo es que la retroalimentación es mayor que la referencia.

Si haces cero tu "error" lo que provocarás es que el motor no funcione, lo cual no es apropiado porque, estarias utilizando un control semi "on-off".

Te sugiero que realices una ecuación (simple regla de 3) en la cual definas tu máximo valor negativo como positivo y ese resultado lo cargues al PWM.

Como se mencionó, si usas 16 bits, estarás usando 15 (16 es el signo); tendrias 32765 incrementos positivos y negativos.
Para el PWM tienes una resolución de 10 bits que es 1023 incrementos.
-32765 es cero en PWM, 0 es 50% en PWM (511), 32765 es 100% (1023).

Lo recomendable es hacer que esos 32765 sean proporcionales a 1023. Con esto "suavisas" la respuesta, caso contrario a como lo quieres hacer de colocar cero en error.

Si tu motor tiene mucha inercia quizá no se observe este fenómeno pero si no es el caso, verás que el motor se para, se prende e incrementa su velocidad, se para cuando sea negativo, se prende cuando sea error positivo, etcétera.

Limitas la vida útil del motor apagándolo y prendiéndolo de esa manera.

Claro que si para tus requerimientos, el utilizar el código de esa manera es suficiente, ni le busques, solo hazlo.

Coméntalo con tus compañeros de equipo ó, simúlalo en Matlab. Coloca varias cantidades en la ecuación que planteas y grafícala. Con una gráfica observarás lo que te digo.

Espero te ayude.

Ando que me lleva la #@$@#!@$@#$%$#!@$%@#$, no he tenido oportunidad de ponerme a fondo a terminar mi PID............. bueno..... si he tenido tiempo pero lo utilizo para dormir  :D
« Última modificación: 29 de Octubre de 2006, 16:25:11 por Mario »
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee


 

anything