High Resolution Thermocouple and Data Log

I'd like to have a high resolution and high temperature thermocouple that I can use with the arduino and be able to data log it so I can plot it in excel. I would need to be able to take readings at a minimum of 1 millisecond. I would need thermocouple to be able to handle something like 1000 degrees Fahrenheit or as high as we can get it. How would I log the data? I would assume it would be pretty easy if we left the Arduino hooked into a computer and just make a text file from it and import into excel but I don't know how to do it.

Can anyone help!!!

Thanks!

Background Info:
This is for a small combustion engine which is ignited by a coil/target, think of it like a light bulb filament that acts as the spark plug. We need the measurements so we know where we are if we have trouble. A resolution of 10,000 would be awesome but really isn't necessary. We need a minimum of 1,000 readings a second and the higher we can get the better. We think the operating range is something near 900F.

"high resolution" - how high?
0.1%, or 12 bits or maybe 0.1 F ?

The arduino can sample that fast if you change the ADC clock prescalar - at expense of some accuracy. Thermocouple would need very low thermal mass to respond that quickly. 2500F is quite hot, people use optical pyrometers for that range.

we need a minimum of 1000 readings a second, and we would like more than that. We would be using it for something that does heat up in 1 millisecond, I am not sure the maximum temp it gets to but I thought it was at least 1000F, I will check today.

Whats the maximum resolution a thermocouple can do and whats the maximum resolution the arduino can do?

Magicician, I said what resolutions I needed, is your .1% duty cycle? I don't know how many bits I would need and i'm not sure what 0.1F is, thanks for your help though!

KE7GKP, The spec I gave would be ideal, obviously its not possible but also not needed. I will check on temp today but we would need a reading every millisecond at least and I was under the impression the arduino could easily do that, maybe not?

MarkT, We don't want to have to change anything in the arduino, just to use it! I'd assume optical pyrometers are pretty expensive?

Also, is there a way to measure this without having to have a something physically on the object being measured for temp? We could use a thermal imaging camera but don't have the funds to buy one thats good enough.

I honestly didn't know how possible it was, let me be a little more descriptive. This is for a small combustion engine which is ignited by a coil/target, think of it like a light bulb filament that acts as the spark plug. We need the measurements so we know where we are if we have trouble. Is that more clear? A resolution of 10,000 would be awesome but really isn't necessary. We need a minimum of 1,000 readings a second and the higher we can get the better. We think the operating range is around 900F. I appreciate your timely responses and want you to know I am new to arduino so I have no idea what the details and limitations are of the Arduino.

I don't think you understand your problem space well enough to describe it to us.

I think this is an R&D type question...

Dig around a bit...

You can do some more google searches I am sure.

A standard type K thermocouple will work well above the temperature range you are talking about.
At 900F the output will only be around 20 millivolts, so you might want to use an operational amplifier to expand this to about 4 volts. Alternatively, you could use the ARef input and analogReference() function to scale the Arduino input to 25 or 30 millivolts full scale. Not sure offhand if one way would be better than the other. 10 bits of A/D would give you +/- about 2 degrees resolution, not counting the limits of error of type K.
A bare-bead thermocouple made of fine wire will give the quickest response time. Might be hard to seal at high pressures.
Since you are working in a combustion environment (oxidizing? reducing?), this can affect your choice of materials .... type N might be preferable for a reactive environment. Sheathing can improve resistance greatly but at the expense of response time.
www.omega.com has extensive reference materials on temperature measurement which may be useful.

Another thought: what is the thermal coefficient of resistance of your ignition coil material ?
If it is high enough, you might be able to measure temperature directly by measuring voltage drop at constant current like a standard 4-wire resistance measurement (or current at constant voltage if that is more convenient).

KE7GKP:

you could use the ARef input and analogReference() function to scale the Arduino input to 25 or 30 millivolts full scale

The minimum recommended reference is around 1 volt. Below that Arduino is too noisy to produce reliable results.

Note also that any attachment to a real thermocouple must use an "ice-point" reference compensation or else you will never know whether you are measuring the temperature at the thermocouple, or the temperature at the junction point. That is one of the downsides of using real thermocouples.

Thanks, wasn't sure about the noise floor, thats why I inserted a caveat.

Good point about the ice point, too ... most OEM instrumentation fakes this automagically.

You can use an AD595ACD to inferface directly with the thermocouple ==> AD595AQ Datasheet pdf - Monolithic Thermocouple Amplifiers with Cold Junction Compensation - Analog Devices
and an ADS1213 to improve the speed and the resolution of the measurement ==> http://focus.ti.com/lit/ds/symlink/ads1213.pdf

