Encoders, pruebas y primer programa

Como soy novato en esto de los PIC primero haré algunas pruebas para ver que funciona lo hecho hasta ahora…

Hoy toca hacer de Frankenstein. Voy a transplantar el cerebro de otro robot a Reciclator 1. Voy a conectar las 8 señales de control (4 de encoders, 2 de dirección y 2 de velocidad PWM) un prototipo tengo hecho y funcionando para hacer algunas pruebas. El otro robot está basado en Intel (mi especialidad) y la utiliza hardware para los contadores de los encoders. De esta forma sé que el programa es correcto y puedo probar el hardware. Como estoy empezando con PIC y CCS no me atrevo a poner el PIC y programar porque si no funciona me costará mucho determinar si el problema es del programa o del hardware. De esta forma ahorro mucho tiempo en pruebas.

Terminado

Las pruebas han sido un éxito… He podido controlar los motores y medir con precisión su velocidad. Con el frecuencímetro observo que los encoders proporcionan 4600 Hz a 5V que corresponden a 9200 Rpm del motor. Estos datos ya los había medido anteriormente, pero ahora tiene que medirlos el robot.

Este es el borrador del esquema de conexionado con el PIC:

Esquema

Ahora hay que programar…

Para la decodificación de los encoders voy a aprovechar la interrupción RB_isr() que se produce cada vez que cambia el estado de los bits 7-4 del puerto B del PIC. De esta forma solo tengo que comprobar como están esos bits e incrementar o decrementar el contador los contadores en consecuencia. Además tengo 4 interrupciones (4 cambios de estado en el encoder) por cada pulso, por lo que multiplico por 4 la resolución original de 30 pulsos por revolución.

Los pulsos de los encoders siguen la secuencia de la foto:

Fases encoder

Las flechas de los flancos pertenecen al sentido «contar». En el sentido «descontar» van al revés. Generalmente solo se usa uno de los 2 flancos de una fase para contar y el estado de la ora fase determina la dirección. En este caso podríamos usar el flanco descendente de B para contar si A esta a 0 o para descontar si A está a 1. Si se usan los dos flancos de una fase se multiplica por 2 la resolución del encoder y si se usan los 2 flancos de una fase y los 2 de la otra la resolución se multiplica por 4. El encoder que uso es de 30 pulsos por revolución, pueden medirse hasta 120 pulsos por revolución

Para decodificar la información de los encoder compongo un número de 4 bit con el estado anterior de las fases A y B del encoder y el estado actual:
Hex Anterior AB Actual AB Pulsos XOR XOR AanteriorBactual
00 00 00 NADA 00 NO IMPORTA
01 00 01 - 01 1
02 00 10 + 10 0
03 00 11 PERDIDO 11 NO IMPORTA
04 01 00 + 01 0
05 01 01 NADA 00 NO IMPORTA
06 01 10 PERDIDO 11 NO IMPORTA
07 01 11 - 10 1
08 10 00 - 10 1
09 10 01 PERDIDO 11 NO IMPORTA
0A 10 10 NADA 00 NO IMPORTA
0B 10 11 + 01 0
0C 11 00 PERDIDO 11 NO IMPORTA
0D 11 01 + 10 0
0E 11 10 - 01 1
0F 11 11 NADA 00 NO IMPORTA

NADA significa que el encoder no se ha movido, no hay nada que cambiar. PERDIDO significa que han pasado 2 pulsos respecto del estado anterior. Esto puede ser interesante si se lee el estado de los encoder mediante una interrupción periódica. Como yo lo leo solo CUANDO CAMBIA (con RB_isr()) el caso NADA no puede darse, no genera interrupción y el caso PERDIDO es imposible: cualquier cambio genera interrupción y no pueden perderse pulsos (a no ser que lleguen tan rápido que no le de tiempo a la interrupción a procesarlos, en mi caso tardo 12 us puedo procesar hasta 833 Khz). Utilizando la función XOR entre el estado anterior y el actual puedo determinar cuando he de contar o descontar y cuando no hacer nada. 00 es NADA, 11 es PERDIDO y otro estado contar o descontar según el estado de A y o B del encoder. Para contar o descontar hago un XOR de de la fase A anterior con B actual: si es 0 es CONTAR si es 1 es DESCONTAR.

A la vista de la tabla de verdad hay muchas otras formas de hacerlo, cada una con más o menos código. Puede contarse siempre que haya un 2,4,B o D y descontarse con 1, 7, 8 o E pero las comparaciones y saltos son menos óptimos que las máscaras…

