TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Mario en 19 de Marzo de 2006, 02:02:00

Título: ¿Cómo hago PID con PBP?
Publicado por: Mario en 19 de Marzo de 2006, 02:02:00
Hola.

De nuevo me dirijo a el foro (había estado ocupado con la tesis pero ya estuvo).

Siempre quise hacer un robot controlado por PID.
Desde que estaba en la carrera lo mas que hice fue un "robot" (un carro desarmado con un SN754410 y un 16F872) que al activarse un comparador en RBO (como interrupción) dejara de ir para adelante y cambiara de dirección; todo esto en ensamblador.

Ahora quiero hacer uno algo más sofisticado: con PID.

Apenas estoy en la etapa de recolectar información y no la he leido toda por completo pero esto es lo que tengo:
*Using the PWM (AN564)
*Low-Cost Bidirectional Brushed DC Motor Control Using the PIC16F684 (AN893)
*Implementing a PID Controller Using a PIC18 MCU (AN937)
*Accurate Odometry and Error Modelling for a Mobile Robot (PDF y no recuerdo el enlace)
*Control Industrial. Guía del Estudiante. Versión 1.1 en Castellano (PDF parallax).
*Using a PID-based Technique For Competitive Odometry and Dead-Reckoning
http://www.seattlerobotics.org/encoder/200108/using_a_pid.html#AboutTheRobot
*A Tutorial and Elementary Trajectory Model for the Differential Steering System
of Robot Wheel Actuators
http://rossum.sourceforge.net/papers/DiffSteer/#d1
*Alias: PID based control equations
http://abrobotics.tripod.com/ControlLaws/PID_ControlLaws.htm


Creo eso es lo que tengo hasta ahorita (11:57 PM aqui el día de 18-03-2006).

La pregunta es:

¿Alguien tiene información de cómo realizar rutinas de PID o de lazo cerrado?
¿Tendrán un programa en PBP preferentemente?

Se supone ( y digo "se supone" ) que llevé Sistemas Lineales 1 y 2 y que se debe saber lo de P,PD,PI,PID (OGATA, DORF, DISTEFANO y muchos mas que no vale la pena mencionar, me dieron muchas noches tormentosas).

Cabe mencionar que no quiero ser ningún parásito y se les dará todo el crédito por haber ayudado.

Estaré usando motores de corriente directa controlados con SN754410 o A3959SB.
PIC18F452 o 18F252 (quiero hacerlo con los dos PWMs).

No podré programar porque presté mi PICSTART PLUS y el PIC17C44 que viene dentro se lo sacaron y ya no sirve. Mande pedir la actualización para convertir mi programador viejito en uno que se programe solo (FLASH).

Ya anduve buscando en los foros y no encotré información que pudiera tomar para aplicar (creo encontré algo de Posher creo que se llama, pero está en C y C no se).

Gracias de antemano.

Mario Alberto Camarillo Ramos
Ingeniero en electrónica (¡¡¡¡¡ AL FIN !!!!!)
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: pantera en 16 de Julio de 2006, 22:11:31
Hola Mario

Soy estudiante de ing electronica y tengo pensado implementar un proyecto con PID digital, solo que por el momento ando viendo que la cosa es un poco diferente que en lo analogico. He estado leyendo acerca de que cambia un buen el analisis ya que hay tiempos de muesteos y cosas de esas.

Me gustaria saber como es que vaz con tu proyecto y haber si me pudieras ayudar con algo de bibliografia extra que hallas encontrado.

Por el momento ando viendo que proyecto quiero hacer ya que nose bien que realizar.

Gracias

El Rock es cultura
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 16 de Julio de 2006, 23:14:16
Hola.

¡¡¡¡¡UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUY!!!!!, tenía mucho tiempo de no visitar este tema.

Sobre lo que dices:

Yo también tuve que hacer un PID para mi clase de sistemas lineales 2 y no es tan complicado hacerlo de manera analógica.

Si andas buscando un proyecto y te dan a escoger entre analógico o digital, te recomiendo la analógica. La digital introduce muchas variables que son algo complicadas de procesar.

Si lees la última nota de bibliografía te darás cuenta de lo que se necesita (de una manera muy sencilla) para implementar un PID en un robot, o un motor en este caso.

Te digo esto porque es mas fácil conectar de alguna manera un potenciómetro a un rotor de motor (por una pluma, goma, etc) que colocar un disco (encoder) en la llanta o rotor del motor, posicionar un par infrarrojo para que recoja la señal y "acomodar la señal" para introducirla al µicro. Eso es si quieres mucha resolución y te vas por lo de luz, te puedes ir por lo magnético y colocar sensores de efecto Hall y lo mismo que con lo de luz (pero pierdes algo de resolución).

Con lo analógico solo estás limitado a los grados/resistencia que tenga el potenciómetro (si es de posición) o a las vueltas por resistencia (si es de control de velocidad).

Si tienes el Ogata, por ahi hay un diagrama de lo que te menciono, un motor con sus conexiones para implementar un control.

Lo puedes hacer como la nota de aplicación de la µicrochip, donde miden la fuerza contraelectromotriz (o electromotriz, no recuerdo) del motor y ajustan  RPM/FEM (o FCE).

La ventaja de hacerlo analógico (como todo lo analógico) es que tomas TODO el espacio muestral en tiempo ilimitado:
Lo digital recuerda que son muestras de una señal ya sea continua o discontinua (Series de Fourier si no recuerdo mal). Siempre perderás información de la señal y depende del tiempo de muestreo y cantidad de muestras en ese tiempo.
Si lo haces digital, tu programa debe estar ciclando toda la información y deberás considerar las muestras a tomar como el error, Kp, Kd, Ki, con sus correspondientes tratamientos digitales para cada situación (mira la última referencia en la bibliografía).

Si lo haces analógico no te preocupas por el tiempo de muestra porque siempre lo estás haciendo siempre y cuando el circuito esté alimentado.

Mira, no tengo código porque no me metí de lleno a esto (aparte estoy trabajando y estoy apunto de entrar a una maestría) asi que que no te puedo ayudar con código.
Quizá me meta ahora que regreso el gusanito. :mrgreen:

Yo intenté sacar las características del motor que usé usando este libro:
Build your own combat robot, de Pete Miles.
Digo intenté porque no pude determinar la inductancia, no supe como.

Pero, si tienes interés y los medios, consíguete este:
Mobile Robotic Car Design, de Pushiko Kachoroo.
Este libro es fa si nan te. Te dá todo lo que necesitas saber, cómo sacar la inductancia de un motor (ellos lo compran y rebobinan) todo de todo, gráficas de Matlab, diagramas de flujo, variables de estado, todo.
Lo malo es que usan un DSP de Motorola en C y apenas estoy comprendiendo C (C Primer Plus de Stephen Prata), pero también usan un PIC en ensamblador.

Lo mejor sería que te consiguieras un motor con sus caracteristicas (RPM sin y con carga, corriente máxima, mínima, constante de fuerza, de velocidad, todo) y lo utilizaras para diseñar el control, ya tendrías la planta. La función de transferencia de un motor no la recuerdo pero si ya tienes los valores solo la sustituyes.

Bueno, si te decides por lo analógico pues que te salga.
Si te decides por lo digital pues....... que te salga.

Si ocupas ayuda menciona qué y trataré de ayudar, aunque tengo 2 años de haber salido y mas de no utilizar Bode, Nyquist, Fourier, Laplace, y los demas locos que tormentan la vida del estudiante de ingeniería electrónica.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 27 de Julio de 2006, 08:58:05
Quiero implementar un control pid con PBP y dispongo de un 16F877 para hacerlo. Que opinan, son suficientes las características de este micro?

Es necesario que tenga un conversor A/D externo al pic o me basta  con los 8 que trae(son 8 verdad?). Me refiero a si la resolución(10bit) que tienen y la velocidad de muestreo que pueden llevar a cabo es suficiente.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 27 de Julio de 2006, 14:56:42
Hola.

Pues depende para qué sea lo que lo necesitas.

Si mal no recuerdo son 10 bits justificados a la derecha u 8 justificados a la izquierda........ no lo recuerdo bien.


Si no recuerdo mal creo eran 19.4 o 6 µicrosegundos el tiempo de conversión de un A/D en los PICs 16FXXX a 4 megas (20 para estar seguros).

Sería recomendable que colocaras qué es lo que vas a hacer: control de qué, en base a qué, con respecto a qué.

Lo anterior te lo menciono porque no tiene caso controlar un horno donde la temperatura varia cada minuto porque es mas sencillo decirle al µicro que no se pase de cierta temperatura (recuerda que los PIDs tienden a mantener estable una planta) y cuando se pase activar un sistema de enfriamiento que, cuando llegue a cierta temperatura se apague.

Si es velocidad y son segundos los que dispones, aún ahi se puede hacer trampa como te digo arriba pero, quizá sea recomendable usar un PD o PID (PID casi no se necesita en carritos por su retardo, desestabilizan la planta).

