MAX6675 Thermocouple Interface

I have been working on a few projects where I need a good temperature measurement. The problem is that most cheap sensors only work up to 125˚C! What if you want to measure the temperature of an oven? That is why I have created a breakout board for the MAX6675 chip. It is an interface for any K-type thermocouple using a simple 3-wire bus. I have also created an Arduino library for it!

My first attempt I used a simple 8-pin SOIC to 0.1″ breakout board. This worked great to prototype on a breadboard, however the thermocouple wire would not solder to the board very well. I also wanted a more permanent version of the board. As you may know, thermocouple wire is not designed to be soldered, but only welded. There is also a problem with any junction point. At every junction point to a dissimilar metal causes problems with thermocouple readings. See http://en.wikipedia.org/wiki/Thermocouple for more information about thermocouples.

My next revision I created a board to use a thermocouple to pcb connector. This connector allows for a simple mechanical connection to the PCB using the proper metals to not interfere with the thermocouple reading. The board also served as a breakout for the MAX6675 chip to a simple header.

The current revision is a progression of the first PCB. The design changes were based upon suggestions from customers and some logical improvements. The first was to add more fixturing holes. The second was to add both power and status LED’s to dress up the board and make it a bit more functional. The last change was to add a cap between gnd and power as suggested by maxim.

I now have the second version as a single thermocouple or 4 thermocouple ports in stock. For anyone that has worked with thermocouple before they can be tricky because you cannot solder thermocouple wire. With the interface boards just plug in any K thermocouple with a standard mini connector.

This entry was posted in Arduino, Featured, Projects, Thermocouple. Bookmark the permalink.