Ahora llega el problema… Para ver la velocidad tengo que medir los pulsos en un intervalo de tiempo. A 5,5 V el motor gira a 10000 RPM que son 166,6 RPs. Si el intervalo es de 1 segundo tendré un máximo de 30 * 4 * 166,6 = 20000 Pulsos en un segundo. No está mal, pero solo tendré una medida ¡cada segundo!. Es muy poco. Si quiero ejecutar el proceso de regulación cada milisegundo el motor solo se ha movido, a la máxima velocidad, ¡20 pulsos!. Es muy poca resolución para hacer una buena regulación. Hay que llegar a una solución de compromiso entre lectura del encoder (cuanto más milisegundos mejor) y la regulación (cuanto menos milisegundos mejor). Voy a hacer la regulación cada 6,55 ms que corresponde a unas 152 veces por segundo. En ese tiempo al encoder le da tiempo a enviar hasta 131 pulsos. Es poco, pero bastante para regular…

La regulación es el clásico PID aunque yo solo uso PD por ahora:

ErrorVI=ConsignaVI-VelocidadI;
SalidaVI+=((ErrorVI)*KVprop) + ((ErrorVI-ErrorAntVI)*KVder);
ErrorAntVI=ErrorVI;

KVprop y KVder son los parámetros del PID. Habrá que ajustarlos para que no oscile y alcance la consigna con rapidez. Uso enteros de 16 bit con signo para los cálculos, pero en punto fijo 11.5 es decir 11 bits de entero y 5 bits de decimal. Así los cálculos son más rápidos.

Estos son los fuentes de lo hecho hasta ahora: Fuentes C CCS. Están bastante comentados, no es muy dificil seguirlos.

Final

Este es Reciclator1 listo para pintar líneas, no para seguirlas. Así veo si oscila el PID y si las 2 ruedas mantienen sus velocidades. Como innovación he aumentado la tensión de la batería a 9,6 V usando otras 2 células para tener más margen de tensión y he incorporado un acelerómetro basado en el ADXL05 (es un componente obsoleto que tenía en una caja, a saber de donde lo he sacado), aunque el programa no lo usa todavía. No he usado el PIC 16F877 sino que pongo un 16F876 con un zócalo adaptador de 28 a 40 patas.

Alimentación, encoders y etapa de potencia

Después de añadir la segunda fase a los encoders hay que ajustarlos: con las salidas desfasadas 90 grados. Además hay que proveer de 5V para la electrónica a partir de la tensión de la batería y proporcionar control de potencia para los motores.

Lo primero que necesitaremos para comenzar a hacer pruebas es una salida de 5 Voltios para alimentar la parte electrónica. Casi todo el mundo conoce el LM7805 que es la solución más común para conseguir 5 V desde otra tensión inferior a 35 V. Leyendo la hoja de datos aparece un valor «Dropout Voltage = 2 V, es decir que tiene una caída de tensión mínima de 2 V, que sumados a los 5 V que queremos, hace que haya que alimentarlo con más de 7 V. En este caso como he decidido usar baterías de 7,2 V aparece un problema: cuando la tensión de la batería baje de 7 V el regulador no trabajara correctamente y los 5 V descenderán. Puede solucionarse usando una batería de mayor voltaje (con una célula más 8,4 V) pero en cualquier caso esos 2 V de caída del LM7805 se desperdician en forma de calor.

Buscando una solución, que no fuera un regulador en conmutación (demasiados componentes) encontré entre los chismes de desguace este integrado: LM2940CT -5.0. Se trata de un regulador lineal de tensión de 5 V de salida y compatible en patillaje con el LM7805. Sus características son muy similares: entrada hasta 26 V y salida 5V 1A PERO la caída de tensión típica es de 0,5 V a 1A y ¡110 mV para 100mA!. Esto permite que la tensión de la batería disminuya hasta 5,5 V (o incluso menos con < 1A de carga) y el regulador siga dando su salida de 5 V correctamente. No se si puede conseguirse con facilidad en el mercado, yo usaré uno reciclado, pero es una solución estupenda. Además desperdicia menos energía que el LM7805. En esta foto se aprecia el LM2940CT -5.0 con un radiador que además, hace de soporte para una placa de circuito impreso para dar rigidez a los motorreductores.

Regulador

Esta es la lista de materiales:

1 Circuito LM2940CT -5.0.
1 conmutador 1 circuito 2 posiciones.
2 conectores complementarios a los que hayamos usado en las baterías.
4 resistencias de 4k7 para los pullup de los encoder..
Dos resistencias de 150 Ohmios. Son las limitadoras de corriente de los emisores de infrarrojos de los detectores de herradura.
1 condensador 10 microfaradio 16V. Es para desacoplar la alimentación y evitar que el ruido generado por el circuito produzca interferencias en otros componentes.
1 circuito integrado L293D.
1 circuito integrado SN74HC14. Es un séxtuple smith trigger.
2 conectores 2×4 pines macho verticales para circuito impreso.
2 conectores 2×4 pines hembra para cable plano

Este es el borrador del esquema que he utilizado:

Esquema

Los diodos LED emisores de infrarrojos de los detectores de herradura los he conectado en serie dos a dos con una resistencia limitadora cada pareja de 150 Ohmios. La caída de tensión en cada uno es de 1,1 V (puede medirse con un tester alimentando el led a 5 V con 330 Ohmios en serie). La caída de tensión en cada pareja es de 2,2 V y de esta forma la corriente que circula por cada pareja es de: (5 V – 2,2 V) / 150 Ohmios = 0,0186 A. Evidentemente los cálculos los hice al revés: yo buscaba alrededor de 15 mA y me salía 186 Ohmios que aproximé a 180 Ohmios.

