jueves, 17 de enero de 2008

Integracion de PWM y Puente en H

Como ya hemos comentado previamente, la velocidad de nuestro robot la vamos a regular mediante PWM (pulse width modulation) o modulación de ancho de pulso. También hemos comentado que para el manejo de los motores usaremos un puente en h que estamos creando. Aquí vamos a ver como integrar las dos cosas y no morir en el intento.

Como dijimos en el post anterior (http://celtico-celtico.blogspot.com/2008/01/consideraciones-del-puente-en-h.html) el puente en H tiene 5 entradas: 2 entradas para los voltajes positivo y negativo de la bateria (fuerza con la que se mueven los motores) y 3 entradas para el manejo lógico del puente en H en sí (dos para las direcciones y una para tierra).

Un ejemplo de puente en H se muestra a continuación:

No es exactamente el que usamos nosotros pero nos sirve para la explicación. Las entradas de avance y retroceso son las que indican la dirección en la que van a girar los motores, vamos a llamarlas de una forma más técnica InputA e InputB. Con la siguiente tabla podemos ver el funcionamiento del motor dependiendo de los valores de las entradas:

 input | output
A | B | A | B
----------------
0 0 | libre -->
Paro: Motores sin corriente
1 0 | 1 0 --> Giro hacia un sentido
0 1 | 0 1 --> Giro hacia otro sentido
1 1 | 1 1 --> Paro: Bloqueo de motores (intentar evitarlo)

Lo que nos queda entonces es poder aplicar el pwm al puente en H. En otros integrados ya existentes (L293, L298...) ya tienen la entrada de habilitar donde podemos poner el pwm. En el que creamos nosotros por contra no dispone de ella, por lo que deberemos aplicar la señal pwm sobre las entradas de control del puente en H dirtectamente.

La movida es que necesitaríamos 4 señales de pwm (2 motores y 2 entradas por motor) y el integrado (PIC16F876) solo dispone de 2 (por lo menos por hardware). Podríamos crear 2 señales pwm manejadas por software, pero creo que no sería la mejor solución, primero por la gestión de recursos del propio chip y segundo por la necesidad de dejar entradas libres del pic para otros usos.

Entonces fué el momento de sacar mis conocimientos Informática básica, fundamentos de los computadores y fundamentos técnicos de los computadores para acordarme de aquellas puertas lógicas tan chulas que me acompañaron en la carrera. La solución al problema es dar una señal pwm a cada motor. Cada entrada del motor tendrá una puerta and (hablamos de puertas lógicas) que mezcle la señal de pwm con la señal de habilitación.

Vamos a ir por partes y lo primero que quiero indicar para el que no sepa mucha lógica booleana es que hace una puerta and. Aquí está la tabla de verdad:

 input | output
A | B | A
----------------
0 0 | 0

1 0 | 0
0 1 | 0
1 1 | 1

Por lo que si ponemos una puerta and a cada una de las entradas del puente en H con las señales de pwm y de "habilitación" conseguimos sacar ó 0 ó la señal de pwm:

Podemos ver el comportamiento de las entradas, donde x significa el valor del pwm, h entrada de habilitación y P entrada pwm:

 input | output
H | P | A
----------------
0 x | 0

1 x | x
Cabe destacar que la otra entrada del puente en H es inversa. Por lo que si una está habilitada la otra no. Por lo que siempre correrá por el puente los siguiente:

pwm | direccion  | entrada A | entrada B
-----------------------------------------
x | adelante | x | 0

x | atras | 0 | x

Las puertas and utilizadas son las del chip 74HCT08


Creo que esto nos va a servir para el movimiento de nuestros motores. Pero esto es la teoría, ahora hay que empezar a montar esto a ver si funciona. En cuanto tenga algo espero poder subir fotos o algún vídeo.