Only after breadboarding the control circuit did I realize that the thermal control circuit was way too complex. I thought I needed a virtual ground so my error signal could be positive or negative, however, I don't actually care if the unit is too hot. If the temperature is too hot there is nothing I can do. I've revised the circuit so that a low temperature creates a positive error signal and anything higher than the setpoint is zero.
The topology is fundamentally the same as last time, minus the virtual ground headaches.
I've been working on better temperature regulation. I took some measurements of the TMP36 I was using, and found that it had on the order of 10mv p-p of noise. This was the best case with lots of shielding and holding my breath. This corresponds to about 1 kelvin of noise in the temperature. I have decided that for the next revision, I will use an NTC thermistor in a bridge configuration. I have heard that these can be lower noise than the TMP36.
Here is an LTspice schematic of the temperature control system:
On the left hand side is the virtual ground generator. This allows me to have a split supply for the opamps without actually having one. In the middle is the resistance bridge. Changes in temperature (and therefore resistance) will create a voltage differential between the two halves of the bridge. The Difference amplifier U2 will take these two voltages and create an error signal. The amplifier U3 forms a crude PI controller to servo the temperature. In the real deal the output of U3 would be connected to the heater transistor. Component values will probably change once I finalize parts.
I've already received lots of feedback elsewhere on how to improve this project.
The first and "easiest" thing to change was the grounding arrangement for the heater. Currently, the heater and reference share a ground. This is problematic because the current from the heater could lift the ground of the reference. To fix this, I cut the ground trace on the emitter of the heater transistor and ran the ground separately back to the power supply.
The second thing I am going to change is to have better control of the temperature. Although I did not see any oscillations in temperature initially, after making the grounding changes above I now see oscillations. For a revision 2 I plan to add PI control of the temperature. I also plan to use two resistors: one mounted on top as it is currently, and one mounted below the board. This is to even out the temperature gradients and remove thermocouple effects. I also plan to use a smaller temperature sensor with less thermal mass and resistance, and mount it directly to the reference instead of to the resistor.
Fun note from the MAX6226 datasheet:
"Pin 8 must be clear of any mechanical and electrical contact. Neither copper nor solder/paste mask must be placed underneath its land pattern"
I chose the MAX6226 for this voltage reference specifically for its low noise performance. My options for references in the performance range I wanted were the LM399, LTZ1000, or MAX6226. I didn't want the expense and difficulty of using an LTZ1000, and the MAX6226 is lower noise than the LM399. However, the LM399 has a much better temperature coefficient owning to its internal oven. I decided to see if I could match the temperature stability by ovenizing the MAX6226 myself.
Here is the schematic. It includes the reference, a buffer, and a closed loop heater control for the reference.
To thermally couple the reference, temperature sensor, and heater I stacked them on top of each other.
The reference is the purple ceramic package on the bottom, the heater is the SMD resistor in the middle, and the TO-92 package is the temperature sensor. This was a pain in the ass to solder, and I will definitely just use an LM399 in the future.
I 3d printed a cover which both thermally insulates the reference and presses the whole assembly together for better thermal coupling. I didn't have thermal compound on hand and did not feel like waiting to buy some. I stuffed some foam into the cover for insulation and to make contact with the sandwich.
After lots of wrangling and troubleshooting, I finally got the board to power up and stabilize in temperature.
Here is the long term test setup. I have a raspberry pi that logs the voltage from the 6.5 digit DMM, the oven temperature, and ambient temperature. All data is uploaded to an webpage for remote viewing. Don't @ me about poor fixturing, I know it is very bad. Solutions are welcome though.
Some problems I already know about:
The oven setpoint is derived from the voltage reference. If the reference had a positive temperature coefficient (it doesn't at the moment luckily) it could enter thermal runaway and cook itself to death.
The test setup is not ideal, no fixturing, no thought given to thermal EMF, long leads, etc.
I have nightmares about people touching it as it is in a (semi) public space at my university.
There is little to no insulation or shielding. I did this on purpose to gather data about the board itself, not any enclosure it is in.
That's all for now, see you guys in 1000 hours when it is done burning in.