Si los pongo los 4 diodos con 4 resistencias limitadoras independientes sale (5 V – 1,1 V) / 0,0186A = 209 Ohmios, que puede ser 220 Ohmios. La corriente real sería (5 V – 1,1 V) / 220 Ohmios = 0,017A.

Si los pongo los cuatro en serie obtengo (5 V – 4,4 V) / 0,0186 = 32,25 Ohmios que pueden ser 33 Ohmios: (5 V – 4,4 V) / 33 Ohmios = 0,0181 A

En el caso de las resistencias limitadoras de los LED hay que tener en cuenta que su misión es DESPERDICIAR la tensión sobrante hasta llegar a la que necesita el LED. Se puede calcular la magnitud de este desperdicio.

Dos resistencias de 150 Ohmios. (5 V – 2,2 V) * 0,0186 A = 0,052 W * 2 resistencias = 0,104 W
Cuatro resistencias de 220 Ohmios (5 V – 1,1 V) * 0,017 A = 0,066 W * 4 resistencias = 0,265 W
Una resistencia de 33 Ohmios (5 V – 4,4 V) * 0,0181 A = 0,010 W * 1 resistencia = 0,010 W.

Esto en muy importante en aparatos alimentados a baterías. Si vamos a poner 4 detectores infrarrojos, por ejemplo en un siguelineas, es mejor poner los emisores en serie y una única resistencia limitadora. El ahorro es muy grande y se alarga la duración de la batería. En mi caso, que la batería es de 640 mAh a 7,2 V puede proporcionar 0,64 A * 7,2 V = 4,68 W, durante 1 hora, los 0,265 W desperdiciados en el caso de los 4 diodos independientes significan el 5,6 % de la potencia de la batería (0,265 / 4,68) * 100 = 5,66 %.

Las resistencias de 4K7 proporcionan, mientras los fototransistores no ven luz, 5 V al al smith trigger que interpreta como «1» lógico. Cuando estos fototransistores ven luz derivan esta corriente a masa y solo queda una pequeña Vce que el smith trigger interpreta como «0».

El mando de potencia de los motores lo realiza un L293D. Es capaz de funcionar desde 4,5 V hasta 36, perfecto para alimentarlo a baterías y puede entregar hasta 600 mA por canal. Como los motores que yo utilizo consumen alrededor de los 200 mA en condiciones normales va sobrado. Hay que tener cuidado porque la corriente a rotor parado es de mas de 800 mA y podría estropear el integrado en caso de choque del robot. Esto puede solucionarse usando un L293B y cuatro diodos, que soporta hasta 1A por canal, o mediante el software que detecte el choque y desconecte los motores. Otro problema, pero este de más difícil solución, es la caída de tensión tan grande que tiene el L293D. En la hoja de datos pone «Source Output Saturation Voltage = 1,4 V» y «Sink Output Saturation Voltage = 1,2 V». Esto significa que cuando un driver da corriente tiene una caída de tensión de 1,4 V y cuando le entra la corriente de 1,2 V. Como para hacer girar el motor hay que poner un driver en modo «source» y otro en «sink» la caída total en el integrado es de 2,6 V. Esto hace que al motor solo le lleguen 7,2 V – 2,6 V = 4,6 V. Estos voltios que «desaparecen» se transforman en calor en el L293D. Podría usarse otro driver de mejores características, como el L6203 pero necesita una tensión de funcionamiento mínima de 12 V. Habrá que tenerlo en cuenta para el próximo diseño.

He conectado unos inversores a las entradas de control del L293D de forma que basta con una señal para cada motor para indicar el sentido de giro. Con las señales de «enable» paro o arranco los motores o regulo la velocidad por PWM.

Así es como va quedando, he puesto velcro autoadhesivo en las baterías y en la placa del robot para que queden bien sujetas, pero que se puedan cambiar son facilidad. En la foto ya he puesto el zócalo para el PIC16F877 con el cristal en el interior, para ahorrar circuito impreso, y el conector para la comunicación.

Terminado

Ya solo queda conectar las salidas de los encoder Ai, Bi, Ad y Bd y el control de motores DIRi y DIRd que es la dirección de giro y Ei y Ed que es la señal de PWM de velocidad al PIC y comenzar a probar.

Esto es todo por ahora. Espero haber dado ideas de a todos.

Conversor RS232 a TTL

Creo que todo el mundo conoce el modo de hacer un conversor de niveles RS232 a TTL usando el MAX232 o similar. Aquí propongo hacer un «cable conversor» que sirva para todos nuestros proyectos donde la comunicación sea ocasional. Esto evita tener que poner un conversor en cada montaje.

Este es el esquema del conversor, no tiene mayor complicación. Seguro que ya lo hemos visto muchas veces.

