Go Down

Topic: Cylinder head temperature sensor? (Read 4864 times) previous topic - next topic

shadowbrush

Hey, before you give up, have you checked the error that the MAX31855 returns? Are you sure it's a grounding issue? I determined that by removing one TC from the engine and then getting valid readings from 2 TCs. Then I touched the removed TC to the engine block, and zap! - got the grounding error. Removing the TC, the readings came back on.

OTOH, if your temperature ranges are good for thermistors, I'd not bother with TCs.

Holger

ScottG

I'm not getting an error, I'm getting inaccurate temperature readings, mostly in the 30s, when it should be in the 70s. 

I'm measuring pool water temperature.  I chose thermocouples because you can easily buy a thermocouple temperature probe that you can thread into a pipe and has an enclosure at the top for the wiring. And can be outdoors.  See attached picture for an example.

shadowbrush

Ah! Different problem than mine then. Are your readings fluctuating, or just off? You'll want to calibrate any TC/amplifier combination before trusting their output. Put it in ice water and boiling water.

It took me quite a while to get solid readings from my TCs because of ground noise. Eventually fixed by eliminating a ground loop or two. That was with commercial pyrometers, before I went Arduino. The photo of your probe almost looks like it could be ungrounded.

retrolefty


I'm not getting an error, I'm getting inaccurate temperature readings, mostly in the 30s, when it should be in the 70s. 

I'm measuring pool water temperature.  I chose thermocouples because you can easily buy a thermocouple temperature probe that you can thread into a pipe and has an enclosure at the top for the wiring. And can be outdoors.  See attached picture for an example.


Errors of that magnitude could be from improper wiring material. What kind of wire are you using from that TC connection head in that picture to the electronics that reads the TC voltage?

Lefty

ScottG



I'm not getting an error, I'm getting inaccurate temperature readings, mostly in the 30s, when it should be in the 70s. 

I'm measuring pool water temperature.  I chose thermocouples because you can easily buy a thermocouple temperature probe that you can thread into a pipe and has an enclosure at the top for the wiring. And can be outdoors.  See attached picture for an example.


Errors of that magnitude could be from improper wiring material. What kind of wire are you using from that TC connection head in that picture to the electronics that reads the TC voltage?

Lefty


I don't think it's the wiring because it works fine with any one thermocouple hooked up.  It's only when I have more then one T/C connected that I have a problem.  To answer your question, I have the breakout board in the head of the thermocouple connected directly the the T/C probe wires.  I have an unshielded 5 conductor 18 gauge stranded cable running between breakout board an Arduino.  Cable is about 10 feet long.

shadowbrush

Have you tried it with two TCs connected to your Arduino but both TC isolated from each other, so that they don't share a common ground? It does sound like a ground noise issue. Is there any conductivity between the Arduino's ground and those of the TC? I had to make sure my Arduino's ground isn't connected to the engine/chassis.

My setup is similar, but I route all TC wires to a central box in the engine compartment. An Arduino there is collecting the readings and sending them over to a second Arduino in the cabin. This is on an experimental aircraft.

You haven't said whether your readings are jumpy, or stable but incorrect. Also, is your engine off, or on during your tests? Have you tried to unhook the battery? Basically remove all possible sources of ground noise, then add one by one back in to find the culprit. Maybe you're getting noise into the power supply line of your breakout boards? I'm running all shielded wires, after battling RF noise coming from the ignition system.

shadowbrush

Have you tried a .1uF capacitor between the TC+ and - at the breakout board? Also, I added ferrites to my TC lines.

dc42


I don't think it's the wiring because it works fine with any one thermocouple hooked up.  It's only when I have more then one T/C connected that I have a problem.  To answer your question, I have the breakout board in the head of the thermocouple connected directly the the T/C probe wires.  I have an unshielded 5 conductor 18 gauge stranded cable running between breakout board an Arduino.  Cable is about 10 feet long.


1. How do you have the 3 breakout boards wired to the Arduino?

2. What code are you using?

