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.
buen aporte, lo usare para un proyecto de la U donde le hare algunas modficaciones, porque nosotros utilizaremos un DAQ
muchas gracias
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
Hola
¿Tu sistema tiene instalado los drivers VISA de National Instruments?
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
Hola, tienes que instalar los drivers que están en el archivo rar e instalar el framework USB de Microchip.
Saludos
Hola tu aporte es muy bueno pero tengo una duda, porque le pones al tiempo de muestreo o el periodo de muestreo 0,2? es un valor arbitrario que tu le das o de donde lo sacas?
Hola Dav1t1, no es un valor arbitrario, uso 0.2 porque ese es el tiempo que hay entre cada lectura del encoder.
Un saludo
Hola,una duda, en el Programa del pic, solo obtienes el valor del timer 1 cada 0.2 segundos y es lo que envías a la pc, pero en qué parte lees el encoder? no encuentro ninguna instrucción que lea en algún pin. Saludos!!!
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
que tal! oye si quisiera remplazar el encoder por un potenciometro y cambiar la comunicacion por rs232, que tendria q cambiar en el codigo???Tengo pensado hacer el posicionamiento de un motor de cd.
Saludos!
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
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
Hola Erick, el procedimiento sería: Primero conectar el PIC al ordenador, luego seleccionar el COMx del PIC desde LabView, finalmente debes poner a correr el programa de LabView.
Un saludo
Hola que tal muy buen aporte tengo un motor con encoder digital y quisiera utilizar una DAQ, en este caso en que cambia la programacion en labview y del pic ya que el motor es de encoder digital. gracias.
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
DE CASULIDAD NO TIENES UN VIDEO COMO FUNCIONA
Hola Diego, de ese proyecto no alcancé a tomar un video.
Un saludo
disculpa el control del motor dc se puede hacer con arduino? con el panel de labview que tienes?