Trying to drive a speaker at some power level without burning a bunch of power in an A or AB amp is hard to do with discretes. I guess I shouldn't say "hard", but messy. There are conditions to be dealt with and the number of components starts to add up.
Class D audio drivers work much more efficiently, but they don't provide some features I require unless you go with the big package, high power, more expensive drivers.
I found a motor controller that should work, even if it is not fully specified for switching speed for example. LV8548MC
The feature that is hard to find in other units is measuring the current. I need to detect shorts and opens. This device has nothing built in, but the switches are high enough resistance that a high enough voltage will be dropped on the low side that it can be directly compared to a reference using LVDS inputs on the FPGA. It takes a few pins, but that's one thing FPGAs are good at, providing I/O pins. With 200 mA of speaker current the voltage drop should be between 70 mV and 125 mV (they actually spec both min and max FET resistance even if it is for the combination of high and low side). The peak current may be more than that even. So thresholds at say 55 mV and 200 mV should distinguish a short and an open condition.
I think it was a switching voltage regulator I saw they internally measured the voltage on the FET to determine when the current was reaching a level of interest. I thought it might work here and it seems like it can, mostly because the thresholds can be very non critical.
Any comments?