Saltar al contenido

Control PID para motor DC – Programación

  • PROYECTO

En la publicación Control PID para motor DC – Lectura y Potencia comentaba sobre la primera parte de este proyecto y sobre sus interfaces de lectura y potencia, ahora esta publicación estará dedicada a la programación del controlador en LabVIEW y la comunicación USB entre el PIC y el computador.

Para comenzar explicaré la estructura del programa en LabVIEW, el programa está compuesto por un While Loop que permite ejecutar iteraciones continuamente, al inicio del programa se establece la configuración del COM virtual con el que se va a comunicar el programa, es decir datos como el nombre del puerto, velocidad de transmisión y numero de bits en la transmisión. Dentro del While Loop se establece la apertura del puerto y el tamaño del buffer de recepción, luego se hace la conversión del dato de tipo “string” como lo envía el PIC a tipo “int” para ser usado en el PID. En la programación se usaron subVIs para cada uno de los controladores separados y luego sumar su resultado.

El primer controlador es el Proporcional, según la teoría este corresponde únicamente a el error multiplicado por una constante, es decir wk = Kp*Ek. El error es calculado en el programa principal restando el valor muestreado del valor del set point.

El controlador Integral es más complejo que el Proporcional, en este se tienen en cuenta el tiempo de muestreo, una constante o tiempo de integración, nuevamente el error, la constante de proporcionalidad y la salida del controlador en la iteración anterior (esta se establece en el programa principal). De esta forma se cumple la fórmula pk = ((kp*t/ti)*ek)+pk-1 de donde pk es la salida del controlador, kp es la constante de proporcionalidad, t es el tiempo de muestreo, ti es el tiempo de integración, ek es el error y pk-1 es el valor del controlador en ciclo inmediatamente anterior.

El controlador Derivativo tiene la siguiente ecuación qk = (td*kp/t)*(ek-ek-1), en esta ecuación de tiene a qk que es la salida del controlador, td que corresponde al tiempo de derivación, kp es la constante de proporcionalidad, t el periodo de muestreo, ek el error y ek-1 el valor del error en el ciclo inmediatamente anterior.

Luego que los valores de los controladores son sumados y enviados al PIC donde este valor se verá reflejado en el ciclo de trabajo del PWM que controla el motor. Para evitar posibles ambigüedades en el ciclo de trabajo del PWM se hace una restricción en la que, si el valor del PID es superior a 255, el PWM será de 255 y si es inferior a 0 el PWM será de 0.

En el front panel se pueden visualizar y modificar el set point y cada una de las constantes (kp, ti y td), además una gráfica de la velocidad y una de la salida del PID. El PIC hace la lectura de la velocidad del motor, establece la comunicación USB, recibe el valor del PID y varía el ciclo útil del PWM.

Para descargar: PID Motor

Si tienes alguna inquietud no dudes en comentar.

18 comentarios en «Control PID para motor DC – Programación»

  1. Trate de implementarlo siguiendo al pie de la letra tus pasos y circuitos, pero me arroja un error Labview al echarlo a correr, porque corre una sola vez y no trabaja el “bucle while”, lo que no me deja controlar la velocidad. Alguna sugerencia???
    Gracias

  2. Saludos.
    Tu proyecto es muy interesante, pero tengo problemas en reconocimiento del usb. El cable usb que conecto del pic a la pc no me reconoce, me dice dispositivo desconocido y me pide instalar el hardware. Quisiera saber como hiciste para que te reconociera el usb al pc, si instalaste algo adicional para que lo haga. Estoy utilizando 2 PC un PC con windows 7 32bits y el otro windows 7 64bits, intente el windows XP tampoco me funciona me da el mismo error. Todos los drivers de VISA los tengo instalados. Espero me puedas ayudar con alguna explicación GRACIAS

    1. Hola Ruben, la instrucción setup_timer_1(T1_EXTERNAL| T1_DIV_BY_1) configura el timer 1 como contador de pulsos, por configuración del hardware del PIC este timer está conectado al pin 11, de modo que no es necesario decirle que lea el pin, el lo lee implícitamente.
      Un saludo

    1. Hola janiskno, tendrías que modificar gran parte del código, comenzando por el hecho de que vas a controlar una variable totalmente distinta y que no la puedes leer por pulsos (como se hace en este proyecto) si no midiendo voltajes en la resistencia. Por otra parte la comunicación que uso yo es USB en modo CDC, muy diferente a la serial.
      Un saludo

  3. Hola amigo muy bueno tu proyecto he de antemano gracias, ando algo verde en cuanto al labview y mi duda es si las lecturas del pic las detecta al conectarlo o si hay que ir a las propiedades y seleccionarlo o algo asi ya seria lo unico que me faltaria para terminarlo, de nuevo gracias y ojala me contestes

    1. Hola Yuliana, si vas a usar una DAQ no tienes que usar el pic, la programación en LabView sería totalmente diferente ya que tiene estructuras especiales para leer los datos de la DAQ.
      Un saludo

Responder a AnonymousCancelar respuesta