Erreurs de mesure température DS18B20

Revoxa77

New Member
Bonjour à tous.

Je viens de découvrir que ce forum en français a été créé et j'en suis vraiment très heureux, car j'ai beaucoup de mal à m'exprimer en anglais.

J'utilise des PICAXE depuis environ 1 an et ma réalisation la plus aboutie concerne la régulation de mon chauffage central avec un PICAXE 18X :
D'après la température extérieure, la température intérieure et la température de l'eau (mesurées toutes les minutes avec des sondes DS18B20), le système actionne la vanne 4 voies de la chaudière pour atteindre la température de consigne. De plus toutes les mesures et actionnements de la vanne sont exportées sur un PC via son port série. Les données collectées sur le PC sont ensuite analysées dans Excel, ce qui m'a permis d'optimiser l'algorithme du logiciel.
Après pas mal de modifs (j'en suis à la 65ème version du logiciel) la régulation de température est dans la fourchette de +/- 0,5°C de la consigne, ce qui me satisfait pleinement.

Le seul problème que je rencontre ce sont les erreurs fréquentes des mesures de températures. J'ai ajouté des tests pour rejeter ces fausses mesures.
Mais Je suis surpris que le PICAXE les accepte, car parmi les données envoyées par le DS18B20 il doit bien y avoir des cheksums de controle ?
En parcourant le forum en anglais, il me semble d'ailleurs avoir compris que d'autres rencontrent ce problème.

Y en a-t-il parmi vous qui ont une expérience à ce sujet ?

@+
 

westaust55

Moderator
Bienvenue au forum de PICAXE

Excuses à l'avance pour mon pauvre Français.

Je ne sais d'aucun autre qui ont des erreurs d'expérience une fois que leur programme de PICAXE est correctement écrit.

Pouvez vous donner encore plus d'exemples spécifiques avec la température réelle et lectures reçues.

Veuillez vous télécharger programme (au moins la pièce quand vous relevez et analysez la température. Téléchargez peut-être également votre schéma/schéma de circuit. L'alimentation d'énergie au DS18B20 mai soit un problème.

Combien de fois êtes vous relevant la température du DS18B20. Les touches de lecture très fréquentes peuvent chauffer la sonde et le résultat dans les lectures incorrectes de la température.
 

Revoxa77

New Member
Bonjour et merci pour votre réponse.

Voici le schéma électrique de mon montage :
View attachment regulation_chauffage.pdf

et ici le code des routines permettant l'acquisition des températures :
Code:
MesureTemperatures:
		
MesTempExt:
	readtemp12 6,w5		'lit la température extérieure sur IN6
	gosub CalculTemperature	'Retourne la température en décidegrés par rapport à -20°C dans "w6"
	if TempExt = 0 then
		'Mesure initiale
	else
		'Calcul de la valeur absolue de l'écart avec la mesure précédente "w5" :
		if w6 > TempExt then
			w5 = w6 - TempExt
		else
			w5 = TempExt - w6
		end if
		'Validation de la mesure d'après la valeur de l'écart :
		if w5 > 20 then 
			'Si plus de 2°C d'écart = erreur de mesure.
			goto MesTempExt	'Re-mesure température extérieure	
		end if
	end if
	TempExt = w6
	
MesTempInt:
	readtemp12 0,w5		'lit la température intérieure sur IN0
	gosub CalculTemperature	'Retourne la température en décidegrés par rapport à -20°C dans "w6"
	if TempInt = 0 then
		'Mesure initiale
	else
		'Calcul de la valeur absolue de l'écart avec la mesure précédente "w5" :
		if w6 > TempInt then
			w5 = w6 - TempInt
		else
			w5 = TempInt - w6
		end if
		'Validation de la mesure d'après la valeur de l'écart :
		if w5 > 20 then 
			'Si plus de 2°C d'écart = erreur de mesure.
			goto MesTempInt	'Re-mesure température intérieure	
		end if
	end if
	TempInt = w6
		
MesTempEau:
	readtemp12 7,w5		'lit la température de l'eau sur IN7
	gosub CalculTemperature     'Retourne la température en décidegrés par rapport à -20°C dans "w6"
	
	'Validation de la mesure en vérifiant qu'elle est dans la plage 5 à 70°C
	if w6 < 250 or w6 > 900 then
		'Si Température en dehors = erreur de mesure.
		goto MesTempEau		'Re-mesure température eau			
	end if
	TempEau = w6

return
	
CalculTemperature:
	'reçoit la valeur brute de la mesure de température dans la variable "w5"
	'retourne la température en décidegrés par rapport à -20°C dans la variable "w6"
	'ce qui permet d'avoir une valeur entière toujours positive.
	
	Signe = w5 / 256 / 128
	if Signe = 1 then
		'si la température est négative
		w5 = w5 ^ $ffff + 1	'complément à 2
	end if
	
	'Calcul de la température en centidegrés :
	w6 = w5 * 25 / 100
	w6 = w5 * 6 + w6
	w6 = w6 + 5 / 10	'température arrondie au décidegré le plus proche
	
	'Calcul température en décidegrés par rapport à -20°C :
	if Signe = 1 then
		'température <0
		w6 = 200 - w6
	else
		'température >=0
		w6 = 200 + w6	
	end if
	
return
Je précise que les températures sont mesurées une fois par minute.
(soit 1440 mesures sur chaque sonde par jour )
Les erreurs de mesure ne sont pas très fréquentes (de l'ordre d'une par jour) mais sont absolument inacceptables car elles provoqueraient des dérives énormes et même des blocages de la régulation. C'est pour ça que j'ai mis des test pour les détecter.

Tel quel mon montage fonctionne parfaitement, mais je ne comprends pas pourquoi le Picaxe accepte ces mesures erronnées même si elles sont très peu fréquentes.

@+
 
Top