While putting one of my assembled boards through its paces, smoke started coming out of the grill vents in the case. I quickly opened it up and was able to definitively see that the smoke came out of the ESP32 module's on-board voltage regulator. It's an AMS1117. I've come to the conclusion that asking it to drop 12v input to 3.3v is just too much heat to be dissipated. (I've also since read some unkind words about the part.) I allow for the possibility that the ESP32 modules I have might be tainted by supply chain counterfeiting problems, but I don't know that in any concrete way; it's just generic paranoia.
The voltage regulator is a surface-mounted SOT-223 package (3 terminals plus tab). I've ordered some replacements and will try my hand at repairing the ESP32 module. However, that's more or less a tangent, just to see if I can do it. Who's to say the replacements won't also blow at some point? I don't want that puff of smoke coming out in the middle of the night. Also, I don't know if the blown voltage regulators will have led to catastrophic damage to other things on the module, including possibly the ESP32 itself.
So, what to do about this? I want to continue powering the board with a single power supply. The fans want to run at 12v, so the 12vdc input seems like it must stay.
I'm thinking of adding a 7805 regulator to the board to feed the 5v input of the ESP32 module. That will still have to dissipate the heat in getting from 12v to 3.3v, but:
- it'll be two devices doing it instead of one
- the 7805 will be separate from the ESP32 module, and only 3 pins, so simpler to replace
- if necessary, I can add a heatsink to the 7805
I'm hoping to get away without a heatsink. The ESP32 will probably run at 250mA or so. The typical application circuit puts capacitors on both the input and output voltages. I hope to be able to avoid that because the 5v output will be feeding into the ESP32 on-board regulator. I'm not worried about power consumption, per se, so the only worry I have is about the need for a heatsink.
Another possibility would be to use a switching regulator, which should reduce the dissipation into heat. There are some that are pretty cheap as standalone modules, but I don't want to end up with a separate board or redesigning my board to be much larger. CUI Devices makes a series of switching regulators in a 3-pin package, and I think there are other manufacturers of similar devices. The idea is that they can be a direct replacement for a 7805 on a PCB. I could either feed that into the ESP32 on-board regulator use a 3.3v regulator to directly feed the Vcc pin of the ESP32. If I did the latter, I would probably have to be more careful about the capacitors. It would also be a design-time decision instead of an assembly-time decision.
OK, I've decided. I'm going to do another revision of the PCB to add a footprint for a 7805 and feed the output of that to the 5v pin of the ESP32 module. No capacitors. If someone wants to feed the 12v directly to the ESP32 on-board regulator, they can just jumper the Vin and Vout pads together. Or, they can use a 7805 or one of the pin-compatible switching regulators to drop the voltage to 5v. They can also make a late-binding decision about whether they need a heatsink for the 7805. (It turned out that I didn't have a 7805 on hand, but I will have some soon. I'll do some breadboard experiments to see how warm it actually gets when powering the ESP32.)