Depending on the type of thermocouple you use, you CAN read temperatures up to around 2912 deg. F with type R thermocouples. Thermocouple - Wikipedia You can use a Maxim MAX6675 Mixed-signal and digital signal processing ICs | Analog Devices chip to interface with a type K thermocouple that will give you 2012 deg. F. it has built in cold junction compensation also. As far as the 1000 readings a second, i don't know if it can measure and send data that fast, but i do know that it works great for interfacing thermocouples.

See Adafruit product #269:

For MAX6675 Thermocouple breakout board. This will handle the temp measurement, I don't know about the speed of measurement.

I have both the MAX6675 and the replacement 3.3V variant of that board. It does not measure that fast, and it only measures to 0.25 deg C accuracy. Check out my Turkey smoking blog post at: http://www.TerenceTam.com for an example of what you can do with that board.

Honestly, if you really need 1000 samples per second, the only tool that would do readily do that is an oscilloscope or a dedicated data acquisition system. Nothing really converts and sample that fast, nor does it make sense to in an industrial control setting, which is what most of these tools are. None of the industrial control processes change that fast to require 1000 samples per second time resolution (and none of them can be controlled that fast either). At my last job when we characterized battery chargers, we take 1 sample per second over a 2 hour or more period.

I would look into wiring up the outputs to an oscilloscope to the thermocouple's output and triggering on an external event.

-=- Terence

If it's a positive displacement engine, what about using a pressure transducer synchronized with a rotary encoder on the crankshaft? You should be able to solve for temperature given you know volume and pressure, and 1000hz response is much more realistic.

ttstam:
Honestly, if you really need 1000 samples per second, the only tool that would do readily do that is an oscilloscope or a dedicated data acquisition system. Nothing really converts and sample that fast, nor does it make sense to in an industrial control setting, which is what most of these tools are.

Allow me to disagree a bit. One approach is to find an external ADC that samples quickly, with a high enough resolution, and which interfaces easily to an Arduino. Circuit #3 on this page may fit the bill, up to 12 bits of resolution with 11ksamples/s. You may be able to boost to 13 bits of resolution through decimation on the Arduino and still enjoy a faster than 1ksample/s rate. McSarge even wrote a program to interface with the LTC1298 for you. Not sure what the maximum sampling rate is, but you could time it and see how quickly the code executes.

I think the bigger challenge is what to do with the deluge of data. The serial bus is likely too slow to transfer such a quantity without significantly reducing the sampling rate at standard transmission rates. Non-standard serial transfer rates (i.e. about 115kbaud) are possible, but not with the Arduino IDE (i.e. you'll have to use PuTTy, etc.) I've transferred at 1Mbit/s between arduinos but couldn't monitor said transfer in the Serial Monitor.

I think you will have a hard time finding a thermocouple element small enough in thermal mass to respond to changes as quickly as you wish to measure. You may well end up with just average while the thermocouple undergoes a slower response.

It is possible to log up to 40,000 samples per second to a SD card with an Arduino. See the binaryLogger example in fastLoggerBeta20110802.zip here Google Code Archive - Long-term storage for Google Code Project Hosting..

I used a 12-bit MCP3201 ADC.

I'm constructing a 'thermometer' using a TI ADS1248.

It's a 24bit ADC with current generator, bias voltage, reference voltage, 7 input channels (or 3 differentials), PGA and can sample up to 2kSPS.

I've got a working breadboard prototype (a real mess) which measures an RTD (4-wire measurement) for cold-junction compensation and measures a thermocouple. At 1SPS, I've got a stDev of 0.005C.

I've build a small library which communicates with the chip over SPI. I'm planning to open-source the lib if there's interest but I'll have to clean it up a little bit first.

I've got a stDev of 0.005C.

That seems like a hellaciasly small standard deviation... what kind of temp sensor are you using, and what is the possible temperature range?

I just re-ran a small test. It's a Pt100 thinfilm RTD

I got these numbers for my room, it's in degrees celcius:
24.60506
24.60647
24.61212
24.60990
24.61151
24.60405
24.61272
24.61796
24.61050
24.62159
24.63429
24.63066
24.63429
24.63288
24.63308
24.63530
24.63207
24.63026
24.61454
24.62824
24.60869
24.61333
24.61292
24.61353
24.62018
24.62441
24.63611
24.63167
24.62623
24.62663
24.63046
24.62119
24.61957
24.62340
24.61917
24.62401
24.62361
24.62925
24.61796

that gives you a stDev of 0.0093 but you can see it fluctuating, the temperature in my room just isn't that stable.

If I measure a resistor with very low temperature coefficient I get a stDev of 0.0046 so the measurement error is probably closer to 0.005 and my room fluctuates another 0.005

The specs look like the pt100 is good to 600C. How high have you gone above room temp with your measurement?