Depuración de un cortocircuito de MCU

6

Tengo una placa con un MCU STM32F103VGT6. Ayer, el MCU funcionó bien, acababa de hacer funcionar el semisistema, el parpadeo del LED, y el juego funcionaba con un temporizador y todo lo demás.

Entonces decidí intentar ver si puedo hacer que el DAC emita un voltaje. Simplemente encendí los periféricos (GPIO puerto A y el propio DAC), habilité el DAC y escribí un valor de media escala. Una vez que cargué el programa y adjunté el depurador, el programa comenzó a funcionar bien, pero mientras buscaba a mi DMM para que verificara la salida del DAC, pensé que podría estar oliendo a electrónica quemada, aunque aparentemente el olor no era tan fuerte como yo. No estaba preocupado en ese momento. Luego, la MCU dejó de funcionar repentinamente, es decir, dejó de emitir los valores del temporizador en el canal de depuración, el LED dejó de parpadear y así sucesivamente. Según la salida de valores, esto sucedió 26 segundos después del inicio (más algunos segundos más para la inicialización). En este punto, me di cuenta de que el regulador está muy caliente y desconectó la alimentación de la placa.

Después de probar algunas cosas (que incluían la conexión de la alimentación durante unos segundos a la vez, ya que no me di cuenta de lo que estaba pasando), noté que 3.3V y GND están cortocircuitados. Tengo un puente en la placa que permite interrumpir la alimentación entre el regulador y el resto del circuito, para medir la corriente, y con eso pude verificar que el cortocircuito está en el lado de la MCU. El regulador parece estar funcionando bien.

Ahora me preocupa que haya quemado la MCU y se esté cortocircuitando internamente. Sin embargo, no recuerdo que se haya calentado al tacto durante el evento, y ahora, si conecto la alimentación durante unos segundos, no se calienta, lo que me hace dudar de que el cortocircuito estaría en la MCU. El regulador atraviesa unos 700 mA (!) A través del cortocircuito, me imagino que la corriente que pasa por la MCU causaría un calentamiento bastante notable.

Además, no entiendo cómo encender el DAC o GPIOA puede causar tal destrucción (algunos detalles sobre el circuito al final en la publicación).

Mis preguntas:

  1. ¿Qué puedo hacer para depurar esto? Obviamente, buscar cortocircuitos en componentes individuales es un poco difícil, ya que 3.3V y GND están cortocircuitados, por lo que medir las tapas de desacoplamiento o los pines VCC solo muestra que los dos lados están cortocircuitados. He medido los pines de no alimentación de la MCU, y no parece que estén en corto a VCC o GND.
  2. Si es la MCU que está rota, ¿qué puedo hacer para verificarlo? Realmente odiaría cortar los pines en el chip y quitarlo solo para descubrir que queda el corto.
  3. ¿Cómo podría encender los dispositivos incorrectos destruir la MCU (detalles sobre el circuito al final)? Sería aún peor si cambio la MCU solo para quemar otra (tengo exactamente una de repuesto, después de lo cual hay una semana de espera y un envío ridículo para obtener la pieza ...).

Ahora para los detalles prometidos:

  • como la placa aún no está poblada, no hay nada adherido a ninguno de los pines de GPIOA, excepto el JTAG, que comparte algunos de ellos.
  • la pata Vref + en la MCU está desconectada, excepto las tapas de desacoplamiento, ya que hay una referencia externa que aún no está soldada en la placa. Cuando estaba probando, tenía la impresión de que en este caso se usaría VCC para Vref + (aunque me doy cuenta de que probablemente este no sea el caso). ¿Podría esto realmente causar la destrucción de la pieza?

Finalmente, partes relevantes del esquema, perdón por el diseño desordenado:

Fig1:GPIOA.Todaslasconexionesetiquetadasvanaáreasdespobladasdelaplaca.

Fig 2: Potencia. 3.3VDAC no está conectado actualmente, pero los límites están llenos.

Finalmente, el código de inicio de DAC:

//Set up DAC1
RCC->APB1ENR |= (uint32_t)0x20000000;//Weird bug in stm32f10x.h, 
                                     //the macro constant isn't defined for XL devices
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
DAC->CR |= DAC_CR_EN1;
DAC->DHR12R1 = 2048;

