I've built a discrete H-Bridge circuit to run a reasonably beefy 12V windscreen wiper motor. The circuit is below (EDIT: see here for a bigger PDF, StackExchange doesn't seem to let you expand the image):
RM: See larger imgur image here - these are saved by the system but only displayed at small size. Also accessible via "open image in new tab"
Bringing the board up, I started with 100% duty-cycle (non-PWM) mode, and found it functional, so I began PWMing one of the low-side N-channel MOSFETs. This also seemed fine, although caused noticeable heating in the high-side schottky on the PWM'ed side of the bridge from the inductive spike.
I then began PWMing the high- and low-side MOSFETs in an effort to dissipate the inductive spikes more efficiently. This, too (with what was probably an excessive amount of dead-time), appeared to be functioning fine, with the top-side diode staying cool.
However, after running it for a while using a switch to vary the duty cycle live, I dropped the speed from approx. 95% duty cycle to 25%, something I had done several times before. However on this occasion, there was a pop and sudden high current draw, and the TC4428A MOSFET drivers had blown.
These were the only components that blew—the MOSFETs themselves are fine, so I'm ruling out any shoot-through muppetry on my part. My best explanation so far is an excessive amount of either inductive kickback, or (more likely) too much regenerative power from the motor slowing for the power supply to deal with. The TC4428A has the lowest voltage rating within the bridge (18V, absolute max 22V), and I'm thinking the voltage has risen too high too quickly.
I was running the 12V side of this board off a old-fashioned linear bench-top power supply, with relatively long leads between it and the board. I imagine this wasn't really capable of dissipating the voltage rise.
I don't think the TC4428As were overloaded in terms of the MOSFETs' dynamic load; I was PWMing at a relatively low speed (around 2.2kHz), and the MOSFETs themselves don't have a particularly high total gate charge. They seemed to stay cool during operation, and besides, A and B drivers blew, despite only driver B being PWMed.
Does my hypothesis seem reasonable? Is there anywhere else I should be looking? If so, is the liberal sprinkling of a some beefy TVS diodes around the board (on power supply input and between the bridge output terminals) a reasonable way to deal with the over-voltage condition? I'm not sure I want to move to a switched braking-resistor type setup (it's only a “little” 2.5A-or-so 12V gear motor...).
Update:
I've placed a 1500W TVS across the 12V supply terminals (an SMCJ16A); this seems to be clamping the over-voltage during braking to just under 20V (this shows the supply voltage; an identical waveform is seen between the MOSFET gates and 0V):
It's not pretty, and it's probably still too high (clamping voltage of the SMCJ16A is 26V at max current—57A, whilst our TC4428A absolute max is 22V). I've ordered some SMCJ13CAs and will place one across the supply, and one across the motor terminals. I rather fear that even with a beefy 1.5kW TVS it's not going to last; you can see that it appears to be clamping for a good 80ms or so, which is a long period for a TVS. That said, it seems to be staying cool. Of course with actual load on the shaft... perhaps I may be implementing a switched braking resistor solution after all.