No creo que tengas mayor problema con ese µicro ya que tiene interrupciones en el A/D. Lo único que pudiera ser malo es la memoria (8K si no me falla la memoria, he estado desconectado de los PICs desde Noviembre del 2005, reviso teoría pero no me he puesto a programar).

Lee la última referencia bibliográfica, en ella hay muchiiiiiiiiiiiiiiiiisima información sobre lo que estás buscando.

Como le comenté a la otra persona (pantera), ya no le he dedicado mucho tiempo a este proyecto pero, si se animan, con mucho gusto trataré de ayudar.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 27 de Julio de 2006, 17:50:09
Para hacer un controlador de temperatura que por lo que pude ver se modelizan parecido, es decir la forma de la curva es similar en diversos procesos térmicos, aunque pueda cambiar los tiempos.

Estoy en la duda si usar el 16f877A o alguno de los 18F, que opinan?
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 28 de Julio de 2006, 03:12:05
Con ese µicro está bien supongo.

Si es de temperatura no necesitas estar tomando lecturas en intervalos pequeños, la variación de temperatura no es tan rápida como lo pudiera ser la velocidad de un motor.

Revisa el PDF de Parallax al que hago referencia, ahi viene un artículo de cómo programar un PID para temperaturas, está en BasicStamp pero creo que lo puedes comprender, vienen gráficas y todo (yo medio lo leí pero no le puse mucha atención, le puse mas a la última referencia).
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 08 de Agosto de 2006, 18:28:13
Mario piensas que con el 16f877 alcanzará su memoria de programa? porque debo hacer el control de temperatura y manejar el lcd y el teclado por donde introduzco los parámetros.

Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LordLafebre en 08 de Agosto de 2006, 18:39:22
Hola:

Te queda sobrado para eso el 877 LETAL, tiene 8K de memoria, por lo que creo para un control de temperatura no excederas de ese limite.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 09 de Agosto de 2006, 16:36:26
Hola Letal.

Lord tiene razón, el µicro 16F877 está bien para eso.

* Un puerto para el LCD.
* Un puerto para el teclado (bueno, depende si es por interruptores cruzados o por voltaje).
* Una terminal (o 2) para el sensor.

Con 8 K creo hasta excede en memoria (un 16F872 u 873 estarían bien), pero si es recomendable por la cuestión de los puertos (por el teclado). Si es de voltaje pues solo ocupas una terminal analógica, si no es asi, ocuparás un puerto.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: electronando en 11 de Agosto de 2006, 17:45:56
mira si diseñas tu controlador pid digital no te sera nada complicado si tuvieras el diseño de un controlador pid analogo la cual los parametros son lo que buscabas,o ya tienens algun diseño en un libro como el ogata simplemente ese diseño analogo lo puedes digitalizar con el matlab dandote la ecuacion, para usar transformada z la cual para el microcontrolador esa ecuacion en z se transforma en una ecuacion de diferencias , si tienes alguna duda con respecto a como hacerlo en matlab ,mandame los parametros o mejor dicho las ecuacion en laplace de tu pid y te o mando digitalizadoi para que lo uses en el pic de paso la gente aca aprende en caso no sepa , a me olvidaba el problema es solo el punto flotante por lo que lo puedes aproximar a un valor entero , y si es temperatura como decia lord esto se luce por ser un proceso lento y basta un 16f877 sin problemas  8)
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 11 de Agosto de 2006, 20:28:22
Hola.

Electronando, también había pensado en eso, cambiar laplace a Z, el problema se originaba cuando quería implementar esa ecuación en programación.

Como lo mencioné en los mensajes anteriores, la forma de aplicar las ecuaciones analógicas es diferente a las digitales (me refiero a la práctica).

Las analógicas solo pones la ecuación, armas el circuito y listo.
Las digitales debes encontrar un tiempo de muestreo, acondicionar la señal de entrada, etc.

Yo usaba el Matlab para hacer lo que tu dices (Ogata) y también para hacer filtros digitales (usando Matlab) pero ya no lo recuerdo.

¿Me puedes dar un ejemplo de cómo harías eso que dices?
No importa la ecuación. Haz una simple (todo igual a 1).

Gracias.


PD: Ahora que me regresen el programador y algunas cosas prestadas retomaré el tema he iré publicando resultados.

Título: Re: ¿Cómo hago PID con PBP?
Publicado por: saracatunga en 12 de Agosto de 2006, 17:08:06
Para el controlador de temperatura que planta se supone se toma com referencia, de primer o segundo orden. Mi surgió la duda porque ví procesos térmicos modelados comp plantas de primer o de segundo orden justificándose en que en general se modela así.
Pero porque una o la otra, cual conviene? y otra pregunta como podría modelarla sacando el modelo yo o algún ejemplo concreto desarrollado referido a temperatura.


Me pareció que estoy dentro del hilo por eso pibliqué aquí. Está relacionado.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 13 de Agosto de 2006, 19:16:47
Hola.

Pues mira, con respecto a tu pregunta:
Pero porque una o la otra, cual conviene?

No tengo una respuesta a tu pregunta ya que este tipo de procesos (en los cuales he estado en contacto, puede haber mas) no necesito aplicar un controlador PD o PI o PID, con un simple P es suficiente debido a la variación tan lenta que tienen.
Es mas, si no recuerdo mal, hasta con un simple circuito de ventana se puede controlar el proceso.

Lo anterior claro es en el mundo analógico, en el digital es otra cosa:
como podría modelarla sacando el modelo yo o algún ejemplo concreto desarrollado referido a temperatura.
Esa es la pregunta del millón.

Puedes aplicar estímulos como calentar la planta o, si es un proceso encendido/apagado, hacer variaciones a la temperatura para saber su comportamiento. Existen maneras de uno determinar o (en el peor de los casos) suponer el comportamiento de un proceso. Eso es algo que aún no he podido del todo aterrizar porque si bien es cierto Ogata, Dorf, Distefano y compañia proponen problemas "reales" con ecuaciónes, ¿de dónde salieron? ¿cómo las sacaron? ¿siempre es asi?.

Lamento no poder responder a esto, en cierta manera me siento algo responsable porque abrí el tema y no he podido contribuir en la medida que quisiera.
Lo que la mayoría pregunta no es algo tan sencillo de responder para mi (quizá para alguien si pero para mi no) porque ya dejé mucho tiempo pasar (como 3 años) de que no agarro un curso de control.

Muchas de las preguntas que hacen (en mi particular punto de vista) son propias de una licenciatura o ingeniería y, aunque soy ingeniero, me he desconectado un poco de esto.

Es por eso la razón del tema, para poder aprender y (en la medida de lo posible) enseñar.

Las personas que estén interesadas en control de temperatura pero sin PID y en ensamblador consulten esto:  http://www.elecdesign.com/Articles/ArticleID/2476/2476.html

Es un termómetro que fue usado en una empresa de aqui (creo). Es uno de los 20 artículos mas solicitados de electronic design y fue escrito por el profesor de µicros (Ricardo) y dos compañeros de la escuela (medio los conocí, salieron muuuucho antes que yo).

Tal vez alguno de los moderadores mueva el enlace al foro de ensamblador pero creo que es relativo al tema.

Espero que tanto bla bla bla no te haya mareado y, como ya le respondí a todos, cuando tenga avances los haré llegar.  8)

Saludos.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: electronando en 14 de Agosto de 2006, 00:35:52
aca pongo un ejemplo super sencillo para poder pasar un pid analogico a uno digital y poder implementarlo en su pic sin problemas el unico como verarn sera el punto flotante creo con el proton se puede solucionar
>> P = tf([1 2],[1 1 10])
 
Transfer function:
   s + 2
------------
s^2 + s + 10


>> q=c2d(P,0.5)
 
Transfer function:
    0.423 z - 0.1046
------------------------
z^2 - 0.01487 z + 0.6065
 
Sampling time: 0.5

al numerador y denominador le multiplico por z^-2

quedara:

    0.423 z^-1 - 0.1046z^-2
-------------------------------------
1 - 0.01487 z^-1 + 0.6065z^-2

y la ecuacion en diferencias que se implementa en los filtros digitales(practicamente el pid ,pi,p es uno de ellos) reales es la siguiente

o se podria añadir estos coeficientes al pic para un pid de temperatura :
Y(n) -0.01487Y(n-1)+0.6065Y(n-2)=0.423U(n-1)-0.1046U(n)

hay muchas de las ecuaciones estan en los help de matlab la cuestion es tener la paciencia para poder leerlos y recordar
claro espero sea de ayuda y si alguyien tiene mayor experiencia en el tema pueda ayudar 8)
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 14 de Agosto de 2006, 03:21:33
Hola electronando.

No me acordaba:
Frecuencia-->Z-->tiempo.

Una vez un compañero quizo hacer un filtro FIR (creo que es FIR) pero se complicó la vida con los n(n-1), (n-2), etc.

Yo voy mas por el último enlace que mencioné en el mesaje original (prueba y error). Aunque el libro que menciono de modelado de robots está muy bueno, con ecuaciones de estado y diagramas en Matlab y todo.