Esquema conversor

Esta es la lista de materiales:

1 Circuito MAX232CPE. Puede utilizarse cualquier otro compatible o similar, adecuando los valores de los condensadores a las necesidades del circuito.
4 condensadores de tántalo de 1 microfaradio 25V. Algunos circuitos compatibles con el MAX232 solo necesitan 100 nanofaradios.
1 condensador 1 microfaradio 16V. Es para desacoplar la alimentación y evitar que el ruido generado por el circuito produzca interferencias en otros componentes.
1 conector DB9 hembra. Es el que conecta con el puerto serie del ordenador.
1 conector macho o hembra de 4 pines para cable.
N conectores complementarios del anterior para poner en cada uno de nuestros proyectos.
2 metros, o lo que creamos más conveniente, de cable de 4 x 0,25 o similar. Cuanto más flexible mejor.

Esta es la foto de mi conversor con 3 metros de cable. He usado un conector hembra en el cable y pongo un macho en cada circuito que hago.

Cable

Aquí se ve el detalle del conversor. He usado placa de circuito impreso pretaladrada de islas y cable de 0,2 mm aislado para hacer las conexiones. Luego he fijado con pegamento térmico el conector DB9 y el cable para que no se mueva con el uso. Los condensadores los he puesto bajo el circuito integrado, que se monta elevado mediante dos zócalos. La alimentación se obtiene por el conector de 4 pines del circuito con el que comuniquemos.

De esta forma el tamaño es casi como un conector DB9 con carcasa.

Detalle del cable

Una ventaja importante de este sistema es que, además, sustituimos el conector DB9 caro y grande por otro de 4 pines de un modelo a nuestra elección, que puede ser más pequeño y barato. Es importante que este conector de 4 pines que usemos lleve algún tipo de polarizador o «llave» para evitar que podamos conectarlo al revés. El que yo he usado no puede ponerse al revés gracias a la forma de la carcasa de plástico.

Una buena forma de poner llave (o polarizar) en un conector es usar uno de un un pin más de lo necesario. Se corta el pin sobrante del conector macho y se introduce en el conector hembra con pegamento. Además podemos cortar un pin distinto en cada conector de nuestro montaje, de manera que no podamos intercambiar las conexiones por error, aunque los conectores tengan el mismo número de pines.

Pines con key

Utilizando este «cable conversor» ahorramos tener que poner en cada montaje un conversor, útil cuando la comunicación es solo ocasional (si va a haber comunicación RS232 permanente es mejor poner el conversor en el propio montaje). Ahorramos dinero, centímetros cuadrados de circuito impreso, peso y consumo de baterías, poco pero todo cuenta para el total…

Reciclando y cargando baterías

Es fácil encontrar baterías estropeadas en teléfonos móviles, juguetes, videocámaras y muchos otros chismes de electrónica de consumo. Reciclarlas también es fácil cuando se conoce un poco sobre su funcionamiento.

Estos 3 teléfonos móviles (del año 2000) pueden servir muy bien como fuente de baterías para nuestros proyectos.

Teléfonos

Después de abrir los paquetes de baterías comprobamos que cada uno contiene 4 células de NIMh de 650mAh. Abrir los paquetes es fácil, llevan unas pestañas que hace que enganchen las dos piezas de la carcasa, aunque la mayor parte llevan, además, pegamento. Cuidado de no perforar las baterías o hacer un cortocircuito al apalancar para abrirlas.

Ahora hay que comprobarlas a ver cuales están en buen estado. Para ello lo primero es cargarlas. Al ser de NIMh se cargan igual que las de NICA, a corriente constante. Podemos alimentarlas a 65 mA durante 12 horas (1/10 de la capacidad nominal) , aunque yo voy usar 325 mA durante 2 horas (1/2 de la capacidad nominal: 650mAh). En este último caso hay que acordarse de respetar el tiempo de carga para no sobrecargarlas. Para conseguirlo coloco una resistencia de 2,7 Ohmios en serie con la batería y en serie con un amperímetro y alimento con una tensión variable hasta conseguir los 325 mA. Conforme la batería se carga disminuye la corriente y hay que aumentar la tensión. Esto se soluciona con el cargador que propongo más adelante pero de momento sirve para probar las baterías. Si no es posible conseguir la corriente deseada con una tensión prudencial es que hay una célula en la serie que esta averiada (demasiada resistencia interna). En ese caso hay que intentar cargarlas una a una. La que no absorba corriente es la averiada. Se elimina de la serie y se continua con una célula menos en esta batería.

Cargando baterias

