Mesure de température par thermocouple
MAX6675 et picaxe 08M2

Parmi les méthodes de mesures de températures élevées, le thermocouple et la sonde platine (genre pt100) rentent seules en concurrence.
Voici un test du kit ci dessus, mesure par thermocouple basée sur le MAX6675, livré avec un thermocouple type k
Le MAX6675 Ce lien renvoie à la datasheet.
Le système picaxe n'a pas de commande pour tous les composants et pas de librairie. Il faut donc lire la doc.
En voici un résumé (que les pros me corrigent, au cas où...)
Deux broches pour le thermocouple type K : T- et T+ . Sur le module, T- est relié à GRN, comme recommandé.
Le condo entre Vcc et GRN est là aussi.
L'alimentation Vcc et GRN (de 3 à 5 v)
Et trois broches : CS/ (lire CS barre), SCK (serial clock) et SO (serial out)
En fait, le MAX6675 fonctionne selon deux modes distinctes, en fonction du niveau de CS/
CS/ au niveau haut, le CI est en "conversion": Il lit le thermocouple, la température soudure froide et convertit ces infos en un registre de 16 bits, contenant la valeur de la température du thermocouple.
CS/ au niveau bas, la phase conversion est interrompue et le CI attend les signaux horloge (CSK) pour envoyer, en série (SPI), les 16 bits du registre sur la sortie SO.
Le registre:

Le role des bits 0 et 1 reste obscure...
Le bit 2, normalement à 0, passe à 1 si l'entrée thermocouple est ouverte, alarme possible en cas de rupture.
Les bits 3 à 14, codage de la température:
les bits 3 et 4 codent les décimales (résolution 0,25°C)
les bits 5 à 14, la valeur entière
Le bit 15 est à 0, c'est comme ça...le max6675 ne mesure que de 0 à 1023,75 °C, pas de négatif...
Et compte tenu de tout cela:

La doc donne une longue liste de possibilités d'erreurs (bruits, soudure froide, parasites, etc);
Par rapport à mon "étalon", il y avait une erreur de + 1 à 2 degrés, que j'ai corrigé par un réglage d'offset (histoire de compliquer).
Quelques remarques sur ce kit:
Le thermocouple à l'air robuste, avec une grosse protection et un embout de vissage pour tôle. La contrepartie est une très grande inertie. On peut préférer pour certaines applications un thermocouple moins massif et plus rapide (1 euro).
Les décimales sont instables, et peu utilisables (dans cet essai), elles sont en option dans le code ci dessous.
Le MAX6675 est maintenant remplacé par le
MAX31855, un peu plus cher, mais mesure des température négatives et température interne. Le principe de codage est identique, mais avec un registre de 32 bits.
Le schéma:
Le code de l'essai ci dessus:
La commande SPIIN n'est pas disponible sur la série picaxe M2, un sous programme la remplace.
Détection "PAS DE SONDE" en cas de coupure thermocouple. (modif 23/07/2016)
("PAS DE SONDE" évidemment, sur cette photo, le thermocouple est déconnecté.)

;lecture thermocouple par MAX6675 MM 23072016
;registre du MAX6675
;bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
; | | | | | | | | | | | | | | | | |
; sgn|msb Valeur t° sur 12 bits, 10 + |2 decim| th| ID| ST
;ST = State ?
;ID = Ident ?
;th = 0 thermocouple présent ; =1 pas de thermocouple
;sgn est toujours à 0 ..
;la température est entre D3 et D14, 10 bits pour les entiers et 2 pour les décimales
;La broche SO va prendre successivement la valeur de chaque bit de w13,
; scanné poids fort en tête
#picaxe 08M2
#no_data
symbol CLK=C.1 ; pulse horloge
symbol CSB=C.2 ;demande lecture _____/ ou CSB à 0
symbol SO=pinC.3 ;bit de donnée serial out
symbol cpt=b1 ;compteur
symbol defaut=bit0 ;bit défaut
setfreq M4 ;frequence µC
symbol baud=N2400_4 ;vitesse LCD série
pause 500
debut:
serout C.0,baud, (254,1)
serout C.0,baud, (254,131,"Temp",1,"rature")
high csb ;première conversion
Do
pause 1000 ;1 mesure par seconde
low CSB ;lecture registre
gosub shifin ;SPIIN
high CSB ;nouvelle conversion
readadc C.4,b10 ;lecture offset
defaut=w13//8/4 ;isol bit défaut
if defaut=1 then erreur
w13=w13/8 ;on supprime 3 derniers bits
w13=w13+b10-127 ;correction offset
b1=w13//4 ;on isole les décimales
b1= b1*25 ;valeur des décimales en 1/4 de degré
w13=w13/4 ;on supprime les décimales
bintoascii w13,b4,b4,b4,b5,b6
;b1=0 ;option pas de décimales
bintoascii b1,b2,b2,b3
serout C.0,baud, (254,196,b4,b5,b6,",",b2,b3," ßC ") ;ß=alt+0223=°(chinois)
loop
; ***** Shiftin Poids fort en tête, les bits entrent de droite à gauche *****
shifin:
w13 = 0
for cpt = 1 to 16
w13=w13 * 2 + SO ;décalage à gauche + SO (0 ou 1)
pulsout CLK,1 ;pulse horloge
next cpt
return
erreur:
serout C.0,baud, (254,1,254,128," ERREUR")
serout C.0,baud, (254,194,"PAS DE SONDE")
pause 1000
goto debut