No escribí nada en los registros de configuración de modo, ya que parecía que deberían ser todos ceros de todos modos, y esta fue solo la primera prueba para ver si puedo sacar algo de los DAC. El código de inicio apropiado vendría más tarde.

    
pregunta Timo

2 respuestas

2

Teniendo en cuenta cómo comenzó el problema, me convencí a mí mismo de que es muy probable que haya frenado el MCU, por lo que procedí a eliminarlo cortando las piernas. De hecho, esto resolvió el cortocircuito y la medición de los restos terrestres del dispositivo deficiente muestra que sus pines VDD y VSS están cortocircuitados.

También, desde el STM32F103 Inicio del manual, página 7 : "En todos los casos, Vref + debe estar entre 2.4V y VDDA" . Claramente rompí este requisito, ya que el pin estaba flotando.

Desafortunadamente, terminé destruyendo algunas de las almohadillas en la MCU en el proceso (probablemente usé demasiada fuerza / un cuchillo demasiado apagado), así que tendré que comenzar de nuevo la compilación ...

De todos modos, la respuesta es que, en base a pruebas circunstanciales, era probable que la MCU estuviera frita, y esto resultó ser correcto.

Actualizar:

Habiendo construido el segundo prototipo, con la referencia ahora incluida, la MCU sobrevivió al encender el DAC, y parece estar funcionando bien. También hubo un pequeño error en el código, ya que el estado de restablecimiento de los pines es una entrada flotante, mientras que la configuración recomendada es una entrada analógica cuando se usa el DAC. Sin embargo, no creo que esta sea la causa de la autodestrucción, ya que me imagino que la hoja de datos lo afirmaría con más fuerza que como una "recomendación" si ignorarlo destruye todo el dispositivo. Sin embargo, obviamente soy un poco reacio a poner eso a prueba!

Solo para cualquiera que intente buscarlo en Google, permítame decir la conclusión: ¡flotar Vref en STM32 destruye el chip!

Nota final: sí lea los comentarios de Spehro, lo que sugiere que existe la posibilidad de que esto sea simplemente una coincidencia que involucre la destrucción por electricidad estática.

    
respondido por el Timo
7

Encontrar un corto en una pizarra puede ser un desafío. Una técnica consiste en inyectar una corriente bastante alta en la placa y luego usar un micro voltímetro para perfilar las caídas de tensión a través de la placa a cero en el área clave. He intentado esto varias veces con éxito mixto.

Hace unos 15 años, hicimos un giro de la placa en una placa bastante compleja que estaba llena de digital, telcom, audio y video en un diseño de señal mixta. Se construyeron media docena de las nuevas tarjetas y en las pruebas iniciales notamos la inyección de patrones de ruido digital en la salida de audio de la tarjeta. Quedó claro que en algún lugar de la placa una GND digital estaba cortocircuitada en la GND de audio. (Tenga en cuenta que la GND de audio y la GND digital tenían que estar unidas en un punto bajo el chip de audio). Encontrar la conexión de GND inadecuada terminó siendo un ejercicio infructuoso durante más de un día de investigación. Al final, determiné que necesitaba sacrificar una placa y usé una herramienta Dremel para moler la superficie de la placa en dos lugares hacia abajo en el plano digital de GND y el plano de audio de GND. Luego se soldaron dos cables de cobre sólido de 10 AWG al cobre plano GND (que tomó mucho calor para lograrlo) . Luego corté los dos cables de cobre pesados a través de una batería de automóvil de 12 V completamente cargada permitiendo que muchos amperios fluyeran hacia la placa. Tomó unos 12 segundos para que el corto se revelara. Un pequeño penacho de humo salió de un orificio. En este caso, se trataba de un dispositivo digital colocado incorrectamente que se insertaba en el flujo de audio del avión GND. PCB DRC no pudo marcar un error porque, en lo que se refería, GND = GND.

La lección aprendida fue que es una buena idea considerar aislar dos áreas de GND como esta a través de algunas cuentas de ferrita. A veces se pueden usar componentes de resistencia de cero ohmios para la misma cosa. Esto hace que las dos áreas GND separen las redes en la PCB y la comprobación de DRC puede marcar cortocircuitos.

    
respondido por el Michael Karas

Lea otras preguntas en las etiquetas