Dónde colocar el circuito de rebote para botones remotos y codificadores giratorios

2

Tengo una aplicación donde es necesario montar un pulsador y un codificador rotatorio mecánico de código gris (entradas de usuario) lejos de la PCB principal. 24 "- 48" de distancia. Esto es por razones de espacio y embalaje.

¿Está bien tener el circuito RC de desmontaje en la PCB y los conmutadores / codificadores conectados de forma remota a través del cable, o es necesario que el circuito de rebote esté con los interruptores?

Circuito del codificador de la hoja de datos:

    
pregunta GisMofx

3 respuestas

5

El debouncing (y cualquier filtro de ruido, circuitos de protección contra ESD) debe estar en la PCB principal.

Los conmutadores en sí no necesitan nada local para ellos, ni sería óptimo tener circuitos adicionales allí.

Editar: si el codificador código gris está activo (óptico o magnético), algunos circuitos remotos podrían estar útil - ciertamente, desvío de suministro, tal vez algunas resistencias en serie en las salidas, tal vez incluso un regulador de suministro local.

    
respondido por el Spehro Pefhany
0

Ya que mencionó "aplicación", asumiré que está ejecutando un código que supervisa los botones y los contactos. Si ese es el caso, puedo decirle por mi experiencia que es mejor hacer su rebote de manera programática. Considere desarrollar una función a la que llame ocasionalmente para verificar si hay pulsaciones de botón. Sin profundizar en ningún idioma en particular, lo que haría la función es esto ...

  1. Como inicialización única, establezca una variable en el valor del temporizador de milisegundos de su sistema, y quizás inicialice una "variable de botón" como estática , como un mapa de bits de todos sus botones, y configúrela en cero (o "-1" si "ALTO" es el estado predeterminado de sus botones). Además, inicialice dos variables, una para representar su tiempo de rebote en milisegundos (comience con 20, por ejemplo).
  2. Cuando su aplicación llame a su función, debería marcar el botón (o varios botones). Si ningún botón ha cambiado de estado en comparación con su variable almacenada, simplemente devuelva la variable de estado de botón almacenada existente.
  3. Si cualquier botón ha cambiado el estado, verifique el temporizador de milisegundos de su sistema actual, reste el tiempo almacenado en la variable del temporizador que inicializó previamente. Si la diferencia es menor que su tiempo de rebote, simplemente ignore el cambio y devuelva la variable de estado del botón sin modificar.
  4. Si llega a este paso, entonces uno o más botones han cambiado de estado Y al menos ha pasado su tiempo de rebote especificado. En este caso, almacene el nuevo estado del botón en el mapa de bits de su botón, reinicie el temporizador al milisegundo actual del sistema y devuelva la variable del botón.

Eso es todo lo que hay también. No solo se ha ahorrado al menos 2 componentes por botón (la red RC), y ha creado efectivamente un filtro de "muro de ladrillo", mucho más preciso y consistente de lo que sería la red RC. Además, ha hecho que sea muy fácil cambiar el importante tiempo de rebote sin necesidad de desoldar las piezas.

Una nota sobre esta metodología, también es posible llamar a una función similar mediante una interrupción en lugar de llamarla como parte de una secuencia de round-robin en su ciclo de programa principal. En mi opinión, esta NO es una buena idea, porque un contacto ruidoso defectuoso generaría muchas interrupciones que podrían atascar fácilmente su programa. Por lo general, en sistemas más grandes donde una interrupción en realidad informa los aciertos de los botones (como una interrupción del teclado en una computadora), los aciertos de los botones ya han sido preprocesados por una pequeña MCU dedicada en el propio teclado. Si lo está haciendo en un sistema más pequeño y está haciendo TODO el rebote, el método que sugiero es una mejor opción.

    
respondido por el Randy
0

Si es mejor manejar el rebote de botones mediante programación, en hardware o una combinación de los dos, depende de la naturaleza del rebote. Algunos tipos de botones tienen una resistencia que puede cambiar erráticamente a medida que se presionan; si se presionan lentamente, este período errático puede extenderse en una fracción sustancial de un segundo. Si un procesador puede distinguir entre una resistencia baja, una resistencia alta y un circuito abierto, ignorar la pulsación del botón hasta que se detecte una resistencia baja, y ignorar las liberaciones hasta que se detecte un circuito abierto, funcionará bien. Sin embargo, si un procesador no puede hacer tales distinciones, puede haber un límite para que gran parte del software pueda hacerlo sin hardware adicional.

El enfoque más robusto en muchos casos es diseñar un sistema con contactos normalmente abiertos y normalmente cerrados; un enfoque de este tipo puede producir una corriente quiescente cercana a cero tanto en el estado de botón pulsado como en el de botón no pulsado, mientras que sufre de un rebote prácticamente nulo de cualquier forma. No veo ningún impedimento técnico para diseñar un codificador rotatorio con una funcionalidad similar, pero no conozco ninguno de estos codificadores.

    
respondido por el supercat

Lea otras preguntas en las etiquetas