Next: D. Unidad hardware de
Up: DISEÑO DE ROBOTS ÁPODOS
Previous: B. Montaje de los
  Contents
C. Control de 8 servos con un único comparador
En este apéndice describimos el funcionamiento del programa servidor
que se ejecuta en un 6811 y que permite controlar hasta 8 servos usando
un único comparador. Este es el servidor que se está usando para Cube
Reloaded. Las ideas son las siguientes:
- El intervalo de 20ms (50Hz) se divide en 8 ``ventanas'' de 2.5ms
(400Hz). En cada ventana se genera la señal para controlar un servo.
El ancho máximo de la señal del servo es 2.3ms por lo que cabe perfectamente
en la ventana. Cada vez que se produce una interrupción que te indica
el comienzo de una nueva ventana, hay que temporizar la anchura (que
se puede hacer con otro comparador diferente). Así, la primera interrupción
te indica que hay que actualiar el servo 1, la segunda interrupción
el servo 2... así hasta el servo 8 y vuelta a empezar.
- Cada ventana de 2.5ms se puede dividir en dos partes, una en la que
la señal PWM está a nivel alto (la anchura es la posición POSI) y
otra en la que la señal está a nivel bajo (2.5ms - POSI). La anchura
total es de 2.5ms, pero entre medias se ha producido otra interrupción
que te marca el paso del PWM del servo actual a 0.
En la figura se muestran las 8 ventanas de
tiempo en las que se divide el periodo de la señal PWM. Cada ventana
está asociada a un servo, en la que se genera la anchura del pulso.
Obsérvese que en cada ventana sólo hay una señal activa.
Figure:
Periodo de 20ms dividido en 8 ventanas de tiempo
|
En la figura se muestran las dos partes en las
que se divide una ventana. En la parte de la izquierda la señal PWM
está a 1 (Estado S1) y en la parte de la izquierda está a 0 (S0).
La anchura de cada parte está perfectamente determinada, ya que al
ser la anchura de la ventana fija (2.5ms) si la anchura del pulso
es de Ton, entonces la duración del estado S0 es de 2.5ms - Ton. Las
duraciones de cada pulso se encuentra almacenadas en una tabla. Cada
fila de la tabla indica el anchu del pulso dentro de la ventana de
tiempo correspondiente. Así la primera fila de la tabla indica la
duración del pulso para la ventana 1, la fila 2 para la ventana 2,
etc.
Figure:
Las dos partes dentro de cada ventana y la tabla de PWM
|
La programación del microcontrolador para poder generar las 8 señales
PWM se puede hacer con una única interrupción, que tiene que hacer
lo siguiente:
- Llega interrupción del comparador
- Si estamos en el estado S1:
- Poner la señal correspondiente al servo actual (ventana actual) a
1
- Activar el comparador para que la siguiente interrupción sea dentro
de Ton_1 ms
- Pasar al estado S0.
- Terminar
- Si estamos en el estado S0
- Poner señal correspondiente al servo actual (ventana actual) a 0
- Activar comparador para interrumpir dentro de 2.5 - Ton_1
- Incrementar puntero de la tabla PWM, para apuntar a la posición del
siguiente servo
- Pasar al estado S1.
- Terminar
Next: D. Unidad hardware de
Up: DISEÑO DE ROBOTS ÁPODOS
Previous: B. Montaje de los
  Contents
Juan Gonzalez
2003-12-20