UPM-DISAM

CYBERTECH 2008

UPM-DIE

TALLER 3. MOTORES Y SENSORES DIGITALES 1. MOTORES 1.1. NOCIONES GENERALES MOTORES DE CORRIENTE CONTINUA: Los motores de corriente continua son muy utilizados en minirobots. Podemos encontrar motores de este tipo en prácticamente todos los coches teledirigidos y/o coches de juguete, los ventiladores de mano y accionamientos varios. En este taller vamos a aprender a controlarlos. Las preguntas claves que tenemos que responder son: · Cómo controlar su velocidad. · Controlar el sentido de giro. · Alimentación. Aparentemente, si conectamos un motor de continua a una batería, siempre debería moverse a la misma velocidad, bajo tensión constante. Si no cambiamos la polaridad, parece imposible cambiarlos de sentido y en tercer lugar, si queremos alimentar los motores a nuestro antojo, ¿cómo hacerlo si el PIC envía señales de 0 a 5V? Velocidad: Para poder controlar este aspecto enviaremos al motor una señal desde el PIC de la forma PWM o tren de pulsos, que será del tipo:

Esta gráfica es una forma de onda en tensión. Para entenderlo mejor, realmente estamos alimentando el motor y apagándolo en períodos de tiempo del orden de milisegundos. Con motivo de la inercia del propio motor estos cambios provocan que se mueva a una velocidad constante. Así pues, cuanto mayor sea el tiempo del pulso, mayor velocidad obtendremos:

1 Taller 3

UPM-DISAM

Cybertech 2008

UPM-DIE

Sentido de giro y alimentación: La única manera de controlar este aspecto del motor, es rodeándolo de un circuito, de tal forma que se pueda, al enviar señales, cambiar la polaridad de la alimentación del motor. Este circuito es el puente en H y vamos a ver su funcionamiento:

Bien, de esta forma si activamos los transistores Q1 y Q4 (1 lógico) el motor girará en un sentido y si activamos Q2 y Q3, la corriente circulará en sentido opuesto y por tanto el motor también. Así, vamos a analizar los cuatro casos posibles, con los pares Q1Q4/Q2Q3: 00 Los motores no reciben alimentación, quedan libres. 01 El motor gira en un sentido. 10 El motor gira en sentido contrario al anterior. 11 Frenado dinámico: Convine no hacer. Vamos a diferenciar los casos extremos: si el motor no se alimenta y tiene una velocidad dada por algún valor anterior, esté solo frenará por rozamiento y la inercia del robot. Si en cambio utilizamos el último caso, le ordenamos al motor girar en los dos sentidos a la vez. Como consecuencia de esto, el motor se para de forma inmediata y eficaz, pero parece claro que consumirá mucha más corriente, existiendo la posibilidad de quemar el circuito o el propio

2 Taller 3

UPM-DISAM

Cybertech 2008

UPM-DIE

motor en casos extremos. Además, dado el aumento de consumo, reducirá notablemente la duración de las baterías. LA ETAPA DE POTENCIA: En nuestra placa está el circuito integrado L298. Este integrado contiene dos puentes en H y por tanto con él seremos capaces de manejar hasta dos motores. El motor, gracias a este integrado, podrá ser alimentado a una tensión distinta de los 5V que emite el PIC, por lo que nos resuelve los problemas propuestos. Algunas notas importantes sobre estos integrados: NOTA 1: si vamos a utilizar una configuración con un motor y un servo que lleve la dirección, nos vale con un integrado L293, que soporta hasta 1 Amperio y consume menos. NOTA 2: El L298 soporta hasta 2 Amperios de corriente, con lo que debemos tener mucho cuidado al elegir los motores, porque puede que consuman más de estos 2 Amperios y no valdría este integrado, y tendríamos que construirnos el circuito. Hay ejemplos en Internet. Es complicado, pero es una buena manera de aprender un montón de electrónica. Esquema del L298 donde se ven sus pines y los puentes en H:

3 Taller 3

UPM-DISAM

Cybertech 2008

UPM-DIE

Para aprender más sobre este circuito integrado, se pueden ver sus hojas de características, en la web de Cybertech. Nuestra conclusión final, es que desde el micro tendremos que enviar tres señales a cada motor. Dos se enviarán al puente en H para regir el sentido de giro, y la última será el tren de pulsos (señal PWM). SERVOS: Aunque no utilizaremos los servos en este taller, conviene que tengamos una idea general sobre ellos. Un servo es un motor de continua dotado de su propia electrónica. Tiene su propia etapa de potencia, por lo que no es necesario conectarlo a nuestro L298. Pero, como un motor que es, necesita recibir un tren de pulsos.

En un servo el tren de pulsos no rige la velocidad del servo, sino su posición. Siempre se mueve a la misma velocidad pero, según el ancho del pulso, girará un ángulo entre 0 y 180 grados, aunque depende del servo en cuestión: Duración del pulso 1ms 1,5ms 2ms

Ángulo de giro 0 grados 90 grados 180 grados

Así pues, el servo posee tres cables: 1. Referencia de tensión (masa o tierra) que suele ser de color negro, 2. Alimentación (generalmente 6V) de color rojo o naranja y 3. Cable de color blanco o amarillo por el que se envía el tren de pulsos. El período total del pulso (tiempo entre el inicio de un pulso y el siguiente) es válido si se encuentra entre los 10 y los 30 ms, por lo que dependiendo del reloj del PIC quizá se pueda (o no) enviar el PWM directamente del micro (Ver ejemplo 3 de programación en la web de Cybertech, que utiliza un CCP para un servo. Próximamente habrá más ejemplos para estos accionamientos). Conviene resaltar que el servo es un sistema realimentado: Es decir, conoce su posición y la que debe ocupar, para tratar de reducir el error entre ellas. Si el servo recibe un tren de pulsos, permanece en el ángulo que ese tren de pulsos le fuerza a ocupar. Si una fuerza externa afecta al servo, éste la contrarresta para permanecer en la posición que debe ocupar. Para ello, necesita consumir más potencia, y aumenta la intensidad y el consumo. NOTA: Se puede trucar un servo consiguiendo que haga un giro completo y poder utilizarlo como motor. Existe un manual en la red de cómo trucar un servo. Tiene la ventaja de que no

4 Taller 3

UPM-DISAM

Cybertech 2008

UPM-DIE

necesita etapa de potencia ni reductora, aunque es una forma un poco cara de obtener un motor y suelen dar problemas porque dan mucho par y poca velocidad. 1.2. CONTROL DE MOTORES CON UN PWM: Ahora nos ponemos a trabajar. El PIC posee dos salidas que emiten PWMs. Estas son las patillas 16 y 17 del micro (CCP1 y CCP2). Regulando este ancho de pulso regularemos la velocidad del motor y necesitaremos dos señales más para cada motor para el sentido de giro. En la placa de Cybertech 2006 las patillas del micro conectadas para regular el puente en H (L298) son: RC1, RC2 (patillas 16 y 17): CCP1 y CCP2 para pulsos PWM RD4, RD5 (patillas 27 y 28): entradas puente H motor 1 RD6, RD7 (patillas 29 y 30): entradas puente H motor 2

/***************PROGRAMA MOTORES******************/ /***************************************************************** *Este programa mueve el motor1 en un sentido de giro a casi máxima velocidad * *aunque se han incluido en comentarios las líneas de codigo para el motor 2, * *que se movería en sentido contrario al motor 1, a la misma velocidad * ******************************************************************/ #include #include #include //definimos las variables de PWM y sentido de los motores #define motor1PWM PORTCbits.RC2 #define motor11 PORTDbits.RD5 #define motor12 PORTDbits.RD4 #define motor2PWM PORTCbits.RC1 #define motor21 PORTDbits.RD7 #define motor22 PORTDbits.RD6 void main(void) { //configuración de los puertos, declarando como salida los pines necesarios TRISC = 0b11111001; TRISD = 0B00001111; // inicializo pwms con periodo máximo OpenPWM1(255); //OpenPWM2(255); // se inicializa el timer2, que es el correspondiente a las señales de PWM del micro OpenTimer2(TIMER_INT_OFF & T2_PS_1_1 & T2_POST_1_1); // se establecen los valores de los pwms SetDCPWM1(1000); //SetDCPWM2(1000); motor11=1; // sentido para el motor 1 motor12=0; //motor21=0; // sentido para el motor 2

