¿Es común que las resistencias de pull-up internas fallen? ¿O qué causaría que se vuelvan intermitentes?

8

Tengo una placa basada en un ASIC ARM Cortex-M3 que, después de meses de trabajo, de repente comenzó a informar sobre las pulsaciones de botones falsos. El ASIC no es nuestro diseño, sino una empresa de renombre.

El esquema de botones se muestra a continuación. El pin está configurado como entrada con resistencia pull-up habilitada. El valor del resistor es aproximadamente 30KOhm.

Al medir el lado del pin con un DMM, veo que el valor flota alrededor. A veces es 3.2V (= VCC, rango de chip: 2.1V a 3.6V) y otras veces salta flotando entre 0.6V a 1.0V.

No hay problemas de humedad / condensación (9% RH), no hay polvo u otros objetos en las trazas. Y esta es la ÚNICA tabla que sufre esto. Otros clones fabricados de esta placa funcionan sin problemas (de todos modos, hasta ahora).

Lo único en lo que puedo pensar es que algo está haciendo que el parpadeo interno parpadee. ¿Es común que las flexiones internas cedan? ¿Qué más podría estar causando esto?

R9, R12 son 2.2Kohm, y C10, C11 son 33nF.

    
pregunta MandoMando

4 respuestas

4

Parece que has hecho un esfuerzo para aislar tus pines de entrada de los interruptores, pero aún así, un evento ESD abrumador puede haber dañado alguna parte del circuito del controlador / receptor del pin en el chip (y no necesariamente el dispositivo de extracción) en particular).

Si desea hacer esto más robusto, podría considerar agregar diodos de sujeción externos, un cordón de ferrita, o incluso un búfer de transistor entre el interruptor y el pin.

    
respondido por el Dave Tweed
8

Las estadísticas son tus amigas. Lo entiendo, tienes un dispositivo fallido, te preguntas ¿es culpa mía? ¿Es seguro enviar en volumen? ¿Qué sucede si esto realmente es un problema y enviamos 10,000 unidades al campo? Todo indica que le importa una mierda y que probablemente sea un ingeniero / diseñador concienzudo.

Pero el hecho es que tiene un fallo y las debilidades humanas del sesgo de confirmación se aplican a las situaciones negativas tan fácilmente como a las situaciones positivas. Has tenido una falla, sin una causa definida. A menos que sepa de un evento que precipitó este efecto, entonces esto es solo ansiedad.

Esto es ESD. ¿Puedo probar que es ESD? - Tal vez / quizás no - si me envías la pieza y gano grandes $$ para delidarla y realizarla a través de diferentes pruebas como SEM y SEM con realce de contraste de superficie, tal vez. He tenido muchos casos en los que eliminé deliberadamente un dispositivo como parte de la calificación de ESD, el dispositivo falló y, sin embargo, me tomó 30 horas encontrar el punto de falla. Era importante comprender los mecanismos de falla y la energía de activación, por lo que la caza era necesaria (si aparentemente era un desperdicio) pero la mitad del tiempo no podíamos ver el punto de falla. Y eso fue después de un análisis y un diseño de FMEA eliminación de ubicación guiada.

La gente tiene la falsa idea de que la ESD siempre significa explosiones y tripas de viruta vomitadas con todo el Si fundido y el humo acre. Usted ve esto a veces, pero a menudo es solo un pequeño orificio a escala nanométrica en el óxido de la puerta que se ha roto. Puede haber ocurrido hace mucho tiempo y con el tiempo falló debido a un cambio paramétrico.

De hecho, durante las pruebas de ESD usamos la ecuación de Arrhenius para predecir el fracaso. Realizamos capturas de dispositivos en varios niveles y diferentes modelos (impedancias de fuente) y luego cocinamos los pequeños b *** rds durante horas y los rastreamos con el tiempo para poder captar el modo de falla y así predecir el rendimiento futuro. Puede tener fácilmente miles de chips en tableros que se ejecutan en cámaras ambientales durante meses a la vez. Todo es parte de "qual", es decir, calificación.

El efecto clave que siempre estamos buscando para los modos _some_failure es EOS (Electrical Overstress). Puede ser inducido por ESD u otras situaciones. En los procesos modernos, la tolerancia al nivel de puerta EOS dentro del chip es tal vez del 15% como máximo. (Por eso es tan importante ejecutar el chip en su carril MAX Vss destinado). EOS puede manifestarse meses después. El calor de la operación sería como una mini prueba de vida útil acelerada (simplemente no está aplicando la ecuación de Arrhenius y no está controlada).