21 Responses to MAX6675 Thermocouple Interface

  1. Greg says:

    Just got my type-K thermocouple and 6675 interface. I was impressed with the fast shipping and responsible packaging. I’d buy from this guy again.

  2. Jean-Francois says:

    Hi

    I would like to know with the max6675, from the 4 chip module that you had, is the output was in analog or it use the digital port on the arduino? I intend to use the Arduino Duemilanove, so for 4 K thermocouple, it will use 4 input over the board ?
    And last one, if i need more input, does a second input module can be ok to use and that will not result in error reading from the probe , as with the cold junction error ?

    Thanks a lot

  3. ryan says:

    The output is digital. It is interfaced using the SPI protocol to read the temperature from the chip you need 2+N pins. That meaning, if you have one chip you need 3 Digital I/O pins for 4 chips you need 6 I/O pins. Basically you need 3 connection ‘Serial Clock’, ‘Serial Output’, and ‘Chip Select’. The SCK and SO can be common for all chips and you need a dedicated CS to tell which chip you want to read the temp from. The library page describes this a little more (http://code.google.com/p/max6675-arduino-library/). You can also look at the datasheet for the MAX6675 for some more info.

    The CJC is built into each MAX6675 individually, so adding additional modules is no problem.

    Let me know if I can help any more. I have also posted this in the forum for reference. (http://ryanjmclaughlin.com/forum/topic/interface-questions)

  4. Pete Willard says:

    I had attempted t0 play with this this chip a bit on my own, so I made my own break out board. I did not have much luck with accuracy since I didn’t use the OMEGA socket. After sourcing the correct socket… I came to realize that it was just easier to use the board you made. Works perfectly and matches the results of my K2 Instruments Pyrometer exactly.

    Thanks for making this. The mounting holes are a plus and make this board usable in the final project and not just the bench prototype.

    I’ll seriously consider your shop for future items…

    pete

  5. Rhys says:

    Hey,

    Just wondering, you don’t need to use the SS (slave Select pin10) on the Arduino, correct? Does that mean it can just be used as a regular data pin even during SPI operations to the MAX6675? (I’ve run out of pins for my project!)

    Cheers,
    Rhys

  6. ryan says:

    Yes, you need that pin. It is the same as the chip select pin. You need a minimum of 3 pins, SCK, SO, CS. You dont need SI because there is no data to write to the chip.

  7. Rhys says:

    Cool, Thanks that makes sense but I’m still a bit confused. SCK is arduino D13 and D12 is for the SO right? And I thought D10 is CS (or ss) but in your example over at Arduino playground you specify Arduino D11 as CS, isn’t D11 for SI? Or are are these things not hard set? Could use any digital pin for anything? Can you tell I’m an Arduino newbie?

  8. ryan says:

    If you use the SPI library, yes I believe you need to use the specified arduino pins for the SPI interface. If you use the MAX6675 library you can use any digital pin as it doen’t use the processor SPI interface.

  9. Rhys says:

    Perfect! And thanks for all your effort and sharing. My coffee machine is going to be awesome thanks in part to you! Cheers, Rhys

  10. Rhys says:

    Hey, I’m back to annoy you! Got everything up and running now but it seems like when I use the library to get the temp from the MAX6675 it seems to return the temp of the chip. i.e. Connecting the thermocouple has not effect but touching the chip makes the temp report go up and it seems about right. Any ideas?
    Cheers,
    Rhys

  11. ryan says:

    Can you send me an email with your schematic and a picture of your setup?

  12. Rhys says:

    Please ignore me…I found a short on my home etched MAX6675 breakout board! :-o After that I discovered that I needed to ground TC-. Now everything is working as it should.
    I’ll be sure to drop by with a link to my blog post when the whole project is done :-)

    Thanks again

    Cheers,
    Rhys

  13. Bo says:

    Hey, I purchased the four channel PCB awhile ago. I soldered on the MAX chips and connected everything up. I tested all four ports and they worked. Fast-forward to yesterday, I blew the dust off the PCB and started connecting thermocouples. I accidentally plugged one in switched (pos to neg) and tried to collect data. That port is no longer working. Could the chip be damaged? If not I guess I’ll just try to test the connections. I looked at the MAX datasheet and didn’t find anything.

    Thank you.

    B

  14. ryan says:

    Yes it is possible the chip is blown if it was hooked up for more than a few seconds. I have blown one of these chips by reversing polarity.

  15. Troy says:

    I have one of the 4-port boards, and am having some crosstalk/spurious reading issues between channels. Do I need to be grounding the stainless thermocouple case?

    Also, do you have any experience with temperatures in the 1000C range? The MAX chip stops at 1023.75 C,

  16. TuxMan says:

    Hey Troy, the MAX6675 chip only allows readings as high as 1024C. Check the Datasheet.

  17. mike says:

    Hi,
    Is it ok to use the same SCK and CS for multiple MAX6675 chips, and use multiple instances of the MAX6675 object?

    for example:

    int CS0 = 11; // CS pin on MAX6675
    int SCK = 13; // SCK pin of MAX6675
    int SO_1 = 12; // SO pin of MAX6675
    int SO_2 = 2; // SO pin of MAX6675

    MAX6675 temp0_1(CS0,SO_1,SCK,units,error);
    MAX6675 temp0_2(CS0,SO_2,SCK,units,error);

    Thanks!

  18. mike says:

    Seems like sharking SCK but not CSO is the way to go.

  19. ryan says:

    You can use the same SO and SCK, but need independent CS for each instance/chip. Check out the Multi-Temp example in the library. It shows you how this can be done.


    #include

    int LED1 = 6; // Status LED Pin
    int CS0 = 7; // CS pin on MAX6675
    int CS1 = 8; // CS pin on MAX6675
    int CS2 = 9; // CS pin on MAX6675
    int CS3 = 10; // CS pin on MAX6675
    int SO = 12; // SO pin of MAX6675
    int SCK = 13; // SCK pin of MAX6675
    int units = 0; // Units to readout temp (0 = ˚F, 1 = ˚C)
    float error1 = 0.0; // Temperature compensation error
    float error2 = 0.0; // Temperature compensation error
    float error3 = 0.0; // Temperature compensation error
    float error4 = 0.0; // Temperature compensation error

    MAX6675 temp0(CS0,SO,SCK,units,error1);
    MAX6675 temp1(CS1,SO,SCK,units,error2);
    MAX6675 temp2(CS2,SO,SCK,units,error3);
    MAX6675 temp3(CS3,SO,SCK,units,error4);

    Let me know if you need an more help.

  20. Rich Seymour says:

    Is there something I’m missing regarding the +V pin. With 5V it works, but with 3.3V it gives the wrong temperature. This is with an arduino uno, but I’d eventually like to hook it to a 3.3V arduino pro mini.

    Thanks for the cool device.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>