Cómo prevenir un disparo falso a la entrada del chip PIC

1

Estoy tratando de usar un dispositivo operado con batería en un proyecto más grande. El dispositivo se alimentó con 4 baterías AA que he reemplazado con una fuente de alimentación de + 5V. El dispositivo utiliza un chip PIC 16F505 y su rango operativo es de 2.2V a 5.5V. Hoja de especificaciones de PIC

He reemplazado el botón de inicio con un cierre de contacto de relé simple, controlado externamente. La entrada de inicio del dispositivo está vinculada a Vcc con una resistencia de pull-up EXK 20K. El botón de inicio corta el pin al suelo para iniciar la acción. En las pruebas, cuando simplemente coloco una sonda de prueba en la entrada de alimentación, el dispositivo también se inicia por sí solo. Además, simplemente toco la almohadilla que conduce al inicio con un cable de prueba (sin cortocircuitos a tierra) y la unidad se iniciará. Intenté agregar un límite de 1000uF en la entrada de alimentación del dispositivo que no parecía reducir los "arranques espontáneos". No creo que pueda aumentar el valor de la resistencia de pull-up ya que la hoja de especificaciones dice que para 5.5V, el valor típico es 21K y el máximo es 23K. Creo que un filtro en la entrada de potencia ayudaría, pero no estoy seguro y tampoco estoy seguro de cómo especificar uno. ¿Puede alguien asesorar sobre la selección de uno y quizás ofrecer consejos adicionales o posibles soluciones? Gracias de antemano!

    
pregunta JoeChiphead

3 respuestas

0

Creo que es seguro disminuir el valor de recuperación de 20k. por ejemplo, conecte 1k en paralelo.

Mencionas una hoja de especificaciones, pero no dices cuál. Puede ser el PIC y un valor de 20k para una recuperación en el chip tiene sentido. Aún así, siempre se puede agregar un pullup externo.

El valor de pullup generalmente no es crítico. Solo necesita asegurarse de que cualquier dispositivo que tire de la línea a tierra pueda manejar la corriente. Y que su envolvente de energía puede manejarlo: en dispositivos que funcionan con baterías, siempre intentamos que todas las corrientes sean lo más lentas posible. Pero en un dispositivo alimentado por la red, una corriente de 5 mA para la entrada es probablemente aceptable. Y su contacto de relé debería poder manejar fácilmente 5mA (5V / 1kOhms) en lugar de los 250 µA que está utilizando ahora (5V / 20k).

¿Tocar la entrada con un cable de prueba se interpreta como "bajo"? Esto puede suceder: su cable de prueba (y su cuerpo) es una antena y captará todo tipo de señales. Esto conducirá a un voltaje alimentado en el pin de entrada. Esto realmente podría superar el nivel establecido por el pullup de 20k, aunque eso suena un poco sospechoso. Supongo que no hubo un pullup activo en el momento en que viste este efecto.

Probablemente, también es una buena idea agregar un capacitador de 100 nF a la entrada. Eso eliminará una gran cantidad de ruidos desagradables de alta frecuencia captados por todos los conductores. En principio, esto también ralentizará la respuesta de sus entradas a la señal externa (la tapa debe cargarse a través del pullup antes de que la entrada se registre nuevamente como alta), pero esto no será un problema en su aplicación: en comparación con un manual proceso como "botón presionando" el proceso de carga es rápido. Pero téngalo en cuenta para su próximo proyecto en el que desea eliminar el ruido de una señal que cambia rápidamente. :-)

Al leer un relé (u otro contacto mecánico como un botón pulsador), siempre debe rebotar la señal: el contacto no se cerrará ni abrirá instantáneamente. Se comportará como una pelota de goma que cae al suelo: rebota, vuelve a caer, vuelve a subir, etc. hasta que finalmente se detiene.

En mi experiencia, los tiempos típicos de rebote son entre 5 y 30 milisegundos. Dado que el código en su Pic ya está evaluando un botón manual, es muy probable que el contacto de relé funcione de inmediato: si los botones y los tiempos de rebote del relé son similares, la rutina de rebote ya lo manejará. Si el rebote del relé es más largo de lo que compensa la rutina de rebote, debe cambiar el código o encontrar un relé que rebote menos. En mi experiencia, los relés Reed muestran un rebote mucho más corto que los mecánicos, al menos en promedio.

Espero que esto ayude hase

    
respondido por el Hartmut Semken
0

Necesitas un pequeño capacitor en el circuito para crear una constante de tiempo. Use un capacitor cerámico de 0.1uF de 25 voltios a través de las líneas del interruptor lo más cerca posible del PIC IC. Las entradas PIC tienen una impedancia muy alta y sin amortiguación captarán cualquier fuente de ruido, lo que provocará falsos disparadores.

También puede bajar su resistencia de pull-up a 2.2K para disminuir la sensibilidad de la entrada al reducir efectivamente la impedancia de entrada a 2.2K. Eso y un condensador de filtro deberían reducir mucho los falsos disparadores. El condensador podría ser tan alto como 1uF. Si es muy alta (> 10uF), la corriente de descarga quemará lentamente los contactos del interruptor.

