I'm currently using a linear current source to drive a single LED as in here. In my case (following the notation in the link), VDD is directly connected to a single cell lithium polymer battery, i.e. Vcc = 3.0 ~ 4.2 V. For the transistor and MOSFET, I am using MMBT3904LT3G(Digikey link) and 2N7002P,235(Digikey link), respectively. Rs is set to 2.2 Ohms. My desired current is approximately 250 mA.
Here is the circuit diagram from the site:
The problem is that there is so much heat dissipated it is hard to touch the PCB board. There are 3 LEDs (and corresponding circuits) in total on a 50 mm x 50 mm PCB (FR-4, 1.6 mm thickness). I am measuring 565 mV (which actually keeps dropping as the PCB heats up) across R2 and a voltage drop of 2.14 V across the LED at Vcc = 4.2 V. I am guessing that most of the heat is generated from Q2, since it has to drop the rest of the voltage which is approximately 1.5 V.
I have considered using a step-down switching regulator to drop the battery voltage to around 3 V, which I certainly think will help the problem. I have also looked on Digikey to find dedicated ICs such as this one. However, both require an inductor that I have heard to be expensive. There also seems to be charge pumps that I am not sure will be effective in my case (LED forward voltage is always lower than the battery voltage).
What would be the best way to go? In the end, I am looking for a cost-effective solution, but now open to any suggestions. And could you clarify whether charge pump LED drivers (such as this) will be effective for my case.