Fuente de alimentación digital Buck-Boost con rectificación síncrona basada en STM32, código abierto

Hay un error en la medición de esta imagen; el rizado real no es ni de cerca tan grande. Es porque hice la prueba con el ancho de banda subido a 100M. Al bajarlo a 20M, el rizado es de unos cientos de mV.

Hola, he mirado tu esquemático y las formas de onda, tu problema es muy típico en el desarrollo de fuentes conmutadas. Sobre tus 4 dudas, respondo una por una:

  1. Picos de alta frecuencia (ringing de 115 MHz): Esto es una oscilación parásita (ringing) típica provocada en el instante de conmutación del transistor. Aparece 4 veces por ciclo porque, en tu topología de puente H, durante los instantes de encendido y apagado de los transistores superior e inferior de las etapas Buck y Boost, la inductancia parásita y la capacitancia parásita del MOS ( C_{oss} ) entran en resonancia de alta frecuencia.
  • Cómo eliminarlo: Primero, asegúrate de que la sonda de tu osciloscopio no utilice el clip de tierra largo; usa un muelle de tierra para medir, de lo contrario el cable largo actuará como una antena y amplificará este pico (puede que sea solo una «ilusión» de medición). Si el pico es real, es necesario conectar en paralelo un circuito snubber RC entre los terminales D y S del MOS, o poner en serie una resistencia pequeña con la resistencia de puerta para reducir la velocidad de encendido.
  1. Razón por la que el ADC se quema frecuentemente: Observando tu diagrama de muestreo, el amplificador operacional OPA2188 utiliza alimentación de +5 V. Aunque hayas añadido el diodo Zener D7 (BAT54C), ¡tienes mal hecha la conexión en el esquema! El BAT54C es un diodo de cátodo común; has conectado el cátodo a la línea de señal y los dos ánodos a tierra, lo cual solo previene el voltaje negativo y es completamente incapaz de bloquear un voltaje positivo que supere los 3,3 V. Cuando la salida del operacional se eleva directamente a 5 V debido a algún cambio transitorio (como el pico de corriente causado por el condensador que añadiste), el pin ADC del STM32 (no tolerante a 5 V) se quema al instante. La resistencia de 1K (R12) que añadiste puede que no limite la corriente lo suficiente como para resistir el impacto transitorio.
  2. Recomendaciones para la protección del pin ADC:
  • Cambia la alimentación del operacional directamente a 3,3 V (la misma fuente que el MCU), para limitar fundamentalmente que la salida del operacional no supere los 3,3 V.
  • Si es imprescindible usar un operacional de 5 V, cambia D7 por un BAT54S (uno a tierra y otro al riel de alimentación de 3,3 V del MCU); de esta manera, cuando el voltaje supere los 3,3 V + 0,3 V, conducirá hacia el riel de 3,3 V actuando como protección.
  1. Principios de diseño (Layout): Prioriza mantener al mínimo los dos lazos calientes (Hot Loops). La tasa de variación de la corriente de alta frecuencia (di/dt) en la entrada (Cin → MOS de alto lado → MOS de bajo lado → GND) y en la salida (Cout → MOS de alto lado → MOS de bajo lado → GND) es enorme; si estos dos lazos no están bien diseñados, los picos de alta frecuencia de tu imagen se dispararán. El lazo grande (de la entrada total a la salida total) es principalmente de corriente continua y baja frecuencia, por lo que basta con garantizar la capacidad de conducción de corriente y un filtrado por condensador adecuado.
1 me gusta

Le eché un vistazo a tu caso; quemar dos microcontroladores seguidos da mucha pena, pero lo importante es que ya encontraste la causa.

En cuanto a los picos de alta frecuencia, fíjate bien en que la frecuencia medida por el osciloscopio ya alcanza los 115 MHz. En esta banda de frecuencias, lo más probable es que se trate de un acoplamiento de radiación espacial introducido por la pinza de tierra de la sonda del osciloscopio. Puedes probar a usar ese pequeño resorte de tierra negro que viene con la sonda, colocándolo directamente en ambos extremos del condensador de salida para medir; te aseguro que los picos disminuirán muchísimo.

En cuanto a por qué murieron todos los ADC del 32:

A grandes rasgos, si miras tu figura 3, el operacional utiliza alimentación de 5V. Los pines del STM32, cuando se configuran en modo de entrada ADC, no soportan 5V (el valor máximo absoluto suele rondar los V_{DDA} + 0.3V). Al volver a encender tras añadir el condensador, es posible que, debido a la respuesta transitoria, se produzca un sobreimpulso en la salida, y el operacional se sature emitiendo cerca de 5V, lo que quema el 32 al instante.

Otro detalle: en tu esquema, D7 pone BAT54C. Este modelo es de cátodo común, y por el dibujo, ¿has conectado las patillas a tierra? Si es así, solo puede limitar el voltaje negativo; si el voltaje positivo supera los 3.3V, no funciona en absoluto. Te recomiendo cambiarlo directamente por un BAT54S, conectando el cátodo de uno de los diodos a la fuente de 3.3V; de esta manera, podrás limitar tanto los voltajes positivos como los negativos.

En cuanto al Layout, no hace falta obsesionarse con reducir al mínimo absoluto el lazo grande; la clave es que los dos lazos calientes (Hot Loops) de conmutación estén bien compactados. Los condensadores de entrada y salida deben colocarse lo más pegados posible a las patillas correspondientes del MOSFET, y la conexión de tierra debe tener un amplio vertido de cobre. ¡Te deseo que en tu próximo encendido todo vaya sobre ruedas y no eche humo!

1 me gusta

¡Ay! Dejar salir el humo mágico de dos chips STM32 es una forma dolorosa de aprender, pero a todos nos ha pasado.

Lo primero es lo primero: arregla tu método de medición con el osciloscopio. Esa oscilación parásita de 115MHz se ve exactamente como lo que pasa cuando alguien usa el cable de tierra con pinza de cocodrilo estándar de 6 pulgadas en un nodo de conmutación. Capta EMI de alta frecuencia del aire. Usa una punta con resorte de tierra directamente sobre el condensador de salida.

Ahora, hablemos de por qué tus ADC se están quemando. Mira tu circuito de muestreo de VOUT. Tu amplificador operacional funciona con una línea de 5V. Cuando añadiste más condensadores de salida, cambiaste el comportamiento transitorio. Durante el arranque, el amplificador operacional probablemente se saturó contra la línea de 5V. Incluso con esa resistencia de 1K, está inyectando demasiada corriente en los diodos ESD del STM32, quemando el mux del ADC interno. Además, revisa el número de parte de tu diodo: el BAT54C es de cátodo común. Tienes ambos pines restantes conectados a tierra. Eso significa que solo protege contra transitorios negativos. ¡No hace nada contra la sobretensión positiva!

Soluciones rápidas para salvar tu tercer MCU:

  1. Cambia el BAT54C por un BAT54S. Conecta el pin de fijación a tu línea de 3.3V.
  2. Si no necesitas medir hasta los 5V, simplemente alimenta el OPA2188 con 3.3V. Es un amplificador operacional rail-to-rail, así que funcionará perfectamente para tu señal de 2.72V a escala completa.

En cuanto al layout: simplemente reduce los dos lazos calientes (del condensador de Vin a los switches Buck, y del condensador de Vout a los switches Boost). Manténlos compactos, usa un plano de tierra sólido, y estarás listo.

1 me gusta

Lo que te ocurre se parece mucho a que el pin del ADC haya sufrido una sobretensión. Un filtro RC paso bajo solo filtra la media, no te protege contra picos a nivel de ns. Especialmente si dices que el fallo aparece al encender tras añadir varios condensadores de salida, eso indica que la sobretensión de arranque y el ringing durante el encendido pueden haber empeorado. Los pines de entrada del ADC del STM32 sí tienen diodos de protección incorporados, pero no están para absorber picos de corriente de forma prolongada; si superas el límite de corriente de inyección, se queman igual. Te sugiero añadir una resistencia en serie de 1k a 10k antes del ADC, más un diodo de clampeo de unos 3,6 V, o usar directamente un TVS o un diodo Schottky de pequeña señal para protección. En cuanto al layout, el lazo caliente con alto di/dt tiene que ser lo más pequeño posible, y la traza de muestreo no debe ir pegada al nodo SW.