5 Taller 3

Cybertech 2008

UPM-DISAM

UPM-DIE

//motor22=1; while (1) {} } /******************************************************************/ Comentarios: - Las patillas RC2 y RC1 son las del tren de pulsos y siempre son las mismas. Las patillas RD4, 5, 6, 7 se han seleccionado para el sentido de los motores. - Configuramos el puerto C y D. Mucho cuidado al configurar estos puertos. Las patillas RC1, RC2 se han de configurar siempre como salida si utilizamos dos motores. De igual forma, las patillas del puerto D que utilicemos para motores (depende si utilizamos o no dos motores) no se deben utilizar para otra cosa. - SetDCPWM(arg): el argumento de esta función es guardado en un registro de 10 bits, por lo que se debe introducir un valor entre 0(mínima velocidad) y 1023 (máxima). - OpenPWM1(char periodo) es una función de la librería pwm y se utiliza para configurar el canal. El periodo se calcula según la fórmula: PWM period = [(period ) + 1] x 4 x TOSC xTMR2 prescaler. - OpenTimer2( ) es una función de la librería timer necesaria para establecer el preescalado y el postescalado. - SetDCPWM1(unsigned int dutycycle) marca el ancho de pulso del PWM, es decir la velocidad del motor (valor entre 0 y 1000, aprox.) El trabajo será que un motor permanezca a media velocidad unos segundos, pase a máxima velocidad durante el mismo tiempo y luego realice la misma secuencia en sentido opuesto. NOTA: si queremos más PWM (por ejemplo para manejar servos) tendremos que hacerlo manualmente. Se publicarán ejemplos en la web sobre la programación de PWMs “artesanales” que requieren manejo de interrupciones del micro. 2. SENSORES DIGITALES 2.1. TIPOS DE SENSORES: ANALÓGICOS VS. DIGITALES Sensores digitales son aquellos que tienen dos valores posibles (0 y 1) y sensores analógicos son los que pueden tener valores dentro de un rango. En este taller vamos a tratar los sensores digitales y en el siguiente nos ocuparemos de un sensor analógico de tipo infrarrojo. Evidentemente, el objetivo de estos talleres es una introducción a los sensores más básicos y más comunes de los minirobots, pero hay infinidad de sensores asequibles, de los que

6 Taller 3

UPM-DISAM

Cybertech 2008

UPM-DIE

podemos encontrar muchísima información y que muchas veces resolverán de manera más inteligente los problemas a los que se enfrentará nuestro robot. Para hacernos a la idea, una clasificación de sensores podría ser: - Sensores de Odometría(movimiento del vehículo): – Encoders ópticos – Potenciómetros - Sensores de Contacto: – Interruptores – Sensores de Presión - Sensores de Proximidad: – Sensores de Infrarrojos – Sensores de Ultrasonidos – Cámaras - Sensores Especiales: – Sensores de luz – Brújula electrónica – Detector de fuego – Detector de humo – Detector de temperatura – Sensores de sonido - Sensores Propioceptivos – Medidor de baterías 2.2. CONECTAR UN CNY 70 A UNA PUERTA SMITH TRIGGER El sensor CNY70 es un sensor de infrarrojos de corta distancia.

7 Taller 3

UPM-DISAM

Cybertech 2008

UPM-DIE

