Sie sind auf Seite 1von 19

Actividad 3: Control de actuadores mediante el p.

paralelo

Motor c.c. Motor paso a paso Servomotor Control de salidas analgicas Actividades

Control de un motor c.c. Para disminuir el riesgo de daos al puerto de control y mejorar la capacidad de manejo de corriente que necesita el motor se puede utilizar una etapa de desacoplo. Mediante rels Se podra pensar en utilizar directamente rels conectados al puerto tal como se sugiere en la figura siguiente; en ella se utilizan las dos primeras lneas de datos con la intencin de activarlos, y hacer girar el motor en sentido horario o antihorario dependiendo de los valores alto o bajo de las lneas 2 y 3 (es decir, valores 0 o 1 de los bits D0 y D1 del registro de datos).

Desafortunadamente, la corriente que proporcionan las lneas del puerto no es suficiente para permitir la conmutacin de los rels mecnicos habituales. As pues, es preciso poner alguna etapa intermedia de transistores entre la salida

del puerto y el rel correspondiente, que sea capaz de excitar a ste. Por ejemplo, como se muestra en la figura siguiente:

Mediante mdulos optoacoplados con salidas a rel Una solucin que se encuentra disponible comercialmente, consiste en utilizar una interfaz de mdulos optoacoplados de salidas a rel. A travs de optoacopladores, un mdulo como el T-1 (de 4 E/S, aunque tambin existen de 1,2 y 8 E/S) asla elctricamente las seales de control de cada entrada.

Mdulo optoacoplado T-1 con salidas a rel

Esquema del optoacoplador situado entre las entradas y los rels Al inyectar sobre cualquier entrada una seal entre 3 y 24 V c.c., la correspondiente salida se activa, permaneciendo en ese estado hasta que la tensin de entrada baja a 0. El mdulo incorpora LEDs sealizadores. Las entradas se pueden conectar a las lneas de datos del puerto paralelo para gobernar un motor c.c. Mediante transistores Una alternativa simple a la interfase anterior consiste en utilizar un circuito como el de la figura siguiente.

En ste se utilizan transistores para la etapa de potencia del motor. Cuando el bit D0 se pone a 0 y el D1 a 1, el borne izquierdo del motor se encuentra a +6V

y el derecho a tierra, con lo que el motor gira en un sentido. Cuando el bit D0 vale 1 y el D1 0, es el borne derecho el que est alimentado mientras que el izquierdo se halla conectado a tierra, de modo que el motor gira en sentido opuesto. Una de las ventajas de esta interfaz frente a las precedentes (con rels y optoacopladores) radica en que si las seales de control conmutan a frecuencia elevada, los transistores son capaces de seguirlas, mientras que los rels ya no lo hacen cuando el perodo de la conmutacin se halla en torno a los milisegundos.

Control de un motor paso a paso Los principios bsicos de funcionamiento de motores P-P se detallan en la seccin Motores paso a paso. A continuacin se ofrecen algunas nociones prcticas sobre identificacin y control de este tipo de motores. Identificacin del motor P-P Cuando se trabaja con motores P-P usados o bien nuevos, pero de los cuales no tenemos hojas de datos es posible averiguar la distribucin de los cables a los bobinados y el cable comn en un motor de pasos unipolar de 5 o 6 cables siguiendo las instrucciones que se detallan a continuacin:

1. Aislando el(los) cable(s) comn(es) a la fuente de alimentacin: Como se aprecia en las figuras anteriores, en el caso de motores con 6 cables, estos poseen dos cables comunes, pero generalmente tienen el mismo color, de modo que lo mejor es unirlos antes de comenzar las pruebas. Usando un multmetro para chequear la resistencia entre pares de cables, el cable comn ser el nico que tenga la mitad del valor de la resistencia entre ella y el resto de los cables. Esto es debido

