Jim Williams suggested this circuit.
It is stable to 3.5mK with a 20K change, so probably quite good. Also, it is linear and Linear.
http://cds.linear.com/docs/en/lt-journal/Thermoelectric_Williams_Mar02_Mag.pdf
Just FYI, that circuit is designed for laser diode control and isn’t suitable for control for what the OP wants without a lot of modifications.
You obviously haven't read it. loop compensation leads to AN89, where it revealed that the laser used has a temperature time constant measured in minutes. Also, the analog method is 2-3 orders of magnitude better at the temperature control. I have no idea, why would you need a micro with all the extra work, instead of changing an RC value, and looking at it with a scope. For worse results.
Wether it makes sense to use a digital control with an µC instead of analog control depends on the time constants involved. The still rather fast Laser with a few minutes time constant might still work better with analog control, but for a larger and thus slower system it gets more an more attractive to use digital control, as the long time constants are difficult to to implement in analog hardware. Also with digital control anti windup is usually standard because it is easily implemented, while analog anti windup is tricky, especially if low drift is needed. Anti_Windup can be important if the limits of the heater / cooler are reached. Even for time constants in the minutes range, it takes quite some extra effort for the analog implementation - µCs and ADCs got better since AN86, so things have changes since than.
Thanks! That sums up part of what my reply was going to be.
I have read AN86, but like Kleinstein pointed out, things have gotten better since that app note came out. Essentially, it takes a lot of trial and error to stabilize an analog control loop over long time constants. It’s much easier to modify the Kp, Ki and Kd values in firmware on a uC. Not to mention the fact that you can get PID libraries with auto tune functionality that will, at the very least, give you sane starting values to hand tune.
If I needed precise 0.005c control of the temperature of a laser in a $500,000 piece of equipment I was building, sure, I’d go with a fully analog solution (both the control loop and the TEC driver) and use a DAC to control the setpoint.
Or, if I only needed 0.01c control, I might use an analog control loop and filtered PWM drive of the TEC. (In fact, Linear makes a part that essentially takes an analog voltage on the input and drives four MOSFET’s in an H-Bridge configuration with high speed PWM on the output. It’s designed specifically for TEC control.)
However, you can get easily get 0.1c stability with a MCU and off the shelf H-Bridge using filtered PWM drive of the TEc. 0.05c or better is achievable if you throw in a 12 or 14-bit DAC and go with a two power amps in a bridge configuration.
Keep in mind, analog drive isn’t really feasible for TECs over 5V@2A. That’s OK for laser diodes, since most TECs coupled to them fall into that range. However, the OP may want larger TECs for his enclosures, in which case analog drive becomes harder. (You really need big heatsinks and forced air cooling for the power amplifiers or discrete transistors.)
Also, for what the OP is doing 0.1c stability should be more than enough. So yeah, I’d much rather use a digital solution, as I could implement it a lot quicker. It would also scale to different sized enclosures a lot better than a purely analog solution would.