L18: Control digital de motores - myTeachingURJC/Mecatronica GitHub Wiki

Sesión Laboratorio 18

  • Tiempo: 2h
  • Objetivos de la sesión:
    • Aprender a generar señales PWM
    • Controlar la intensidad de LEDs
    • Mover Servos

Contenido

Introducción

Nuestros circuitos son digitales. Las señales que generamos sólo pueden tener los valores 0 y 1. Sin embargo, estas señales son suficientes para controlar la potencia que se envía a los actuadores del robot. Veremos experimentalmente cómo podemos cambiar la luminosidad de los LEDs, cómo mover los motores a diferentes velocidades y cómo usar la técnica de PWM para el control de servos, tanto servos angulares como de rotación continua

Señales PWM

Las señales de PWM tiene dos parámetros: La frecuencia y la anchura del pulso. La anchura del pulso determina el valor medio de potencia que transmite la señal, y determina su ciclo de trabajo. La frecuencia hay que ajustarla en función del medio donde estamos transmitiendo la potencia

Por ejemplo, si queremos controlar la intensidad de luz emitida por un LED, la frecuencia debe ser igual o superior a 50Hz para no ver el parpadeo. En el caso de controlar la potencia que se transmite a un motor tiene que ser lo suficientemente alta como para que el motor no la pueda seguir, y que responda así a su valor medio. Suele ser una buena idea utilizar frecuencias NO audibles para evitar escuchar tonos indeseados

Generador de señales PWM

La estructura general de un generador de señales PWM está compuesta por dos elementos:

  • Contador del sistema Módulo M: El parámetro M determina la frecuencia de la señal pwm. Es decir, el periodo T
  • Un comparador: Genera la señal binaria de salida comparando el valor de la anchura que queremos para el pulso (en ciclos) con el valor actual del contador. Es el parámetro W

En los circuitos que vamos a realizar, utilizaremos como unidades los ciclos del reloj del sistema. Por ello siempre lo primero a realizar será calcular T y W en ciclos, a partir de sus unidades de Tiempo (o frecuencia)

En todos los ejemplos vamos a utilizar una frecuencia de 50Hz (aunque podría ser cualquier otra). Para calcular el periodo en ciclos simplemente dividimos la frecuencia del sistema (12Mhz) entre la frecuencia objetivo:

$$ T = \frac{12Mhz}{50Hz} = \frac{12.000.000 Hz}{50 Hz} = 240.000 Ciclos $$

Esto se realiza con un contador módulo M = 240_000. Utilizaremos uno de 32 bits que nos permite implementar muchas frecuencias (y no sólo la de 50Hz)

El Ciclo de trabajo (P) nos indica la cantidad de potencia que se transmite. Se expresa en porcentaje. Un ciclo de trabajo del 10% significa que sólo se tranmite el 10% de la potencia

La anchura W (en ciclos) la calculamos multiplicando el ciclo de trabajo por el periodo:

$$ W (ciclos) = P.T $$

Así, por ejemplo, si queremos un ciclo de trabajo del 50%, a una frecuencia de 50Hz (240_000 ciclos), la anchura del pulso debe ser de W = 0.5 * 240_000 = 120_000 Ciclos

Ejemplo 1: Señal PWM de 50Hz y ciclo de trabajo del 10%

Para comprender el funcionamiento, y ver su implementación, vamos encender LEDs con distinta intensidad. Según la cantidad de potencia transmitida (el ciclo de trabajo), el LED se encenderá con mayor o menor intensidad

Como no queremos ver el parpadeo del LED, necesitamos usar una frecuecia MAYOR O IGUAL a 50Hz. Esto ya lo hemos calculado, mi parámetro T será de 240_000 ciclos

Para encender el LED al 10%, necesitamos una anchura de pulso de W = 0.1 * T = 24_000 Ciclos

