Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

13/06/2011 #1

Avatar de rednaxela

PSoC® 1 . Diseño de un PID digital con ayuda de MATLAB
Para este semestre me dejaron en la universidad realizar un PID digital utilizando los toolbox “ident” y “sisotool” de MatLab, en este caso se va realizar el control sobre una planta que simula ser un horno: es una caja de 15cm*15cm*15cm forrada interiormente con icopor el actuador es un bombillo de carro de 12[V] @ 22[W]y se utiliza el sensor de temperatura LM35.

El circuito del actuador está diseñado para que trabaje en la zona lineal, lo que significa que hay perdidas de energía en forma de disipación lo mejor sería que trabajara con un PWM para tal caso. El motivo en primera instancia de que se haya realizado de esa forma (zona lineal), es para demostrar que se debe utilizar un filtro pasa bajo después del DAC, ya que si se utiliza el PWM no habrá que hacer tal filtro para recuperar la señal muestreada y de por sí es más eficiente, pero donde manda profesor no manda estudiante .



Fig1. Plano actuador- unidad de procesamiento – sensor


El plano de fig1, es bastante sencillo, tiene:


  • Una entrada que es el SetPoint (0V -5V).
  • Otra entrada que es el sensor de temperatura (actualmente deje la amplificación del sensor de temperatura para cuando la temperatura este en 70ºC la salida este en 5[V], bueno eso cada persona lo pueden dejar a su gusto, claro no ir a pasar las características del sensor LM35).
  • Una salida que es la señal de control, mirar que el filtro está en el internamente en el PSoC lo mismo que el DAC. Por lo que el montaje en físico se reduce bastante.
*Ahora si vamos con lo del PID, estos serían los pasos a seguir:

  • Respuesta de la planta en lazo abierto ante una señal paso (escalón).
El tiempo con el que se toman los datos es crucial para definir el tiempo de muestreo del controlador, en esta práctica lo tome cada 1s , lógico con ayuda de un osciloscopio en mi caso, la respuesta ante una seña paso de 1[V] fue :


Fig2. Respuesta en lazo abierto

El osciloscopio me da la opción de generar un archivo en Excel con los datos de la figura que me ha mostrado, y lo escogí cada segundo.
  • Uso del Toolbox “ident” para identificar la planta (función de transferencia en el dominio de S)
Importando los datos ( los de excel ) en el dominio del tiempo, y haciendo la identificación con el método "Process Models", devuelve el modelos aproximado a esos puntos :


Fig3. Aproximación de la planta

  • Discretización de la planta, dominio S al Z (hay que tener en cuenta que al discretizar la planta solo se puede hacer por invarianza al paso ya que internamente trae incluido el retenedor de orden cero), el prototipo de la función de matalb que se utiliza es “c2d(función_s, tiempo_muestreo)” para realizar dicha discretización, se escoje tiempo de muestreo cada 2s porque el tiempo del controlador debe ser mayor y múltiplo del tiempo con el que se muestreo la planta, acordar que la planta se muestro cada 1s.

Fig4. Discretización de la planta

  • Dibujar lugar de las raíces en plano Z, con el toolbox “sistotool”, con la función de transferencia del paso anterior
  • Agregar restricciones de diseño al plano Z( tiempo de estabilización y máximo sobre_impulso o Settling time y Percent overshoot )
Escogí un tiempo de 220s y un maxímo sobreimpulso del 5%.
  • Agregar controlador PID: agregar dos polos y dos ceros, este controlador lo saque del siguiente libro : F. Luis Pagola, “Control digital”, Universidad Pontificada Comillas, 2002, Cap 5.

Fig5. Lugar de las Raices plano Z

  • Ajustar polos del controlador al diseño para así exportar la función de transferencia del controlador en Z.
Acordar que tiene que cruzar los puntos de diseño para que cumpla con los requerimientos, esa localización de los polos y ceros queda así (una imagen con zoom) :

Fig6. Lugar de polos y ceros Zoom

Dejar un polo en 1 para el efecto integral ... el siguiente cuadro muestra la localización de los polos y ceros.


Fig7. Lugar de polos y ceros

Luego exportar el diseño File-Export ... y se exporta el compensador al "Workspace"


  • Simular el controlador y la planta en simulink para verificar funcionamiento agregándole restricciones físicas como es el voltaje de alimentación del actuador que no es infinito.