3. Is your thermocouple electrically isolated from the motor housing it is on? If it isn't, then you will pick up ground noise from the motor.
Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.

ScottG


1. How do you have the 3 breakout boards wired to the Arduino?

I'm sharing DO and CLK pins across 3 breakout boards

MAX6675 breakout board
D4   // CS for Pre-heater1 temperature
D5   // CS for Post-heater2 temperature
D6   // CS for Pump housing temperature
D7   // DO
D8   // CLK


Quote
2. What code are you using?

max6675.h library
http://github.com/adafruit/MAX6675-library

Quote
3. Is your thermocouple electrically isolated from the motor housing it is on? If it isn't, then you will pick up ground noise from the motor.

All the breakout boards use the same Vcc and Ground.  The thermocouples are measuring water which is pumped by the pump, so it's hard to say to what level they are connected electrically.  But I completely removed the pump breakout board and just tried it with the two water temp thermocouples and I still have the same problem.  If I hook either one thermocouple up everything is fine. As soon as I have both connected, temperature for both fluctuates in the 30s F.


dc42

I've taken a look at the AdaFruit library. Unfortunately, it does not obey the protocol shown in the MAX6675 datasheet. It's holding the clock line high instead of low between conversions, and taking the clock low before reading the first bit, instead of reading the first bit after taking CS low and before toggling the clock. It's not clear from the datasheet that this isn't allowed, but it might perhaps cause the MAX6675s to get out of sync with the clock when you are reading more than one of them; and that would explain your bad readings.
Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.

ScottG


I've taken a look at the AdaFruit library. Unfortunately, it does not obey the protocol shown in the MAX6675 datasheet. It's holding the clock line high instead of low between conversions, and taking the clock low before reading the first bit, instead of reading the first bit after taking CS low and before toggling the clock. It's not clear from the datasheet that this isn't allowed, but it might perhaps cause the MAX6675s to get out of sync with the clock when you are reading more than one of them; and that would explain your bad readings.


That's good to know.  I'm converting my project to OneWire sensors that are placed inside thermowells.  I'll save my MAX6675 breakout boards for 1-sensor projects.

shadowbrush

Hmm, interesting discovery, thanks for checking the code! FWITW though, I'm getting good readings on 4 MAX31855 breakout boards with this code. If this is a code issue, here is another MAX31855 library: https://github.com/ryanjmclaughlin/MAX6675-Library . I've tested it for Ryan's quad board: http://ryanjmclaughlin.com/wiki/Arduino_Thermocouple_Shield#Software .

shadowbrush

OK, I've now run into problems, too. As reported, I had good readings on multiple TCs, but since made some code changes, and moved from the Arduino IDE to Eclipse. Now I only get a good reading on the first call of Adafruit_MAX31855::readCelsius() in a loop. That's even true for a single TC: calling readCelsius() twice returns zero on the second call. But when I upload the older sketch from the Arduino IDE, all temps come back on.

Adafruit's 'serialthermocouple' sketch reads the temperature from the board twice in a loop (celsius and fahrenheit). I'll try their code in Eclipse next.

A bit of a head scratcher at the moment.

Holger

dc42


Hmm, interesting discovery, thanks for checking the code! FWITW though, I'm getting good readings on 4 MAX31855 breakout boards with this code. If this is a code issue, here is another MAX31855 library: https://github.com/ryanjmclaughlin/MAX6675-Library . I've tested it for Ryan's quad board: http://ryanjmclaughlin.com/wiki/Arduino_Thermocouple_Shield#Software .


I took a look at the Adafruit library for the MAX31855, and it does not have the protocol errors that the MAX6675 library has. So it should be good for multiple thermocouples.

Note that the MAX31855 and MAX6675 have different serial protocols, so you need to choose the correct library according to the chip you have.
Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.

shadowbrush

Thanks a lot for checking, dc42! I still don't know what's going on. During today's testing I had good readings, but they vanished after a while. I may have fried my Arduino, as other things also don't work anymore, even with simple test sketches. More testing required.

Holger

Go Up