Para comprobar que la señal generada es correcta, además de mostrarla por el LED0, la mediremos con el analizador lógico

(01-PWM-50hz-CT10.ice)

Esto es lo que obtenemos en el analizador lógico

Si miramos la placa, vemos que el LED0 luce, pero no tanto como cuando lo conectamos directamente al bit constante 1

EXPERIMENTO: Encender el LED1 con el bit constante 1, y comparar la luminosidad

¡Ya sabemos cómo controlador la pontencia!. Así de fácil es

Ejemplo 2: LED a dos intensidades

Vamos a hacer ahora que el mismo LED0 luzca a dos intensidades diferentes, que se corresponden con los ciclos de trabajo del 10% y del 60%. Necesitamos calcular las anchuras W0 y W1 correspondientes a estos ciclos de trabajo

  • W0 = Anchura para ciclo de trabajo del 10% = 0.1 * T = 24_000 ciclos
  • W1 = Anchura para ciclo de trabajo del 60% = 0.6 * T = 144_000 ciclos

Los valores W0 y W1 los introducimos al comparador, usando un multiplexor 2-1. Cuando el pulsador está apretado se envía W1, por lo que el LED luce más. Cuando se suelta, la potencia cae al 10% y el LED0 baja su intensidad

(02-PWM-50hz-LED-2-intensidades.ice)

Ejemplo 3: LEDs a 8 intensidades con tabla

Ahora queremos que el LED luzca con 8 intensidades diferentes. Utilizaremos un pulsador para cambiar a la siguiente intensidad. Lo que hacemos ahora es colocar los valores de las anchuras del pulso (en hexadecimal) en una tabla de 8 posiciones

(03-PWM-50Hz-LEDs-tabla.ice)

El contador direcciona esta tabla y genera el valor del ancho del pulso (intensidad del led). Cada vez que apretamos el pulsador se incrementa el contador y se obtiene la siguiente anchura. Al llegar a la última (dirección 7) se vuelve al comienzo (dirección 0)

Control de Servos

Los servos se controlan mediante señales PWM. En este caso, la anchura no se usa para transmitir potencia, sino que sirva para especificar la posición del servo. La frecuencia típica es de 50Hz, aunque esto depende del servo utilizado

image

El ancho del pulso es el que determina la posición a la que se moverá el servo. Los valores dependen del modelo de servo, pero típicamente un pulso de 1ms lleva el servo al extremo derecho y uno de 2ms al izquierdo. Valores entre 1ms y 2ms lo posicional linealmente entre 0 y 180 grados

Ejemplo 4: Servo a dos posiciones

Vamos a hacer un circuito para que el servo se ponga en 2 posiciones. Por defecto el servo estará en una posición (por ejemplo el centro) y al apretar el pulsador se moverá a otra posición (extremo izquierdo o derecho)

Lo primero que vamos a hacer es calcular la anchura del pulso en ciclos. Vamos a calcular los siguientes valores:

  • Extremo izquierdo: 2ms
  • Centro: 1.5ms
  • Extremo derecho: 1ms

Para ello basta con dividir esta anchura (Ton) entre el Periodo del reloj del sistema (T). En el caso de la Alhambra II el periodo del sistema es de 1 / 12Mhz. O lo que es lo mismo: Multiplicar Ton por la frecuencia: Ton * 12Mhz

  • Anchura Extremo izquierdo: $W_I = \frac{T_{on}}{T} = T_{on}.F = 2ms.12Mhz = 2.10^{-3}.12.10^{6} = 24.10^3 = 24000 \space ciclos$

  • Anchura Centro: $W_c = T_{on}.F = 1'5.10^{-3}.12*{6} = 18000 \space ciclos$

  • Anchura Extremo derecho: $W_D = T_{on}.F = 10^{-3}.12^6 = 12000 \space ciclos$

Resumimos los resultados en esta tabla

