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:
- ¿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.
- 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.
- ¿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.