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.
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
Saludos tu proyecto es muy bueno pero me gustaria saber que voltajes estas ultizando. Gracias
Hola, para alimentar el motor uso 15V (lo menciono varias veces en la publicación) para los demás componentes uso 5V del puerto USB.
Saludos
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??
El optoacoplador va a 5V y los transistores van a 15V.
Saludos
Buenas muy bueno el proyecto.
Tengo una duda, se puede utilizar el Arduino ?
Hola, creo que si se podría usar con arduino, usas un pin para capturar los pulsos del encoder y otro para la salida PWM.
Un saludo.
Buenas.
En el caso del Arduino que pasaría con el código y el lab view ? cambiaría completamente o con algunas modificaciones funcionara?
Gracias!
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
buenas
da lo mismo si el codigo fuente del PIC 18F2550 lo grabo en un PIC 18F4550 o variaria en algo??
saludos
Hola TONNY, el código es compatible con el 18F45550, solo tienes que revisar los pines y cambiar el #include.
Un saludo
gracias, es un buen aporteuna duda:tambien puedo usar los pines del tx y rx del serial rs232?
Que tal, me podrías explicar como conectaste el encoder. Gracias.
Hola Anónimo, el encoder está conectado al motor y el sensor infrarrojo se conecta de acuerdo al primer esquema.
Un saludo
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.
Hola Anónimo, el proyecto está hecho con una versión de Labview del 2011, así que no te garantizo el funcionamiento con versiones superiores.
Un saludo
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!
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
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
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
Muy buen aporte! Una pregunta como conecto 18F2550 con labview? ayuda porfavor!
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.
hola, quisiera saber que uso le das al optoacoplador unido a la compuerta 74Ls14, gracias