Antes de simular en simulink es posible ver una respuesta en el sisotool ante una señal paso y ver cuanta energía se necesita, luego podemos pasar al simulink, agregando el controlador, la planta y las restricciones principalmente son el voltaje de salida del actuador y el voltaje de salida del sensor 12[V] y 5[V] respectivamente.


Fig8. Diagrama de bloques


La respuesta del sistema es:

Fig8. Respuesta del sistema con controlador PID ante una señal paso

Se observa que se estabiliza en un tiempo cercano al que se diseño, y el sobreimpulso también es aceptable, si se necesita mayor exactitud, se tendrá que modificar los polos y ceros del lugar de las raices. En mi caso lo deje así, el resultado que muestra la simulación es aceptable para mis requerimientos.
  • Hallar la ecuación en diferencias del controlador para implementarla en el microprocesador ( PSoC).

Fig9. Función PID discreta

Despejando la ecuación en diferencias :

u[n]=-0.802u[n-2] + 1.802u[n-1] + 3.827e[n-2] – 7.966e[n-1] + 4.145e[n]

Código PHP:
...
float M1,M2,M3,M4,M5,M6;
int VsensorVref;
...
void main(void){      
    
M1=M2=M3=M4=M5,M6=0;             // valores iniciales
    
Vsensor Vref 0;
    
inicializa_modulos_del_psoc();
           
    while(
1){  
        
        while(
ADC8_1_fIsDataAvailable() == 0); //verificar si el dato está disponible
        
Vsensor ADC8_1_iGetData1();   
        
Vref ADC8_1_iGetData2ClearFlag();   
        
M6 Vref-Vsensor;                            // Calculo del Error
        
M1 = -0.802*M2 1.802*M3 2.784*M4 5.987*M5 3.219*M6;        // Ecuación en diferencias PI
        
if (M1>255M1=254.0;                       // Evitar desbordamiento 
        
else if (M1<0M1=0.0;
        
DAC8_1_WriteStall((int)M1);                // Escribir en el DAC
        
M2 M3;
        
M3 M1;        
        
M4 M5;
        
M5 M6;
    }  

Lastimosamente no tengo fotos de la respuesta en la vida real, pero el controlador funciono muy bien, comparando con simulink la respuesta casi fue la misma antes funciono mejor porque se estabilizaba unos 10 segundos antes y el sobre impulso fue muy cercano al 5%.

Bueno acá finaliza el diseño del PID, que se puede realizar en cualquier tipo de microprocesador, solo la última parte que fue de código es para PSoC aunque claro faltaría como configurar los módulos pero ese no es el fin de comentario.

Cabe aclarar que el periodo de muestreo del ADC es de 2s como se había diseñado.

Eso es todo

Saludes.
13/06/2011 #2

Avatar de betodj

Excelente trabajo seguramente será de ayuda para los colegas del foro...

Un saludo..
14/06/2011 #3

Avatar de rednaxela

Si espero que sirva, pero me falto algo importante se me paso en alto, acá está el proyecto adjunto, la versión que utilice es la "PSoC Designer 5.1", alguna vista de los módulos análogos, ADC_DUAL, DAC, Filtro pasabajo:

Archivos Adjuntos
Tipo de Archivo: zip PID_MATLAB.zip (662,5 KB (Kilobytes), 165 visitas)
14/11/2011 #4


Es muy bueno tu trabajo solo tengo una duda, como configuraste el periodo de muestreo en el PSoC?
29/10/2012 #5


Buen aporte y explicación, pero ¿aquí te equivocaste?

u[n]=-0.802u[n-2] + 1.802u[n-1] + 3.827e[n-2] – 7.966e[n-1] + 4.145e[n]

Porque en el código escribiste, que según yo esta bien:

M1 = -0.802*M2 + 1.802*M3 + 2.784*M4 - 5.987*M5 + 3.219*M6; // Ecuación en diferencias PI

Y en esta parte:

M1=M2=M3=M4=M5,M6=0; // valores iniciales

No es:

M1=M2=M3=M4=M5=M6=0; // valores iniciales

Estoy tratando de hacer algo similar...
31/10/2014 #6


Hola

Me podrías dar una explicación sobre el proceso de identificar la respuesta al escalón y encontrar la función de transferencia mediante tool box ident de MATLAB.

Gracias.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.