While it's still not clear what exactly is going on, three significant mistakes are apparent:
- Placing a low impedance at the MOSFET gates (G-S);
- The layout is worse than Swiss cheese;
- The bootstrap diodes are incorrect type.
Minor errors include: no high-frequency bypass with C37 / C44; three different grounds on the schematic (evidently all identical on the PCB); R67-R68 are not labeled; series resistors used inexplicably (not an error, more just odd); no local bypass at the H-bridge; C33, C35, C40, C42 not doing anything; and probably other things but we're down into niggles and pedantry at this point.
The good news then, I guess, is that the basic skeleton is fine! There's logic inputs (assumed), logic power, an isolation gap (well, sort of... the net connected to U18-10 comes quite close to
5V, but all the traces under the isolators can be pushed to the other side for full creepage/clearance); there's a, well this isn't shown by the schematic (or what code if applicable) but the initial pulse appears to be bootstrap charging which is correct; the main output traces/pours have good area (though maybe not great, if we're talking pulses over 100 A here?); etc.
Also, speaking of code (or whatever the logic signal source is), the dead time is set suspiciously low on these drivers (~70 ns), yet the gate resistors are absolutely massive (giving a time constant of ~16 µs!). Worst-case input signals could cause shoot-through of comparable duration (i.e., because one is still turning off while the other is turning on). I'm assuming this is handled by the signal generation, implementing additional dead time externally. (The driver isn't capable of such long dead times anyway, so this is a necessary solution, given the gate resistors as shown.)
So about those mistakes:
1. Low gate impedance
Often, this creates a tuned-gate oscillator, between CDG and CGS, and the inductance of the loop (including the unavoidable lead inductance of the package itself -- for a TO-264, ballpark 10 nH). The TVS diode has about 300-600 pF, and itself around 10 nH inductance. These reactances are series resonant at ~50 MHz, a plausible oscillation frequency (modern designs of Si power switching MOSFETs can support parasitic oscillations up to 400 MHz!). It's possible that, zoomed in far enough, you'd have seen a frequency around here; or it might be lower, dictated by layout strays (the ponderously large loop over to the driver; but the large gate resistor(s) rather isolate this path from the gate itself, so this is somewhat less likely).
Aside: where do these inductance figures come from?
Stray inductance can be eyeballed, as it is proportional to length, inversely proportional to cross section (irrelevant here with flat, widely spaced conductors; wide conductors over a ground plane, however, benefit greatly from trace width), and times a geometry factor (which we can hand-wave as 1 for starters). 1 nH per mm of trace or component lead length is a good rule of thumb.
High frequencies follow the path of least impedance: the closest inside path around the conductive loop. For loose traces on a PCB and no ground plane, the shortest path is along the facing edges of the traces. A circular trace for example follows the inside edge. So the width aspect would be in the copper-thickness axis, but that dimension is minuscule (10s of µm), hence the width effect is fairly irrelevant. With broadside-facing (overlapping) traces and planes, however, the closest path is that facing area, so the width is the trace width as drawn, and currents follow the path (search "pcb image current").
2. Worse than Swiss cheese
It's "worse" because the wide spaces between traces means any EM fields can pass right between them, meanwhile inducing significant voltages into the widely spaced loops, including signal loops such as the logic inputs and gate drive (G-S) loops. Or vice-versa, the currents in these loops induce voltages in nearby loops, and/or radiate to space. There is no meaningful analysis of such a design: every loop couples to every other, whether by mutual EM fields, or by shared current paths (like the two low-side drivers being returned through the same
Cap- trace instead of directly to their respective MOSFETs).
If we fill the entire board with an inner layer ground plane (most likely
GND on the left,
Cap- on the right), EM fields are shunted against the plane, and loop paths suddenly become much shorter: internal fields stay largely within the board, and external fields interact considerably less.
I would still prefer relaying the whole circuit of course, but it has been done as a stopgap measure, adding plane(s) to an existing design and having that pass EMC testing.
(To be clear, this schematic is perfectly fine to do on a two-layer PCB; the components can just be placed a bit closer, probably a few turned around, and the traces brought in closer to respect their current loops. A
Cap- ground plane might not even be needed, since the local paths can be fairly distant, and the circuit is simple.)
Incidentally, the reason this mistake is not listed as #1 is because of the very slow gate drive (also the observation that removing TVSs helps). It should be difficult for output dV/dt and dI/dt to be too much of a problem, at least, assuming the
Cap- trace loops around just offscreen, and a capacitor is there. This is typically the highest priority for SMPS circuits, which do not have the luxury of such exorbitant switching times.
3. Bootstrap diodes
Aside from the unfortunate name, the SARS01 diodes are, apparently, intentionally slow types. Like, specified as bad or worse than 1N4007. They're also much more expensive (which further explains why I hadn't before noticed their existence). Why so bad? They're intended for a specific application (flyback snubber), where the slow recovery can be somewhat of a feature (for example, Power Integrations makes several flyback regulators for which they recommend a 1N4007 in this position). It's a parts optimization step; equivalent effect can be had with an R+C snubber (albeit probably at higher total losses, but also well controlled because you can choose the R and C; whereas the diode, you're stuck with one kind, no adjustment). Anyway, this is just background, not very relevant here.
In this application however, the problem is that bootstrap charging current may still be flowing when the high side switches on (or for inductive load, when the low side switches off). That puts full recovery loss in the diode, and R67/R68, and may interrupt the high side supply as well (since only a modest-impedance electrolytic* is connected there).
*Or maybe they're polymer or tantalum; lacking BOM info, a wide range of ESR is possible.
Simply substituting with UF4004 or US1J would be fine here.
4. On gate protection
(I didn't tell you there'd be a part 4!)
There's no obvious reason to expect excessive VGS here: the drivers are supplied from stable DC (assumption); the bootstrap should work, well -- layout notwithstanding, but with that fixed, it'll work fine; and the only remaining source is transistor breakdown itself, which I'm afraid isn't going to be mitigated by one puny TVS. (When MOSFETs fail, typically they go three-way short; some VDS gets dumped onto the gate, typically nuking the driver(s).*)
*I even had one combo bootstrap driver / SMPS controller fail so badly that it took out its feedback optoisolator. Just random arcing between its pins, I guess!
Another use-case might be with a gate drive transformer, where the inductance of the transformer, or transient conditions during startup, can lead to peak voltages higher than the intended VGS(on). There are also cases where a zener diode is used to get more precise (and quicker stabilized) drive voltage ("DC restore" circuit).
There are also linear amplifier applications, where VGS(on) needs to be limited as part of the control scheme, or transiently, especially in event of output short-circuit, or perhaps ESD, for example.
In either case -- setting VGS(on), protecting against outside transients, and protection of gate driver against MOSFET failure, should be done this way:
simulate this circuit – Schematic created using CircuitLab
I've used this a few times, to protect the controller/driver against MOSFET failures during development; simply split the drive resistor in half, and put a suitable TVS there (SMAJ12A would be a typical part, but the SA15, or P6KE or etc. would be fine in THT, and of course choose the voltage and uni/bidirectional type appropriate for the application). R2 is likely to be blown open by MOSFET failure, but the driver remains functional. Note this increases switching time somewhat, because of the TVS capacitance.
In several applications (like with a "DC restore" network), R1 may be part of the drive network already (as any general impedance), so isn't needed explicitly. It is needed to protect a driver, so that the TVS's Vpk can be met while limiting current backflowing to the driver.
In any case, the important part is to just have some resistance between TVS and gate. For large transistors like FDL100N50F, it could be just a few ohms; it can also often be a ferrite bead, especially for smaller types, and where speed is required.
A ferrite bead on the TVS lead could also be used, but this will increase the peak clamping voltage depending on rate of transient. So it's better to have it in series with the gate. (So, a slightly bigger bead to slip over the TO-264 gate lead, eh?)