Tiene un emisor y un receptor. El led emisor envía un haz de infrarrojos que rebota y es recibido por el receptor. En función de lo que recibe podemos determinar el color de la superficie sobre la que ha rebotado.

El sensor CNY70 es analógico. Da un valor entre 0 y 5 voltios, siendo negro 3.3 V (absorbe toda la el rayo emitido) y blanco 0 V (refleja toda la luz). Por tanto, su salida depende mucho de una buena definición del color y del tipo de superficie. Con una puerta inversora Smith Trigger (74HC14) podemos utilizar el CNY70 como digital, de manera que se consigue una señal más limpia. Este integrado convierte los valores por debajo de un cierto umbral en un valor digital 0 V y los valores por encima de un umbral superior se convierten en 5 V. De esta manera, al micro le llegan valores digitales (0, 1). Además esta puerta es inversora, con lo que a la salida del 74HC14 negro se corresponde con 0 digital y blanco con 1 digital. MONTAJE DEL SENSOR CNY70:

8 Taller 3

UPM-DISAM

Cybertech 2008

UPM-DIE

NOTA: sensor visto desde arriba. MONTAJE DE DOS SENSORES CNY70:

Se utiliza este montaje porque así se reduce el consumo de los sensores, es recomendable si vais a poner más de tres sensores. Otra opción sería poner una alimentación independiente a la del micro.

9 Taller 3

UPM-DISAM

Cybertech 2008

UPM-DIE

MONTAJE DEL INTEGRADO 74HC14: El integrado 74HC14 tiene 14 patillas, de las cuales dos son para alimentación y masa y las demás están relacionadas dos a dos, teniendo capacidad para transformar seis señales analógicas en digitales. Las entradas desde el sensor (señal) están marcadas por una A y las salidas hacia el micro por una V.

2.3. PROGRAMA QUE ENCIENDE UN LED CUANDO UN CNY70 LEA NEGRO.

/**PROGRAMA: ENCIENDE UN LED CUANDO UN SENSOR LEE NEGRO**/ #include #define LED PORTCbits.RC5 #define SENSOR PORTDbits.RD1 //el sensor debe enviar la señal al RD1 void main() { TRISD=255; //puerto D entrada (no habrá motores enchufados en la placa) TRISC=0; //puerto C salida LED=1; while(1) { if(SENSOR==0) { LED=1; } else LED=0; } } /******************************************************************/ 2.4 . PULSADORES. ENCENDER UN LED AL PULSAR. El pulsador es un sensor digital muy sencillo que cierra o abre un circuito al pulsarlo. Tiene muchas aplicaciones en minirobots, por ejemplo en la detección de obstáculos. MONTAJE PULSADOR:

10 Taller 3

UPM-DISAM

Cybertech 2008

UPM-DIE

El montaje general, que suele funcionar, es:

De esta manera, si el interruptor no está pulsado (circuito abierto) la patilla del micro estará a 5V (1 digital) y cuando pulsamos, cerramos el circuito y en la señal que llega al micro es 0V (0 digital). MONTAJE 555: A veces es necesario filtrar la señal porque tiene rebotes. Para ello podemos utilizar un integrado 555 (os recomiendo utilizarlo sólo en caso de tener problemas con el montaje general).

PROGRAMA QUE ENCIENDE UN LED AL PULSAR UN INTERRUPTOR. Conectamos el interruptor donde teníamos conectado el sensor CNY70 en el ejemplo anterior y nos vale el mismo código.

11 Taller 3

UPM-DISAM

Cybertech 2008

UPM-DIE

2.5. PROGRAMA QUE UNE TODO LO APRENDIDO EN ESTE TALLER. Es importante realizar un programa que según lo que lea un CNY mueva de distinta forma un motor. Por ejemplo, si el sensor lee negro que el motor cambie de sentido y/o velocidad de giro. Mucho cuidado con la configuración de los puertos. Con lo aprendido en este taller ya podemos hacer que un robot siga una línea negra. Ya tenemos un rastreador.

12 Taller 3