Control PID con microcontroladores PIC

Antes de realizar un algoritmo de autotuning (que en la practica es casi nunk usado), no seria mejor que se le de la opcion al usuario de cambiar a su libertado los parametros Proporcional, integral y derivativo?
 
Que tal. Saludos a todos. Frank Frankus Me parece que mas que casi nunca usado, solo es poco común. Ahora bien, el PID con autotunning tendría más trabajo, pero sería más util por su generalidad de uso, o al menos así lo concibo. Cambiar los parámetros es buena opción, puede añadirsele un lcd y un teclado.

Pensando en términos de tiempo de procesado del uC puede ser lento, puesto que el cálculo que el control PID lleva por si solo ya es algo tardado.

Me parece más fácil, utilizar el PIC para capturar la señal análoga --> transmitirla a la PC,
y que la propia PC haga todo el show :cool: O bien, comprar un poderoso DSP.
Si me equivoco por fa, diganme

narcisolara_21 también manejo el Mach3, y siempre me intrigado la idea de utilizar los motores DC para este trabajo, te parece si comparamos trabajos?

Saludos
 
Última edición por un moderador:
uan consulta crypti cual es el periodo minimo para aplicarle le Pwm al motor Dc ..................y hasta cuanto increnetar el valor del ancho de pulso y por que?....................................
mas adelante estare subiendo algunos archivos para compartir......................
 
buena pregunta,supongo que de muchas cosas como la potencia del motor solo imagina si el pulso es muy corto el motor ni se entera que le llego tension a las bobinas, pero si es corto y muy rapido es otra cosa. con respecto al incremento depende tambien de muchas cosas por ejemplo si trabajas con un motor de 6V y con un maximo de 50% de periodo la alimentacion debe de ser de almenos 12V ya que cuando tengas el periodo maximo la tension en los bornes sera de la mitad de valor del de la fuente; pero no solo por eso se eleva la alimentacion tambien es para que en tu periodo minimo (minima velocidad) el motor tenga la tension necesaria para vencer su inercia. supongo existan otros factores mas los ire pensando. creo que tengo algo por ahi de eso o sera que lo lei en alguna web?
bye
 
cripty dijo:
el problema es que no concibo una forma de poner in PID en el micro, como introduzco las ecuaciones diferenciales y derivativas en el micro?

Es que no podés usar las ecuaciones diferenciales por que el control lo ejercés en tiempo discreto, así que tenés que usar las ecuaciones en diferencias que son las que resultan de aplicar la Transformada Z, por ejemplo:

Para el control proporcional:
up[k] = Kp * e[k] con up=accion proporcional, e = error, Kp= ganancia proporcional y k= instante de muestreo actual

Para el derivativo:
ud[k] = Kd * (e[k] - e[k-1]), donde es claro que e[k] - e[k-1] es la derivada del error sobre un período de muestreo.

La parte integral es mas lío, por que es una sumatoria en el tiempo y hay que aplicarle el anti-windup si querés que se recupere rápido de las saturaciones.

En fin...hay que estudiar un poco más...

Saludos!
 
gracias ezavalla, si oi algo de eso a un colega de otra facu pero no tuve tiempo para investigar, donde encontraria mas información o si me recomiendas un libro seria genial, yo tengo el de OGATA pero no vi nada de la transf Z o quisa se me paso lo revisare de nuevo, gracias por tu aporte me aclaraste muchas cosas y a seguir estudiando
 
Aunque no es el tema....

Yo encontré una nota de aplicación para PSOC que incluye el desarrollo de un PID aplicado al control de temperatura.

http://www.psocdeveloper.com/docs/appnotes/an-mode/detail/an-pointer/an2208.html

"This Application Note describes implementation of a digital temperature PID controller. Various temperature control system configurations and aspects of their practical implementation are analyzed. Two types of temperature sensors are applied: thermocouple and platinum RTD sensor. The PSoCTM device supports two heat power control methods: phase and numeral impulse. The wide variety of system configurations allows use of thermoregulators in different industrial, commercial, and residential systems, where temperature control is needed. "

La nota de aplicación tiene diagramas de los filtros, el diagrama de flujo, información relativa al control PID.... en fin es un trabajo bien completo.

Anexa hay una aplicación hecha en Visual (creo) para conexión por Rs232 que permite modificar las ganancias PID del control así como los límites y muestra la respuesta del sistema.

Tengo una duda...
Revisando el esquema parece que se realiza de modo digital, pero el PSOC incluye o permite configurar Amplificadores Operacionales, alguién conoce como se configuran los Operacionales en Psoc Designer para que sean proporiconal, integral y derivativo?


Mil gracias.
 
En el libro programacion ccs y simulacion en proteus hay un ejemplo del pid, con la simulacion y funciona muy bien, yo le hice algunos cambios y lo uso actulamente como control en una estacion de soldadura casera, lo unico que no tiene es la frma de cambiar los parametros del pid, perp eso lo lograrias adicionandole un menu al programa
 