1 me gusta
  1. El capacitor de entrada Ciss del MOS que elegiste es un poco grande, no es muy adecuado para la conmutación de alta frecuencia. ¿A cuánto configuraste la frecuencia de conmutación?
  2. En el pin del ADC puedes añadir un diodo TVS/ESD de 3.3V para fijar el voltaje, o añadir un diodo Schottky a la alimentación de 3.3V para fijar el voltaje en 3.3V.
  3. Asegúrate de que los bucles de entrada y salida sean lo más pequeños posible; los bucles grandes también deben ser pequeños.

Frecuencia de conmutación 100K, antes calculé las pérdidas por conmutación, a mi salida nominal son unos 1W más o menos, mi diseño es de 15-60V → 30V 5A

Hola, maestro, quiero preguntarte por qué mi proyecto terminado solo puede reducir el voltaje cuando la entrada es de 12V. O sea, cuando alimento con una fuente de 12V sin conectar carga, veo en la pantalla que la salida de 0.5 a 12V está normal, pero en cuanto giro a unos 13V ya no hay salida, y por más que siga girando la salida sigue siendo de 12V :sob: Lo hice exactamente igual que el autor, sin modificar el esquema ni el PCB. ¡Maestro, por favor ayúdame! :sob:

Revisa si hay alguna soldadura fría

Quiero preguntarles si alguno de los expertos por aquí se ha topado con un MOSFET cuyas tres terminales (G, D y S) estén en cortocircuito entre sí. ¿Qué puede causar esto? ¿Cómo se determina?

Actualmente, mi método de control solo tiene un feedforward de voltaje; calcula el valor objetivo del ciclo de trabajo de ambos lados en función del voltaje de entrada y de mi voltaje de salida objetivo. Luego, según ese valor objetivo del ciclo de trabajo, entra en arranque suave, activando una interrupción a una frecuencia de 500 Hz; en cada interrupción, el ciclo de trabajo del MOSFET varía en 0.02. A continuación, mi registro de encendido:

  1. Con una entrada de 58 V, una salida de 30 V, un condensador de entrada de 220 µF y un condensador de salida de 470 µF, funciona normalmente tanto en vacío como con una resistencia de 20R. Después le añadí varios condensadores de salida.

  2. Con una entrada de 58 V, una salida de 30 V, un condensador de entrada de 220 µF, condensadores de salida de 470 µF × 2 (electrolíticos verde y dorado), un condensador sólido de 100 µF, un condensador de película de 600 nF, un inductor de 100 µH y una corriente de saturación declarada por el vendedor de 12 A; bajo estas condiciones, encendí mi circuito y noté que los dos MOSFET del lado del buck tenían sus tres terminales G, D y S en cortocircuito mutuo, mientras que los del lado del boost no presentaban problemas. La avería de los MOSFET seguramente ocurrió durante el proceso de encendido.

  3. Leí a una IA decir que, tal vez al aumentar la capacidad de los condensadores de salida, la corriente de carga que necesitan se vuelve mayor, lo que provoca la destrucción de mis MOSFET. Pero, ¿por qué avería solo el lado del buck y no el del boost?

Según lo que dices, ¿significa que solo puede reducir el voltaje y no aumentarlo? Revisa si el MOSFET del lado del boost conmuta normalmente. ¿La señal de accionamiento es correcta?

El MOS utilizado es el CSD19534Q5A

¿Qué tipo de inductor? ¿Inductor moldeado? ¿Inductor toroidal? ¿Qué núcleo magnético? ¿Hierro-silicio-aluminio (Sendust)? ¿Cuál es la frecuencia de conmutación?

¿Mediste la temperatura del MOS? ¿Será que tuvo demasiadas pérdidas y reventó por sobrecalentamiento?

Encontrarse con un cortocircuito total de los tres terminales GDS de un MOSFET (lo que se conoce coloquialmente como «volar el transistor») es realmente un dolor de cabeza. En el desarrollo de fuentes de alimentación, este tipo de fallo tan destructivo generalmente significa que se ha producido un escape térmico catastrófico dentro del chip de silicio (fusión directa), lo que hace que las capas de aislamiento físico de los tres electrodos se quemen por completo y se fundan entre sí.

El fenómeno que has observado es muy típico. La IA dijo que «el aumento del condensador de salida provoca un aumento de la corriente de carga», lo cual va en la dirección correcta, pero solo explica la causa superficial. Combinando tu lógica de control y los parámetros de hardware, podemos hacer un análisis profundo de las causas fundamentales de este «accidente» y por qué fue «parcial» y solo voló el lado Buck.