Una vez que se han cargado (una batería de NICA o NiMh tiene 1,42V recién cargada, en vacío) se conecta un voltímetro en paralelo con UNA de las células y se descarga con 1/5 de la corriente nominal. En el caso de 650 mA son 130mA que corresponde con una resistencia de 9,2 Ohmios (1,2V nominales / 0,130 A), podemos usar una de 10 Ohmios. La resistencia disipará (1,2 V * 0,130 A = 0,156 Watios), hay que dimensionarla de forma adecuada porque puede salir un valor alto de potencia y calentarse mucho con baterías de alta capacidad. Si la tensión se mantiene por encima de 1,2V más de un par de minutos la batería está bien (puede que envejecida, pero no averiada). Si la tensión cae rápidamente la baterías esta averiada, no ha aceptado la carga y hay que desecharla. Estas baterías hay que depositarlas en los contenedores adecuados, son muy contaminantes.

Estas pruebas son muy genéricas, pero sirven para aproximarnos al estado cada célula de las baterías. En mi caso están bien todas las células. Desmonto las 3 baterías de 4,8 V (4 células) y construyo dos de 7,2 V (6 células). En la foto pueden verse los materiales que voy a utilizar para construir un cargador para dos baterías, con dos modos de carga: rápida de 2 horas o lenta de 12 horas.

Piezas cargador

Este es el listado de materiales:

2 baterías de 7,2 V 650 mA recicladas.
2 conectores de 3 pines para las baterías.
Tubo termoretractil para sujetar las baterías. Pueden pegarse con pegamento térmico pero luego es más complicado desmontarlas si se avería una célula. No aconsejo cinta aislante porque se ablanda con el calor.
Cable y conector de 3 pines. Cada par es de un color distinto para distinguir las baterías. Uso un conector de 3 pines aunque solo hay 2 cables porque así no es posible conectar la batería al revés, importantísimo.
Alimentador de 12 V 700 mA CC reciclado de un switch ethernet roto.
Conector hembra, adecuado al macho del alimentador utilizado.
Radiador reciclado de un 486.
3 Tornillos de 3 mm.
2 separadores aislantes, en la foto no se ven las láminas de silicona.
2 reguladores LM317
Circuito impreso de islas pretaladrado.
2 Diodos 1N4007.
2 conmutadores de 1 circuito
Juego de resistencias. Depende de las corrientes de salida. En este caso 2 de 18 Ohmios para la salida de 65 mA y dos de 3,7 Ohmios para la de 325 mA (construidas con el paralelo de 3,9 y 100 Ohmios).
1 Resistencia de 1K y un led verde para un indicador de funcionamiento, no se ven en la foto.

Este es el esquema del cargador. En la posición A del conmutador se carga a 325 mA 2 horas y en la B a 65 mA 12 horas. Es posible cargar las 2 baterías a la vez, con la misma o distinta corriente. Cuando se usa el modo de carga rápida hay que acordarse de respetar el tiempo de carga, el circuito no lleva temporizador y tenemos que desconectar la batería nosotros mismos. En el modo de carga lenta a 1/10 de la corriente nominal no pasa nada si mantiene más de 12 horas.

Esquema  del cargador

Este cargador está basado en una nota de aplicación de National sobre el LM317. El regulador trata de mantener entre la pata ADJ (R) y Vout (S) una tensión de 1,25 V (en otros datasheet del LM317 dicen 1,20 V, depende de fabricantes). Si se usa el montaje de la foto en la resistencia siempre caen 1,25 V y la corriente de salida depende de la fórmula: Iout=1,25/R1 los límites de R1 dependen de la mínima y máxima corriente regulable por el LM317.

Las fórmulas usadas para los cálculos son:

Valor de la resistencia para una corriente dada: R = 1,25 V / Iout
Potencia disipada en la resistencia (1,25 V * Iout) Watios. Para 3,75 Ohmios (3,9 en paralelo con 100 Ohmios) 1,25 V * 0,333 A = 0,416 basta con una resistencia de 1/2 Watio. (Realmente al haber un paralelo de dos resistencias de distinto valor hay que hacerlo independiente para cada resistencia). Estos calculos solo dependen de la corriente de salida, son independientes de la tensión.
Potencia disipada en el regulador: caen (Vin – 1,25 V – Vout) Voltios, multiplicado por Iout salen los Watios. En el peor caso: batería descargada completamente Vout = 0 V sale: 12 V – 1,25 V – 0,7 V – 0 = 10,05V (hay un diodo en serie con la batería donde caen 0,7 V). Esta es la máxima tensión que entregará el circuito que lo limita a cargar baterías de menos de 10 V. Para otras baterías de mayor tensión hay que usar más de 12 V de alimentación y repetir los cálculos de potencia disipada en el regulador. La potencia es: 10.05 V * 0,333 A = 3,35 Watios. Con un pequeño radiador bastará. Conforme la batería se valla cargando Vout aumenta y la disipación disminuye.
Corriente en el LED verde 10 mA: sale una resistencia de 12 V – 2 V / 0,010 A = 1000 Ohmios. La caída de tensión en los LED verdes es de 2 V, en los rojos de 1,5 V.
Corriente máxima del alimentador = Iout1 + Iout2 + ILED = 0,333 A + 0,333 A + 0,01 A = 0,676 A. Bastará uno de 700 mA