Bueno, mañana iré por mi programador para empezar pruebas. :-/
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 19 de Agosto de 2006, 20:38:45
El hecho de uqe picbasic pro no permita variables tipo float, lo inutiliza para el control pid??

Otra pregunta: si hago un pid analógico y lo sintonizo, luego implemento el mismo tipo de pid discretizado. Debería al realizar la sintonía obtener el mismo valor de las tres constantes que los obtuviera en el diseño analógico con matlab. De no darme los mismos valores podría hacer la conversión para que coincidan?? como se haría esa conversión?
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Nicoyote en 22 de Agosto de 2006, 22:59:55
Hola a todos. Soy estudiante de ing. electrica y tengo un ramo que se llama control de sistemas, donde vemos lazos realimentados, controladores PID, etc. El punto está en que no puedo enfocar lo que está en el papel con la realidad (por ejemplo las funciones de trasferencia), y como vi este post (y el tema me interesa), quiero que me expliquen un poco como se puede aplicar un controlador PID a un robot. Espero no joderlos con la pregunta, pero es una duda que quiero aclarar, para así después aportar con algo. Eso sería, gracias de antemano  :-/ :-/
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 23 de Agosto de 2006, 00:56:04
Hola a todos de nuevo  :)

En el tema de USB aquí en el foro de PBP mencioné que dejaría ese tema para enfocarme a este tema............ :?............ pero mi novia llegó y está en la ciudad, estará por toda la semana y pues.......... 8)...... no le daré a este tema en esta semana.


Letal revisa esto: http://proyectosfie.com/html/seccion6.htm

Nicoyote revisa esto:
http://abrobotics.tripod.com/ControlLaws/PID_ControlLaws.htm
http://www.embedded.com/2000/0010/0010feat3.htm

Al parecer este tema es algo visto (240 veces hasta ahora), todo parece indicar que mucha gente tiene tarea sobre PIDs y anda buscando soluciones  :D.