一、 ¿Por qué solo se voló el lado Buck, mientras que el lado Boost quedó intacto?

Con una entrada de 58V y una salida de 30V, tu circuito funciona en modo reductor (Buck).
En este modo:

  • MOSFET del lado Buck (entrada): Está realizando acciones de conmutación dura a alta frecuencia, encargado de «trocear» los 58V de alta tensión. El transistor superior soporta un enorme estrés de conmutación, y el transistor inferior (rectificador síncrono) también debe cooperar conmutando con frecuencia.
  • MOSFET del lado Boost (salida): Está en estado de «paso directo» (o el transistor superior siempre encendido y el inferior siempre apagado). No realizan conmutación de alta frecuencia, solo se encargan de conducir la corriente.

Cuando ocurre una sobrecorriente transitoria, la energía es provista por la entrada de 58V. El transistor superior del lado Buck es la «primera puerta» que conecta la fuente de alimentación con el inductor. Cuando el sistema se descontrola y la corriente se dispara instantáneamente, los primeros en soportar la enorme corriente de impacto (pérdida térmica I^2R) son los transistores del lado Buck que están conmutando a alta frecuencia. Dado que los transistores Boost están siempre encendidos, solo soportan pérdidas de conducción y no tienen las pérdidas dinámicas ni los picos de voltaje que trae la conmutación, por lo que generalmente pueden sobrevivir.


二、 Los «asesinos en serie» que causan el cortocircuito total de GDS (Análisis de causas)

Tu método de control tiene un riesgo fatal oculto: control de lazo abierto con feedforward de voltaje puro (sin lazo de corriente), combinado con un condensador de salida enorme.

A continuación, la cadena completa que conduce a la destrucción del MOSFET:

1. Lógica de control fatal: falta de retroalimentación de corriente

Tu control actual es «calcular el ciclo de trabajo objetivo → escalón de arranque suave». Esto significa que el microcontrolador está ciego, no tiene idea de cuánta corriente está fluyendo por el inductor en este momento.
Según la fórmula de carga del condensador I = C \frac{dV}{dt}, cuando aumentas el condensador de salida de 470uF a casi 1100uF, la cantidad de carga necesaria para llegar a 30V se duplica. Dado que la velocidad de incremento del ciclo de trabajo de tu arranque suave es fija (aumenta un 2% cada 2ms), el aumento forzado del ciclo de trabajo obliga al filtro LC a establecer el voltaje, exigiendo así una enorme corriente transitoria.

2. Saturación instantánea del inductor (El culpable principal)

Tu inductor tiene una corriente de saturación nominal de 12A y una inductancia de 100uH.
Con un feedforward de voltaje puro, el escalón del ciclo de trabajo (2% cada vez) provocará un desequilibrio instantáneo en el producto voltio-segundo aplicado al inductor. Para un arreglo de condensadores con una capacidad total superior a 1000uF, cuando el voltaje inicial es 0, equivale a un estado de cortocircuito.
Cuando la corriente transitoria creciente supera los 12A, el inductor sufre saturación magnética. Una vez que el inductor se satura, su inductancia cae en picada instantáneamente (acercándose a 0); en este momento, el inductor deja de ser un componente de almacenamiento de energía y se convierte en un cable con una resistencia extremadamente pequeña.

3. Conducción simultánea y fusión térmica (El resultado final del cortocircuito total de GDS)

Una vez que el inductor pierde su función de limitación de corriente, el voltaje de entrada de 58V se aplica casi directamente sobre la R_{ds(on)} del transistor superior del lado Buck y la resistencia parásita minúscula.

  • La corriente puede dispararse instantáneamente a decenas o incluso cientos de amperios.
  • Encendido espurio por efecto Miller: El di/dt extremadamente alto producirá oscilaciones violentas en el inductor y las inductancias parásitas de las pistas ( V = L \frac{di/dt}{dt} ). Estos picos de alta frecuencia y alto voltaje se acoplan a la puerta (Gate) a través de la capacitancia de Miller ( C_{gd} ) del MOSFET. Si la capacidad de accionamiento de la puerta es insuficiente o la resistencia de apagado es demasiado grande, el voltaje será forzado hacia arriba, lo que provocará que los dos MOSFETs del lado Buck (superior e inferior) se enciendan simultáneamente (Shoot-through o cortocircuito cruzado).
  • Los 58V se cortocircuitan directamente a tierra, acompañados de una enorme corriente de cortocircuito; la oblea de silicio dentro del MOSFET alcanza instantáneamente cientos o incluso miles de grados, la capa de óxido de puerta (una capa aislante de dióxido de silicio extremadamente delgada) se rompe, y el metal de los tres terminales G, D y S se funde físicamente y se cortocircuita.

