TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: kruskal en 28 de Enero de 2005, 07:37:00
-
Hace unos dias me tope con este sencillo pero excelente documento http://www.arian.cl/downloads/nt-010.pdf muy explicativo. Me abrio del deseo de aprender mas.
Me gustaria si alguien que pueda enviar informacion o que haya realizado alguna implementacion de control PID con PIC. Tambien seria interesante tener datos de otros tipos de control automatico como el Fuzzy
Salud2
-
Excelente información haz publicado, gracias por ello.
Adicionalmente recomendaría estos dos:
PID controller using Back EMF as the Control Feedback (http://frontrangerobotics.org/PIDbackEMF/DavesBEMFmotorArticle.htm)
Motores DC controlados a cristal/PIC/ o lo que sea... (http://www.psicofxp.com/forums/electronica.149/532241-motores-dc-controlados-cristal-pic-o.html)
Esta última es un poco fastidiosa porque a cada rato se recarga :?
Con estos 3 yo creo que es suficiente como para implementar éste control PID, por mi parte ya realicé un seudocódigo, todavía no lo e implementado, al hacerlo lo publico en éste mismo hilo.
PD: del segundo enlace que publiqué, la parte que considero más relevante es ésta:
3) Con ambas posiciones (Posición Actual y posicion Deseada), ejecutas el siguiente algoritmo PI (sistema de control realimentado P+I o proporcional + integrador, que calcula la tensión que se le debe dar al motor para que la posición actual se haga igual a la deseada
Inicio:
ErrAcum = 0
Bucle:
- Leer PosA de contador del encoder (o del encoder absoluto)
- Leer PosD del contador que procesa las señales de paso y dirección del programa CNC
- Calcular el error total y el error acumulado de posicion
Error = PosD - PosA
ErrAcum = ErrAcum + Error
- Limitar los valores
Si ErrAcum > 255 entonces ErrAcum = 255
Si ErrAcum < -255 entonces ErrAcum = -255
- Calcular la tensión de salida que maneja el motor
Vmotor = CP * Error + CI*ErrAcum
- Limitar los valores de tensión de salida
Si Vmotor > 100 entonces Vmotor = 100
Si Vmotor < -100 entonces Vmotor = -100
Repetir en forma periódica desde "Bucle", periódica significa a 100 veces por
segundo (para un motor DC debiera ser suficiente. La velocidad de repetición del bucle de este algoritmo DEBE ser constante, ya que sino, el motor puede volverse
inestable, ya que variaría la velocidad a que se acumula el error integral.
- El signo de Vmotor da el sentido en el que se debiera mover el motor (en realidad, sentido en el que el puente H manda que se mueva el motor),
y el valor absoluto de Vmotor da el porcentaje de la tension de alim del motor (directamente el ancho de los pulsos periódicos que manejan el puente H en microsegundos). Si Vmotor es 0, el puente H permanecerá apagado
CP es la constante proporcional del algoritmo de realimentacion del motor, y CI la constante integral. Ambos valores deben calibrarse para que el motor converja lo más rápido a la posición deseada y no oscile. El término integral CI sirve para suprimir el juego y la fricción de los mecanismos, ya que si el motor está cerca de la posición deseada, se le da muy poca tensión de alimentación, por lo que el mismo a veces no es capaz de moverse. Al ir acumulando el error a lo largo del tiempo, lentamente se le va incrementado la tensión hasta que el motor finalmente se mueve.
Hay muchísima info sobre la calibración de estos términos "CP" y "CI", pero son casi todas teóricas, y muy poco info práctica. Digamos que a ojímetro y de oido es posible calibrarlos de la siguiente forma para cada motor:
-Empieza con CI = 0, CP=1.
-Haz un programa CNC para que el motor específico se mueva lo más rápido posible a una posición dada desde otra en el mismo eje, y pare.
-Si el motor llega a la posición y se pasa, luego vuelve, se pasa para el otro lado, etc, quiere decir que CP es demasiado grande, y debes achicarlo.
-Si el motor va muy lento a la posición especificada, aunmenta CP.
-Debes encontrar el punto en el que el motor va lo más rápidamente posible a la posición pero no se pasa (o se pasa infimamente). Cuando estés en ese punto es posible que, aunque el motor no se pase, emita un ruido raro. Significa que está oscilado pero sin moverse. En ese caso disminuye CP un poquito.
-Una vez fijado CP, deberás ajustar CI usando el mismo método.. Incrementa CI hasta que el motor oscile en su posicion y luego lo decrementas hasta que no lo haga.
PD2: y del primer enlace, la parte que considero más relevante es:
/* implements PID control */
void PIDfb(void)
{
signed long pwmSet;
static signed long ePrev;
signed long error;
if (runState != R_OFF) // only calculate PWM values if moving or holding
{
error = genPos - currPos; // error is desired-current position
pwmSet = pGain * error + // standard PID equation
iGain * eInteg +
dGain * (error - ePrev); // derivative is current-previous
eInteg += error; // integral is simply a summation over time
ePrev = error; // save previous for derivative
}
else
pwmSet = 0;
SetPWM(pwmSet); // set PWM value to motor
// printf("e%ld cp%ld 1V%ld 2V%ld\n\r", error, currPos, adcV1, adcV2);
}
que corresponde al código en C.
Saludos.
-
A continuación expongo el cuasi seudocódigo que pienso implementar para lograr éste control:
Error=1;
Error_acumulado=0;
Error_anterior=0;
Bucle
Kp=10000/(Pb*SP);
Ki=Kp*I;
Kd=Kp*D;
Error=SP-PV;
Error_acumulado= Error_acumulado + Error;
Out=Kp*Error+Ki*Error_acumulado+Kd*(Error-Error_anterior);
Si (Out>100) Entonces Out=100;
Si (Out<-100) Entonces Out=-100;
Si (Out>0) Entonces sentido_giro_motor=derecha;
else sentido_giro_motor=izquierda;
PWM_duty=abs(Out)
Error_anterior=Error;
Regresar a Bucle;
Bueno básicamente es eso, para los que quieren saber el significado de cada variable, en el artículo que publicó kruskal está bien explicado.
Restaría hacer las pruebas necesarias para determinar los valores de Pb, I, D.
Saludos.
-
Una cita del amigo jesús, muy buena:
La implementación del PID es:
Término proporcional:
1) e_func = v_des - v_act; /* error function */
2) r_mot = Kp*e_func; /* motor output */
Término integrativo:
1 static int r_old=0, e_old=0;
2 ...
3 e_func = v_des - v_act;
4 r_mot = r_old + Kp*(e_func-e_old) + Ki*(e_func+e_old)/2;
5 r_mot = min(r_mot, +100); /* limit output */
6 r_mot = max(r_mot, -100); /* limit output */
7 r_old = r_mot;
8 e_old = e_func;
Término derivativo:
1 static int e_old=0;
2 ...
3 e_func = v_des - v_act; /* error function */
4 deriv = e_old - e_func; /* diff. of error fct. */
5 e_old = e_func; /* store error function */
6 r_mot = Kp*e_func + Kd*deriv; /* motor output */
7 r_mot = min(r_mot, +100); /* limit output */
8 r_mot = max(r_mot, -100); /* limit output */
Todo junto el PID al completo implementado en "C":
static int r_old=0, e_old=0, e_old2=0;
2 ...
3 e_func = v_des - v_act;
4 r_mot = r_old + Kp*(e_func-e_old) + Ki*(e_func+e_old)/2
5 + Kd*(e_func - 2* e_old + e_old2);
6 r_mot = min(r_mot, +100); /* limit output */
7 r_mot = max(r_mot, -100); /* limit output */
8 r_old = r_mot;
9 e_old2 = e_old;
10 e_old = e_func;
Ajuste de los parámetros o sintonización del PID:
1. Select a typical operating setting for the desired speed, turn off integral
and derivative parts, then increase KP to maximum or until oscillation
occurs.
2. If system oscillates, divide KP by 2.
3. Increase KD and observe behavior when increasing/decreasing the
desired speed by about 5%. Choose a value of KD which gives a damped
response.
4. Slowly increase KI until oscillation starts. Then divide KI by 2 or 3.
5. Check whether overall controller performance is satisfactorily under
typical system conditions.
Con esto más la información que has puesto, te tiene que permitir implementar el PID.
Un saludo
-
Hola
Yo implemete un controlador PI de tempertura en un PIC18F452 a un sistema de refrigeracion. Lo fundamental en el control PID es el modelado matematico del sistema y del actuador, ya que de ahi se deducen las variables de sintonizacion y de tiempo de respuesta, obviamente el PID se aplica mas facilmente si el sistema es de primer orden.
El "truco" que yo utilice para ahorrar espacio en la memoria del PIC para embeber el PI (y no utilizar tablas y hacer el muy socorrido PID estatico) fue desarrollarlo con transformada Z con lo cual se llega a una ecuacion en diferencias, esta ecuacion es muy sencilla de resolver y ademas el PI se vuelve dinamico!!!!.
Obviamente el control aca utilizado tiene la ventaja de operar sobre un sistema lento, este factor (el tiempo) es muy importante a la hora de discretizar el controlador.
En el documento esta el ejemplo de la discretizacion del controlador implementado.
Con respecto al fuzzy, hay programas en los cuales uno define los conjuntos difusos y el genera el codigo para embeberlo(FuzzyTech, Matlab..), en el control fuzzy no es necesario el modelo matematico del sistema ya que el control se realiza solo con el conocimiento empirico del proceso (esto implica que hay que conocerlo muy muy muy bien). El control fuzzy es mas rapido y mas adaptable, por eso para sistemas de orden superior y de varias entradas varias salidas es mejor implementar Fuzzy que PID.
-
Yo estoy deseando de implementar un sistema de control por mi mismo. Y claro, en un chisme de microchip!
Nose... no tengo mucha esperiencia en PIDs, pero supongo que ajustando con cierta documentacion y en definitiva experiencia ajena, las 3 constantes del PID, no hara falta mucho conocer las ecuaciones dinamicas del sistema, no? Claro, no podras optar a estabilizar el sistema exactamente como tu quieras, pero empiricamente yo creo que se podrian lograr buenos resultados. Claro, en sistemas de ordenes bajos.
Lo de las ecuaciones en diferencias esta muy bien, pero el problemilla es que hay coma flotante en medio, cosa que chupa muchos recursos. Pero... para sacar la eq en diferencias hace falta la TZ? No basta con discretizar la derivada y la integral en base al periodo de muestreo usado?
un saludo
-
Uno de los metodos para hallar las constantes del controlador es (como esta en el documento adjunto) con la curva de respuesta del sistema en lazo abierto a una funcion pulso, de ahi se toman los valores de t del sistema y se hallan las demas constantes, es el metodo no parametrico, pero ahi se esta suponiendo que el sistema es de primer orden (claro que en la curva de respuesta se debe acercar mucho a una exponencial para hacer esa afirmacion).
Con respecto a la discretizacion de la derivada.....eso es aplicar la transformada z, solo que en algunos documentos le llaman factor 'q' (de cuantizacion). La gran ventaja de hacerlo con transformada z es el hecho de poder elegir el orden del retenedor (normalmente de orden cero), ademas hay sistemas los cuales se estabilizan cuando se discretizan (presion sobre todo). En cuanto a los recursos..... pues, si es en punto flotante y eso consume recursos, pero el PID es un flitro de 2 orden como maximo y eso implica solo 4 constantes en la ecuacion en diferencias.
En esto del control lo importante es el margen de error que debe tener la senal de salida y el sobrepaso maximo limite para no danar el actuador. Algo que no se puede obviar es la funcion de transferencia del actuador, ya que es justamente este elemento el que actua sobre el sistema y va ha hacer que este trabajando dentro de un rango determinado del 'set point' elegido.
No esta de mas conocer la dinamica del sistema, ya que de esta manera queda mucho mas sencillo el decidir si se agregan ceros o polos para estabilizarlo y ademas se determina que tan influyente es la variable de control sobre el sistema a controlar. Ocurre a veces que por controlar una variable obviamos la de mayor peso y el sistema nunca va ha ser estable (me ocurrio!!!!!) y uno se puede 'matar' sacando curvas de respuesta y nada!!!! es desesperante....
un saludo :)
-
Hola! Renatox_, eso si es muy importante para tener en cuenta, yo ya me lo estaba imaginando lo de la componente integral, si la distancia es muy grande esta se pasará del SP y luego tiene que regresarse muy pero muy lento, hasta que el error acumulado sea 0.
Será por eso que en uno de los enlaces que publiqué anteriormente el autor limita el error acumulado, para que no llegue a ser tan alto? no entendía porque lo hacía.
...
Inicio:
ErrAcum = 0
Bucle:
- Leer PosA de contador del encoder (o del encoder absoluto)
- Leer PosD del contador que procesa las señales de paso y dirección del programa CNC
- Calcular el error total y el error acumulado de posicion
Error = PosD - PosA
ErrAcum = ErrAcum + Error
- Limitar los valores
Si ErrAcum > 255 entonces ErrAcum = 255
Si ErrAcum < -255 entonces ErrAcum = -255
- Calcular la tensión de salida que maneja el motor
Vmotor = CP * Error + CI*ErrAcum
- Limitar los valores de tensión de salida
Si Vmotor > 100 entonces Vmotor = 100
Si Vmotor < -100 entonces Vmotor = -100
Repetir en forma periódica desde "Bucle", periódica significa a 100 veces por
segundo (para un motor DC debiera ser suficiente. La velocidad de repetición del bucle de este algoritmo DEBE ser constante, ya que sino, el motor puede volverse
inestable, ya que variaría la velocidad a que se acumula el error integral.
...
Entonces siguiendo la recomendación del autor, con implementar un PI sería suficiente, ahora bien que valor límite del error acumulado será conveniente? un 5% del recorrido total? ó también tengo que hacer pruebas modificando el valor del tope para el error acumulado y quedarme con el que haga que llegue a la posición deseada más rápido? de forma estable claro.
Saludos.
-
La respuesta anterior corresponde a éste comentario del compañero Renatox.
Hola guillermo, ten cuidado implementar un PID de posición es diferente a uno de velocidad ya que tus puntos de inicio y fin pueden estar muy cerca como también muy lejos, si la calibración de tu PID te da 1seg, entonces en teoría demoraría 1seg en ir de 0mm a 1mm y de 0mm a 100mm, en el segundo caso puede que se sature mucho la componente integral por el area del error, y tu motorcito salte mucho incluso que no llegue a su posición final por error matemático en los cálculos, por eso es mejor que actives el PID a cierta distancia del punto final.
saludos.
-
Otra información importante:
VARIANTE EN EL ALGORITMO PID (http://www.secyt.frba.utn.edu.ar/gia/SDC12.pdf)
-
Gracias por el dato guillo :-), espero algún día poder ayudarte en algo
-
Bueno no sé si mostrar éste vídeo aquí o en otro lado, pero aquí fué donde nació la acción de control que finalmente utilicé para controlar las articulaciones de los robots Cilíndrico y SCARA con los que trabajé y les dí vida para que realizacen tareas repetitivas.
Este es un vídeo del funcionamiento del robot SCARA haciendo una tarea de marcar 5 puntos dibujados en un papel, la precisión obtenida fué sorprendente.
Aqui una foto del mismo:
(http://img114.imageshack.us/img114/3761/p5070226gw9.jpg)
estoy subiendo a youtube el del cilindrico, al terminar lo adjunto también, mientras dos imagenes:
(http://img102.imageshack.us/img102/2892/p5070225by4.jpg)
(http://img244.imageshack.us/img244/2876/p5070227jr0.jpg)
Si se fijan en las gradillas podrán observar que el error tenía que ser cero para poder agarrar los tubos de ensayo y volverlos a colocar en su sitio, teniendo presente que el motor de la base tiene un juego esa precisión entra en un milagro :mrgreen: el truco está en mover poco a poco la articulación para que no oscile, además que le agregué una acción integral, bueno todo esto lo explicaré en detalle más adelante, al jurado les gustó mucho la acción de control que utilicé y me dijeron para hacer un paper, la semana que viene lo empiezo a redactar, y también quiero sacar una explicación menos formal y bastante práctica para acá, para el foro, al tenerlo lo publico, mientras a descansar un poco 8)
Vídeo:
Saludos.
-
Usaste un P-PI para controlar la trayectoria? (dos lazos en cascada)
-
Hola! Manex, nop, use un perfil de velocidad de forma trapezoidal en conjunto con una acción integral, no tiene nada que ver con PID, ni combinacion P-PI en cascada, se podría decir que es tiene un perfil de forma trapezoidal en cascada con un I, luego más adelante explico en detalle, esta semana me siento hacerlo, mientras voy a recuperar el sueño 8)
Saludos.
-
Mmm dejame que intuya, eso de perfil de velocidad me suena a una accion proporcional no lineal... me equivoco? Seguro que si ajajajaj
-
Hola! Manex, lo del perfil de velocidad es algo así como esto:
(http://img522.imageshack.us/img522/9352/trayectoriatrapezoidalwr4.png)
Donde estableces (mediante pruebas realizadas) una velocidad mínima y máxima de desplazamiento, entonces eliges la pendiente de la curva que mejor te parezca (mediante pruebas también) y ya tienes tu perfil de velocidad de forma trapezoidal, si me esperas un poco escribo en detalle todo lo relacionado a esto.
Saludos.
-
Hola gu1llermo, he estado viendo tu trabajo sobre el brazo robot que realizaste en 2008 y me parece excelente!, felicidades por tu trabajo, se que ha pasado algo de tiempo, pero en este momento me encuentro realizando un brazo para mi carrera de control y automatización, y me gustaría mucho implementarle una acción de control PI, ya que alguna vez hice unos drivers para una CNC y quede maravillado con el control que tienen los motores a pasos a traces del software, y justamente es lo que quiero aplicar: un perfíl de velocidad en forma trapezoidal para poder ajustar las 3 variables, posición, velocidad y aceleración, pero estoy algo atorado al respecto, no se como relacionar los tiempo entre cada paso del motor con las ecuaciones para poder crear mi algoritmo de control, tienes algún documento que me pudieras pasar por favor para darme una idea?. Muchas gracias por tu tiempo y espero que leas este mensaje.
-
Se me olvidaba, por acá describo un poco mejor mi problema:
http://www.todopic.com.ar/foros/index.php?topic=34627.msg289250#msg289250
-
alguien sabe como programar un PID para controlar temperaturas?
-
Mas o menos está explicado arriba, salva que aquí la referencia es la temperatura a alcanzar, el error será la temperatura leída menos la referencia a alcanzar, y aplicas las ecuaciones que hay arriba, tendrás que calcular los tres parámetros del PID, pero las ecuaciones son las mismas, o por lo menos esas te pueden servir.
-
Hola como estan ! tengo una duda con esto de los PID y es que no entiendo que tenemos a la salida de un PID. Lo que entendi es que es una señal de control pero esa señal que unidades tiene y entre que valores varia ? por tomar un ejemplo en un control de temperatura tenemos un set point en grados luego la realimentacion tambien estaria en grados y el error tambien en grados, despues vendria el PID y ahi ya me pierdo !! :mrgreen: alguien me puede ayudar a entender un poco esto? :oops:
-
La automática (que no automatización) es un campo muy muy difícil, hay profesionales que se dedican solo a ajustar pid por las industrias. Antes de ponerte a intentar siquiera manejar o crear un pid deberías leer bastante sobre el tema además, existen de dos clases analógicos y digitales, y si el pid lo quieres hacer en el mundo de la electrónica (ya que tambien existen mecanicos, neumaticos etc.) no existen la salida en grados, debes trabajar con números (de un adC por ejemplo que mida la temperatura)
Rara vez, se necesita en una aplicación un pid, quizás te baste con un pi( proporcional-integrativo) , con el termino derivatico debes tener cuidado, ya que es el que le da velocidad al sistema para alcanzar el objetivo y se puede volver inestable, la mayoría de las veces con un proporcional ( una constante que multiplica el valor de realimentacion para ajusta el valor de salida), y un integrativo ( que suma los pequeños errores de salida y elimina el error en régimen permanente)
Si vas a controlar temperatura, que es un sistema lento, necesitas un PI no te hace falta un PID.
Normalmente para hacer un pid ( de manera muy resumida), por ejemplo para un calentador con una resistencia, mides la temperatura en adC, mides el error, y aplicatas la teoría de PID y esto lo aplicas al circuito que controla la resistencia para ajustar la temperatura.
Un saludo.
-
gracias por la respuesta juaperser ! pero justo lo que no entiendo y donde se me complica entenderlo es lo que escribiste asi:
"esto lo aplicas al circuito que controla la resistencia para ajustar la temperatura" a que te refieres con ESTO ? que es lo que entrega el PID para poder controlar un sistema ? eso es lo que me esta taladrando la cabeza jaja y la teoria que encuentro siempre habla de lo mismo las formulas etc pero no me aclara nada sobre esa duda que tengo :mrgreen:
-
Pues depende del sistema que estés controlando, a ver si con ejemplos lo puedes entender mejor, son solo ejemplos no te los tomes al pie de la letra.
Imagina que estas controlando la velocidad de un motor de corriente continua, y la velocidad en un motor de esta clase es mientras mas tensión mas velocidad y mientras menos tensión menos velocidad.
Imagina que quieres lograr 100rpm, y estas midiendo con un encoder que tu motor va a 110rpm, el encoder transforma en variable numerica este dato y en tu sistema ves que la salida es mayor que la esperada por lo tanto tu sistema actúa mediante el hardware, con PWM por ejemplo, ( o un dac si así lo entiendes mejor) y baja la tensión para que el motor baje de rpm.
Si el motor va a 80 rpm pues tu sistema debe subir la tensión para que el motor vaya mas rápido.
Si quieres controlar el par motor, pues en vez de controlar la tensión deberás controlar la intensidad que es como se controla el par en un motor dc.
En el caso de la resistencia para el calor si estas controlando la potencia i2*r pues tu sistema deberá bajar o subir la intensidad para lograr mas o menos vatios y así dar mas o menos calor.
Imagina una tubería con una servovalvula, pues tu sistema deberá abrir o cerrar las servovalvula dependiendo del caudal que quieras, aquí mides caudal a la salida y controlas sección de tuberia que abre o cierra.
Cada ejemplo, es diferente.
Lo comprendes así mejor? No se si me explicado bien :D :D
Un saludo.
PD: son ejemplos muy simplificados y para que se entiendan hay muchos mas factores a tener en cuenta
-
bueno muchas gracias por la respuesta! ahora me generaste 2 dudas nuevas ! :mrgreen:
1) el par de un motor es lo mismo que el torque ? el torque es un concepto que leí pero nunca supe bien que era y menos como variar el torque de un motor manteniendo el numero de las RPM constantes !! para mi si variamos las RPM varia el torque pero seguramente estoy equivocada porque he visto aparatos donde se puede variar el torque y las RPM manteniendo el otro valor contante , pero nunca supe como lo hacen
2) a la salida del PID tenemos la señal u(t) que es la señal de control, ahora en el mismo caso de la temperatura, si el reciento esta lo mas frio posible la señal u(t) es lo mas grande posible o lo mas chica posible ? y en el caso de que se llega a la temperatura del set point la señal u(t) del PID es cero ? en definitiva mi duda es como varia la señal u(t) segun la temperatura que tengamos ?
gracias de nuevo !
Laura Z.
-
si, el torque es el par motor, tengo entendido que en latino américa se le llama torque y aquí en España también lo llamamos par.
un ejemplo sin cuentas ni nada: imagina un motor alimentado a 12 voltios constantes consumiendo 1A, ira a una velocidad X=10RPM moviendo una carga, imagina que la carga aumenta, pues tu PID debera responder ante ese cambio inyectando mas intensidad, (por que no quieres que cambie la velocidad) entonces tu motor pasara a seguir alimentado a 12 voltios (misma velocidad) pero la intensidad aumentara a 2A (por decir algo) por aumentar la carga y necesitar mas fuerza(torque)
2º ejemplo, tenemos el mismo motor con 12 voltios y 1A a 10RPM y queremos aumentar la velocidad, pues tu PID deberá aumentar la tensión a 24 voltios (por decir algo) y mantener 1 Amperio constante, asi ira a mas velocidad con la misma fuerza (torque)
tu segunda cuestión, quieres calentar una habitación a 50 grados y resulta que la habitación esta a 10 grados, pues tu PID dará como dices la señal U(t) lo mas grande posible, para llegar rapidamenté a los 50 grados, pero cuando llegue a 50 grados, la señal u(t) no sera 0, por la inercia térmica, es decir se pondrá a 53 grados (por decir algo), hara una curva como se ve aqui:
(http://www.monografias.com/trabajos85/control-pid-circuito-rc/image011.jpg)
y ahora la señal U(t) sera negativa, y así oscilara hasta llegar al regimén permanente, las oscilaciones rapidas dependerán del termino derivativo (no es exactamente así pero es muy resumido para que lo entiendas)
(http://www.ib.cnea.gov.ar/~instyctl/Tutorial_Matlab_esp/invPID4n.GIF)
por eso hay que tener cuidado con el termino derivativo por que las oscilaciones se pueden prolongar y el sistema nunca se estabilizara, cuando se acaben las oscilaciones , con el termino proporcional en regimen permanete nunca llegas a tu set point, siempre hay un error en regimén permanente por ejemplo si quieres 50 grados tu sistema se estabilizara a 49 por ejemplo,
esto se arregla mediante el termino integrativo, que suma las pequeñas diferencias hasta llegar al set point.
(http://pybonacci.org/wp-content/uploads/2013/11/kp200ki50.png)
aqui (sin termino derivativo) en el eje x=30 se ve como entra en acción el termino integrativo para corregir el error.
esto es muy resumido, asignaturas enteras, e incluso carreras enteras que se dedican a la automática. el libro de automatica "ingenieria de control moderna" de el japones Ogata es muy bueno por si quieres profundizar en el tema
un saludo
-
te pasaste con la explicacion !! gracias juaperser ! ((:-))
-
https://sites.google.com/site/picuino/pid_controller
-
Aquí un simulador para que practiques afinando un PID:
https://sites.google.com/site/picuino/pid_controller/Thermal_control.zip?attredirects=0
-
muy interesante gracias ! :mrgreen:
-
te pasaste con la explicacion !! gracias juaperser ! ((:-))
entonces en un control pid para un motor dc de 12 V , en que me influye el parametro Kp , Ki y Kd ??