Los 325 mA es el valor teórico que busco, se consiguen con 3,7 Ohmios, pero como uso un valor real de 3,75 Ohmios salen 333 mA. Hay que repetir los cálculos para 0,65 mA, salen unos valores de disipación tan bajos que con 1/4 de Watio de resistencia y el LM317 sin disipador funcionaría.

Cargador LM317

Este es el cargado terminado y cargando las dos baterías.

Cargador

Esta es la cara de «pistas» (yo he usado cables) del cargador. Solo falta pegar una lámina de plástico para protegerlo de cortocircuitos.

Cargador pistas

Espero que haya quedado claro como construir este cargador y las fórmulas para hacerlo «a la medida», en cualquier caso acepto consultas…

La tercera rueda y el chasis

Como ya comente anteriormente para hacer ruedas sirve cualquier cosa redonda a la que se pueda poner un eje. Aquí construyo una rueda loca usando piezas de un contador de consumo eléctrico y un clip. Como chasis utilizaremos un material de «alta tecnología»: fibra de vidrio.

Este es el contador mecánico, usado también en cuentakilómetros de coche. El clip sirve de eje, las varillas que contiene el contador son muy aceradas y se rompen al intentar doblarlas. Una de las ruedas numeradas hace de rueda loca y la otra de soporte con libertad de movimiento. Los tornillos de 2,5mm sirven para sujetar el soporte al chasis del robot y los 4 prisioneros inmovilizan cada uno de los elementos, pero permitiendo el giro.

Contador mecánico

Esta es la rueda ya terminada y fijada a un cartón que hace de chasis. Solo hay que enderezar el clip y retorcerlo de nuevo de la forma adecuada, meter las ruedas y fijar los prisioneros. Dos taladros en la rueda que hace de soporte para los tornillos de 2,5mm y ya está.

Rueda loca

Aunque parece una tontería esta rueda gira con muchísima suavidad y el alambre del clip hace de muelle, con lo que se consigue un poco de suspensión muy adecuada para disminuir las vibraciones en el chasis.

En la fotografía de abajo puede verse la placa de circuito impreso de fibra de vidrio que hará de chasis y las dos unidades motrices junto con la rueda loca.

Reductores

Para sujetar las los motorreductores al chasis lo mejor es hacerlo directamente del eje de las ruedas, aprovechando la rosca sobrante del tornillo y usando algún acoplamiento en ángulo recto. Yo he usado unos trozos de aluminio de guía de circuito impreso. La rueda loca va atornillada sobre el chasis con tres tadros, uno para el eje y dos para los tornillos de sujeción. Así queda el chasis ya terminado. El mismo circuito impreso sirve para soldar los componentes electrónicos en las áreas libres.

Chasis montado

Un medidor de par

Es un medidor de par, para probar los motores de los que no tenemos características. Usa un freno electromagnético de de corrientes de Foucault para un funcionamiento ajustable sin desgastes.

Esta es la primera fotografía de la estructura montada. Los perfiles taladrados son de un antiguo rack de 19 pulgadas. Las chapas negras de los extremos son de aluminio de un radiador. Los cacharros redondos atornillados a los extremos son bujes de cabezales de vídeo.

Estructura

Este es el apunte a lápiz de lo que quería hacer. Desgraciadamente al utilizar todo de reciclaje no se puede hacer un plano «serio», hay que amoldarlo a los materiales que se van encontrando.

Borrador del plano

Para medir el par con precisión usaremos el principio de reacción. La fuerza (par) que transmite el motor a través del eje es igual, pero de sentido contrario, al que transmite el motor al soporte a través del estator. Por ejemplo si yo empujo un coche de 700Kg transmitiré esos 700Kg al suelo. Mediré la misma fuerza en las manos que en los pies. Es más fácil medir la fuerza en el estator del motor, que no gira, que en el rotor que está en movimiento. Para frenar el eje del motor, y ver que fuerza hace contra el freno, usaremos un freno electromagnético de corrientes de Foucault. Este freno es muy suave, sin saltos, fácil de regular y sin desgaste. Está construido con imanes permanentes, de neodimio, de dos discos duros y discos de aluminio también de discos duros.

Medidor

Ya tengo montados los imanes y el balancín con sus brazos, preparado el acoplamiento a los discos y una montura para un motor…

1- Imanes permanentes de neodimio. Son de un disco duro. Están fijados a un disco de aluminio fijo al chasis.
2- Buje del rotor. Es el de un cabezal de vídeo. Tiene que alinearse muy bien con el buje del estátor.
3- Soporte del estator. Sujeta el motor en pruebas. Esta sujeto al chasis mediante otros rodamientos para que pueda moverse
libremente. Lo que vamos a medir es la fuerza que ejerce este soporte.
4- Buje del estator, alineado con el del rotor. Permite que se mueva el estator y así medir su fuerza.
5- Discos de aluminio de freno. En este disco inducen las corrientes de Foucault los imanes, produciendo el par de frenada. Esta unido al eje del rotor del rotor en pruebas.
6- Acoplamiento del freno al rotor del motor. Realmente quería usar un portabrocas, pero es difícil de acoplar al eje del freno. Con un portabrocas basta con apretarlo sobre el eje del motor para tenerlo centrado.