a que el cable comn tiene una bobina entre l y cualquier otro cable, mientras que cada uno de los otros cables tienen dos bobinas entre ellos. De ah la mitad de la resistencia medida en el mismo. 2. Identificando los cables de las bobinas (A, B, C y D): aplicar un voltaje al cable comn (generalmente 12 V, pero puede ser ms o menos) y manteniendo uno de los otros cables a masa (GND) mientras vamos poniendo a masa cada uno de los dems cables de forma alternada y observando los resultados. El proceso se puede apreciar en el siguiente cuadro:

Seleccionar un cable y conectarlo a masa. Ese ser llamado cable A.

Manteniendo el cable A conectado a masa, probar cul de los tres cables restantes provoca un paso en sentido antihorario al ser conectado tambin a masa. Ese ser el cable B.

Manteniendo el cable A conectado a masa, probar cul de los dos cables restantes provoca un paso en sentido horario al ser conectado a masa. Ese ser el cable D.

El ltimo cable debera ser el cable C. Para comprobarlo, basta con conectarlo a masa, lo que no debera generar movimiento alguno debido a que es la bobina opuesta a la A. Nota: La nomenclatura de los cables (A, B, C, D) es totalmente arbitraria. Observaciones:

Un motor de pasos con 5 cables es casi seguro de 4 fases y unipolar. Un motor de pasos con 6 cables tambin puede ser de 4 fases y unipolar, pero con 2 cables comunes para alimentacin. pueden ser del mismo color. Un motor de pasos con solo 4 cables es comnmente bipolar.

Interface de conexin del motor P-P En la figura siguiente podemos observar un ejemplo de conexionado para controlar un motor paso a paso unipolar mediante el uso de cuatro transistores que actan como etapa de potencia:

Si las bases de los cuatro transistores se conectan a cuatro de las lneas de datos del puerto paralelo, el motor puede ser controlado desde el PC. Sin embargo, nos centraremos en un circuito de control ms compacto. Vamos a controlar un pequeo motor P-P unipolar de cuatro fases RS351-4574 (similar, por ejemplo, al motor KP4M4-001 que llevan algunas de las disqueteras antiguas de 5). Tiene seis cables externos, dos de comn y cuatro de fases. Su consumo est en torno a los 180 mA, con un par de retencin mximo de 2.5 Ncm, y utiliza una tensin de trabajo de 12V.

Cableado externo del motor RS351-4574 El puerto paralelo trabaja a 5V y, como mximo, a 20mA, por lo que no podemos conectar el motor directamente directamente. Para ello utilizaremos un circuito interfase entre el motor y el puerto que ser el encargado de aumentar la potencia de nuestro puerto paralelo. Est basado en el integrado ULN2003, un driver Darlington de 7-bit, 500mA, entrada TTL npn, y su conexin es tan sencilla como indica el siguiente esquema:

El diodo Zener se utiliza como medida de proteccin contra las inducciones que se producen en los bobinados, evitando as las fuertes corriente inversas generadas. El zener es de 12V, 0.5W. El integrado acepta un consumo mximo de 500mA por lo que no ser capaz de controlar nada que supere dicho consumo. Para un entendimiento ms global, el integrado se comporta como una serie de 7 rels electrnicos. Por el puerto paralelo del PC podemos enviar 1 Byte cada vez a una velocidad de aproximadamente a 30 kBytes por segundo, mucho ms de lo que es capaz de girar un motor de estas caractersticas, por lo que deberemos frenar el envo de datos. La filosofa de control no es ms compleja que la de tener que encender y apagar diodos LED mediante software.

Control de un servomotor Para controlar un servomotor es preciso contar con la circuitera que lleve cabo la modulacin de anchura de pulso que ste precisa. Un ejemplo de interfaz de puerto paralelo que realiza esta funcin figura en el esquema siguiente:

Sin embargo en nuestro caso, con objeto de realizar un control programado directo a travs del puerto paralelo, prescindiremos de dicha circuitera y generaremos por software los pulsos de anchura requerida. Esto simplifica notablemente el hardware pero requiere la ocupacin del microprocesador del PC. Planteado de esta manera, el problema se puede resolver utilizando para controlar al servo una interfaz muy similar a la interfaz de transistores utilizada para el control de un motor c.c. Ahora se conecta el cable V+ del servo a los colectores de los transistores (activados mediante el bit D0 -pin 2-) y la lnea de control al bit D1 (pin 3). Es en esta ltima lnea donde se aplicarn los pulsos modulados en anchura para posicionar al servo.

Interfaz simple para controlar el servomotor desde el puerto paralelo Fichas tcnicas de dos servomotores habituales Servo Hitec HS-300 Par Intervalo angular de operacin Velocidad Voltaje Corriente Pulso posicin neutra Pulso ngulo mx. Pulso ngulo mn. Tamao Peso Cableado 3 kg-cm a 4.8 V / 3.5 kg-cm a 6 V 0-210 0.19 s / 60 a 4.8 V / 0.16 s/60 a 6V 4.8 - 6 VDC 140 mA (operacin) / 20 mA (stand by) 1500 s 2500 s 500 s 40 x 20 x 36 mm 44.5 g +V (rojo), GND (negro), Control (amarillo)

Ejemplo: supongamos que queremos mover el servo Hitec HS-300 a 30 desde la posicin neutra. Calculemos la anchura del pulso necesaria:

0 0.5 ms 180 2.5 ms

=> segn una relacin lineal, para 30 0.5 ms +30 (2.5 -0.5)/180 ms = 0.833 ms. As, si seguimos envindole pulsos de 0.833 ms, lo posicionaremos en 30. Si hay una fuerza externa que intenta bloqueado, el servo intentar resistir activamente (es decir, s el brazo se mueve externamente, el servo dar entradas al motor para corregir el error).Tambin es posible dejar de enviar pulsos despus que el servo se ha movido a su posicin. Si dejamos de enviar pulsos por ms de 50 ms (dependiendo del servo), este podra caerse. Esto significa, que este no estara aplicando ninguna entrada al motor, o activamente resistiendo fuerzas externas; solamente la friccin sostendr el brazo (del servo) en su lugar. Servo Futaba FP-S148 Par Velocidad Voltaje Corriente Pulso posicin neutra Pulso ngulo mx. Pulso ngulo mn. Peso 42 Oz-in / 3024 g-cm 0.22 s / 60 4.8 - 6 VDC 8mA @ 6V (idle) 1250 s*

2200 s* 220 s* 1.5 Oz (44.4 g) +V (rojo), GND (negro), Control Cableado (blanco) * Nmeros deducidos empricamente. Cmbiense si se detecta un zumbido. Control de salidas analgicas Una versin muy popular de un circuito conversor D/A (digital-analgico) para ser usado con el puerto paralelo es la representada en el siguiente esquema:

Actividades

Mntese la interfaz de transistores para conectar un motor c.c al puerto paralelo. Realcese un programa que ordene al motor desplazarse en sentidos horario y antihorario.

Solucin:

QBasic:

' ' ' ' ' ' ' ' ' '

MOTOR_CC.BAS CONTROL DE ACTUADORES Y SENSORES MEDIANTE PUERTO PARALELO Control de un motor de c.c. Motor conectado a los 2 primeros pines de datos mediante una etapa de potencia (transistores TIP125-120) + D0 --- (etapa) --- M --- (etapa) --- D1 2002 Vctor R. Gonzlez

DECLARE SUB Activa (valor%) ' Direcciones del puerto paralelo CONST LPTBASE = &H378 CONST DATOS = LPTBASE CONST ESTADO = LPTBASE + 1 CONST CONTROL = LPTBASE + 2 ' Valores que activan el giro y la parada del motor CONST APAGA.MOTOR = &H3 ' D0=1 (pin2), D1=1 (pin 3) CONST GIRO.HORARIO = &H2 ' D0=0 (pin2), D1=1 (pin 3) CONST GIRO.ANTIHORARIO = &H1 ' D0=1 (pin2), D1=0 (pin 3)

