Other Parts Discussed in Thread: LMT01, AMC3336, AMC131M03
Tool/software:
I was tasked to come up with an isolated thermocouple reader, capable of at least 300V of isolation. I stumbled upon the AMC3306 and decided to give the chip a shot at reading thermocouples.
The main differences from what was given in the AMC3306 datasheet are the addition of a few resistors to set the bias point for the thermocouple input. I added two 100k resistors and caps to the H_GND after the low pass filter on the INP and INN lines of the AMC3306 which *greatly* reduced noise during testing. My schematic looks like this; nearly identical to the TI documentation except with the addition of two resistors and two caps:
To read the delta-sigma data, I'm using a Raspberry Pi RP2040 microcontroller, making extensive use of the PIO units. This is something like a 'sub-processor' for very fast GPIO access. To read the delta sigma encoding with the RP2040, I set up two state machines in the PIO. The first generates the clock for the AMC3306, with an IRQ for another state machines. The second state machine waits until the IRQ goes high, then reads the output of the AMC3306, puts it into an input shift register, and eventually pushes it out the main loop with DMA. It sort of looks like this:
The data I'm getting on this setup is impressive, and I think I've verified that this will work as an isolated thermocouple reader. My first version of the circuit was too noisy, but after the slight modification to set the bias point I believe I have something. This is a test with a Type-T thermocouple on my desk for a little over eight hours. Even though this is effectively measuring the temperature of my office (cold at night, warming up in the morning), I'm getting very tight measurements without much noise. Most of this is probably due to the Sync3 filter I implemented; I'm using 32*2048 samples with a 16x decimation ratio.
While this will probably work for my application, I'm wondering if there is any possibility of adding open circuit detection to this device. I've read the datasheet for the ACM3306 and it appears the DIAG pin is just a self-test for the isolation barrier, correct? Would it make sense to replace the resistor between INP and HGND with a 200k resistor between INP and H_LDO_OUT for open circuit detection?
I still have some further work to do characterizing this circuit and adding the thermocouple type lookup tables, doing cold junction compensation (there's a TI LMT01 already on my test board), and comparing this with other thermocouple readers in a dry well calibrator, ice water bath, etc... But this works well so far.
If this implementation approach would be useful to document more formally for other engineers working with thermocouples, I'd be happy to collaborate on expanding it into application note format. I've written a little more documentation on this if you'd like to check it out: bbenchoff.github.io/.../IsoTherm.html