“Desarrollando algoritmos de control PID” (Parte 2)

Standard

Que tal amigos lectores. Me da gusto poder redactar nuevamente.
Tal y como lo prometí en la primera entrega de este blog, esta vez les explicaré como desarrollar un algoritmo de control PID en plataformas digitales. El ejemplo que les expondré será para su desarrollo en Arduino. ¿Por qué Arduino?. Pues simplemente porque es una plataforma Open Source muy popular en estos días, pero bueno comencemos.
Un diagrama de bloques sencillo que ejemplifica un sistema de control digital como el que se muestra a continuación:

1.

Realmente el controlador digital es la parte que se encuentra encerrada con rojo. Los demás elementos corresponden a un sistema de control de control en lazo cerrado común. La gran ventaja que tenemos al utilizar un sistema de control digital frente a un sistema de control analógico, es la flexibilidad que tenemos para poder realizar modificaciones en nuestro controlador. Ya que involucra el desarrollo de software embebido. Algo que sin duda genera gran dinamismo en nuestro sistema y sin duda genera una gran comodidad para el desarrollador. En cambio, un sistema de control analógico solo involucra hardware. Por lo tanto realizar cualquier tipo de modificación se vuelve una tarea más complicada.
Como se mostró en el diagrama anterior el primer elemento de nuestro sistema corresponde al bloque “Sample and Hold” y el “Analog-Digital converter”. Para definir en nuestro código la parte de muestro y retención se realiza lo siguiente:

2

Lo relevante de lo mostrado anteriormente y que nos permite realizar esta labor de forma sencilla es la función millis() de Arduino. Esta instrucción, lo que realiza es entregar el número de milisegundos desde que la placa de Arduino se encuentre ejecutando el programa actual. Si deseas conocer más acerca de esta instrucción te invito a investigar un poco.

La lógica del programa anterior consiste en lo siguiente. Supongamos que la variable “now” adquiere un valor de 10ms la primera vez que se lee nuestro código. Inmediatamente después se ejecuta nuestra siguiente línea de código. En la cual se realiza la comparación entre “now” y “past”. Como estamos suponiendo que es la primera vez que nuestro microcontrolador ejecuta nuestro programa la variable “past” tiene un valor de 0, entonces “now(5)” – “past(0)”=0 y el valor resultante se almacena en la variable TimeFrame. Ahora se procede a verificar si se cumple la condición. Si TimeFrame(5) es mayor o igual a T(0), se continua con la ejecución del código que se encuentra dentro de la condición. Si la condición no se cumple, no se hace nada. En este caso no se cumple y se continúa con el ciclo de programación. Ahora imaginemos que en el segundo ciclo de ejecución “now” adquiere un valor de 10. Entonces al realizar la comparación tenemos que a 10 se le resta 0 y nos arroja un valor de 10. La condición esta vez se cumple y se ejecuta lo que engloba la misma. Algo muy importante que resaltar como lo muestra la imagen anterior se almacena el valor de “now” en “past” al final de nuestra condición. ¿Por qué tiene que ser de esta manera? Porque la función millis() nunca regresa a 0 y se mantiene siempre contabilizando el tiempo de ejecución de Arduino. Para que quede más claro imaginen que es un reloj que comienza a correr desde que se ejecuta el programa y ya no se detiene, así de simple. Continuando con el ciclo de programación. Imaginemos esta vez que “now” vale 20. Se realiza la comparación 20-10, recordemos que esta vez “past” adquirió el valor “now” cuando se realizó el primer muestro. Y como podemos ver la condición se cumplirá nuevamente.
Bueno amigos lectores, esta serie está resultando un poco más extensa de lo que imaginé, al menos esta vez ya pude presentarles algo técnico. En la próxima entrega comenzaré a introducir ahora sí los tan requeridos controladores. Espero y este post haya sigo de su agrado.
Me despido de ustedes mandándoles un fuerte abrazo.

filipini

Earvin Ricardo Casillas Filippini

Desarrollador de proyectos mecatrónicos

Ing. en Mecatrónica

 

Leave a Reply

Your email address will not be published. Required fields are marked *