viernes, 8 de marzo de 2013

Control de un motor de CC con Puente H



Una vez que hemos explicado el motor de CC, vamos a realizar una práctica para que comprendamos mejor su funcionamiento.

En esta práctica, controlaremos un motor de corriente contínua mediante el integrado L298, que a su vez esta gobernado por el PIC 18F4550.
El control le vamos a realizar mediante la consola Hyperterminal en nuestro Pc y la comunicación  con el Pic vía RS232 . Crearemos un menú que visualizaremos en Hyperterminal donde  estableceremos el giro en un sentido o su inversión y podremos regular la velocidad en porcentaje o de forma progresiva.

Lo primero de todo será el diseño del circuito del puente H, ya que disponemos del integrado, pero hay que diseñar una PCB para poder implementar los diodos de protección así como crear el interface para poder realizar las conexiones.

Diseño de Interface Puente H

Para comenzar con el diseño realizaremos el esquemático en Proteus. Antes de ello hemos analizado el datasheet para comprender el integrado con el que estamos trabajando.
Terminado el diseño en Isis, este es el resultado:




El siguiente paso será el diseño del Layout en Ares, para poder mecanizar posteriormente la placa en la CnC. Después de alguna pequeña modificación, este es el resultado del layout.




Generación de código

Una vez que tenemos diseñado el Interface pasaremos a generar el código para poder dirigir el motor. El programa que vamos a utilizar en esta ocasión será MpLab IDE.
Antes de la programación destacaremos algunos aspectos.
Como vamos a regular la velocidad del motor, así como realizar su inversión de giro es necesario la utilización de PWM, es decir el control del ancho de pulso.
En este caso estamos utilizando el PIC18F4550, que cuenta con dos salidas PWM en los pines RC1 y RC2.

Explicaremos las partes mas importantes del código fuente, al final de la entrada podrás descargar el código completamente.


#include<18f4550.h>
#FUSES INTHS,MCLR,PUT,BROWNOUT
#use delay(INTERNAL=1MHZ) // Hemos establecido una frecuencia de 1 Mhz para obtener un tiempo mayor de periodo, a 1 Mhz->16ms.
#use rs232 (BAUD=9600 , XMIT=PIN_C6 , RCV=PIN_C7) // habilitamos el uso de Rs232


SET_TRIS_C(0b11111001);
ENABLE_INTERRUPTS(INT_CCP1); // Habilitamos la interrupción CCP1
ENABLE_INTERRUPTS(INT_CCP2); // Habilitamos la interrupción CCP2
SETUP_CCP1(CCP_PWM);
SETUP_CCP2(CCP_PWM); // Configuramos CCP1 y CCP2 como PWM
ENABLE_INTERRUPTS(INT_TIMER2); // Habilitamos la interrupción Timer2
SETUP_TIMER_2(T2_DIV_BY_16,255,1); // CONFIGURACION TIMER2, HEMOS EMPLEADO UN PREESCALER DE 16, Y UN PR2 DE 255(MAXIMO). EL POSTSCALER 1, NO AFECTA.
set_pwm1_duty(0);  // en el inicio establecemos un Duty 0 para que el motor este en stop.
set_pwm2_duty(0); //establecemospwm2 con un Duty 0 para que el motor este en stop.
ENABLE_INTERRUPTS(GLOBAL); // habilitamos interrupciones globales
printf("--------------------------\n");
printf("Selecccione una opcion: \n");
printf("[0] Motor 0   Velocidad\n");
printf("[1] Motor 1/2 Velocidad\n");
printf("[2] Motor 1  Velocidad\n");
printf("--------------------------\n");
printf("[+] Aumentar Velocidad\n");
printf("[-] Disminuir Velocidad\n");
printf("--------------------------\n");
printf("[g] Invertir Giro\n");
printf("--------------------------\n");
do
{
d = getchar(); //Almacena en la variable d, un caracter recogido por Rs232
switch(d) // Switch case de control motor Dc
{
case '0':  //  MOTOR VELOCIDAD 0%

if(giro==1)
{
dutty1=0; // establecemos el valor 0 ya que en el case0 esta al 0%
dutty2=0;
}
else
{
dutty2=0;
dutty1=0;
}
break;
}
case '1':  //  MOTOR VELOCIDAD 50%
{
if(giro==1)
{
dutty1=0;
dutty2=128; // establecemos el valor 128 ya que es la mitad de 255.
}
else
{
dutty2=0;
dutty1=128;
}
break;
}
case '2':  //  MOTOR VELOCIDAD 100%
...

En el resto de código introduciremos los Switch case a nuestro gusto, donde en este caso hemos establecido 2 case para hacer un aumento o reducion de velocidad de forma progresiva y una última opción para el paro del motor y realizar la inversión de giro.

Montaje y Pruebas de funcionamiento:

Para realizar el conexionado, vamos tomaremos como ejemplo el siguiente esquemático diseñado en Proteus. Como se puede observar en la imagen, hemos empleado las salidas Pwm de nuestro Pic, que corresponde a RC1 y RC2 para el gobierno del puente H.
Vss hemos utilizado una fuente externa de 5Vc.
El motor lo hemos conectado a los terminales de la bobina 1. De esta forma en función del control que realicemos con las salidas Pwm, el motor nos dará una respuesta u otra.



Ya en la siguiente imagen podemos ver el montaje físicamente, donde encontramos la conexión entre el motor dc y el Puente H. El puente H que hemos empleado fué adquirido a través de internet, ya que no disponíamos en ese momento del Interface que habíamos diseñado. En posteriores prácticas como el control motor PaP, utilizaremos nuestro Puente H propio.




En esta imagen podemos ver las conexiones con la Pic Control, la fuente externa y el Rs232 con nuestro Pc.




Una vez que encendamos la Pic control, abriremos en nuestro Pc la consola hyperterminal. En este caso hemos empleado el Hyperterminal de Arduino. En el momento que se establece la comunicación podemos ver el siguiente menú en nuestro Pc.




Entonces seleccionaremos la opción deseada y pulsaremos la tecla Enter/Enviar para que se ejecuten las órdenes.
En este vídeo se muestra el funcionamiento completo.




1 comentario:

  1. me sirvió mucho tu post, muchas gracias, sin embargo no veo donde descargar tu código completo me sería de mucha ayuda, gracias

    ResponderEliminar