Tengo un proyecto de hobby con una plataforma de robot móvil de cuatro ruedas, donde he adjuntado dos codificadores ópticos de rueda, que están conectados al microcontrolador:
(Fuente: https://www.dfrobot.com/wiki/images/b/b9/FIT0029_Encoder_Schematics.png )
El microcontrolador maneja la entrada del codificador mediante el uso de dos interrupciones, que están configuradas para activar el flanco ascendente. En general, la configuración funciona bien.
Sin embargo, el problema es que de vez en cuando se detectan falsas interrupciones, lo que imposibilita el seguimiento de la posición. Aquí hay un ejemplo de secuencia de diferencias de tiempo entre las interrupciones para una rueda específica: 0.059 0.059 0.060 0.061 0.064 0.063 0.058 0.006 0.064 0.062 0.060 0.025 0.034 0.058 0.060.
La diferencia de tiempo es más bien un contraste alrededor de 0.06, luego, de repente, el intervalo se divide en dos interrupciones, sumando alrededor de 0.06. También observo intervalos mucho más cortos, pero estos son fáciles de eliminar simplemente detectando el intervalo demasiado corto.
La división del intervalo podría estar relacionada con el perfil de diente de sierra del codificador, es decir, cuando el voltaje cae, debido a que alcanza la región del orificio, provoca algún tipo de oscilación corta que genera un flanco ascendente falso. He intentado reducir el problema usando un disparador Schmitt, cuyas entradas están conectadas a un filtro de paso bajo (combinaciones de 10kOhms, 9nF y 20kOhms y 9nF probadas, ¿no estoy seguro de si son óptimas?).
Esto reduce en gran medida los intervalos cortos, pero los más largos siguen siendo un problema. La configuración contiene muchos cables que también son posibles fuentes de interferencia.
Agradecería cualquier sugerencia sobre cómo eliminar las interrupciones falsas.
El disparador Schmitt que está utilizando específicamente no tiene un gran diferencial entre los umbrales de disparo. Si observa la hoja de datos, verá que para la operación de 4,5 voltios, Vhi tiene un valor mínimo de 2,16 voltios y Vlo podría ser tan alto como 1,79 voltios.
Ese es un rango de 370 mV y muy probablemente es demasiado bajo. Sin embargo, el DS indica que el diferencial en el peor de los casos es de 0,71 voltios, pero es motivo de reflexión.
El CMOS estándar probablemente sea mejor pero, por supuesto, tendrá dificultades para encontrar esa pequeña parte de 1 puerta.
La nota de Andy sobre la histéresis limitada podría mitigarse reduciendo la ganancia del fototransistor de detección. Intente reducir R3 de 10K hasta que no tenga ninguna interrupción, luego duplique ese valor para R3.
Los bordes detectados falsamente son un gran problema cuando el interruptor debe operar en un amplio rango de velocidad. La situación más difícil es una transición muy lenta de un hoyo. Un circuito Schmitt debe probarse cuidadosamente para este caso.
Hay algunas otras causas menos probables:
Pon el robot sobre ladrillos. Haga un lazo de alambre aislado de 2" por 2", péguelo con cinta adhesiva a un trozo delgado de cartón para que pueda sondear los campos magnéticos. Busque grandes transitorios con su antena Hfield.
¿Tiene los voltajes LED VDD combinados con la potencia del motor paso a paso?
¿Tiene los cables de entrada/salida del 7414 incluidos o expuestos a la alimentación del motor paso a paso?
¿Qué tan grave puede ser esto? Suponga que la potencia del motor es de 10 amperios, cambiando en 10 nanosegundos, o dI/dT = 10^+9 amperios/segundo. Supongamos un bucle de 4" por 4" del cable de la víctima, ubicado a 4" del bloqueador. Matemáticas:
dannyf
Vilí
dannyf
david tweed