Cambie la topología de rebote para el codificador rotatorio [duplicado]

Estoy buscando contrarrestar la salida de un codificador rotatorio que estoy usando como un interruptor a tierra con un pull-up. Buscando en línea, vi el circuito antirrebote en la Figura 2 y leí sobre él aquí . Sin embargo, también vi la primera imagen a continuación y leí sobre ella aquí . ¿Es uno mejor que el otro para mi aplicación? De acuerdo con la hoja de datos, el GPIO del imx6sl que estoy usando tiene un disparador Schmitt y una histéresis de entrada, por lo que asumo que está bien tener un capacitor conectado.

Figura 1

Figura 1

Figura 2

Figura 2

¿Qué codificador estás usando (específicamente)?
@DmitryGrigoryev Esta pregunta es sobre la diferencia en la topología entre los dos circuitos. Yo creo que es diferente.
@StephanGM No creo que el análisis de la mala versión del circuito tenga mucho valor, y la buena es exactamente igual en ambas cuestiones. Teniendo en cuenta que esta pregunta es una respuesta automática, no veo por qué querrías abrirla. Votaré tu respuesta si eso te hace sentir mejor :)

Respuestas (3)

Suponiendo que la MCU y Schmitt Trigger tienen una resistencia de entrada infinita y modelándolos como abiertos, podemos cerrar el interruptor y ver qué sucede.

Con el interruptor cerrado en la figura 2, la resistencia R2 está en serie con el condensador, lo que significa que hay 0 V CC en la entrada.

En el primer diagrama, con el interruptor cerrado, la resistencia R está en paralelo con el capacitor, lo que significa que habrá un voltaje en la entrada a menos que Rpull-up >> R, lo que hace que la caída de voltaje en R sea insignificantemente pequeña. tener diferentes valores de resistencia significaría que la constante de tiempo sería diferente para la carga y la descarga y nuestro rebote sería inconsistente entre los flancos ascendentes y descendentes.

Por lo tanto, la primera imagen no es una alternativa viable a la figura 2 y tampoco elimina correctamente el rebote del interruptor. La figura 2 es preferible.

La Figura 2 es preferible, suponiendo que la fuente de alimentación de E/S de su MCU es la misma que el voltaje pullup para R1, y los niveles de voltaje CMOS están en uso.

Conectando los condensadores directamente a los pines de la MCU, es posible que pueda salirse con la suya, pero es mejor tener cierta resistencia en serie, como unos pocos cientos de ohmios hasta 1K. Si elige no usar resistencias, debe asegurarse de que el dv/dt en el riel Vdd nunca pueda ser inferior a i METRO A X C dónde i METRO A X es la corriente máxima del diodo de sujeción (para evitar el enclavamiento).

Supongo que ha identificado alguna necesidad de eliminación de rebotes de hardware; por lo general, no es necesario y la eliminación de rebotes de firmware (entradas encuestadas) hace el trabajo. Si está utilizando interrupciones, entonces puede ser necesario eliminar el rebote del hardware, pero eso rara vez es deseable.

He usado antirrebote de sondeo de software con muy buenos resultados. Este enfoque requiere que pueda sondear los pines de entrada con la frecuencia suficiente para no perderse la actividad del interruptor:

  1. entradas de encuesta
  2. si alguno de los interruptores ha pasado de offa on, almacene ese valor
  3. ignorar más transiciones por un período de tiempo para evitar el cambio de rebote

Esta técnica se puede utilizar junto con el dispositivo antirrebote de hardware de la figura 2, especialmente si no puede sondear con mucha frecuencia.

Una combinación de rebote de software y hardware le permitirá disminuir el tiempo de "ignorar" en el lado del software y disminuir la constante de tiempo RC en el lado del hardware. Esto puede ser mejor que el rebote solo de hardware o solo de software.