Tabla de contenido:
Video: Decodificador rotatorio simple: 4 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
Este instructivo describe un método simple para decodificar un codificador rotatorio secuencial usando un Arduino Uno R3.
Las rutinas de software compacto se utilizan para contar el número de transiciones, eliminar el rebote de los contactos y determinar la dirección de rotación. No se requieren componentes ni tablas de búsqueda adicionales.
Se proporcionan versiones del código de interrupción y no interrupción.
La versión de interrupción del código solo requiere un pin de interrupción.
Imágenes:
- La foto de apertura muestra el codificador ensamblado.
- La captura de pantalla muestra el código para la versión de interrupción y el recuento cuando el eje del codificador se gira en sentido horario y antihorario.
- El video muestra el recuento durante la rotación rápida.
Paso 1: diagrama de circuito
El diagrama de cableado del codificador se muestra en la figura 1.
Los cables de puente se sueldan directamente a los pines del codificador.
Intercambie los dos cables azules si se invierte la dirección de conteo.
Paso 2: Lista de piezas
Las siguientes piezas se obtuvieron de
- 1 solo Arduino UNO R3 con cable USB.
- 1 solo codificador rotatorio secuencial (EC11 o equivalente) con interruptor.
- 1 solo botón para adaptarse al eje.
- 3 solo cables de puente Arduino macho a macho.
Paso 3: teoría
Los codificadores rotatorios secuenciales generan dos ondas cuadradas, cada una de las cuales se desplaza 90 grados como se muestra en la Figura 1.
Los patrones lógicos en el Contacto A y el Contacto B son diferentes cuando el eje se gira en el sentido de las agujas del reloj (CW) y en el sentido contrario a las agujas del reloj (CCW) a través de las posiciones 1 a 6.
Los métodos comunes para determinar la dirección de rotación incluyen:
- hardware
- interrupciones gemelas
- tablas de búsqueda de patrones
Este proyecto utiliza un método de software que no requiere tablas de búsqueda. [1]
Dirección
En lugar de mirar los patrones de salida del Contacto A y el Contacto B, centrémonos en el Contacto A.
Si tomamos una muestra del Contacto B después de cada transición del Contacto A, notamos que:
- El contacto A y el contacto B tienen estados lógicos opuestos cuando el codificador se gira CW
- El contacto A y el contacto B tienen el mismo estado lógico cuando el codificador se gira en sentido antihorario
Código real:
// ----- Contar transiciones
CurrentStateA = stateContactA (); if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); if (CurrentStateA == CurrentStateB) Count ++; if (CurrentStateA! = CurrentStateB) Count--; LastStateA = CurrentStateA; }
Este método ofrece las siguientes ventajas:
- no se requieren tablas de búsqueda
- solo se requiere una sola línea de interrupción
Rebote
Todos los codificadores mecánicos sufren de "rebote de contacto".
Si un contacto del interruptor no se cierra o se rompe limpiamente, su estado lógico oscilará rápidamente de ALTO a BAJO hasta que el contacto del interruptor se estabilice. Esto da como resultado recuentos falsos.
Un método para suprimir el rebote de los contactos es agregar un pequeño capacitor a través de cada contacto del interruptor. El condensador y el resistor pull-up asociado forman un integrador que efectivamente pone en cortocircuito las altas frecuencias y permite que el voltaje del interruptor suba / baje con gracia.
La desventaja de este enfoque es que se pueden perder las transiciones si el eje del codificador se gira rápidamente.
Eliminación de rebotes de software
Este método utiliza dos contadores (Abierto, Cerrado) que se han puesto a cero. [2]
Una vez que se detecta una transición en el contacto A:
- Sondear continuamente al Contacto A.
- Incremente el contador de Apertura y restablezca el contador de Cerrado, siempre que el Contacto A sea ALTO.
- Incremente el contador Cerrado y reinicie el contador Abierto, siempre que el Contacto A esté BAJO.
- Salga del bucle cuando uno de los contadores alcance un recuento predeterminado. Estamos buscando efectivamente el período de estado estable después de cualquier rebote de contacto.
Código real:
// ----- Contacto de rebote A
while (1) {if (digitalRead (ContactA)) {// ----- ContactA está Abierto Cerrado = 0; // Integrador opuesto vacío Open ++; // Integrar if (Open> MaxCount) return HIGH; } else {// ----- ContactA is Closed Open = 0; // Integrador opuesto vacío Cerrado ++; // Integrar if (Closed> MaxCount) return LOW; }}
No es necesario eliminar el rebote del contacto B, ya que las transiciones del contacto A y el contacto B no coinciden.
Contando
Un "retén" mecánico duplica efectivamente su recuento, ya que se registran dos recuentos entre los clics (consulte la figura 1).
El número de "retenciones" se puede determinar usando aritmética de módulo 2 como se muestra a continuación.
Código real:
// ----- Contar "retenciones"
if (Recuento% 2 == 0) {Serial.print ("Recuento:"); Serial.println (Count / 2); }
Referencias
Puede encontrar más información en:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
Paso 4: software
Este proyecto requiere una versión reciente de Ardino Uno R3 IDE (entorno de desarrollo integrado) que está disponible en
Descargue cada uno de los siguientes dos bocetos de Arduino (adjuntos)
- rotary_encoder_1.ino (versión de sondeo)
- rotary_encoder_2.no (versión de interrupción)
Haga doble clic en su versión preferida y siga las instrucciones en pantalla.
Disfrutar …
Haga clic aquí para ver mis otros instructivos.
Recomendado:
Temporizador con Arduino y codificador rotatorio: 5 pasos
Temporizador con Arduino y Codificador Rotatorio: El temporizador es una herramienta de uso frecuente tanto en actividades industriales como domésticas, este montaje es económico y fácil de realizar, además es muy versátil, pudiendo cargar un programa elegido según necesidades. Hay varios programas escritos por mí, para Ardui
Brazo robótico controlado por codificador rotatorio: 6 pasos
Brazo robótico controlado por codificador rotatorio: Visité howtomechatronics.com y vi el brazo robot controlado por bluetooth allí. No me gusta usar bluetooth, además vi que podemos controlar el servo con codificador rotatorio, así que lo rediseñé para poder controlar el robot. brazo use codificador rotatorio y regístrelo
Reemplazo del codificador rotatorio ISDT Q6: 4 pasos
Reemplazo del codificador rotatorio ISDT Q6: este tutorial es para ayudar a las personas cuyos codificadores Q6 se han estropeado con el tiempo y ahora no se pueden utilizar. El mío comenzó a desplazarse en direcciones aleatorias y erráticas, e incluso después de volver a aflojar las juntas de soldadura y limpiar el codificador con alcohol, todavía era disfuncional
Cómo hacer un decodificador de línea telefónica DTMF (tono) simple: 3 pasos
Cómo hacer un decodificador de línea telefónica DTMF (tono) simple: este es un proyecto simple que le permite decodificar señales DTMF básicamente en cualquier línea telefónica. En este tutorial, usamos el decodificador MT8870D. Estamos usando un decodificador de tonos prediseñado porque, créanme, es un dolor de cabeza intentar hacerlo con
Cómo usar el motor paso a paso como codificador rotatorio y pantalla OLED para pasos: 6 pasos
Cómo usar el motor paso a paso como codificador rotatorio y pantalla OLED para pasos: En este tutorial aprenderemos cómo rastrear los pasos del motor paso a paso en la pantalla OLED. Mire un video de demostración. El crédito para el tutorial original es para el usuario de YouTube " sky4fly "