三、 ¿En qué basarse para juzgar y verificar?

Para confirmar este razonamiento, puedes realizar una evaluación post-fallo desde los siguientes aspectos:

  1. Comprobar el estado del inductor: Observa si el núcleo magnético del inductor de 100uH ha cambiado de color debido al calor, o si las bobinas muestran señales de quemaduras. Aunque la corriente ocurre en un instante, una sobrecorriente de saturación severa a veces deja marcas físicas.
  2. Comprobar el chip driver de puerta: Dado que GDS está completamente cortocircuitado, la alta tensión de 58V definitivamente retrocedió a través del terminal Gate hacia tu chip driver (como IR2104, EG8010, etc.); es muy probable que el chip driver también se haya quemado, e incluso el pin PWM del microcontrolador podría estar dañado.
  3. Calcular la pendiente de tu arranque suave: Interrupción de 500Hz = periodo de 2ms. Cada cambio es de 0.02 (2%). Para ir del 0% al supongamos 50% de ciclo de trabajo, solo se necesitan 50ms. Sin límite de corriente, cargando 1000uF a 30V en 50ms, puedes estimar la corriente de carga promedio; la corriente pico definitivamente supera con creces los 12A del inductor.

四、 Sugerencias de mejora fundamentales

Si quieres resolver este problema por completo y evitar volar transistores de nuevo, necesitas hacer las siguientes actualizaciones al sistema:

  1. Debes introducir una protección de sobrecorriente por hardware (OCP): Esta es la medida de seguridad de último recurso. Muestrea la corriente en el transistor inferior del Buck o en el bus de alimentación; una vez que la corriente supera los 10A (dejando un pequeño margen para evitar la saturación), bloquea la señal PWM inmediatamente a través del circuito de hardware; bajo ninguna circunstancia debes depender exclusivamente de interrupciones de software para apagar el fuego.
  2. Añadir un lazo de corriente interno (control de lazo cerrado): No uses un ciclo de trabajo «calculado» para forzar el circuito a lo bruto. Un DC-DC maduro debe ser de doble lazo cerrado (lazo externo controla voltaje, lazo interno controla corriente). Deja que el error de voltaje genere un valor de consigna de corriente, limitando este valor de consigna a un máximo de 10A, y luego deja que el lazo de corriente ajuste dinámicamente el ciclo de trabajo.
  3. Ralentizar extremadamente el arranque suave en lazo abierto: Si no puedes escribir un algoritmo de doble lazo cerrado por el momento, debes cambiar el escalón de 0.02 a uno mucho más pequeño (por ejemplo, 0.001), o reducir la frecuencia de interrupción para dar suficiente tiempo a los condensadores para cargarse suavemente. Al mismo tiempo, usa un osciloscopio para capturar la corriente del inductor y asegúrate de que la corriente pico máxima durante la fase de arranque sea < 10A.

El inductor debería ser de hierro-silicio-aluminio (Sendust), inductor toroidal; la frecuencia de conmutación es de 100K. No medí la temperatura del MOS porque a los pocos segundos de encenderlo salió un olor a quemado, así que lo desconecté de inmediato. Tampoco tengo instrumentos aquí para medir la temperatura.

Parece que el inductor sí tiene marcas de quemado, pero no estoy seguro si fue al darle corriente o si lo quemé yo al soldarlo, el chip driver de compuerta está funcionando con normalidad,

¿Tienes un osciloscopio? Puedes conectar una resistencia de muestreo en serie con el inductor y usar el osciloscopio para medir la variación de voltaje en los extremos de la resistencia de muestreo y así medir la corriente pico del inductor.

¿Me podrían decir cómo se elige este orden de laminación al fabricar la placa?

El documento ya incluye el orden de laminación, no se requiere impedancia.