En esta imagen el motor ya montado (sujeto con una brida) y los aparatos de medida para hacer una prueba.

Pruebas

1- Disco de freno. Finalmente solo he usado uno, para que tenga menos masa y menos rozamiento con el aire.
2- Imanes del freno. Regulando la distancia del disco 1 a los imanes se varía el par de frenada.
3- Brazo de medida. Tiene 10 cm desde el eje del motor hasta la parte que apoya en la báscula. Lo que marque la báscula serán Kgf*10cm (kilogramos-fuerza por 10 centímetros). Habrá que convertirlo a gf*cm ó Nm.
4- Bascula. Medirá la fuerza que transmite el brazo, que es la reacción del motor, que es igual al par de giro del eje.
5- Tester actuando como cuentarrevoluciones unido al detector 7.
6- Tester actuando como amperímetro para ver el consumo del motor.
7- Detector del cuentarrevoluciones. Es el usado en «cuentarrevoluciones sencillo».
8- Fuente de alimentación. Necesitamos 5V para el cuentarrevoluciones y 0 a 24V para el motor en pruebas.

Mas pruebas

En la foto el motor ejerce un par de 36 g*10cm a 59,72 RPS (3583 RPM) que equivale a 35,3 mili Nm y el consumo es de 0,709 A, alimentado a 24V. El motor es un C2162-60006 de una impresora HP 690C que el vacío consume 0,08 A y gira a 3840 RPM.

Un motor RS555HS que es igual (lo llevan otros modelos de HP y en las medidas me ha dado muy similar) proporciona 34,8 mNm a 3610 RPM consumiendo 1,48A, según datos del fabricante.

Resultados y conclusiones:

– En las medidas realizadas de motores con datasheets conocidos los resultados han sido similares a los que proporciona el fabricante por lo que puede decirse que el medidor trabaja correctamente.
– Acoplar el eje del motor al freno puede ser muy complicado. Hay que conseguir un buen centrado para que no haya vibraciones y la medida sea buena. Usando un portabrocas solidario al freno y que apriete sobre el eje del motor se solucionaría el problema. El centrado y la sujeción serían inmediatos.
– El chasis construido es poco rígido y muy pequeño (con las chapas de aluminio que tenía es lo mejor que pude hacer). Seria conveniente hacer otro mejor, bajo plano, con materiales comerciales.
– Es un poco complicado realizar las medidas con los 3 aparatos de medida, tomando valores en una tabla. Casi quemo un motor al hacerlo girar a 200 RPM (me daba 99 mNm de par) durante demasiado tiempo mientras tomaba notas. Falta la parte electrónica: una fuente variable de 0-30V 3A, un amperímetro, un cuentarrevoluciones, una báscula y un servo para aproximar el disco a los imanes (regular la frenada) todo ello conectado a un procesador con una pantalla LCD y un teclado para seleccionar el test a realizar y una salida serie de los datos medidos para realizar las curvas con un PC.
– El disco de 5 y 1/4 pulgadas frena demasiado para motores pequeños. Incluso alejado de los imanes, por el rozamiento con el aire, ya proporciona algunos mNm de par resistente. Para motores pequeños habría que usar un disco de 3 y 1/2 pulgadas.
– La solución de los bujes de cabeza de vídeo ha resultado estupenda. Son tan suaves que no crean un par resistente apreciable, con lo que no interfieren en la medida. Dentro contienen 2 rodamientos R1560ZZ, podrían utilizarse sueltos en otro modelo que no use partes recicladas.

En esta foto detalle del invento.

Medidor terminado

Puede apreciarse el brazo de medida, que es una varilla roscada para dejar el palpador que presiona sobre la báscula a 10 cm. El acoplamiento del eje del motor al freno, de latón, es un desastre de regular. La idea buena es la del portabrocas. Pueden verse los bujes de cabeza de vídeo y los imanes de disco duro frente al disco de freno.

NO recomiendo a nadie que construya este modelo. Es solo un experimento. La idea SI es muy buena, pero habría que hacer un buen plano y utilizar materiales comerciales. Este diseño está muy condicionado por el uso de materiales reciclados, es un verdadero Frankenstein, pero funciona muy bien y demuestra la viabilidad de la idea.

Un encoder con un ventilador

Cualquier robot que se precie necesita órganos sensoriales para tener información del exterior y poder tomar sus decisiones. Los encoder permiten conocer la posición de los ejes y realizar los movimientos en consecuencia.

Ablando estrictamente un encoder (o codificador) es un dispositivo que «codifica» digitalmente una señal de posición analógica. Existen dos tipos: los relativos y los absolutos.