hola me gustaria ver tu trabajo, yo realice un pi digital con un Dspic 30f4011 y lo aplique en la industria en 4 rectificadores chopper de 300A cada uno, diseñe la tarjeta electronica y el software para una empresa en chile, lo que estoy tratando de hacer es poder tener un programa en matlab para calcular los parametros de los controladores PI conociendo la planta o mejor aun con un auto ajuste, me gustaria si me puedes enviar tu trabajo para mirarlo y tener una idea, yo tengo un paper donde obtuve como hacer un pi digital a traves de la transformada Z e implementarlo en microntroladores, si alguien lo necesita solo me lo pide, es mas estoy trabajando mi tesis sobre este tema

saludos a todos

bueno amigos aqui les dejo el PDf de como poder hacerlo, busacare el programa que realice para subirlo y tengan la idea mas clara de como poder aplicarlo, eso si yo lo realice con DSpic 30f4011 de microchip por que son mas rapido y tiene capacidad de multiplicación y conversores ADC rapidos, implemente un pwm que hice pruebas de 1khz hasta 5 khz y funcino bien
 

Adjuntos

  • pid_digital.pdf
    161.9 KB · Visitas: 1,526
Última edición:
les dejo el archivo del libro que mencione, perdon por la demora pero estoy con mucho trabajo y con la universidad no me queda mucho tiempo
 

Adjuntos

  • T9_E1.rar
    85.8 KB · Visitas: 993
  • Contro PID.rar
    169.9 KB · Visitas: 1,196
Hola:
Monté el esquema del PID, el programa es el mismo que el que se describe en este libro página 239 en adelante.
http://www.academia.edu/5204337/Dise%C3%B1o_y_simulaci%C3%B3n_de_sistemas_microcontrolados_en_lenguaje_C_Programaci%C3%B3n_con_MikroC_PRO_Simulaci%C3%B3n_en_Proteus_ISIS
El esquema también, el PIC también, para la realimentación del sensor le puse el LM35 colado a un foco (bombillo eléctrico incandescente) alimentado con 24V mediante un transistor de potencia, a la base recibe PWM.
El problema es el siguiente:
Cuando energizo el circuito y pongo el setpoint moviendo el potenciómetro, a 39 grados (390mV), el controlador empieza a funcionar pero entra en oscilación y las oscilaciones no se amortiguan empieza a calentar hasta 44 grados y enfría hasta 26 grados, la causa es que no está sintonizado. El libro describe un procedimiento y un llenado de una tabla que no está claro, por favor alguien tiene experiencia en esto?
¿Cómo sintonizar el PID?
 
Última edición:
Por que no usas el buscador???
Esto ya lo explique antes, pero tenes que poner las acciones integrales y derivativas en cero (espero que uses el PID en paralelo). Le das con la ganancia proporcional hasta conseguir el minimo error de estado estacionario (excita con un escalon de amplitud conocida) sin sobre-elongacion de la rsta temporal. Si con eso no cumplis las condiciones de diseño, tendras que seguir aumentando la proporcional y comenzar a darle accion derivativa para minimizar el sobreimpulso. Si con ese jueguito no metes el error de estado estacionario en la banda que te piden, tendras recien ahora que darle ganancia integral de a poquito, y podes volver a usar la derivativa para atajarlo un poco si intenta oscilar.
 
(espero que uses el PID en paralelo
¿Cómo saber si es en paralelo o en serie cuando va en software?

Aquí el código:
Código:
//Declaración de constantes y variables.
const float Kp=1.08, Ki=52.42718447, Kd=0.005562, Fs = 152.5878906;
//Declaración de coeficientes de integración y derivación.
const float Fi=ki/(2.0*Fs), Fd=2.0*Fs*Kd;
float SENSOR, PUNTO_DE_CONTROL=127.0, YN=0.0;
int ADQUI;
unsigned short SALIDA;
float e0=0.0, e1=0.0, yi0=0.0, yi1=0.0, yd0=0.0, yd1=0.0, ypid=0.0;
//Función de interrupciones para el Timer 0.
void interrupt()
{
if( INTCON.F2 )// 6,5536ms :: 152,5878906 Hz
{
//Adquisición de la variable controlada.
SENSOR = (float)((ADC_Read(1)>>2)&0xFF);
//Adquisición del punto de control.
PUNTO_DE_CONTROL = (float)((ADC_Read(0)>>2)&0xFF);
//Calculo del nivel de error.
e0 = PUNTO_DE_CONTROL - SENSOR;
//Ecuación en diferencias.
//Ecuación integral.
yi0=Fi*(e0+e1)+yi1;
//Ecuación derivativa.
yd0=Fd*(e0-e1)-yd1;
//Resultado PID.
ypid=Kp*e0+yi0+yd0;
//Ajuste y corrección de la SALIDA Y(n)
//delimitada por los límites 0 y 255.
YN += ypid;
if(YN>255.0)YN=255.0;
if(YN<0.0)YN=0.0;
SALIDA = (unsigned short)(YN);
PWM1_Set_Duty(SALIDA);
//Actualización de muestras.
e1=e0;
yi1=yi0;
yd1=yd0;
INTCON.F2=0;
}
}
void main( void )
{
//Configuración del modulo PWM.
PWM1_Init(10000);
PWM1_Start();
//Configuración de la interrupción de Timer 0.
//a 6,5536ms
OPTION_REG = 0b00000110;
INTCON = 0b10100000;
while( 1 ) //Bucle infinito.
{
}
}
 
Última edición por un moderador:
Atrás
Arriba