DIM tecla$ DIM pos.x AS INTEGER, pos.y AS INTEGER Activa APAGA.MOTOR CLS PRINT "Control de un motor c.c.:" PRINT " - = giro en sentido horario" PRINT " + = giro en sentido antihorario" PRINT " p = parada" PRINT " s = salir" PRINT pos.x = POS(0): pos.y = CSRLIN DO LOCATE pos.y, pos.x tecla$ = INKEY$ SELECT CASE tecla$ CASE "+" ' Giro en sentido antihorario PRINT "... giro antihorario ..." Activa GIRO.ANTIHORARIO CASE "-" ' Giro en sentido horario PRINT "... giro horario ... " Activa GIRO.HORARIO CASE "p" ' Parada PRINT "... detenido ... Activa APAGA.MOTOR CASE "s" ' Salir END SELECT LOOP UNTIL tecla$ = "s" Activa APAGA.MOTOR

"

END

' Enva un valor al puerto de datos SUB Activa (valor%) OUT DATOS, valor% END SUB

TurboC:

/*

MOTOR_CC.C CONTROL DE ACTUADORES Y SENSORES MEDIANTE PUERTO PARALELO Control de un MOTOR de C.C. Motor conectado a los 2 primeros pines de datos mediante una etapa de potencia (transistores TIP125-120) D0 --- (etapa) --- M --- (etapa) --- D1 2002 Vctor R. Gonzlez */ #include <stdio.h> #include <dos.h> #include <conio.h> /* Direcciones del puerto paralelo */ #define LPT_BASE 0x378 #define DATOS LPT_BASE #define ESTADO LPT_BASE+1 #define CONTROL LPT_BASE+2 /* Valores que activan el giro y la parada del motor */ #define APAGA_MOTOR 0x03 /* D0=1 (pin2), D1=1 (pin 3) */ #define GIRO_HORARIO 0x02 /* D0=0 (pin2), D1=1 (pin 3) */ #define GIRO_ANTIHORARIO 0x01 /* D0=1 (pin2), D1=0 (pin 3) */ /* Macro que enva un valor al puerto de DATOS */ #define Activa(valor) outportb (DATOS, valor)

main () { unsigned tecla, pos_x, pos_y; Activa(APAGA_MOTOR); /* Comienza con el motor detenido */

printf("Control de un motor c.c.:\n"); printf("\t - = giro en sentido horario\n"); printf("\t + = giro en sentido antihorario\n"); printf("\t p = parada\n"); printf("\t s = salir\n\n"); pos_x = wherex(); pos_y = wherey();

tecla = 0; do { if ( kbhit() ) tecla = getch(); gotoxy(pos_x, pos_y); switch (tecla) { case '+': /* Giro en sentido antihorario */ printf("\t... giro antihorario ..."); Activa(GIRO_ANTIHORARIO); break; case '-': /* Giro en sentido horario */ printf("\t... giro horario ... "); Activa(GIRO_HORARIO); break; case 'p': /* Parada */ printf("\t... detenido ... "); Activa(APAGA_MOTOR); break; } } while (tecla != 's'); printf("\n"); Activa(APAGA_MOTOR); /* Detiene el motor si no lo estaba ya */ return 0; }

Mntese la interfaz de control de un motor paso a paso unipolar de 4 fases mediante puerto paralelo. Realcese un programa en TurboC que ordene al motor girar un nmero de pasos elegido mediante teclado segn una secuencia de paso completo doble. Solucin:

MOTOR_PP.C CONTROL DE ACTUADORES Y SENSORES MEDIANTE PUERTO PARALELO

