Paso 3: El Motor
Los pines 1 y 2 son los cables para el motor DC. Se aplica un potencial y las vueltas del motor. Cambiar pernos y el motor gira al revés. Es así de simple. Utilizar un puente H para esto.
El codificador es casi tan simple. El pin 3 es tierra y Pin 4 Vcc (5V). Éstos suministran energía al codificador. Pin 5 y 6 Pin son las dos salidas del codificador. En caso de que alguien está familiarizado con doble codificadores, aquí es cómo funcionan:
Conectado a la caja de cambios motor en algún lugar es un codificador que tiene un montón de ranuras radiales en el mismo. Vuelve con el resto de la caja de cambios. Se colocan dos sensores infrarrojos que las ranuras radiales y radios también puede romperán y restauración los rayos directamente, causando alternando 1 y 0. Por lo tanto, cuando el motor está girando, ya sea línea leerá 101010101010 a una tasa determinada por la velocidad del motor. Esto es útil para el control de velocidad y traducción. El más 1 y de 0, cuanto más lejos te has ido. Cuanto más rápido cambia, cuanto más rápido vas.
Así que ¿por qué necesitamos dos codificadores? Para determinar la dirección. Porque se compensan los dos sensores IR, ellos habían salida de un patrón que es específico a la dirección de la rotación. Si el motor gira una forma, la salida (Pin 5 Pin 6) 11, 10, 00, 01, repetición. Si el motor gira al revés, el patrón se invierte: 11, 00, 01, 10, repetición. Mirando el patrón, puede determinar la dirección de la rotación. Conseguiría específico acerca de las agujas del reloj y en sentido contrario, pero depende de cómo aguantan el motor y es muy fácil de descifrar su propio a través de la experimentación.
Codificación de la estampilla básica para utilizar el codificador:
Para determinar la velocidad del motor, utilizar la función count. Simplemente contar el número de impulsos de cualquiera de los pines del codificador durante un periodo de tiempo y obtendrá un número proporcional a la velocidad del motor.
CUENTA Pin5, 100, velocidad
Para esperar un cierto número de ciclos, utilizo un comando PULSIN dentro de un bucle for. La PULSIN hace el BS2, espere el próximo pulso del codificador antes de proceder al siguiente paso del bucle. Este código esperará números pulsos. La variable "variable" no es importante, pero también podría utilizarse para determinar la velocidad en teoría.
PARA i = 1 a n
PULSIN Pin5, 1, variable
SIGUIENTE
Determinación de la dirección es un poco más complicada. Tengo el sello de esperar a que el codificador alcanza un paso específico en el ciclo como 11 utilizando un if instrucción en un bucle. Una vez alcanzado el paso, verificar para ver que paso viene siguiente (en este caso, ya sea 10 o 01) usando un par de if declaraciones en otro bucle. Dependiendo del paso que viene a continuación, puede determinar cómo el motor está girando.
También es posible utilizar este método para medir pasivamente el desplazamiento absoluto del motor. Un sentido de giro se sumará a la dislocación, mientras que el otro sentido de giro se resta. De esta forma, si se empieza en 0, el motor un cierto ángulo y a lo nuevo, debe volver a 0 en lugar de la distancia recorrida. Este código comprueba la dirección una vez por ciclo y agrega o resta 1 de desplazamiento por consiguiente. Trabaja a velocidades de rotación moderadas, pero no a altas velocidades debido a la velocidad del reloj de la marca.
pin5 PIN 1
Pin6 PIN 0
DISP VAR palabra
Loop1:
IF pin5 = 1 y pin6 = 1 entonces dirección ' espere 11 paso de codificador
GOTO loop1
Dirección:
IF pin5 = 0 entonces cw ' ver que pin va bajo primero para determinar la dirección
IF pin6 = 0 entonces ccw
Dirección GOTO
CW:
DISP disp = 1 ' en este ejemplo, he hecho negativo positivo y en sentido contrario las agujas del reloj.
DEBUG? disp
GOTO loop1
CCW:
DISP = 1 disp
DEBUG? disp
GOTO loop1
Traté de escribir código para hacer esto sobre una base paso a paso para que en vez de esperar 11 a venir, comprobaría dirección a cada paso 4 veces la exactitud. Desafortunadamente, el sello no funciona lo suficientemente rápido como para eso. Un microcontrolador más rápido podría ser capaz de manejarlo. Aquí está el código, pero otra vez sólo funciona a velocidades muy bajas.
En primer lugar, el código establece que paso el codificador es a partir de y se dirige a la subrutina correspondiente a ese paso.
Desplazamiento comienza en 1 debido a un error de alambrado inherente.
Cada subrutina mira lo que era el paso anterior. Si el paso anterior fue CCW de este paso entonces el motor girar CW y se añade 1. De lo contrario, CCW es predeterminado y se restará 1. (Error de alambrado se produce aquí, pero no es demasiado importante)
A continuación, la subrutina espera para el siguiente paso y luego va a la subrutina correspondiente a ese paso.
Funciona muy bien en teoría pero hay muchos comandos para cada paso para que el BS2 no puede manejar lo suficientemente rápido.
un PIN 0
b PIN 1
LASTA VAR Bit
lastb VAR Bit
DISP VAR palabra
DISP = 1
ENTRADA de un
ENTRADA b
LASTA = un
lastb = b
IF a = 1 entonces a1
Si b = 1 entonces S01
GOTO S00
a1:
Si b = 1 entonces S11
GOTO S10
S01:
DISP = 1 disp
Lasta IF = lastb y 1 = 1 entonces disp disp = 2
DEBUG? disp
LASTA = 0
lastb = 1
S01Loop:
IF a = 1 y b = 1 entonces S11
IF a = 0 y b = 0 entonces S00
GOTO S01Loop
S11:
DISP = 1 disp
Lasta IF = 1 y lastb = 0 entonces disp disp = 2
DEBUG? disp
LASTA = 1
lastb = 1
S11Loop:
IF a = 1 y b = 0 entonces S10
IF a = 0 y b = 1 entonces S01
GOTO S11Loop
S10:
DISP = 1 disp
Lasta IF = lastb y 0 = 0 entonces disp disp = 2
DEBUG? disp
LASTA = 1
lastb = 0
S10Loop:
IF a = 1 y b = 1 entonces S11
IF a = 0 y b = 0 entonces S00
GOTO S10Loop
S00:
DISP = 1 disp
Lasta IF = lastb y 0 = 1 entonces disp disp = 2
DEBUG? disp
LASTA = 0
lastb = 0
S00Loop:
IF a = 1 y b = 0 entonces S10
IF a = 0 y b = 1 entonces S01
GOTO S00Loop