TI has an interesting application note about charging supercapacitors for energy buffering from LiSOCl2 cells. In their design, they use a microcontroller to slowly ramp up the output voltage of a DC-DC converter charging the capacitor to minimize losses. This is similar to charging with a current source instead of a voltage source. The difference is huge. Here's a simulation:
C1 and C2 are two identical 67F capacitors, charged through two identical 10-ohm resistors. On the right, the capacitor is charged from a fixed 14V source (for example, a voltage-feedback DC-DC converter). On the left, C2 is charged from a current source (more on how to do this later). As you'd expect, the voltage on C2 exponentially approaches 14V, while C2 shows a linear ramp (I've chosen the values so the two capacitors reach 14V at about the same time):
What you may not expect is that there's a huge difference in efficiency between the two. Charging C1 from the voltage source wastes half the energy in R1: in the simulation, 6.5 kJ end up in C1, and 6.56 kJ get dissipated in R1 (theoretically, they should be equal). This is 50% efficiency. It turns out that no matter what value you choose for R1, 50% of the energy is always wasted in the resistor.
On the other hand, C2 has 6.54kJ at the end of the simulation, while R2 has dissipated only 2.43kJ, for an efficiency of 73%. If we choose a 1-ohm resistor for R2 instead, only 243J end up wasted in R2: the efficiency is now 96%. You can decrease R2 as much as you like to further increase the efficiency.
So, we should charge capacitors from current sources. In the TI app note, they emulate a current source by slowly ramping the voltage output of a DC-DC converter. If we look at the voltage at the output of the current source in the above simulation, we see a similar thing:
Here, the current source and R2 always keep the "charging voltage" a fixed amount above the capacitor voltage. Decreasing R2 decreases this voltage, and hence the power that gets wasted in the resistor.
Modifying common DC-DC converters for current output
I happened to have a few MT3608 boost converter modules around. These converters accept inputs as low as 2V, can handle switching currents of up to 4A, and can output up to 28V. The modules have a 25-turn pot for adjusting the output voltage. A quick look at the MT3608 datasheet shows that this potentiometer controls the feedback from the output. The feedback is compared to 0.6V to regulate the output voltage.
I modified one of the boards by removing the output adjustment potentiometer and including a current sense resistor in the negative output line. The feedback voltage is taken from the top of the sense resistor.
The before and after block diagrams are shown here. The rest of the circuit on the PCB isn't particularly relevant:
With the modified converter, the MT3608 tries to keep the voltage across R1 at 0.6V, no matter what the output voltage is. Now, the output is a current source, perfect for charging capacitors. By choosing R1, you control the output current according to:
It turns out that this is also a good way to control/limit the input current to the converter. I think I'm going to try charging NiCd's from another coin cell with one of these converters. It's likely to be more efficient than the homebrew converter I came up with.