Si desea una mejor comprensión, consulte los estándares JEDEC ESD22 que describen el modelo MM (modelo de máquina) y HMB (modelo del cuerpo humano) que describe las sondas de prueba y la carga.

Aquí hay un recorte del modelo de JEDEC JESD22-A114C.01 (marzo de 2005).

¿Te das cuenta de que se parece a tu circuito? y los valores están incluso bastante cerca, y esto se usa con los niveles de voltaje correctos para eliminar la mierda de las estructuras de ESD.

Entonces, lo que debes hacer es:

-scrap that board
- track it's provenance, lot number and who handled it
- keep this info in a database (or spreadsheet)
- note in dB that you suspect ESD
- track all failures
- check the data over time.
- institute manufacturing controls so you can track.
- relax - you're doing fine.
    
respondido por el placeholder
4

Los escenarios más probables son que el chip haya sufrido algún daño, cuyos efectos visibles incluyan un comportamiento de pull-up escamoso, o que el código sea por cualquier motivo que cause que los pullups se activen accidentalmente a veces y otras se deshabiliten. La última situación puede surgir con frecuencia si el código de la línea principal hace algo como:

WIDGET_PIN_PORT->PULLUPS |= WIDGET_PIN_PULLUP_MASK;

y una interrupción hace algo como:

GADGET_PIN_PORT->PULLUPS |= GADGET_PIN_PULLUP_MASK;

donde WIDGET_PIN y GADGET_PIN son bits diferentes en el mismo puerto de E / S. El código de la línea principal se traducirá como algo así como

ldr r0,= [[address of port pullup register]]
ldr r1,[r0] ; ***1
orr r1,#WIDGET_PIN_PULLUP_MASK
str r1,[r0] ; ***2

Si se produce una interrupción después de ***1 pero antes de ***2 , entonces la activación de GADGET_PIN se activará con la interrupción, pero el código de la línea principal se desactivará erróneamente. Hay dos formas de evitar este problema:

  1. Utilice el hardware que puede permitir que un poco del registro de recuperación se configure mediante una única instrucción en lugar de una secuencia de lectura-modificación-escritura. Creo que todos los controladores basados en Cortex-M3 proporcionan una función de "bit banging" que se puede usar para este propósito, aunque todavía tengo que encontrar alguna forma agradable de usarlo desde el código escrito en C, aparte de definir el bit manualmente Direcciones Algunos otros procesadores pueden tener medios específicos de puerto de E / S para realizar una tarea similar.
  2. Deshabilita las interrupciones durante la secuencia de lectura-modificación-escritura del puerto. Por ejemplo, reemplace el código C anterior con una llamada a un método

    void set32 (uint32_t volatile * dest, uint32_t value) {   uint32_t old_int = __get_PRIMASK ();   __disable_irq ();   * dest = * dest | valor;   __set_PRIMASK (old_int); }

Este código hará que las interrupciones se deshabiliten muy brevemente (probablemente alrededor de 5 instrucciones); eso es lo suficientemente breve como para que no cause problemas, incluso con interrupciones relativamente críticas. Tenga en cuenta que compilar el método anterior como en línea puede reducir el tiempo necesario para llamarlo, pero puede aumentar la cantidad de tiempo durante el cual se deshabilitan las interrupciones [por ejemplo, si sucede que el optimizador reorganiza el código, la instrucción que carga la dirección de dest no ocurre hasta después de __disable_irq ()].

Dado que dice que el comportamiento de recuperación es intermitente, creo que un problema de código es probablemente más probable que un problema de hardware. Además, es probable que las condiciones de daño que dañen los circuitos de pull-up también causen otros daños al chip, algunos detectables y otros no. Si se produce cualquier tipo de daño demostrable en el hardware de a un chip, casi siempre es mejor eliminar el chip y reemplazarlo por uno nuevo, que esperar que el daño observado sea el "único" problema.

    
respondido por el supercat
0

Algunas de las respuestas anteriores pasan por alto las más obvias: compruebe las uniones de soldadura para el botón, las resistencias, los condensadores y la uC. Bajo el microscopio puede ver una unión de soldadura agrietada.

Si no tiene un microscopio, vuelva a soldar una y una unión y vea si soluciona el problema.

    
respondido por el Reidar Gjerstad

Lea otras preguntas en las etiquetas