Fuente de alimentación digital Buck-Boost con rectificación síncrona basada en STM32, código abierto
Se conecta a VIN- para que la corriente de entrada pase por la resistencia de muestreo, de modo que si solo se conecta USB2 también se pueda muestrear la corriente de entrada.
Cuando programas, ¿utilizas el evento fault del HRTIM? Utilizo un comparador para lograr que, cuando la corriente del inductor supera el valor que he configurado, el MOSFET se apague directamente por hardware. Sin embargo, durante el arranque suave, me he dado cuenta de que mi salida de PWM parece estar desactivada. Tengo la sensación de que la corriente de carga del condensador es demasiado alta, lo que hace que se alcance mi límite configurado y provoca que la salida de PWM se apague. Me gustaría saber cómo configurar el HRTIM del STM32 para implementar Cycle-by-Cycle; es decir, que durante el arranque suave, si se alcanza el valor máximo de corriente del inductor que he configurado, la salida de PWM se apague inmediatamente, pero que en el siguiente ciclo se active automáticamente.
¿Has calibrado tu circuito de medición? La placa de circuito que diseñaste tendrá muchos parámetros parásitos, lo que provocará pequeñas variaciones en la ganancia del circuito de medición. Necesita ser calibrado para poder emitir los valores correctos con mayor precisión.
¿Se ha modificado el software? Revisa si el circuito de muestreo tiene algún problema.
Maestro, he añadido protección por sobrecorriente en hardware (limitación de corriente ciclo a ciclo) y también he ralentizado el arranque suave en lazo abierto (ahora a 500Hz, con pasos de 0.001). No he añadido el lazo interno de corriente porque creo que es mejor tener funcionando el lazo abierto antes de pasar al lazo cerrado.
-
Al hacer las pruebas en la placa, vi que en vacío el circuito funciona con normalidad, pero al conectarle una carga de 20R (con el voltaje de salida Vo ajustado a 30V), el MOSFET se volvió a dañar. ¿Cuál puede ser la causa de esto?
-
El circuito y el código para la prueba en vacío y con carga son exactamente los mismos, ¿por qué se daña el MOSFET?
-
¿Qué debería hacer ahora? ¿Reducir el condensador de salida? Porque antes, cuando el condensador de salida era más pequeño, el circuito funcionaba bien incluso con carga, pero después de aumentar el condensador de salida y encenderla, el MOSFET se quemó. Si reduzco el condensador de salida, ¿volverá a funcionar el circuito con normalidad? ¿Por qué ocurre esto?
Este problema es muy típico. La corriente de irrupción al cargar el condensador de salida durante el arranque suave fácilmente puede activar la protección contra sobrecorriente por error. Si estás utilizando el modo Latched (enclavado) de HRTIM Fault, una vez que se activa se mantendrá en corte hasta que el software lo borre manualmente. Este es el fenómeno de «PWM apagado por completo» que estás viendo.
Para implementar Cycle-by-Cycle (limitación de corriente ciclo a ciclo), la idea central es: Fault solo debe cortar el ciclo actual y recuperarse automáticamente en el siguiente ciclo. El hardware del HRTIM soporta completamente esta función; no es necesario que el software borre la bandera manualmente en cada ciclo.
Aquí tienes algunos puntos clave de configuración. Solo tienes que configurarlos directamente en los registros o a través de la HAL:
1. Configurar la fuente de Fault en modo «recuperación automática»
En el registro HRTIM_FLTINR1/2, busca la línea de Fault conectada a tu comparador (por ejemplo, Fault1). Presta atención a estos dos bits:
- FLTxP[1:0] (Fault Polarity): Configúrala según la polaridad de salida de tu comparador; por lo general, es activa en nivel alto.
- FLTxSRC[1:0] (Fault Source): Selecciona la entrada externa (COMPx_OUT o un pin externo).
- FLTxF[3:0] (Fault Filter): Te recomiendo añadir un filtro de unos pocos ns para evitar activaciones falsas por glitches del comparador.
Lo más importante es el bit FLTxRSM (Fault Reset Mode) en el registro HRTIM_FLTxR:
- Configúralo como 0: Immediate — En cuanto desaparezca la señal de Fault, el PWM se recupera inmediatamente.
- No lo configures como Latched (enclavado); eso es para protección ante fallos, no para la limitación ciclo a ciclo.
2. Configuración de respuesta de Fault a nivel de Timer
En el registro HRTIM_TIMxFLTR (donde x corresponde a tu Timer, por ejemplo TIMA/B/C/D):
- FLTxEN: Habilita el canal de Fault correspondiente.
- FLTLCK: Durante el arranque suave, te recomiendo no bloquearlo para mantener la recuperación automática.
- Estado de salida de la protección Fault: Configúralo como «nivel de salida inactivo» (el estado activo corta el MOS); esto depende de si el driver de tus MOSFETs superiores e inferiores es activo en nivel alto o bajo. La salida de Fault del HRTIM permite configurar los estados Set/Reset de forma independiente.
3. Punto clave: Blanking (enmascaramiento) o elevar temporalmente el umbral durante el arranque suave
Durante el arranque suave, la corriente de carga del condensador vacío es I = C × dV/dt. Si el ciclo de trabajo aumenta demasiado rápido, esta corriente de irrupción superará fácilmente tu punto normal de limitación de corriente. Además de cambiar el modo del HRTIM, te sugiero hacer ajustes a nivel de sistema:
Opción A: Añadir blanking de corriente durante el arranque suave (Current Blanking)
El HRTIM soporta de forma nativa el Fault Blanking Window, que enmascara la entrada de Fault durante un tiempo después de que el PWM se activa. Sin embargo, esto es más adecuado para enmascarar el ruido de conmutación; no es suficiente para el proceso de carga de varias decenas de ms durante el arranque suave.
Opción B: Limitación de corriente por etapas durante el arranque suave (Recomendada)
- Durante los primeros 50~100 ms del arranque suave, eleva temporalmente el umbral del comparador (por ejemplo, si la limitación de corriente normal es de 10 A, ponlo en 15 A o 20 A durante el arranque suave).
- Cuando el voltaje de salida alcance aproximadamente el 80% del valor objetivo, vuelve a cambiar al umbral normal de limitación de corriente ciclo a ciclo.
- Este cambio se puede realizar mediante el enlace DMA del HRTIM o usando un temporizador por software, sin consumir ciclos de la CPU.
Opción C: Usar el modo Delayed Protection del HRTIM
Si estás utilizando el HRTIM del G474, el Timer soporta el Delayed Protection (se configura en HRTIM_OUTxR). Puedes configurarlo para que, al activarse Fault, no se corte todo inmediatamente, sino que solo se limite el ciclo de trabajo. Sin embargo, esto es más adecuado para el modo Hiccup, no para un Cycle-by-Cycle estricto.
4. Ejemplo de HAL a nivel de código (como referencia)
// Supongamos que usas Fault1, conectado a COMP1_OUT, activo en nivel alto
HRTIM_FaultCfgTypeDef pFaultCfg = {0};
pFaultCfg.Source = HRTIM_FAULTSOURCE_DIGITALINPUT;
pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;
pFaultCfg.Filter = HRTIM_FAULTFILTER_NONE; // o añadir un filtro de 2-3 ciclos de reloj
pFaultCfg.Lock = HRTIM_FAULTLOCK_READWRITE; // No bloquear (lock)
HAL_HRTIM_FaultConfig(&hhrtim, HRTIM_FAULT_1, &pFaultCfg);
// Punto clave: configurar en modo de recuperación automática
HAL_HRTIM_FaultResetConfig(&hhrtim, HRTIM_FAULT_1, HRTIM_FAULTRESETMODE_IMMEDIATE);
// Habilitar la respuesta de Fault1 en el Timer A
HAL_HRTIM_TimerFaultConfig(&hhrtim, HRTIM_TIMERINDEX_TIMER_A, HRTIM_FAULT_1, HRTIM_TIMFAULTENABLE_FAULT1);
Luego, en la interrupción (si estás usando alguna) o en el bucle principal, no necesitas borrar manualmente la bandera de Fault; el hardware restaurará automáticamente el PWM cuando la salida del comparador pase a nivel bajo. Lo único que debes vigilar es que, si Fault se activa durante N ciclos consecutivos, significa que hay una sobrecorriente real; en ese momento, el software debe intervenir para reducir el ciclo de trabajo o cortar la señal.
5. Consejos de depuración
Usa un osciloscopio para capturar y comparar estas tres formas de onda:
- Corriente del inductor (o voltaje en la resistencia de muestreo)
- Salida del comparador (mira directamente el pin de Fault del HRTIM)
- Salida PWM del HRTIM
Si el PWM se corta y la salida del comparador pasa a nivel bajo, pero el PWM no se recupera → significa que FLTxRSM no está configurado como Immediate, sino que sigue en Latched.
Si el PWM se corta y se vuelve a abrir en cada ciclo → significa que el Cycle-by-Cycle está funcionando, pero la corriente de arranque suave realmente es demasiado alta, por lo que necesitas combinarlo con la Opción B para elevar temporalmente el umbral.
En resumen: El Cycle-by-Cycle que buscas es simplemente el modo de recuperación automática de Fault + sin enclavamiento (no Latched); el hardware del HRTIM lo soporta de forma nativa. Para el problema de las activaciones falsas durante el arranque suave, te sugiero solucionarlo combinándolo con un ajuste dinámico del umbral del comparador en la fase de arranque suave; es más fiable que simplemente modificar el HRTIM.
Tu problema es muy típico: funciona en vacío y explota con carga, lo que demuestra que tu arranque suave en lazo abierto no ha superado en absoluto la prueba del «estrés de corriente».
Primero, respuestas directas a tus tres preguntas:
-
Funciona en vacío, pero explota con 20R, porque al arrancar con carga, la corriente del inductor = corriente de carga del condensador de salida + corriente de carga. En vacío, el inductor solo necesita cargar el condensador, por lo que la corriente es pequeña; con una carga de 20R (1.5A), con el mismo escalón de ciclo de trabajo, el inductor necesita soportar adicionalmente esta componente de continua de 1.5A, y la corriente pico puede atravesar fácilmente el punto de saturación de 12A de tu inductor. Una vez que el inductor se satura, equivale a un cable, metiendo los 58V directamente contra la Rds(on) del MOS y la resistencia de la pista, alcanzando decenas de amperios en un instante. Tu «limitación de corriente ciclo a ciclo» o tiene el punto de muestreo equivocado, o su velocidad de respuesta no sigue la pendiente de subida de la corriente tras la saturación, simplemente no protege.
-
El código es el mismo, pero las condiciones de trabajo son radicalmente distintas. El control en lazo abierto es ciego; no le importa si hay vacío o plena carga, siempre empuja el ciclo de trabajo con un escalón fijo. Arrancar en vacío es «dar un paseo», arrancar con carga es «escalar una montaña con peso a cuestas»; si haces que el circuito corra al mismo ritmo, la corriente pico del inductor con carga puede ser varias veces la de vacío, es de extrañar que no explote.
-
Reducir el condensador de salida efectivamente evita que explote temporalmente, porque en el instante de arranque se necesita menos carga eléctrica, la corriente pico del inductor disminuye y se aleja del punto de saturación. Pero esto es solo esconder la cabeza bajo el ala: no puedes hacer que tu producto futuro solo use condensadores pequeños, ¿no? La causa raíz es que tu control no tiene limitación de corriente. Lo que más debes hacer a continuación no es ajustar el condensador, sino poner inmediatamente una resistencia de muestreo en serie en el lazo del inductor (o una sonda de corriente) y usar un osciloscopio para capturar la forma de onda de corriente al arrancar con carga, para ver a cuánto llega realmente el pico.
Análisis concreto y recomendaciones:
Ahora mismo estás prácticamente «en paños menores»: tienes OCP por hardware pero sin lazo cerrado de corriente; el escalón de arranque suave de 0.001 suena suave, pero al arrancar con condensador grande + carga, la corriente pico del inductor hace tiempo que superó los 12A. Aunque el CSD19534Q5A puede soportar una corriente de pulso de 100A, eso se basa en la premisa de que el inductor no está saturado y la corriente está controlada. En cuanto el inductor se satura, la corriente queda sin control, el transistor funde la oblea de silicio por calor en pocos microsegundos y el GDS se cortocircuita por completo.
¿Por qué solo explota el lado Buck?
En modo Buck, el MOSFET de alta del Buck es el interruptor principal, enfrentándose directamente a la entrada de 58V y al «casi cortocircuito» del inductor saturado. El MOSFET de alta del lado Boost está siempre conduciendo, solo pasa por él la corriente de carga relativamente estable, sin el doble debuff del MOSFET de alta del Buck de conmutación dura a alta frecuencia + impacto de saturación. La energía viene de la entrada, el MOSFET de alta del Buck es la primera barrera; es normal que muera primero.
Qué debes hacer a continuación (por prioridad):
-
Capturar la forma de onda para confirmar la causa de muerte: reduce el condensador de salida de nuevo a 470uF, pon una carga de 20R, coloca una resistencia de muestreo de 0.1Ω en serie con el inductor (o usa directamente una sonda de corriente) y mira la corriente de arranque con el osciloscopio. Apuesto a que tu pico de arranque supera los 15A. Si al reducir el condensador el pico baja a menos de 10A y arranca normalmente, eso confirma que la saturación por corriente de arranque es lo que provoca la explosión del transistor.
-
Revisa tu OCP por hardware: ¿Dónde está el punto de muestreo de la limitación ciclo a ciclo? Si estás muestreando la corriente del MOSFET de baja del Buck (durante el período de libre circulación), entonces no ves en absoluto el pico de corriente durante la conducción del MOSFET de alta, teniendo una zona muerta de al menos 1 ciclo de conmutación. La saturación del inductor suele ocurrir mientras el MOSFET de alta conduce; para cuando conduces el de baja y detectas la sobrecorriente, el de alta ya se ha derretido. Recomendaciones:
- Pon el límite de corriente a 8~9A (deja un margen de más de 3A, no lo pongas rozando los 12A)
- Asegúrate de que el retardo total desde la detección de sobrecorriente hasta el apagado del PWM sea <500ns
- Si usas muestreo en el lado bajo, considera cambiar al muestreo en el lado alto del bus o del inductor, o al menos añade un comparador para hacer un apagado rápido por hardware
-
No sigas empeñándote con el lazo abierto: ya has demostrado dos veces que el arranque con carga en lazo abierto no es viable. Añade ya un lazo interno de corriente, aunque sea la limitación de corriente pico más rudimentaria: pon un limitador después de la salida del lazo de voltaje, fija la consigna de corriente a un máximo de 10A, y si se supera, corta el PWM directamente. Esto funciona mejor que cualquier escalón de arranque suave. El doble lazo cerrado (lazo externo de voltaje + lazo interno de corriente) es el mínimo para un Buck-Boost, no es opcional.
-
El inductor ya está inservible: dices que el inductor tiene marcas de quemado, así que ya no es fiable. Una vez que un núcleo toroidal de hierro-silicio-aluminio se satura en exceso, su permeabilidad cae de forma permanente, y la próxima vez puede saturarse a 8A. Te recomiendo cambiar a un inductor con corriente de saturación superior a 20A, o al menos cambiar a uno nuevo del mismo modelo. No ahorres en esto, que vuelva a explotar un MOS te saldrá más caro.
-
Puedes aumentar el condensador de salida, pero el arranque debe tener limitación de corriente: no hay problema con condensadores grandes, pero al arrancar tienes que hacer una carga a corriente constante. Las soluciones maduras siempre limitan primero la corriente del inductor (por ejemplo a 5A) y, cuando el voltaje de salida se acerca al valor objetivo, cambian al lazo cerrado de voltaje constante. Tu arranque suave en lazo abierto actual esencialmente está «dando palos de ciego a ciclo de trabajo constante»; si aciertas, sobrevive; si te pasas, explota.
Resumen: reducir el condensador de salida puede permitirte ponerlo a funcionar temporalmente para hacer pruebas, pero mientras sigas arrancando en lazo abierto + carga pesada, que explote el transistor es solo cuestión de tiempo. La prioridad es capturar la forma de onda de corriente para confirmar el punto de saturación y luego implementar un lazo interno de corriente. No te obsesiones con la capacidad del condensador, eso es solo el síntoma; el lazo de control ausente es la verdadera enfermedad.
Rehice una versión del diseño y el pin SW del lado del buck me quedó así (línea amarilla). También volví a medir la forma de onda de mi driver de alto lado (línea roja), ¿qué debería modificar? ¿El capacitor bootstrap? ¿O alguna otra cosa? En mis versiones anteriores no tuve este problema, ¿qué pudo haberlo causado?
¿Qué se modificó?
Mira el layout
En la parte posterior está el driver del MOSFET, cambié la resistencia por una de 8R, pero el síntoma sigue igual (antes usaba 4R)
El RC y el diodo en paralelo con el MOSFET no están soldados
La primera imagen es mi esquema, la segunda es la forma de onda de VS del lado BUCK con respecto a tierra y de la corriente del inductor al probar con más de 20V, la tercera es una ampliación de la segunda, y la cuarta es VS y la corriente del inductor con menos de 20V. Mi PWM es de 100K con un ciclo de trabajo fijo de 0.5.
-
¿Por qué al aumentar el voltaje de entrada hace que la frecuencia del rizado de la corriente del inductor disminuya, y por qué VS adquiere una forma de onda con un pico muy pronunciado en lugar de una onda cuadrada cuando el MOS se enciende por segunda vez?
-
¿Cómo puedo solucionar este problema?
Mi consulta es sobre el modo de voltaje constante: con una salida de 5V, cuando la carga electrónica está desactivada, el voltaje de salida es de 5V. Al ajustar la carga electrónica a 0.5A, esta muestra que el voltaje de salida baja a 4.91V; al ajustarla a 1.5A, muestra que baja a 4.74V; y al ajustarla a 2.5A, muestra que baja a 4.56V. Sin embargo, en todos los casos anteriores, el microcontrolador siempre muestrea un voltaje de salida de 5V. ¿A qué se debe esto?
Caída de tensión por pérdida en la línea, ¿no será que el cable con el que conectas la carga electrónica es demasiado fino?
Efectivamente tiene que ver con la pérdida de línea, estoy usando un cable de calibre 14 AWG. Veo que en la demostración de su vídeo parece que no se ha visto afectado por la pérdida de línea, ¿cómo lo hizo?
Entonces, mide si ha bajado el voltaje en la regleta de terminales de la placa de alimentación.
Colega, he visto el esquema y las formas de onda que mandaste. Este fenómeno es un clásico cuando se hacen fuentes de alimentación digitales con STM32 (especialmente las Buck-Boost con controladores discretos que montas tú mismo).
Ya que en el programa has fijado el PWM a un ciclo de trabajo constante del 50% (0.5), en teoría el MCU debería estar sacando una onda cuadrada de igual anchura sin pestañear. Lo que ves en la Figura 3 (>20V), ese «un ancho y un estrecho», la «frecuencia de rizado de corriente del inductor descontrolada (Pulse Skipping / ondas grandes y pequeñas)» y los «picos estrechísimos en el nodo VS», se debe esencialmente a que la señal de conducción de este ciclo ha sido truncada de forma anormal.
Basado en mi experiencia, te ayudo a repasar las causas y las ideas para solucionarlo:
1. ¿Por qué aparece este fenómeno al subir el voltaje?
Al subir el voltaje de entrada de <20V a >20V, el cambio más directo es que el dv/dt y el di/dt durante la conmutación aumentan significativamente, lo que desencadena varias reacciones en cadena fatales:
-
Interferencias/Ground Bounce que provocan errores en el MCU o la lógica de conducción: Al aumentar el voltaje, el ruido de alta frecuencia (EMI) en el instante de la conmutación se vuelve más fuerte. Este ruido se acopla fácilmente a las pistas de PWM del MCU, o provoca fluctuaciones severas en el nivel de tierra de referencia. Si la entrada lógica del IC de conducción detecta un glitch, o si el temporizador del microcontrolador sufre interferencias, el PWM que debería durar medio ciclo se apagará prematuramente, formando los «picos» que ves.
-
Fallo del circuito bootstrap o voltaje negativo excesivo en VS: En tu esquema usas un esquema de control de transistores de rama alta/baja con condensadores bootstrap (C25, C27, que parecen ser de 100nF). Al subir el voltaje, la corriente de freewheeling del inductor durante el tiempo muerto provoca un ringing negativo muy profundo en el nodo VS (por debajo de PGND). Si este voltaje negativo es demasiado profundo, descargará instantáneamente la carga del condensador bootstrap, o activará la protección contra subtensión (UVLO) interna del IC de conducción. En cuanto cae el voltaje bootstrap, el transistor de rama alta deja de funcionar y se apaga, convirtiéndose en un pico extremadamente estrecho.
-
Disparo accidental de la protección por hardware (si la hay): Si tu placa tiene una protección por sobrecorriente de hardware o un comparador de amplificador operacional basado en el muestreo de corriente (como las resistencias de 5mΩ R27 y R28 del esquema), al subir el voltaje, el pico de flanco ascendente (Leading Edge Spike) en el instante de conmutación también será mayor, lo que hace muy fácil que el comparador se dispare por error y fuerce el enmascaramiento del pulso PWM actual.
-
El inductor tiende a saturarse: Aunque no sea la causa principal, el aumento de voltaje provoca un aumento en la corriente pico. Si el margen del inductor no es suficiente, los picos provocados por la corriente desbocada también intensificarán las interferencias de ruido mencionadas.
2. ¿Cómo solucionarlo y revisarlo?
No te apresures a rediseñar la placa. Para buscar bugs en fuentes de alimentación digitales hay que «seguir el rastro», te sugiero seguir estos pasos:
Paso 1: Identificar quién es el «culpable» (¡lo más importante!)
Ahora mismo solo has medido el nodo VS. Necesitas usar dos canales del osciloscopio para medir simultáneamente el pin de salida PWM del STM32 y el nodo VS (o el pin Gate del transistor de rama alta).
-
Caso A: Si la forma de onda medida en el pin del microcontrolador ya está con un pulso ancho y otro estrecho, todo desordenado, significa que la parte de potencia está interfiriendo con el MCU. Necesitas comprobar si la alimentación del STM32 es estable, si las tierras de potencia y señal están bien dispuestas/conectadas a un punto único, o intentar añadir un pequeño filtro RC cerca del IC de conducción en la línea PWM (por ejemplo, una resistencia en serie de unas decenas de ohmios, con un condensador de 22pF a tierra).
-
Caso B: Si por el pin del microcontrolador sale una onda cuadrada perfecta del 50%, pero en el terminal VS sigue habiendo picos, entonces significa que el problema está en la etapa de conducción, concéntrate en el paso 2.
Paso 2: Optimización de la etapa de conducción
Si el problema está en la etapa de conducción, lo más probable es que se deba al bootstrap o a una velocidad de conmutación demasiado rápida:
-
Aumentar el condensador bootstrap: Tus C25 y C27 actuales son de 100nF; funcionar a 100kHz bajo carga pesada o alto voltaje puede ser un poco justo. Te recomiendo poner en paralelo un MLCC de 1uF para asegurar que el transistor de rama alta tenga suficiente carga para mantenerse conduciendo.
-
Suprimir el ringing del nodo de conmutación (punto clave): Usa el osciloscopio para ampliar el flanco de bajada de la forma de onda y mira si el nodo VS baja hasta -2V o incluso menos. Si es así, te sugiero añadir un RC Snubber (circuito de absorción RC) entre VS1 y tierra, y entre VS2 y tierra, por ejemplo, una resistencia de unos pocos ohmios en serie con un condensador de unos cientos de pF, para absorber el ringing.
-
Reducir un poco la velocidad de conmutación: Puedes poner una pequeña resistencia en serie con la puerta (Gate) del transistor de rama alta (si hay espacio, por el esquema parece que van directos). Sacrifica un poco las pérdidas de conmutación para reducir el dv/dt, y todo el sistema será mucho más estable.
-
Comprobar la recuperación inversa del diodo: Tu diodo bootstrap es un SS14 (Schottky), con una tensión de soporte de 40V. Con entradas >20V, si le sumas el ringing, la tensión inversa soportada puede quedar justa. Te recomiendo cambiarlo por un diodo de mayor tensión y recuperación ultrarrápida, y poner en serie una pequeña resistencia de unos 2.2Ω para limitar la corriente pico de carga.
Ve primero a medir la fuente PWM en los pines del microcontrolador. Una vez que determines si la fuente está siendo interferida o si la etapa de conducción no aguanta, podrás aplicar el remedio adecuado. ¡Suerte con el debug!
Le he echado un vistazo a tus formas de onda y al esquema, este fenómeno es bastante típico, la razón principal es que al aumentar el voltaje de entrada, el inductor ha entrado en modo de conducción discontinua (DCM).
1. ¿Por qué al aumentar el voltaje de entrada, la «frecuencia del rizado disminuye», y en el segundo encendido VS es un pulso puntiagudo en lugar de una onda cuadrada?
En realidad, la frecuencia del PWM no ha cambiado, sigue siendo 100K, es un efecto visual causado por la deformación de la forma de onda de la corriente.
Ahora mismo estás en lazo abierto con un ciclo de trabajo fijo del 50%, en modo Buck puro la salida es aproximadamente la mitad de la entrada. Al aumentar el voltaje de entrada, el rizado de la corriente del inductor ΔI = (Vin-Vout)×D/(L×f) aumentará linealmente. Cuando el valor pico a pico del rizado supera el doble de la corriente promedio de salida, el valle de la corriente choca directamente contra 0, y se cae de CCM a DCM.
Después de entrar en DCM:
- En la etapa de apagado, la corriente del inductor cae a 0 temprano, el diodo de libre circulación se corta, el nodo VS entra en estado de alta impedancia y resuena libremente debido a la LC parásita, por lo que ya no se mantiene como una onda cuadrada.
- En el siguiente ciclo, cuando el MOS se vuelve a encender, la corriente del inductor es 0, lo que equivale a una conmutación dura (hard switching): el MOS carga y descarga directamente la capacidad parásita del nodo de conmutación, el di/dt es extremadamente grande, generando un pulso de voltaje muy puntiagudo. Pero como no hay corriente de inductor sostenida para mantenerlo, el pico se disipa rápidamente, por lo que parece un pulso estrecho en lugar de una meseta de onda cuadrada.
- Lo que llamas «frecuencia de rizado disminuida» en realidad se debe a que la corriente permanece pegada a 0 durante más de la mitad del ciclo (con solo una pequeña fluctuación de resonancia), y la onda triangular efectiva solo ocupa una pequeña fracción; visualmente parece que la frecuencia ha bajado; en casos graves, incluso puede aparecer el fenómeno de pulsos saltados, donde la energía solo se transmite cada dos ciclos.
Además, estás usando un NMOS de lado alto con control bootstrap; en DCM el VS no va a tierra durante mucho tiempo, el condensador bootstrap C7 no se puede cargar, la capacidad de conducción disminuirá y la forma de onda de encendido será aún peor. En tu esquema, C7 está marcado como 100pF, lo cual también es demasiado pequeño; los condensadores bootstrap suelen empezar a partir de cientos de nF.
2. ¿Cómo solucionarlo?
Varias direcciones, ordenadas por prioridad:
① Volver a CCM (solución de raíz)
- Cambiar a un inductor de mayor inductancia: Calcula con el voltaje de entrada máximo para asegurar que el valor pico a pico del rizado no supere el 30%~40% de la corriente promedio, dejando suficiente margen. Esta es la forma más directa.
- Aumentar la carga: Elevar la corriente de salida promedio para «levantar» la corriente del valle del punto 0 puede verificar rápidamente si es un problema de DCM.
- Bajar la frecuencia de conmutación también puede reducir el rizado, pero 100K es bastante razonable, no se recomienda actuar sobre la frecuencia.
② Suprimir los picos y el ringing (mejorar el estrés y la EMI)
- Añadir un snubber RCD (por ejemplo, resistencia de 100Ω + condensador de 1nF + diodo de recuperación rápida) entre el nodo VS y tierra, o un simple snubber RC (decenas de Ω + cientos de pF), puede reducir significativamente los picos y el ringing.
- En el layout, mantener el área de cobre del nodo de conmutación lo más pequeña posible y que el lazo de conducción tome la ruta más corta para reducir los parámetros parásitos.
③ Mejora del método de control
- El ciclo de trabajo fijo en lazo abierto no es muy adecuado para topologías como la Buck-Boost. Se recomienda cambiar a un lazo cerrado de voltaje; cuando la entrada cambie, el ciclo de trabajo se ajustará automáticamente, lo que estabiliza el voltaje y alivia el problema de DCM.
- Si definitivamente tienes que funcionar en lazo abierto, entonces rediseña los parámetros del inductor basándote en tu voltaje de entrada máximo para asegurar CCM en todo el rango.
En resumen: la esencia es que con alto voltaje y carga ligera has caído en DCM, y los picos son el producto de la conmutación dura a corriente cero. Puedes probar a conectar temporalmente una carga pesada; si la forma de onda vuelve a ser la de onda cuadrada + onda triangular que tenías con bajo voltaje, se confirmará que es un problema de DCM, y luego simplemente cambias a un inductor más grande.
Al medir con el multímetro, el voltaje también cae, no es exactamente 5V, pero al medir la impedancia del cable con el multímetro está alrededor de 180 mΩ, lo cual concuerda con la magnitud de la caída de voltaje al aumentar la corriente.










