Saltar al contenido

Control PID para motor DC – Lectura y Potencia

  • PROYECTO

Este semestre estoy cursando la materia de Control Digital en la universidad, una de las prácticas 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 él serán manejadas con un microcontrolador PIC18F2550, en esta publicación comentaré 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 12000rpm a 24V y 1A (sin carga). Para la práctica 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 número 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 Schmitt 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 será de 5V.

Luego de que se procesa el dato de la velocidad del motor y se calcula la magnitud de la salida del 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 mencionó 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), además se aísla este circuito del microcontrolador con un optoacoplador (4N35) ya que su salida es a transistor. Adicionalmente se usa un diodo de 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 está disponible el código usado en el microcontrolador y los VIs de LabVIEW.

Si tienes alguna inquietud no dudes en comentar.

23 comentarios en «Control PID para motor DC – Lectura y Potencia»

    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

  1. 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.

  2. 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

  3. 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

Deja un comentario