Bueno, se termina la semana y de vuelta mi cuadernillo de apuntes/proyectos/programas  :mrgreen:
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 29 de Agosto de 2006, 16:44:57
si hago un pid en el que por teclado pueda cambiar KI,KD,TI,KP y además el setpoint. Como establezco la respuesta en el tiempo del pid para un determinado valor de constantes??
En la teoría dice que aplico un escalón a la entrada del sistema(el sistema incluye la planta a controlar y el pid) y a la salida del sistema obtengo una señal en la que puedo ver el sobrepaso, tiempo de subida, etc., pero lo que no entiendo es que para eso debo asignar un determinado valor a KI,KD,TI,KP para que actúen como constantes que son pero que valor le doy al setpoint ??? no entiendo que hago con el serpoint al tratar de obtener la respuesta en el tiempo.
 :( :(
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 30 de Agosto de 2006, 04:35:41
 :? MmmmmmmmmmmmmmmmmmmmmM  :?

Lo que preguntas no le entiendo bien.

Si tienes tu planta definida (sus parámetros, características, etcétera) e hiciste su correspondiente análizis ya sea en frecuencia o en Z, sabes qué valor le debes dar a las constantes para que tu sistema funcione correctamente.

Eso del punto de referencia es tu entrada (si no recuerdo mal, hace ya mucho tiempo que no tomo ningún apunte de control), forzosamente tendrás que aplicar una entrada (la mayoría de los casos un escalón) para ver su comportamiento (si no recuerdo mal, se aplicaba un impulso para saber la función de transferencia, pero creo que si recuerdo mal  :D).

Lo que pides es algo complicado de explicar para mi. He visto que has preguntado en el foro y al parecer necesitas hacer un PID para temperatura. Te mencioné que te fueras a parallax.com y buscaras las descargas  o vete directo aqui:
http://www.parallax.com/html_pages/downloads/siccurriculum/documentation_sic_curriculum.asp#spanish

y baja industrial control. Este PDF tiene un ejemplo de PID para temperatura; aunque es para Basic Stamp, es casi lo mismo.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 30 de Agosto de 2006, 11:30:37
El setpoint es el valor deseado de salida.
Ahora bien, lo que no entiendo es que yo aplico un escalón(es lo mismo que una contínua?)
pero la respuesta en teoría oscila alrededor del valor del escalón que aplique a la entrada o alrededor del setpoint?? o sea que lo que no entiendo es que valor le doy al setppoint al poner un escalón a la entrada.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: jfh900 en 30 de Agosto de 2006, 14:18:54
Haber LETAL lo que tu necesitas se conoce con el nombre de sintonia o sintonización de un PID, existen distintos métodos y técnicas para realizar esta operación. En general se pueden realizar en lazo abierto y en lazo cerrado, dependiendo del tipo de proceso.  Aquí tienes algunas páginas que hablan de lo que te comento:

http://www.esi2.us.es/~vivas/prac_RA_ITI/prac_5.pdf
http://www.eie.ucr.ac.cr/pub_inv/articulos/valfaro02B.pdf

En general si pones en Google "sintonización PID" obtendras un buen número de páginas hablando del tema.

Un saludo
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Nicoyote en 30 de Agosto de 2006, 18:30:29
Gracias por los links Mario. No había visto el foro estos días pq estaba un poco ocupado. Les he echado un vistazo y se ve muy interesante la cosa. Gracias nuevamente  :mrgreen: !!!
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 27 de Septiembre de 2006, 19:07:57
Estoy luchando con el pid, pero tengo una duda fundamental :
Cómo pruebo si mi PID funciona correctamente ???? 
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: jfh900 en 27 de Septiembre de 2006, 22:20:39
Hola Mario, cuando te refieres a:

Citar
Aunque el libro que menciono de modelado de robots está muy bueno, con ecuaciones de estado y diagramas en Matlab y todo.

¿Qué libro es?

Un saludo.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: GustavoT en 27 de Septiembre de 2006, 22:37:26
Realice un control PID sobre un brazo robotizo unos años atrás, el resultado fue de regular a bueno, al pid lo programe en asambrer y no use ninguna herramienta como transformada binlineal ni nada de eso, simplemente se programo un integrador un derivador , producto y suma

Es cuestión de ponerse manos a la obra, yo use un 18F458 , a este le sobra velocidad para realizar el control

Por ahí leí que alguien recomendaba usar controles analógicos, no creo que sea lo mejor , es dar un paso atrás, hoy en día todos los controles se hacen de forma digital, ya dejo de ser una tendencia  para ser los estándar.

Suerte cualquier cososa.....
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 28 de Septiembre de 2006, 03:18:03
Hola.



LETAL:

Esa respuesta solo tú la conoces... extraño ¿no?.

Tu solamente conoces la planta y el controlador; si tu planta tiene una reacción favorable al controlador, entoces estás bien.

Creo que lo que estabas haciendo era un control de temperatura, te hice el comentario que un control PID no es necesario para esa varible porque, en la gran mayoría de los casos, la temperatura no varía tan rápido, con un simple P o poniendo condiciones es mas que suficiente.

Lo antes mencionado es por si no tienes los parámetros de la planta. Si tienes esos parámetros pues, puedes usar esa información y como mencionaste que usas MATLAB, simular el sistema.

Mira LETAL, para que te des una idea de lo que digo, ve a ésta página y descarga los dos videos que vienen en ella. Es un carrito donde la persona hace un control P y un PD. Te darás cuenta de el error entre uno y otro.
http://elm-chan.org/works/ltc/report.html

Pero como lo tuyo es temperatura.......... es difícil saber si lo haces por prueba y error ya que la variable es lenta en su comportamiento.
Lo que puedes hacer es tratar de desestabilizar el sistema dando valores arbitrarios que consideres prudentes (claro, todo esto es si no sacaste la ecuación de la planta).

Sinceramente no creo que ocupes un PID para un proceso de esta naturaleza, un simple programa de comparación de valores es suficiente pero, si necesitas hacerlo, ya es diferente  :D.

¿Qué libro es?

Es Mobile Robotic Car Design de Pushkin Kachroo y Patricia Mellodge.
http://www.amazon.com/gp/product/007143870X/ref=pd_rate_dp/103-3521960-1785421?ie=UTF8


Por ahí leí que alguien recomendaba usar controles analógicos, no creo que sea lo mejor , es dar un paso atrás

Ese era yo.
La razón es que el forero LETAL no ha mencionado si es tarea o si el quiere hacerlo solo porque quiere (fíjate en la fecha de su publicación, es 27 de Julio, Inicio de clases semestrales en algún lugar).
Le comentaba que si había oportunidad lo hiciera analógico porque es mas sencillo que digital (en mi opinión).

Al principio del tema hago la aclaración que quiero hacer un PID porque quiero, no porque tenga que hacerlo.


Por ahí leí que alguien recomendaba usar controles analógicos, no creo que sea lo mejor , es dar un paso atrás, hoy en día todos los controles se hacen de forma digital, ya dejo de ser una tendencia  para ser los estándar.

De acuerdo contigo.

Es cuestión de ponerse manos a la obra
Diste en el clavo 8).


Bueno, déjenme decirles como va esto:

Apenas estoy en lo del PWM.

Ando queriendo usar el HPWM del PBP pero al parecer solo te da 256 valores para el ciclo de trabajo (0=0%, 127=50% y 255=100%).

No sería ningún problema pero necesitaría ver cuántas líneas de ensamblador usa el compilador; no porque el 18F452 o 18F252 no las resista (32K de cada uno) sino porque quizá utilice éste código en un 16F873 o un 16F628 (con control Ackerman por no tener dos PWM).

Estuve viendo el código que proporciona Microengineering Labs para usar el PWM del µicro y hacen algo que no se me había ocurrido (si, algo tan sencillo no se me había ocurrido) para colocar los 10 bits de resolución para el ciclo de trabajo:

duty   VAR   WORD      ' Duty cycle value (CCPR1L:CCP1CON<5:4>)

CCP1CON.4 = duty.0      ' Store duty to registers as
CCP1CON.5 = duty.1      ' a 10-bit word

CCPR1L = DUTY >> 2

http://www.microengineeringlabs.com/resources/samples/pbp/hardpwm.bas


Al parecer es compacto el código y no tendría que estar llamando la instrucción HPWM cada vez que quiera ajustar los motores.

Bueno, hasta aqui voy, pondré resultados tan pronto los tenga.

Saludos y cuando ponga mi página electrónica trataré de colocar esta información con videos si es posible.

Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 28 de Septiembre de 2006, 09:09:07
Aclaro algunas cosas de mi pregunta:

Tengo que hacerlo como trabajo que me dieron, pero la cosa ya no es solo de temperatura.
Deber ser un PID configurable por teclado(cambio sus constantes por teclado), por lo que puede ser que lo usen , como puede ser que lo usen en una variable más rápida.
Mi pregunta iba dirigida a como puedo probar en proteus que está funcionando bien, es decir, que no solo proporciona una acción pid, sino que las constantes que introduzco producen la misma salida del modelado teórico del pid, ya que esto es lo que realmente me indicaría si esta bien hecho. O sea que en mi caso lo que debo demostrar es la concordancia que tiene con la teoría para que puedan decirme que está bien.

Pensé en introducir una entrada escalón y ver la salida con alguna herramienta, y hacer lo mismo con el simulink y comparar, puede ser???

Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 29 de Septiembre de 2006, 03:47:09
mmmmmmmmmmmm  :?

No sé la verdad si puedas usar eso de Proteus, no te puedo ayudar porque no sé usar ese programa.


Tengo una GRAN duda:
¿cómo sacaste la ecuación del proceso de temperatura?


Título: Re: ¿Cómo hago PID con PBP?
Publicado por: jfh900 en 29 de Septiembre de 2006, 07:51:01
Para verificar el funcionamiento de un PID lo que se suele hacer es aplicar una entrada en escalón y comprobar la respuesta del sistema. Pero muy importante se tiene que probar el PID y el sistema a controlar todo junto. El problema del Proteus, es como simulas el sistema a controlar. Creo que tal vez se pueda integrar en algún módulo, la función de transferencia del sistema. Luego aplicando un pulso al PID y al sistema en Proteus, podremos ver el resultado en el osciloscopio.

Un saludo
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 29 de Septiembre de 2006, 08:58:56
Lo que pasa es que tome una de segunda orden como planta directamente, yo la supuse.
De todas formas como te decía el tema del modelado de la planta es relativo, porque lo que quiero hacer es una estructura pid donde pueda ir cambiando las constantes y viendo el efecto que produce sobre la planta ficticia. No tiene importancia en mi caso que planta es exactamente ya que es solo para hacer pruebas variando las constantes y viendo que pasa.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 29 de Septiembre de 2006, 09:12:42
Ayuda por favor !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Les muestro un programa de control pid, que es una modificación de uno escrito en bassictamp. Estoy realmente frustrado porque hago la simulación y no tiene salida.
Les agradecería mucho si pueden estudiarlo y decirme que pasa, de paso quizá les dé a ustedes alguna idea.
Lo pego aquí al mío y les dejo adjunto el de basicstamp y el mío por las dudas
quieran bajarlo para verlos mejor.


Código: [Seleccionar]

 

'********* CONFIGURACIÓN Variables DEL CONTROL PID ****************
SP var byte 
Rango var byte
B VAR BYTE  ' Configuración de excitación de polarización
Kp var byte  ' Ganancia Proporcional en décimas
Ki var byte  ' Ganancia Integral en décimas
Ti var byte  ' Tiempo de Reset Integral
Kd var byte ' Ganancia Derivativa
sensor var byte
'*************************************************

' ************** Define constantes y variables

Signo VAR WORD ' Almacena el signo de los cálculos
Excitacion VAR WORD ' Cantidad de excitación total
Err VAR WORD ' Cantidad de Error
P VAR WORD ' Cantidad de excitación Proporcional
I VAR WORD ' Cantidad de excitación Integral
D VAR WORD ' Cantidad de excitación Derivativa
UltimoErr VAR WORD ' Almacena temperatura anterior para control derivativo
UltimoErr = 0
ContadorInt VAR BYTE ' Variable para contar ciclos de excitación integral
Ei VAR WORD ' Error acumulativo para cálculo integral
Ei = 0 ' Limpia error acumulativo


;********************** Defino las cttes(que en realidad son variables)
SP =200 
Rango=255' ya lo puse como 255 directlly
B =0  ' Configuración de excitación de polarización
Kp =1  ' Ganancia Proporcional
Ki =1  ' Ganancia Integral en décimas
Ti =10  ' Tiempo de Reset Interal
Kd =1

'*************** BUCLE PRINCIPAL

Principal:
GOSUB Obtenerdato
GOSUB Calc_Temp
GOSUB Calc_Excitacion
GOSUB Excitacion_Calentador


GOTO Principal


Obtenerdato:
 p1 var BYTE
 ADCON1 =%100              ;configura PortA 0,1, 3 en conversores A/
       
             
 

        ADCON0 =%0000001            ;activar canal 0 a Fosc/2
                medir:          ;subrutina para leer el conversor A/D
        Pauseus 50              ;pausa par setear el canal
        ADCON0.2 = 1            ;iniciar conversión
       verificositermino:
        if ADCON0.2 = 1 then verificositermino
       p1=ADRESH

              Return
     
       
               
Calc_Temp: ' Convierte el valor digital en Temp.
sensor=p1 
RETURN


Calc_Excitacion:
GOSUB ErrorCalc ' Cálculos de Error
GOSUB PropCalc ' Calcula error proporcional
GOSUB IntCalc ' Calcula error Integral
GOSUB DerivCalc ' Calcula error Derivativo
Excitacion = (B + P + I + D) ' Calcula excitación total

Signo = Excitacion ' Ajuste de signo para max 100 min 0
GOSUB PoneSigno
Excitacion = ABS Excitacion MAX 100   
IF Signo = 1 THEN ExcitListo
Excitacion = 0
ExcitListo:
RETURN



'********* Excitacion del calentador
Excitacion_Calentador:

PORTB=Excitacion

RETURN



'********** Calcula %Error - Signo ajustado
ErrorCalc:

Err = (SP - sensor) ' Calcula error
Signo = Err
GOSUB PoneSigno
Err = ABS Err*100/255' Calcula % error , el 255 es el RANGO
Err = Err * Signo
RETURN


'*********** Excitación Proporcional - Signo ajustado
PropCalc:
Signo = Err
GOSUB PoneSigno
P = ABS Err * KP + 5/10 ' Err prop= %Err * Kp /10 por escala,
P = P * Signo ' +5 por redondeo
RETURN


'********** Excitación Integral - Signo ajustado
IntCalc:
Ei = Ei + Err ' Acumula %err
ContadorInt = ContadorInt + 1 ' Incrementa contador
IF ContadorInt < Ti Then IntListo

Signo = Ei
Gosub PoneSigno
Ei = ABS Ei / Ti ' Encuentra error promedio
Ei = Ei * Ki + 5 /10 ' Int err = Int err * Ki
Ei = Ei * Signo
I = I + Ei ' Suma error a Int err total
Signo = I
GOSUB PoneSigno
I = ABS I MAX 100 ' limita a 100     
I = I * Signo
ContadorInt = 0 ' Reinicia contador y acumulador
Ei = 0
IntListo:
RETURN


'*********** Excitación Derivativa
DerivCalc:
D = (Err-UltimoErr) * KD ' Calcula excitación derivativa
' basándose en la diferencia del último error

DerivListo
UltimoErr = Err ' Almacena error actual para el próximo cálculo
RETURN



'********** Determina el signo de un valor
PoneSigno:
IF Signo.bit15 = 0 THEN SignoPos ' Si signobit es 1, entonces es negativo
Signo = -1
Return
SignoPos:
Signo = 1
SignoListo:
Return




 :( :( :( :(
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 29 de Septiembre de 2006, 14:51:13
Lo voy a imprimir para compararlo entre el BS y PBP.

A simple vista me doy cuenta que es prácticamente lo mismo.

No te puedo ayudar en eso de Proteus como te mencioné pero, quizá puedas pedir ayuda en el tema de PBP y Proteus aqui en el subforo.

Intentaré revisarlo hoy y trataré de darte una respuesta en la noche.

El código debería funcionar.

Si en Proteus se pudiera colocar un par led-transistor en un rotor sería muy bueno, asi te darías cuenta si el motor sigue a la entrada, pero creo que no se puede hacer.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 30 de Septiembre de 2006, 17:59:53
Hola.

Acabo de ver el código y:

Obtenerdato:
 p1 var BYTE
 ADCON1 =%100              ;configura PortA 0,1, 3 en conversores A/
 ADCON0 =%0000001            ;activar canal 0 a Fosc/2               


Si utilizas el FOSC/2 debes poner en el bit 7 y 6 dos ceros y tienes %0000 001 necesitas 0000 0001.

Para la configuración de AN0, AN1 y AN3 estás bien pero.
p1=ADRESH

Estás tomando los bits de de ADRESH y creo, que son solo tomarás los dos de mayor peso porque estará configurado a la derecha.

Si solo vas a tomar el ADRESH, debes colocar un 1 en el bit 7 del ADCON1 para que se justifique a la izquierda y asi tomes los 8 de mayor peso y descartes los dos de menor peso.

ADCON1=%0000 0100

Eso es lo único que yo veo diferente.

Prácticamente tomaste lo mismo del BS y lo "copy-pasteaste", lo cual no está mal ya que tuviste cuidado de seleccionar los rangos.

¿Porqué no lo pruebas en lugar de simularlo?

No recuerdo mucho de control y quizá ésta sea una pregunta tonta pero..... ¿cómo aplicas un escalón a un sistema digital? Es decir, ¿qué señal sería un escalón?

Recuerdo que es algo de µ(t), supongo que será un voltaje durante un tiempo µ(t-x) o algo asi.


Espero te sirva, es lo único que encontré.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 30 de Septiembre de 2006, 18:37:20
Gracias Mario.

Citar
Estás tomando los bits de de ADRESH y creo, que son solo tomarás los dos de mayor peso porque estará configurado a la derecha.

Si solo vas a tomar el ADRESH, debes colocar un 1 en el bit 7 del ADCON1 para que se justifique a la izquierda y asi tomes los 8 de mayor peso y descartes los dos de menor peso.

ADCON1=%0000 0100
   
Disculpa, pero pusiste el adcon1 igual que yo. Cuál es la diferencia?
Otra dudilla, probando el adcon0 y el adcon1 como yo los puse originalmente y visualizando
en lcd si toma los ocho bits. De todas formas voy a probar los cambios que me indicas.


Leyendo el código me dí cuenta que excitación es de tipo word y luego yo hago PORTB=excitación , y el portB sólo tiene ocho bits. Trataré de tomar los 8 bits más significativos, espero que me salga, porque no entiendo bien como se hace, voy a probar y te cuento.

Con respecto a lo del escalón sería una contínua. El tema es que en sistemas analógicos lo que realmente entra en el controlador es la señal de error, mientras que en el que usamos el pic , la señal de error la calcula internamente el micro.

Ahora lo que no entiendo bien es metodo de sintonía basado en la curva de reacción , pero aplicado al micro , por lo que dije anteriormente se me mezclan un poco las cosas.

Gracias de nuevo mario. Te comento a ver si puedo simular algo en el proteus.


Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 01 de Octubre de 2006, 01:22:32
Pues parece que esto
ADCON1=%100

coloca esto:
0000 0100

en el ADCON1.


No lo sé la verdad, pero me armaré el ICD del µicrocode studio plus y me fijo en los registros a la hora de estar probándolo.


Al parecer PANTERA está haciendo un PID discreto pero creo que él es mas avanzado ya que todo parece indicar que usará C (¡punto flotante!) y como C no se....... :(

Aunque lo del punto flotante lo puedes "brincar" con DIV32, no sé si sea apropiado, como tomas lecturas continuamente y rápido (para el I, ¡y para todo!) quizá no sea una buena idea meter decimales.

Primero que salga y luego lo maquillan  :D
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 03 de Octubre de 2006, 19:01:32
estará bien usar el dac en lugar de pwm y un filtro?, me pareció que andaría mejor con el dac pero estoy dudando .
Qué pinan?
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 04 de Octubre de 2006, 02:11:11
¿Para qué ocupas salida analógica?

Esa sería la pregunta.

Recuerda que el DAC no tiene una frecuencia de salida; simplemente produce voltaje de salida.

Un PWM proporciona voltaje en medida de su ciclo de trabajo pero a una frecuencia fija.

Si tu sistema soporta el estrés de frecuencia puedes usar el PWM. Si solamente necesitas voltaje usa el DAC; todo depende de qué controlarás.


¿Ya te funcionó bien el PID?

Yo creo que voy a utilizar el pseudocódigo que menciono aquí:
http://abrobotics.tripod.com/ControlLaws/PID_ControlLaws.htm

Intentaré  adaptarlo a PBP.

Apenas estoy armando el carrito y colocando la resolución de las llantas. Creo lo haré óptico porque los sensores de efecto hall que tengo simplemente no levantan nada de magnetismo.  :lol:
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 04 de Octubre de 2006, 16:20:08
Todavía no hice andar el pid, pero te tengo al tanto de novedades.
Con respesto a la salida utilizaré rl dac para probar ya que necesito mostrar como es la señal de salida.
Soy un poco desordenado para hacer las cosas.

El cycle es lo que da la frecuencia al pwm, verdad??? Le yendo ví 1 ciclo con reloj de 20 Mhz dura 1ms, eso signifia que no puedo obtener frecuancias DE PWM mayores de 1KHZ??

Nos vemos teneme al tanto de tus avances y yo te cuento los míos.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 04 de Octubre de 2006, 20:35:03
Hola.

El ciclo de trabajo es el tiempo que estará en alto el pulso durante la frecuencia, son cosas diferentes.

Tu frecuencia es de X Hz, y tu ciclo de trabajo varía entre el 0% y el 100%.

Usemos 1 khz de ejemplo:
0% significa que durante esa frecuencia, no saldrá voltaje. Cada 1 khz se repetirá esto.

50% significa que durante la frecuencia, la mitad saldrá voltaje y la otra no (500 Hz con voltaje y 500 sin voltaje). Cada 1 kHz se repite.

100% quiere decir que siempre saldrá voltaje durante TODA la frecuencia.


Si pones 0% o 100% no notarás la diferencia pero, si pones 50% o cualquier otro, si la verás.

Si tienes acceso a un osciloscopio (digital de preferencia) observarás lo que digo.


Si usas el 877, tienes dos canales para PWM.
Revisa el manual de PBP en HPWM y observarás que ya hay una instrucción para hacer esto en hardware.

HPWM canal, ciclo de trabajo, frecuencia.

El manual te dice cuánto es la mínima frecuencia permisible con esta instrucción.

Una desventaja con esto es que deverás llamar a la instrucción cada vez que desees cambiar el ciclo de trabajo para cada canal; recuerda que será la misma frecuencia para los dos canales pero, puede ser diferente el ciclo de trabajo.

Otra (pudiera ser desventaja) es que solo te deja usar de 0 (0%) hasta 255 (100%).

Si lo haces directamente en hardware, moviendo y acomodando los registros necesarios tendrás los 10 bits (0=0%,1023=100%) por lo que la resolución del ancho de pulso se hace mas fina.


Yo usaré esto:
http://www.microengineeringlabs.com/resources/samples/pbp/hardpwm.bas

Es un programa para configurar los registros del hardware con los 10 bits.

Espero te sirva.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 05 de Octubre de 2006, 12:13:51
Yo te hablaba del PWM , no del HPWM. Como es eso de pwm en hardware??? como son las conexiones externas al pic??

Te comento que fraccione el cóodigo del pid y estuve haciendo una prueba muy básica con el control p en proteus y funciona. Digo básica porque hay salida que antes ni siquiera eso tenía y verifiqué que cuando el error es negativo tiene salida 0 y cuando es positivo tiene salida 255.

Tengo dudas una respecto a las siguientes líneas:
Control P
…………
…………..
ErrorCalc:

Err = (SP - sensor) ' Calcula error de la temperatura
Signo = Err
GOSUB PoneSigno
Err = (ABS Err*100)/255' Calcula % error , el 255 es el RANGO
Err = Err * Signo
RETURN


'*********** Excitación Proporcional - Signo ajustado
PropCalc:
Signo = Err
GOSUB PoneSigno
P = ABS Err * KP + 5/10 ' Err prop= %Err * Kp /10 por escala,
P = P * Signo ' +5 por redondeo
RETURN

De acuerdo a esta línea
Err = (ABS Err*100)/255' Calcula % error , el 255 es el RANGO
Solo cuando abs err*100 sea mayor de 255, el error será mayor a 0 y además Err cambiaría de a 1 cuando abs err*100 cambie en 255, verdad?? Esto no lo haría muy impreciso al calculo del error??


En esta otra línea :

P = ABS Err * KP + 5/10 ' Err prop= %Err * Kp /10 por escala

La secuencia con que hace el calculo el satmp es :
ABS Err*kp=a
a+5=b
b/10=p

O sea que abs err*kp debería variar en 5 para que varíe en 1 P, otra vez , esto lo hace muy impreciso o no es tan grave la cosa??
Y hay algo que no entiendo para que suma el 5 y divide en 10, es realmente eso mejor que directamente poner P=ABS Err*KP ?????
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 06 de Octubre de 2006, 02:59:43
Sobre lo del PWM en Hardware:
http://www.interq.or.jp/japan/se-inoue/e_pic7_4.htm

Hace referencia al 16F873, que tiene casi lo mismo que el 16F877, solo que el 877 tiene un puerto paralelo. Para fines de explicación es lo mismo.


Sobre lo que comentas:
Tengo dudas una respecto a las siguientes líneas:

ErrorCalc:
Err = (SP - sensor) ' Calcula error de la temperatura
Signo = Err
GOSUB PoneSigno
Err = (ABS Err*100)/255' Calcula % error , el 255 es el RANGO
Err = Err * Signo
RETURN

Si te fijas en el código de Basic Stamp, rango es el valor que se encuentra entre los umbrales máximos y mínimos de temperatura. Revisa la página 157 del manual industrial de basic stamp (donde viene este programa en Basic).
Quizá te aclare un poco la duda.

De todas maneras seguiré viendo el código a ver qué se le puede sacar.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 06 de Octubre de 2006, 03:18:35
Un comentario mas:

Recuerda que el error = (SP- la variable a medir)

Mira cómo el ejemplo de BS colocó un 20 (20=2’F porque los grados están en décimas) en el rango.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 10 de Octubre de 2006, 12:16:26
electronando hizo con matlab el pasaje de la funcion de transferencia en S a una función de transferencia en Z Y luego la correspondiente en diferencias.

Lo que yo quiero hacer es pasar de una en diferencias a una en Z. Esto es debido a que estoy usando el pbp que trabaja con matematica entera.
Entonces tomé como ejemplo el código que coloqué en un mensaje anterior, de donde puedo deducir la ecuación en diferencias pero no la ecuacion en Z.

En definitiva necesito que me ayuden a pasar la ecuacion en diferencias del pid a una ecuación en  variable Z. Quizá electronando sepa como hacerlo, ya que maneja bien el matlab.


Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 10 de Octubre de 2006, 15:13:22
Hola.


Mira Letal, cuando yo estudié eso lo hice con un libro de procesamiento digital de señales (el de Proakis).

No recuerdo (casi nada) de cómo pasar de frecuencia a Z y a tiempo y demas pero, si tú estás estudiando ecuaciones de diferencias (si no recuerdo mal) no es difícil pasar de una a otra.

Revisa esto:
www.tecnun.com/asignaturas/tratamiento%20digital/tema7.pdf

www.fi.uba.ar/materias/61107/Apuntes/TZ00.pdf

www.dma.fi.upm.es/ctorres/curso-interactivo-control/cap1.pdf

O en cualquier libro de Procesamiento digital de señales te dicen cómo hacerlo.



Apenas va lo mio.  :(
No he tenido mucho tiempo para darle a esto pero, por pasos...... estoy tratando de acondicionar una rueda para tomar los pulsos y aplicar el P.

En cuanto tenga avances los colocaré.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 10 de Octubre de 2006, 17:06:20
Gracias MARIO.
Husmeando en el foro encontré un tema que me despertó la duda si está bien lo que estoy haciendo que entrege el pid. Encima nadie constestó nada, así qu ni siquiera pude tomar una opinión de ahí.
Me gustaría que le des un vistazo a ver que opinas/n y me digas como lo haces vos.

Mirálo en http://www.todopic.com.ar/foros/index.php?topic=14248.0http://www.todopic.com.ar/foros/index.php?topic=14248.0 (http://)

Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 11 de Octubre de 2006, 02:57:51
Hola Letal.


Ésta persona plantea un problema relevante (la del enlace anterior, TREMENS): ¿qué sucede si la salida es negativa?


En el escrito donde me estoy basando para hacer el código, el autor plantea fijar límites para el PWM. Él plantea 0 y 100 como mínimos y máximos.

Revisa esto:
http://abrobotics.tripod.com/ControlLaws/singlemotor.htm

Llega hasta la parte del PWM para que veas lo que digo.


El texto referido es el mismo de la bibliografía planteada al inicio del tema.


Espero te sirva.


PD: ¿vos? ¿Eres argentino o algo asi?
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 11 de Octubre de 2006, 17:01:52
Voy a meditar mejor el tema del error negativo y trataré de leer lo que me indicás aunque el inglés no es de mi agrado y tampoco lo entoendo(quizá por eso no sea de mi agrado, o quizá sea un lazo realimentado, ja, ja).
A priori me parece que resultaría obligatorio limitar el mínimo a cero por cuestiones físicas de sensores y actuadores, que trabajen arrancando en 0 volt hasta 10v o 5 vol, o 0-20ma.
El tema es como hacerlo, o sea, hacer que cuando el error,integral,o derivada sea negativa , hacer que el pid saque 0% o 0volt, me parece que esta mal porque es muy grande el cambio que esta haciendo, sería como un proporcional off. Creo que lo que acabo de decir, habría que afinarlo para que la limitación no sea tan drástica y ver de ir disminuyendo la acción hasta un límite de error negativo máximo y al llegar ahí recién aplicar 0.

Voy a pensarlo un poco y les comento.
Si se les ocurre otra idea aoprtenla, parece que con mario nos estamos dando duro los dos solos.

Rpta. PD:SI. Vos?
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 11 de Octubre de 2006, 19:38:02
Te recomiendo que si no eres muy bueno en inglés, copies el texto y lo coloques en un traductor.

El autor plantea cómo, mediante el término integral, se controlará si el error produce un resultado muy negativo o muy positivo.

Ahora que lo veo, quizá no te sea de gran ayuda porque es para controlar motores en forma diferencial. Pero el principio es el mismo.



PD: soy de México, Puro Cachanilla puro.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 12 de Octubre de 2006, 12:32:26
Me mataste.
No tengo ningún programa traductor. Cuál usas vos???
Podés subirlo al foro, como adjunto?? O enviarmelo??
Sería de mucha utilidad.Gracias.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 12 de Octubre de 2006, 13:38:48
Para ser sincero, yo nunca he usado uno (inglés-español o cualquier otro) pero, creo que google o altavista o babilon o algo asi tenían unos y son gratis.

Una persona escribió en italiano y lo tradujo al español en un tema.
Otra persona tradujo eso al inglés y después al español.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: pantera en 15 de Octubre de 2006, 21:17:52
Hola chicos he estado trabajando en un controlador PID y pues como van?

SI puedo ayudarlos en algo cuenten con mi ayuda? Soy estudiante de control e instrumentacion

suerte
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 16 de Octubre de 2006, 04:20:42
Hola Pantera.

He seguido tu tema "PID DISCRETO" en el otro subforo.

Si te vas para atrás una página verás que te menciono y comento que lo tuyo será posiblemente mejor ya que usas C y no te metes en problemas de punto flotante.

He revisado tus avances y tu hoja de PDF sobre cómo discretizar (arriba los TECs; yo soy del ITM = Mexicali, Baja California).

Como hace ya tiempo que no tomo un libro de control (2002-2003) no recuerdo muy bien lo de la Z y las fracciones parciales, ecuaciones de diferencias; pero sí menciono a Ogata y Dorf al inicio del tema (primera hoja, primer mensaje).

Al parecer ya terminaste tu proyecto. Bueno lo que activar el teclado con las interrupciones de cambio en el Puerto B.

Solo te recomendaría que usaras el PWM del hardware (si tu PIC tiene). Eso liberará al µicro de estarlo haciendo en software y tu programa correrá de mejor manera.

Yo soy de comunicaciones pero me gusta el control, no soy de instrumentación pero....... entiendo un poco.

Cuando termine de acoplar la rueda al motor y calibrar mi P, lo publicaré.

La verdad sea dicha, no me he dado tiempo para eso.

En hora buena pantera.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 16 de Octubre de 2006, 11:05:24
Si que puedes ayudar pantera. Lee en los últimos mensajes, así nos das tu opinión respecto a la salida negativa.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: pantera en 17 de Octubre de 2006, 15:22:28
Hola chicos hoy me he puesto a leer todo el tema de este post y por lo que veo Letal esta haciendo un sistema de temperatura con un teclado matricial y que modifique los parámetros y Mario anda trabajando con un Motor de DC.

Bueno Un detalle que me gustaría mencionar es que entre mas pequeño sea el motor mas difícil será controlarlo.

No he leido a detalle todo pero veo que te sale el error negativo lo cual no esta del todo mal simplemente analicemos esto.

Digamos que la temperatura es de 24 grados y quieres poner mediante tu teclado el set_point a 20. por lo tanto

Código: Matlab M
  1. error= 20 - 24 = - 4 => negativo
  2. Entonces necesitas cargar este valor (PID) a un ventilador (negativo).

Si tienes los mismos 24 y quieres poner a 30 grados que pasa:

Código: Matlab M
  1. Error = 30-24 = + 6 => Positivo
  2. Entonces necesitas cargar ese valor (PID) a un foco.

El signo negativo simplemente te dirá lo que necesitas activar ya sea el ventilador o el foco.

Con respecto a como va mi proyecto pues si tienes razon, puero aun no he terminado . Con lo de las flotantes si creo que sera mas facil dentro del rango que te permite C, float. Como solo hay velocidades positivas pues no tengo ese problema de signo.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: pantera en 17 de Octubre de 2006, 15:41:34
Tambien me gustaria mencionar que entre mejor sea la aproximacion de la respuesta al escalon con su funcion mas facil sera sintonizar el PID.

A su vez tambien la linealidad del sensor que tienen debe de ser adecuada. Ya que sino pues realmente estara mal las cosas que estan haciendo. Los actuadores tambien sumamente importantes. Pero pues me he de imaginar que estan utilizando MOSFET. Al menos transistores.

Por eso es que he ido algo lento como podran ver primero he:

Respuesta al escalon.
Obtencion de la ecuacion diferencial.
Verificacion de la linealidad del mi sensor.
Armar el programa de que mida la velocidad del motor y verificarla respecto al patron . +- 10 %
Analizar la ecuacion del PID que hiba a utilizar (Detallada en el PDF esta biene esa pueden intentar esa es del libro OGATA)
Implementar el programa en el cual puede variar cualquier parametro de mi controlador.

El objetivo ahora es:
Programar el alguritmo de control
u(k)=a0 e(k) + a1 e(k-1) +a2 e(k-2) + u(k-1)


El siguiente paso sera teclear el programa en MATLAB para la simulacion de la planta discretizada y el control PID discreto que presento en el archivo PDF
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 17 de Octubre de 2006, 15:58:36
Aunque controles un motor, igualmente al calcular la salida de tu controlador puede darte negativa, verdad??
 
En ese caso que salida das realmente a tu controlador de velocidad ???

Y otra preguntita puedes explicarme como haces tu el cálculo da la acción integral.

Seguimos en contacto. el tiempo se acaba.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: pantera en 17 de Octubre de 2006, 16:16:26
Hola el motor que tengo no podria dar una salida de control negatiava amenos que quiera invertir el giro de la flecha.

y lo de la accion integral no lo entiendes en la variable Z o S

Lo que puedo decirte acerca de la parte integral es la cual lleva el error a cero mas rapido. Es como corrgir el pasado, La P es la que corrige el actual, y la parte derivativa se antepone al error. Y realmente para explicar eso simplemente hay que analizar un poco pero la verdad no recuerdo como pero ten fe de que es verdad.

Letal revisa el Documento que PDF que hice desmenuse a todo lo que se puede la ecuacion que el Libro Ogata propone y Ya me lo checo un maestro y me dice que esta bien. Si tienes una duda podermos comentarlo.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 17 de Octubre de 2006, 16:41:14
Voy a revisar tu tema para preguntar después (PID discreto) cómo sacaste los parámetros del motor; lo único que no puedo sacar el la inductancia.
O cómo determinaste la función de transferencia.

Sé que usaste Matlab pero yo ya no voy a la escuela y no tengo el Matlab instalado (pero en la escuela pudieran prestarme una máquina para hacer eso).

Es cierto que no habrá velocidades negativas, y si las hubiera no habría (creo) mayor problema ya que la resolución del PWM es independiente de todo el cálculo. Sólo cuando el error sea negativo, se reduce el ancho de pulso para bajar la velocidad.

Como Letal cometa, el cálculo se hace mediante %. Como pienso utilizar una palabra (16 bits) para hacer cálculos (no un byte) mi resolución estará entre -32767,0,32767; eso es para cada incremento, usaré 15 bits y el 16 se usará como signo.

Méndigo servidor......... me sacó del tema de Pantera. :D

PD: Estoy usando esto para armar
http://www.pololu.com/products/tamiya/0061/

aunque ya hay algo mas barato
http://www.pololu.com/products/tamiya/0114/

http://www.pololu.com/products/tamiya/0062/
off-road tires

http://www.pololu.com/products/pololu/0250/
http://www.pololu.com/products/tamiya/0066/

Los tengo desde hace muuuuuuuuuuuuuuuuucho tiempo, espero echarlos andar pronto.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: pantera en 18 de Octubre de 2006, 01:39:45
Oye que tonto soy ya estuve pensando y si pueden darme salidas de control negativas.

Pero mañana ya con osiloscopio checo bien que onda.
Asi que yo hasta la noche me reporto señores

Por el momento ojala tenga mañana suerte en el laboratorio.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 19 de Octubre de 2006, 10:07:29
sigo enredado con la salida:

Hago la pregunta concreta para un control P y luego hago lo mismo para las otras acciones:

Como  P=kp*error

Cuando el error es negativo, P=??? 

Esa es la duda , Mario??, Pantera??

PD:Por supuesto que la salida estará limitada a un maximo y un mínimo , que tomé como min=0% y max=100%.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: pantera en 19 de Octubre de 2006, 11:01:12
Lo que me parece mas congruente es que el signo determina cual actudor debe actuar. Como ya te habia mencionado.

Por cierto ya salgo ahora mismo al laboratorio
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 19 de Octubre de 2006, 12:53:36
Entiendo tu interpretación y me parece razonable también.
El problema es que debo usar (si o sí) un solo  actuador, o sea una sola salida..........como podría solucionarlo en ese caso.

PD:como te fue en el labo???
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 19 de Octubre de 2006, 15:13:55
Hola.

Letal:

Eso que preguntas también me lo preguntaba yo.

¿Qué pasa si mi salida de exitación es negativa? Es decir, P+I+D = un valor negativo.


Pues no pasa nada  :D

Lo único que te indica es que la señal deberá retrasarse o acortarse o decrecer.


Trataré de explicarme:

Tú sabes que si te da negativa tu salida es porque tu retroalimentación fue mayor que tu referencia (error= set point - sensor ¿recuerdas tu código?).

Bajo la anterior premisa, sabes que la salida deberá decrementarse, en este caso siguiendo la linealidad del P.

¿Pero cómo saber si en realidad lo hace?

La pregunta se pudiera solucionar de la siguiente manera:
Yo usaré los 10 bits (1023 incrementos) del PWM para el ciclo de trabajo.
La salida estará limitada a -32767 y 32767 por los 15 bits, el bit 16 será el signo.

Entonces YO se que para cero acción del PWM corresponde -32767, para un 50% corresponde un 0 y para un 100% corresponde un 32767.

Lo anterior es si quiero un 50% constante, si quiero mas, solo cambio las proporciones.

Recuerda que tu solamente sabes qué significa que la salida sea negativa, el µicro no.

Si te pones a pensar en la instrucción HPWM te dan varios parámetros. Uno de ellos es el ciclo de trabajo. Fíjate que va desde 0 = 0%, 127=50% y 255=100%; aquí hacen lo mismo solo que limitan sus valores en 0 y 255, ellos no trabajan con valores negativos.... pero tu, pantera y yo si  :cry:

¿Recuerdas que preguntaste cómo hacerle cuando lo del tema de TREMENS?
Te sugerí limitar la salida de 0 a 100, pues aquí es lo mismo.

Espero te sirva esto.

Creo que ya entendí lo que quería Pantera, le diré que revise esto.

Nos veremos hasta la noche, las 11:13 AM aquí y voy a trabajar.

PD: por cierto, la hora que aparece aquí en el foro es una hora mas de la que en realidad es aquí donde vivo. Marca 12:13 cuando son las 11:13.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: pantera en 20 de Octubre de 2006, 00:07:22
Hola letal le comente a mi profe lo del error negativo, lo que me contesto es que me olvide de como es la señal del error o la señal de control lo que me importa ver es la salida (TEMPERATURA) lo unico que te dira el signo es que actuador debe de entrar (CALEFACTOR o ENFRIADOR). POr lo que te debes de preocupar es en la señal de salida que realmente este aunque sea medio siguiendo. Ese es lo  importante no las señales intermedias. Bueno pienso que si hay que considerarlas pero pase lo que pase lo importante es la salida.

Hola ya vi dodne solucionar lo de la hora en:
Configuración de Apariencia y Diseño
Picale en automatico haber que pasa a mi me corrigio y puso -21 o algo asi

Aqui son las 10:20 en el momento que escribo este mesaje. solo que nose que direncia hay com paises del norte mario? Vivo con la misma hora del DF en queretaro.

Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 20 de Octubre de 2006, 03:17:04
Hice la modificación y me puso 19.

Haber cómo la pone.


En Mexicali son 2 horas menos que en el DF.

Aquí son las 11:17 PM, allá es la 1:17 AM
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 23 de Octubre de 2006, 12:45:21
Hola.

Bueno, esto va algo bien. Aunque no he terminado el acople de la llanta con el opto, me he puesto a ver lo de Proteus y quizá con eso avance más rápido.

Esta semana estaré algo ocupado pero trataré de terminar el acople para hacer mediciones de RPM y calibrar el P.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: pantera en 24 de Octubre de 2006, 00:28:49
Hola Mariol pues yo ando algo igual de lento el motor todavia no lo acabamos de montar lo cual nos ata de manos y pus la discretizacion de la planta ya esta como puedes y pues la neta ya me anda por meterle manos a ese Motor.

Espero ya mañana lo tenga.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: pantera en 25 de Octubre de 2006, 01:46:12
Hola como van algun avance? yo ando algo parado por que no he podido solucionar lo de los MOSFETS ademas he estado teniendo examenes pero ya creo que voy mañana a comprar el MOSFET mas choncho en cuestion de portencia haber que pasa.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 25 de Octubre de 2006, 03:50:35
¿Ya mediste la corriente que consume sin carga y forzado tu motor?

Con ese dato puedes determinar qué mosfet o driver ocupas.

Para saber la corriente, solo coloca en serie el amperímetro y le aplicas voltaje y echas a volar el motor; utiliza el voltaje de operación normal. Mide esa corriente, esa es la que se le conoce como corriente sin carga.

Para la otra, que es la más importante, aplica el voltaje que normalmente aplicarías (ciclo de trabajo incluido) y sujeta el rotor de manera que no gire nada. Tu corriente subirá mucho, aquí ten cuidado que no quemes el motor, hazlo solamente por unos 2 o 3 segundos, solo observa la corriente y anótala. Espera unos minutos para que el motor se enfrie y repite la operación, la corriente debe ser igual o muy parecida.

Esta corriente es la que andas buscando para tu mosfet, la máxima.

Anexo un documento que hice cuando me dieron sistemas lineales 2, no es mucho pero te dice algunas cosas.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 01 de Noviembre de 2006, 17:39:11
Pues con la novedad que se me quemaron los SN754410 que tenía y los A3959SB los tengo prestados.

Primero se medirán los parámetros de corriente necesarios para este motorcito porque quemaron mi SN754410 que te permite 1 Amp continuo.
Quizá estén viejos (2001) y por eso no sirvan.

Ya me ha quedado tiempo para hacer experimentos.

Seguiré informando.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: pantera en 09 de Noviembre de 2006, 01:03:46
Hola LETAL y tu que tal vas veo que ya no has posteado nada?

has terminado ya?
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: pantera en 18 de Noviembre de 2006, 04:39:39
Hola LETAL como vaz con tu sistema.

El de temperatura que armamos ya esta chido pero tengo una pregunta para ti.

La funcion de tranferencia como la sacaste ya que en este caso las condiciones uniciales no son cero. Que fue lo que hiciste para obtener la funcion de tranferencia

El error negativo ya lo analizamos y sera de la siguiente forma. Si la sañal de control uk es negativa lo multiplicamos por menos uno y lo cargamos al otro actuado en forma de PWM.

Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 18 de Noviembre de 2006, 17:04:57
Creo que él mencionó que la había planteado como una ecuación de segundo grado, también le pregunté eso y creo que eso me dijo (lee de nuevo desde el principio).

En la escuela donde trabajo me asignaron alumnos para proyectos, los cuales deben estar listos para el día 30 de Noviembre.......... y me dijeron ayer  :shock:

Como asesoro proyectos el el TEC de Mexicali, quieren conquistar al mundo con PICs; el problema es que los alumnos apenas y saben combinacional, mucho menos secuencial, nada de memorias, converdidores y demás periféricos.

Necesito idear proyectos de menor complejidad sin meter µicros, no deberían utilizarlos porque no tienen las bases.


Estaré distanciado aún de este tema  :(
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: LETAL en 24 de Noviembre de 2006, 12:03:32
Perdón por no reportarme.
No, no he terminado.
Cambié de lenguaje, no me gustaba hecho de hacer operaciones matematicas en forma entera sin signo. Además en el proteus no me simulaba bien, quiza andaba bien, pero al taratar de ver la respuesta en el tiempo se clava el proteus o sale un manchón de gráfica,
 después hice alguno cambios de del program del pic y porbé con entradas de continua al pic y la salida por el puerto paralelo, parecia estar bien(teniendo en cuenta sus calculos enteros), pero salían un os warning que decian algo sobre CALL., Y LO QUE FALLABA PARECíA no ser la salida el pic sin olos periféricos(operacionales,dac) que arrojaban valores ilógicos de salida(teniendo en cuenta la entrada a ese periférico).

Chicos en proyectos, puse lo que quiero hacer con este proyecto. M eparece que mi finalidad no es como la de ustedes, pero sigue siendo un control pid.
Espero que me den una mano para ver si puedo termninar de una ves y publicarlo com pantera.
Los espero por allá.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: pantera en 27 de Noviembre de 2006, 16:39:06
Hola letal

Ya hice un control PID de temperatura y ya entiendo como poder correguir el error negativo en mi caso utilice dos actuadores uno para calentar y otro para enfriar.

Puedes hacer dos cosas si el error es negativo puedes apagar el calentador en mi caso fue un foco. Pero si quieres enfriar mas rapido puedes poner un actuador como enfriador en micaso fue un ventilador.

Por otra parte la funcion de tranferencia me costo mucho trabajo ya que tenia un chipote casi al final. 

Pero pues ya con algo de pasiencia se sintoniza.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: TREMENS en 20 de Febrero de 2007, 10:46:19
Mario dejame ver si entendí:

Cuando el resultado del calculo PID, me dé negativo debo pasarlo a positivo de la siguiente manera(para la solucion de pantera debo tener dos salidas).

128/255 * PIDcalculado+127=SALIDA

Esa salida es de 0-255 porq va a un DAC q entrgará siempre 0-10v

la idea es relacionar asi:

pidcalculado=255-----------salida=255
pidcalculado=0--------------salida=127
pidcalculado=-255------------salida=0

está bien esto porq observen en el adjunto, el grafico de la derecha me muestra q la respuesta esta bien , pero la de la izquierda q consigo aplicando la ecuacion q le mostre arriba (y que solo deberia cambiarme la magnitud) me da una respuesta q no es correcta
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 20 de Febrero de 2007, 13:35:09
Dame oportunidad, lo bajo y te digo si puedo hoy en la noche.

Este tema, así como el de un tacómetro quiero cerrarlo pero no me doy tiempo....... pero ya tendré.

EDICIÓN:
¿Podrías explicar qué quieres hacer con esto?
128/255 * PIDcalculado+127=SALIDA

Ese 127 no me parece idóneo.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: TREMENS en 22 de Febrero de 2007, 16:05:46
Uso esa formula porq con ella puedo btener salida positiva para todo el rango de valores +-100%

pidcalculado=255-----------salida=255
pidcalculado=0--------------salida=127
pidcalculado=-255------------salida=0

O directamente pongo

salida=PID+127   ?????
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: Mario en 23 de Febrero de 2007, 04:55:58
Te diré porque no me agrada el formato de esa operación que tienes:

Bajo la premisa que tengas 0/255 = 0
0*PID=0
0+127=127

127/255=0.498 pero PBP no maneja decimales, por lo tanto 127/255 = 0 y todo el ciclo se repite (salida=127)

255/255 = 1
1*PID= PID
PID+127 =  un mínimo de 127 (50% de ciclo de trabajo siempre).


Recuerda que no puedes mostrar el -255 en un solo byte y esperar que la información sea confiable debido al complemento a dos de lo negativo:
1111 1111
complemento
0000 0000
para número negativo, complemento a dos
 +           1
0000 0001

Dame oportunidad y te propongo una solución para lo que quieres hacer. Antes necesitaré el código o mas información sobre tu prototipo, como ejemplo:
¿Qué lenguaje de programación y en qué programa?
¿Cómo se genera ese PID? (en base a qué dentro del programa)
¿Cuáles son los valores máximos y mínimos a escalar? Te menciono esto porque das a entender que tu límite inferior es -255 y tu mayor es 255.
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: andreaojitos en 24 de Agosto de 2010, 13:55:15
NO PUEDO VER ESTE LINK http://www.parallax.com/html_pages/downloads/siccurriculum/documentation_sic_curriculum.asp#spanish   PORFAVOR LO PUEDEN VOLVER A SUBIR GRACIAS
Título: Re: ¿Cómo hago PID con PBP?
Publicado por: dogflu66 en 26 de Agosto de 2010, 04:04:14
Eso es una dirección ajena al foro, vete a la pagina inicial y comienza la búsqueda:
http://www.parallax.com/

Buscando otra cosa me apareció esta documentación sobre el tema:
http://www.parallax.com/dl/docs/books/edu/ICSpanish.pdf