1- Los relativos proporcionan un pulso por cada unidad de movimiento (precisión) y es necesario contar esos pulsos para saber la posición real, respecto de un punto de referencia fijo. Es necesario «recordar» este valor de cuenta entre apagados del procesador, siempre que se tenga la garantía de que no va a haber movimientos en estas circunstancias. Como eso es imposible en la práctica hay que usar otro método: la señal de referencia. Al llegar el eje a una posición fija, por ejemplo tope a la izquierda, se activa un detector que marca la puesta a cero del contador. Tope a la derecha sería el número máximo de cuentas de nuestro encoder (resolución). Se suelen usar dos señales A y B desfasadas 90 Grados. Dependiendo de que señal llegue antes, A o B es posible determinar el sentido del movimiento.
2- Absolutos. Proporcionan una salida de n bits (resolución) dependiendo de la posición del eje. No necesitan referencia, pero al montarlos y desmontarlos del eje hay que ajustar el cero del encoder con el cero mecánico. Se necesitan n entradas en el procesador, aunque los hay vía serie.

Lo dicho para ejes rotativos o angulares puede extenderse a movimientos lineales. Realmente existen muchos otros tipos de detectores de posición: potenciómetros, reglas magnéticas etc.. pero los más utilizados son estos por su sencillez y versatilidad. También existen los «resolver» que proporcionan una señal analógica (en voltios) de la posición.

Si un ventilador brushless no lleva escobillas tiene que llevar otro sistema para conocer la posición del rotor y conmutar las fases de las bobinas: el detector de efecto hall. Podemos utilizar este detector para contar vueltas del rotor.

Ventilador CPUVentilador CPU desmontado

Ventilador de CPU, y su despiece. Ya expliqué en ventiladores como hacerlo.

Esto es lo que queda.

Piezas del ventilador

1- Detector de efecto hall con salida digital, posiblemente un UGNxxxx de allegro.
2- Diodo serie con la alimentación, protege contra inversión de polaridad.
3- Transistores de conmutación de las bobinas.

Eliminamos las aspas del rotor y todos los componentes del circuito, y conectamos los 3 cables directamente al detector de efecto hall.

Mas piezas de ventilador

Ya esta terminado, a probarlo.

Terminado

Conecto los terminales de alimentación a 12V y el tester en posición de voltios a la salida. Giro lentamente el rotor y marco los puntos donde cambia la lectura del tester de 0V a 12V. En la imagen las líneas rectas son las transiciones, los 0 indican 0V y los 1 12V. Bueno funciona, pero solo han salido 2 pulsos por revolución (4 transiciones). Es normal, el imán del rotor solo tiene 4 polos. Como experimento sirve pero no tiene mucha utilidad un encoder de 2 pulsos por vuelta. Podría utilizarse para medir velocidades, pero no posiciones.

Visto el resultado voy a mejorarlo. Desmontaré otro ventilador y cambiaré el detector hall digital por uno analógico, como el usado en el experimento de «usando detectores de efecto hall«. Al ser un detector analógico su salida es proporcional a la intensidad del campo magnético, que es proporcional a la posición de los polos respecto del detector. Polo N sobre el detector = máxima salida positiva, polo S sobre el detector = máxima salida negativa. Cero voltios en las uniones entre polos.

En las fotos superiores el segundo ventilador ya desmontado y vuelto a montar con el sensor analógico. En este caso el conjunto es un «resolver»: proporciona una señal analógica proporcional al ángulo del rotor. Podría servir, por ejemplo, para medir el ángulo de una articulación de un brazo robot. La ventaja frente a un potenciómetro es que no tiene ruido (el potenciómetro tiene un cursor que roza con la capa resistiva y puede dar lecturas falsas), no tiene desgaste (es sin contacto) y puede trabajar a más velocidad.

En la foto inferior la prueba de fuego. Giro el rotor y tiene que dar dos picos de tensión y dos valles por cada vuelta (el imán es de 4 polos, 2 Norte y 2 Sur. Además tenemos 4 cruces por cero en cada giro.

Pruebas

1- Esto es un giro completo del rotor. Como puede verse la frecuencia disminuye porque he girado el rotor a mano y va perdiendo velocidad con el rozamiento.
2- Esto no esta bien. Al mover el rotor aparecen señales de mayor amplitud que el resto, por arriba y por abajo. La amplitud máxima tiene que ser constante para todas las vueltas.

Como creo que ya se cual es el problema voy a hacer otra prueba. Con el rotor mismo montaje de prueba y el rotor parado presiono sobre él en el sentido del eje.

Mas pruebas

Presionando en el sentido de la flecha roja se observa el oscilograma de arriba. Esto es porque el eje tiene demasiada holgura y al presionar se aproxima el rotor al detector. Esto no esta bien ya que el voltaje de salida tiene que depender solo de la posición angular del eje, no de otros parámetros.

Conclusión: no se puede hacer un resolver útil con un ventilador por la holgura excesiva en sentido axial que tiene. Probablemente con un motor brushless de más calidad sí sea posible. En cuanto tenga una unidad de CDROM averiada probaré con el motor de giro del disco. Además estos motores ya tienen los detectores hall analógicos soldados por lo que las modificaciones serán mínimas.