Posicion Ton(ms) Ton(ciclos)
Extremo izquierdo 2 24000
Centro 1.5 18000
Extremo derecho 1 12000

Usamos un multiplexor para seleccionar la anchura que queremos, con el pulsador:

(04-Servos-dos-posiciones.ice)

Ejemplo 5: Servo a tres posiciones

En este ejemplo el servo comienza en el Centro. Al apretar SW2 el servo se mueve a la derecha. Al apretar SW1 lo hace hacia la izquierda. Se utilizan multiplexores encadenados para seleccionar estas tres posiciones

(05-Servos-tres-posiciones.ice)

  • RETO 1: ¿Sabrías cómo modificar este circuito para que el servo se mueva a 3 posiciones con cada pulsación de un botón?. Pista: puedes utilizar una Tabla como la mostrada en el ejemplo 3. También puedes utilizar un autómata como los vistos en la sesión L16 para la partícula o en la sesión L17 para tocar las notas musicales

  • RETO 2: Modifica el circuito anterior para que la secuencia se genere AUTOMATICAMENTE, pasando de una posición a la siguiente cada segundo

  • RETO 3: Haz que se suenen las notas DO-RE-MI en las posiciones izquierda, centro, derecha respectivamente

Servos de rotación contínua

🚧 TODO 🚧
(DEBUG)

  • Fotos y dibujos. Descripción de un servo de rotación continua
  • Mismos cálculos! El controlador es compatible entre servos normales y de rotación continua
  • Ejemplo 6: Movimiento izquierda-derecha con pulsadores: La única diferencia y quevan en la dirección contraria a los servos normales
  • ¡Calibración! Utilizar el ejemplo 6 para que la rueda no se mueva cuando no hay botones apretados

Práctica: Robot diferencial mínimo

  • Configuración:
    • Dos servos de rotación continua
    • Dos sensores infrarrojos (binarios)
    • Placa con FPGA

Implementaremos un controlador muy básico. Cada servo sólo tendrá 3 velocidades: Parado, adelante y atrás

Circuito 1: Calibración individual de servos

(Cto-01-calibracion-servos.ice)

Utilizar el circuito de PWM de control de un servo para establecer los valores necesarios para que ambos servos, el izquierdo y el derecho estén en 3 posiciones: Parado, adelante y atrás.

¡OJO!: Lo que se considera como adelante es el movimiento del servo que hace que el robot avance. Al estar dos los motores en una posición de espejo, el valor que hace que un motor avance hará que el otro vaya hacia atrás

Circuito 2: Servo con tabla de velocidades

Para permitir que el servo vaya a 3 velocidades, utilizaremos una tabla (memoria) de 4 posiciones. La última posición tendrá también el valor de parado. En este circuito colocamos los valores adecuados para cada servo,y comprobamos que funcionan. Cada vez que se aprieta el pulsador se cambia a la siguiente velocidad: 0-1-2-0-1-2...

Circuito 3: Calibración movimientos del robot

El controlador del servo lo metemos en su propio bloque, para que sea más fácil de integrar en nuestros circuitos. Como parámetro le pasamos la tabla de velocidades. El objetivo ahora es comprobar que el robot puede realizar diferentes movimientos: adelante, atrás y parado

Al apretar el pulsador pasamos por la secuencia de movimietnos: Parado, adelante, atrás

Circuito 4: Movimientos temporizados

Para probar el robot haremos que siga una secuencia de movimientos temporizados, por ejemplo que cambie cada segundo. Usamos una tabla de 3 bits, lo que nos permite meter hasta un total de 8 movimientos prefijados

Circuito 5: Movimientos temporizados

TODO

Circuito 6: Control con teclas

TODO

Circuito 7: Calibración de los sensores

TODO

Circuito 8: Seguimiento línea negra

TODO

¡A practicar!

Sigue trabajando en tu proyecto

Conclusiones

TODO

Autores

Licencia

Créditos

TODO

Enlaces