Control PID para motor DC – Lectura y Potencia

Este semestre estoy cursando la materia de Control Digital en la universidad, uno de las practicas planteadas fue aplicar un control PID sobre un motor DC. La idea es medir la velocidad del motor y controlarla usando una señal de PWM, el programa de control PID correrá en LabVIEW y las conexiones con el serán manejadas con un microcontrolador PIC18F2550, en esta publicación comentare todo lo referente al proceso de medición de la velocidad y a el manejo de la potencia del motor.

Se utiliza un motor DC de 12000 rpm a 24V y 1A (sin carga). Para la practica se alimenta con 15V, voltaje suficiente para que su velocidad máxima sea de unas 7500rpm. Al eje del motor se le adapta un encoder óptico de 40 pasos, la lectura la hace un sensor infrarrojo tipo herradura (GP3S62), en este caso cada vez que detecta una ranura en el encoder éste genera un voltaje alto, este voltaje es leído por una entrada del microcontrolador que almacena el numero de pulsos en determinado tiempo y genera la equivalencia en rpm para luego enviarlo al programa de LabVIEW. Para la captura de los pulsos se utiliza el Timer1 y su entrada externa contando pulsos cada 200ms.

En el proceso de lectura se presenta un problema de voltajes ya que en algunos momentos el voltaje alto generado por el sensor es inferior al voltaje que puede leer el microcontrolador y considerar como alto, para solucionar esto se utiliza un disparador smith trigger (74LS14), el funcionamiento de este integrado es fácil de explicar: si el voltaje de entrada es inferior a 3V, el voltaje de salida será de 0V y si el voltaje de entrada es mayor a 3V el voltaje de salida sera de 5V.

Luego de que se procesa el dato de la velocidad del motor y se calcula la magnitud de la salida de el PID en LabVIEW, este dato es enviado al microcontrolador en donde se ve reflejado variando el duty del PWM generado por el microcontrolador.

Como se menciono antes el motor se alimenta con 15V así que se usa un MOSFET (IRF540) para manejar este voltaje, para la activación del MOSFET se utiliza un juego de transistores NPN (2N3904) y PNP (2N3906), ademas se aísla este circuito del microcontrolador con un optoacoplador (4N35) ya que su salida es a transistor. Ademas se usa un diodo se marcha libre en paralelo con el motor.

El valor de R3 es de 330Ω, el de R4 y R5 es de 1KΩ y el de R6 debe ser inferior a 50Ω.En la publicación Control PID para motor DC – Programación esta disponible el código usado en el microcontrolador y los VIs de LabVIEW.

Sí tienes alguna inquietud no dudes en comentar.

23 comments

  1. Hola! Soy de México, me gustaría saber si puedes enviarme el diagrama para el PCB del sistema con PIC18F2550 que usas en este proyecto! Saludos

      1. Gracias por tu información pero hice mal la pregunta todo lo que es la parte de potencia optoacoplador transistores y motor usas los 15v??

    1. Hola, yo no trabajo con Arduino, por lo que no te podría ayudar con el código, supongo que deberas programarlo de manera que envíe el numero de pulsos vía serial-usb al pc. El programa de LabView no debería modificarse ya que esta hecho para recibir los datos via COM.
      Un saludo

  2. Hola que tal, una pregunta eh intentado hacer tu proyecto pero al momento de correrlo en labview al parecer este se resetea o no lo corre, sabes a que se pueda deber eso. Gracias.

  3. hola, soy estudiante de mectronica y me gustaria saber si tienes algun progama para controlar la posicion en vez de la velocidad,epero me pudieses ayudar, estoy utilizando un motor de 12 volts dc con su potenciometro acoplado, ya controle la velocidad con un pi y ahora me pidieron controlar la posicion
    gracias!

    1. Hola Ignacio, para controlar la posición del motor puedes usar el código PID que explico en esta entrada; ademas para mover el motor debes usar una configuración en puente H y así poder controlar la dirección. Sí tienes alguna duda la puedes comentar aquí.
      Un saludo

  4. Hola antes que nada, te agradezco por tu aportacion, es muy buena. Y quisiera preguntarte como podría adaptar tu proyecto usando una DAC de National Instruments, cualquier ayuda te lo agradecería muchisimo.De antemano te agradezco cualquier respuesta

    1. Hola Aaron, hasta donde recuerdo la DAQ tiene unos puertos de salida PWM, así que esos te sirven para controlar la velocidad del motor, creo que la DAQ también tiene unos puertos que detectan pulsos o levantamiento de una señal, con eso puedes leer el encoder.
      Un saludo

  5. Hola, fijate que hice una simulaciòn en la parte de los motores, con una entrada de una fuente variable de 0 a 5v. y el motor empieza a variar es a partir de 2.5v mientras que està de 0 a 2.5v el voltaje en el motor se mantiene en 0v.

Deja un comentario