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

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

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: PID DISCRETO.
« Respuesta #30 en: 17 de Octubre de 2006, 16:22:21 »
 :x%#%@#%$#@%$$@%$#^ :evil:%^%@%@%$@%$^$^&%@#%@%$  :evil: :x 
Había escrito un montón y adjuntado una imagen y me dice que está lleno el upload o algo asi y me borró todo :5] :5] :5] :5]

No puedes generar una interrupción cuando el PWM caiga. Al parecer la única interrupción se genera cuando PR2=TMR2, y ésto ocurre cuando se produce la totalidad de la frecuencia.
(observa la imagen el PWM en tu manual, donde te dice cada parte de la señal).

Si quieres hacerlo de esa manera (PWM baja) deberás colocar una interrupción externa en la salida del PWM y hacer que se active de alto a bajo (mi recomendación, la única que se me ocurre ahora después de que el #$@$#^%$^%$#%^@#$ servidor me sacara).


Es recomendable que fijes límites, tal y como Letal propone.

Como le mencioné a Letal, yo utilizaré esta información:
http://abrobotics.tripod.com/ControlLaws/singlemotor.htm

Vete hasta lo del PWM, ahí tendrás una idea de lo que se te plantea.


$%%#$@%%$#@$#%#%^$#@$#@%^@%$#@%$@#%^$^%#^%@#^%@#%$@$^%$@#$%@%$#@$#@%$#@%#@%$#@%$ servidor.
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 #31 en: 17 de Octubre de 2006, 16:32:57 »
Creo que tengo que desaogar un poco la INFORMACION que tengo posteada .

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 #32 en: 17 de Octubre de 2006, 16:42:57 »
 :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 pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: PID DISCRETO.
« Respuesta #33 en: 17 de Octubre de 2006, 17:42:20 »
Hola por el momento necesito aclarar lo del PWM y la interrpcion para general la seña de control u(k)

Creo que seria mejor tratar este tema en el siguiente enlace de los foros:

PWM e Interrupcion en el TIMER2
« Última modificación: 17 de Octubre de 2006, 17:43:58 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 #34 en: 18 de Octubre de 2006, 01:52:25 »
Gracias Mario me parece muy interesante y objetivo tu consejo. Realmente tienes razon no es necesario que haga una señal de control como lo estoy pensando.

Mañana el plan es:

                     Rezar para que funcione el PWM y la rutina de interrupcion del Timer2. y el MOSFET.

                     Calcular las constantes del PID asi obteniendo los parametros KP, KI, KD ideales.(Con ayuda de MATLAB)

                     Programar la ecuacion de diferencias en el microcontrolador.

                     Probar las constantes PID en el microcontrolador.


Asi que mañana Mario y Letal no los veo mucho. Ya que andaré en el laboratorio de electronica del ITQ.

Desenme Suerte
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 #35 en: 18 de Octubre de 2006, 03:38:16 »
Rezar para que funcione el PWM y la rutina de interrupcion del Timer2. y el MOSFET.

 :D


Desenme Suerte

No creo que la necesites. Al parecer tienes todo bajo control  8).


Si no te llegara a funcionar el PWM, revisa esto en la sección de PWM:
http://www.interq.or.jp/japan/se-inoue/e_pic7_4.htm

Y esto, que es el programa que utilizaré para hacer el PWM (está en Basic):
http://www.microengineeringlabs.com/resources/samples/pbp/hardpwm.bas

Espero te salga el proyecto.
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 I3iT

  • PIC12
  • **
  • Mensajes: 50
Re: PID DISCRETO.
« Respuesta #36 en: 18 de Octubre de 2006, 08:15:12 »
Hola a to2.

Igual este post antiguo te puede ayudar en algo:
http://www.todopic.com.ar/foros/index.php?topic=5058.0

Suerte !!!  :)


Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: PID DISCRETO.
« Respuesta #37 en: 19 de Octubre de 2006, 03:12:25 »
Hola pues ya fui al laboratorio y pues creo que por el momento el PWM ya jalo chido. Pero con un par de detalles primero que nada ya entendi que onda del PRS que tanto me lamentaba.

Todo esta es esto para la programacion del PWM

Código: Matlab M
  1. #use delay(clock=48000000)
  2.  
  3. #int_TIMER2
  4. TIMER2_isr(){
  5.         set_pwm1_duty(value_del_ADC0);
  6. }
  7.  
  8.      setup_ccp1(CCP_PWM);   // Configure CCP1 as a PWM
  9.      setup_timer_2(T2_DIV_BY_16, 255, 1);
  10.      //    (1/48000000)*4*16*255= 2.941 KHZ
  11.  
  12.      enable_interrupts(INT_TIMER2);
  13.      enable_interrupts(GLOBAL);


Todo eso funciono a todo dar pero pues entre en un par de problemas existenciales por que primero que  aterrice bien el concepto de los parametros del PWM

Código: Matlab M
  1. setup_timer_2 (mode, period, postscale)

El period es un valor que va de 1 -255

pero la primera vez le puse un 127 y no me funciona a los dies bits de resolucion del PWM, el duty time se llena a 512 bit,  (9 bits, deberian de ser 10).

Pero pues ya despues busque y busque pero pues nada.

Despues ya le programa otro valor period = 255 y ya jalaban los 10 bits.

Pues bueno eso ya esta solucionado ahora sigue masticar la ecuacion de diferencias

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 #38 en: 19 de Octubre de 2006, 03:32:01 »
Ahora lo siguiente que hay que tener bien claro (Lo cual aun esta algo nebuloso) los escalamientos del error la señal de control que propongo es:

Código: Matlab M
  1. #int_TIMER2
  2. TIMER2_isr(){
  3.         Retroalimentacion = read_adc()*Calibracion;
  4.         Error_k2 = error_k1;
  5.         Error_k1 = error_k0;   
  6.         Error_k0 = velocidad - Retroalimentacion;
  7.         uk = a0*Error_k0+a1*Error_k1+a2*Error_k2+uk_anterior;
  8.         uk_anterior= uk;
  9.         set_pwm1_duty(uk);
  10. }

Pero pieso que deberia haber de alguna forma escalar el error. Es decir digamos si el motor esta apagado y quiero la velocidad maxima que es de 1400 RPM (aprox) ese seria el error del 100 [Esta es la forma de Letal me suguiere: :)].

Ok entonces deberia multiplicar el error por la proporcion del 100 porciento del error.
Si tengo cero y el setpoint es de 1400 entonces necesito poner 1024 al PWM que jale todo el motor

ahora si quiero solo el 50% de la velocidad es decir 700 por regla de tres entonces. necesito escribir la mitad, 512 Por sentido comun. Por lo tanto

 Valor_Duty_time= 700_RPM  (1024_bits/1400_RPM) ) = 512 =aprox= 700 * 0.7314_bits = 511.98.

ese seria el valor que tendria que escribir al PWM?

Que les parece mi propuesta. Espero ver si responden a esto antes de partir al laboratorio.

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.                 if(uk=>1024)
  11.                 uk=1024;
  12.  
  13.                 if(uk=<0)
  14.                 uk=0;
  15.                
  16.         set_pwm1_duty(uk);
  17.  
  18. }
« Última modificación: 19 de Octubre de 2006, 03:40:01 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 #39 en: 19 de Octubre de 2006, 03:38:23 »
Lo unico que me pregunto que va a programar el compilador y a que son numero flotantes? :s


Hay tengo sueño  :ni)
« Última modificación: 19 de Octubre de 2006, 03:41:22 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 #40 en: 19 de Octubre de 2006, 04:06:32 »
Hola.

Si son números flotantes no creo que tengas mayor problema porque lo más seguro es que redondee el programa. Si no lo hace, a la hora de cargar ese valor decimal al registro del µicro quizá sólo cargue el valor entero. Habría que preguntar a las personas que utilizan tu compilador (yo no uso C).

Sobre tu propuesta de control:
Me parece bien sin embargo, creo que no debes colocar el 1024.

Observa esto:

        bits     10      9       8     7    6     5    4   3   2   1
Binario         1       1       1     1     1     1   1   1   1   1
cantidad     512   256   128   64   32   16   8   4   2   1
   TOTAL= 1023

Para 1024 ocupas 11 bits
        bits    11    10      9       8     7    6     5    4   3   2   1
Binario        1      0      0       0      0    0     0   0    0   0   0
cantidad  1024   512   256   128   64   32   16   8   4   2   1

Sería recomendable que observaras eso.


Otra situación:
¿Por qué no revisas si los registros CCPRxL y CCPxCON<5,4> cambian?
Si estás implementando el PWM con alguna instrucción de tu compilador que, como en el caso de PBP te permite 0 (0%), 127 (50%) y 255 (100%) está bien. Pero si quieres mayor resolución, los 10 bits del ancho de pulso, te recomiendo que escribas directamente en los registros.

CCPRxL es el byte de mayor peso y CCPxCON<5,4> son los dos bits de menor peso.
Revisa la dirección que te puse de microengineering labs, quizá te sirva (claro, si quieres 1023 incrementos en lugar de 255).

Ojalá te salga, eres de los pocos que he visto que inician algo y lo terminan (proyecto de escuela).

Muchos quieren que les hagas el trabajo :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 #41 en: 19 de Octubre de 2006, 09:52:41 »
Felicitaciones pantera, estas avanzado.

En cuanto a lo del PWM no puedo ayudarte tanto como mario, ya que solo conozco como usarlo en picbasic. Pero te dije lo que estaba seguro que era correcto y te podía servir.
En mi caso pienso usar un dac a la salida.

En cuanto a mi trabajo espero avanzar como tú, pero soy un poco desordenado y trabajo en forma paralela en varios aspectos del trabajo, lo cual a fines de ver funcionar la bestia retrasa el objetivo dinal.

Ya estás cerca.......un último esfuerzo !!!!!!!!!!!

 :-/ :-/ :-)

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: PID DISCRETO.
« Respuesta #42 en: 19 de Octubre de 2006, 10:58:35 »
Pero como ven lo del error?
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 #43 en: 19 de Octubre de 2006, 11:20:30 »
Pus bueno ni modo. Pues ya les platico como me fue en el Laboratorio
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 #44 en: 19 de Octubre de 2006, 15:17:52 »
Pantera, creo que ya entendí lo que preguntas..... revisa el tema del PBP en Basic, ahí le contesté algo a Letal.

Sobre lo que comentabas acerca del llenado de 512, es correcto, 512 el el bit 10, por eso te puse la tabla arriba. Recuerda que    (10)   (9) ( 8 )  (7)  (6)  (5)  (4)  (3)  (2)  (1)  (0)
                                         2    = 2    2    2      2      2    2    2     2    2     2


¿Cómo te llamas?

Asi como que "Pantera"... me imagino que te llamas Pancho o algo asi... o te apellidas Rosa. :D
« Última modificación: 19 de Octubre de 2006, 15:33:54 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