Si está de acuerdo con el código, también puede implementar un filtro digital simple de 2 o 4 polos (Toma 3 bytes. Uno para contar si el interruptor está cerrado, otro para contar si el interruptor está abierto, otro para almacenar el verdadero / falso resultados).

El siguiente código del ensamblador es parte de lo que utilicé para filtrar entradas de contacto de relé y conmutador. No pude extraer el código principal, ya que está incrustado en muchos lugares en 13,000 líneas de código. Lea lo que he insertado, ya que detalla los procedimientos para implementar el filtro. El código es de 2001, por lo que no funcionaría en las MPU de Microchip de hoy. Ni siquiera puedo cargar mi viejo MPLAB en Windows 7, se rechaza.

FILTRO DIGITAL:
EL PIN DE ENTRADA SE LEERÁ EN UNA TASA DE 1KHZ O 100 HZ. SI EL PIN ES ALTO, 'INPUT_FIL_H' SE PRESENTA UN PASO UNO Y 'INP_FIL_L' ESTÁ DESPEJADO HASTA CERO.

SI 'INPUT_FIL_H' REACH'S 'MAX_CNT_A' THEN 'INP_FIL_STA' BIT 0 ESTÁ AJUSTADO ALTO Y BIT 1 SE ESTABLECE A BAJO Y 'INPUT_FIL_H' SE CUENTA EL VALOR CONT.

SI EL PIN ESTÁ BAJO, 'INPUT_FIL_L' SE CUENTA UNO POR UNO Y 'INP_FIL_H' ESTÁ BORRADO HASTA CERO. SI 'INPUT_FIL_L' REACH'S 'MAX_CNT_A' THEN-'INP_FIL_STA 'BIT 1 SE ESTABLECE A ALTO Y BIT 0 SE ESTABA BAJO Y' INPUT_FIL_L 'COUE VALUE SE CANCELA.

SI LA TASA DE MUESTRA ES OTRO DE 1KHZ O DE 100 HZ ENTONCES 'MAX_CNT_A / B' DEBE AJUSTARSE PARA OBTENER EL MISMO RETARDO. AJUSTE 'MAX_CNT_A / B' DOBLANDO VALORES.I.E. EL PIN DEBE MANTENER EL ESTADO PARA QUE 80MS SE ACEPTE COMO ALTO O BAJO. A 4 VECES SU VALOR TOMA 160mS PARA SER ACEPTADO COMO ALTO O BAJO.

EL SIGUIENTE BLOQUEO DEL CÓDIGO DE USUARIO LEE LOS BITS ALTOS / BAJOS DEL REGISTRO 'INP_FIL_STA' PARA DETERMINAR LA SIGUIENTE ACCIÓN.

RESERVAR RAM PARA EL FILTRO:
RES BYTE INP_FIL_STA
RES BYTE INP_FIL_H
RES BYTE INP_FIL_L

VALORES DE INICIALIZACIÓN:
HIGH EQU 0x01
LOW EQU 0x00
ZERO EQU 0x00
FULL EQU 0xFF
BIT_0 EQU 0x00; BIT '0' OF INP_FIL_STATUS REGISTRO (RAM)
BIT_1 EQU 0x01; BIT '1' DE INP_FIL_STATUS REGISTRO (RAM)
MAX_CNT_A EQU 0x28; IGUALES 40mS SI LA TASA DE LA MUESTRA ES 1KHZ, 40 LAS MUESTRAS CONTINUADAS DEBEN SER VERDADERAS O FALSAS
MAX_CNTZ__CAC ; IGUAL A 40 mS SI LA TASA DE MUESTRA ES DE 100 HZ, 4 MUESTRAS CONTINUAS DEBEN SER VERDADERAS O FALSAS
INP_FIL_STA EQU 0x00; ESTADO DEL FILTRO DE ENTRADA. SOLO SE UTILIZAN PRIMEROS 2 BITS.
INP_FIL_H EQU 0x00; CUENTA ARRIBA SI LA ENTRADA ES ALTA
INP_FIL_L EQU 0x00; CUENTA ARRIBA SI LA ENTRADA ES BAJA

    
respondido por el Sparky256
0

Agregue un inversor de activación Schmitt a la entrada y cambie su PIC para verificar si hay una lógica LO en lugar de una lógica HI. El SN74HC14 Schmitt Trigger inverter proporciona la función booleana Y =! A y comillas:

Schmitt-trigger inputs are designed to provide a minimum separation between positive and negative switching thresholds. This allows for noisy or slow inputs that would cause problems such as oscillation or excessive current draw with normal CMOS inputs.

Agregar condensadores para rebotar no es una solución ideal, mientras que un disparador Schmitt está diseñado para eso. Espero que esto te resulte útil.

    
respondido por el MIL-SPEC

Lea otras preguntas en las etiquetas