Control de un MOTOR PASO A PASO. Bobinas del motor conectadas a los cuatro primeros pines de datos mediante una etapa de potencia (ULN2003). D0 ----- (3 -ULN2003- 14) ------------- MOTOR (BOB. A) D1 ----- (4 -ULN2003- 13) ------------- MOTOR (BOB. B) D2 ----- (5 -ULN2003- 12) ------------- MOTOR (BOB. C) D3 ----- (6 -ULN2003- 11) ------------- MOTOR (BOB. D) GND ---- (8 -ULN2003- 9) --- Zener --- MOTOR COMN --- +12 V 2002 Vctor R. Gonzlez

nclude <stdio.h> nclude <dos.h>

Direcciones del puerto paralelo */ define LPT_BASE 0x378 define DATOS LPT_BASE define ESTADO LPT_BASE+1 define CONTROL LPT_BASE+2

Activacin bobinas motor paso a paso */ define BOBINA_A 0x01 /* Activa bobina A (amarillo-RS351-4574 / negro-RS440-290) */ define BOBINA_B 0x02 /* Activa bobina B (marrn -RS351-4574 / azul -RS440-290) */ define BOBINA_C 0x04 /* Activa bobina C (naranja -RS351-4574 / verde-RS440-290) */ define BOBINA_D 0x08 /* Activa bobina D (negro -RS351-4574 / rojo -RS440-290) */ define BOBINA_COM /* Comn bobinas (rojo+verde-RS351-4574 / blanco+blanco-RS440-290 */ define APAGA_MOTOR 0x00 /* Bobinas desactivadas */ 10 0 /* Espera (en ms) entre pasos */ /* Sentidos de giro */

define PAUSA_PASO

define HORARIO define ANTIHORARIO 1

Macro que enva un valor al puerto de DATOS */ define Activa(valor) outportb (DATOS, valor)

oid motor_pasos (unsigned num_pasos, unsigned sentido);

main () unsigned num_pasos; printf("Control de motor paso a paso:\n"); Activa (APAGA_MOTOR); /* Comienza con el motor detenido */

do { printf("\tIntroduce nmero de pasos (0=salir): "); scanf("%u", &num_pasos); if (num_pasos > 0) { /* Secuencia de paso completo doble */ printf("\tSecuencia de paso completo doble:\n"); printf("\t\t... sentido horario ...\n"); motor_pasos(num_pasos, HORARIO); Activa(APAGA_MOTOR); delay (1000); printf("\t\t... sentido antihorario ...\n"); motor_pasos(num_pasos, ANTIHORARIO); Activa(APAGA_MOTOR); } } while (num_pasos > 0); return 0;

Hace girar un motor paso a paso segn una secuencia de paso completo doble

oid motor_pasos (unsigned num_pasos, unsigned sentido)

unsigned bobinas[][4] = { { /* secuencia para giro horario */ BOBINA_A | BOBINA_B, BOBINA_B | BOBINA_C, BOBINA_C | BOBINA_D, BOBINA_D | BOBINA_A }, { /* secuencia para giro antihorario */ BOBINA_D | BOBINA_A, BOBINA_C | BOBINA_D, BOBINA_B | BOBINA_C, BOBINA_A | BOBINA_B } }; unsigned paso; for (paso=0; paso<num_pasos; paso++) { Activa ( bobinas[sentido][paso % 4] );

delay(PAUSA_PASO); }

Realcese un programa en Turbo C que ordene al motor realizar una revolucin completa en sentido horario y otra en sentido antihorario segn una secuencia de paso completo bsica y segn una secuencia de medio paso.

Mntese la interfaz para conectar un servomotor al puerto paralelo. Realcese un programa en Turbo C que ordene al servo desplazarse a cualquier posicin angular entre sus posiciones extremas.

Solucin: /* SERVO.C CONTROL DE ACTUADORES Y SENSORES MEDIANTE PUERTO PARALELO Control de un SERVOMOTOR. Alimentacin del servo conectada al primer pin de datos mediante una etapa de potencia (transistores npn). Lnea de control del servo conectada directamente al segundo pin de datos + D0 --- (etapa) ---- SERVO ------D1 | ctrl GND ------------------| 2002 Vctor R. Gonzlez */ #include <stdio.h> #include <dos.h> /* Direcciones del puerto paralelo */ #define LPT_BASE 0x378 #define DATOS LPT_BASE #define ESTADO LPT_BASE+1 #define CONTROL LPT_BASE+2 /* Posiciones angulares del servo (Hitec HS-300) */ #define ANG_MIN 0./* posicin angular mnima () */ #define ANG_NEUTRO 90. /* posicin angular neutra () */

#define ANG_MAX #define PULSO_MIN 500. 0 */ #define PULSO_NEUTRO control para 90 */ #define PULSO_MAX 2500. 180 */ #define PULSO_OFF 20000. OFF */ #define APAGA_SERVO 0x01 */ #define ENCIENDE_SERVO del servo */ #define CONTROL_SERVO servo */

180.

/* posicin angular mxima () */

/* tiempo (en us) de pulso de control para 1500. /* tiempo (en us) de pulso de

/* tiempo (en us) de pulso de control para /* tiempo (en us) de pulso de control en

/* D0 alto (pin 2) alimentacin del servo 0x00 0x04 /* D0 bajo (pin 2) alimentacin /* D2 alto (pin 4) control del

/* Para retardos de precisin */ #define us_CUENTA 15.086 /* n de microsegundos por cuenta */ /* Macro que enva un valor al puerto de DATOS */ #define Activa(valor) outportb (DATOS, valor) /* Enva pulsos PWM al servo */ void servo_pulsos (float angulo, unsigned num_pulsos); /* Retardo de precisin */ void pausa (unsigned long);

void main (void) { float angulo; unsigned num_pulsos; printf("Control de un servomotor:\n"); Activa (ENCIENDE_SERVO); do { printf ("\tIntroduce la posicin angular final del servo: "); scanf ("%f", &angulo); printf ("\tIntroduce el nmero de pulsos de control (0=salir): "); scanf ("%u", &num_pulsos); if (num_pulsos >0) servo_pulsos (angulo, num_pulsos); } while (num_pulsos > 0); /* Alimenta el servo */

Activa (APAGA_SERVO);/* Apaga la alimentacin del servo */ }

/* Posiciona un servomotor en el ngulo requerido */ void servo_pulsos (float angulo, unsigned num_pulsos) { int pulso; float tiempo_pulso; unsigned long cuentas_pulso, cuentas_off; /* Duracin del pulso */ tiempo_pulso = PULSO_MIN + angulo * (PULSO_MAX-PULSO_MIN) / (ANG_MAX-ANG_MIN); cuentas_pulso = tiempo_pulso / us_CUENTA; printf ("\t\t(Duracin del pulso: %6.1f us, %u cuentas)\n", tiempo_pulso, cuentas_pulso); /* Duracin (en cuentas) de pulso apagado */ cuentas_off = PULSO_OFF/us_CUENTA; for (pulso=1; pulso<num_pulsos; pulso++) { /* Activa la lnea de control */ Activa (CONTROL_SERVO | ENCIENDE_SERVO); pausa (cuentas_pulso); /* Desactiva la lnea de control */ Activa (ENCIENDE_SERVO); pausa (cuentas_off); } Activa (APAGA_SERVO);/* Apaga la alimentacin del servo */ }

/*

Retardo de precisin El tiempo se mide en cuentas. Un segundo equivale a 66288 cuentas. Una cuenta equivale a 1/66287.78 s = 15.086 microsegundos. sta es la resolucin temporal que se consigue con este mtodo.

*/ void pausa (unsigned long cuenta) {

register a = NULL, b; unsigned cuenta_h, cuenta_l; cuenta_h=cuenta >> 16; cuenta_l=cuenta & 0xFFFF; do do { while (a==(b=inportb(0x61) & 0x10)); a=b; } while (cuenta_l--); while (cuenta_h--); }

Das könnte Ihnen auch gefallen