Electromag1 Circuits électroniques et Picaxes

Petit site pour ceux qui bricolent en électronique en général et sur les PICAXES en particulier.
Les PICAXES sont des microprocesseurs (PIC de Microship) programmables en BASIC. Pleins de qualités, pas chers, ultra faciles à programmer.
Tout (ou presque) est sur le site du distributeur Gotronic (voir les liens).
Les pages  seront ajoutées ou modifiées petit à petit.
Dans le but d'améliorer ce blog, communiquez moi vos remarques et les erreurs que vous pouvez constater.
Pour me contacter: Envoyez un mail à l'adresse : mag1mic@free.fr .  Tout message reçoit une réponse
Pour retourner au menu, Cliquer sur "LISTE DES PAGES", ici ou en haut de la colonne de gauche
Pour laisser un message, allez dans le "LIVRE D'OR"
Bonne visite
 
 

Thermostat à bande proportionnelle
CTN + Picaxe + LCD1602

 

Il y a de nombreux capteurs de température:

Numériques: DS18B20, ou analogiques :TL35, thermocouples

Les capteurs linéaires nécessitent un ampli ou un décodage.

L'utilisation des thermocouples demande un ampli et des circuits de compensation.

Restent les CTN rapides, pas chères mais non linéaires.

La preuve:

Rthéo

R = Résistance CTN

Ro = Résistance à 25°C

B = Coefficient constructeur (Ex: 4300 )

T = Température en °C

Pour les puristes, il faut ajouter que le B est associé à une plage de validité, en général, de 25 à 85 ou 100 °C.

Il suffit de peu de chose pour redresser la situation sur une plage limitée (par ex entre 0 et 40°C).

Voici la courbe Vs=f(T°C) obtenue sur Excel à partir de la belle équation ci dessus et du petit circuit ci dessous à gauche:

 

pont 10k V pont

 

Cliquez sur la courbe pour l'agrandir et vous constaterez encore un peu mieux que la non linéarité de la CTN, superposée à celle du pont donne une courbe suivant une droite avec une ondulation à peine perceptible. Le dossier Excel est joint au pack en fin de page.

Voici le cahier des charges du thermostat proposé:
Thermostat à bande proportionnelle de + ou - 0.25°C autour d'une température de consigne donnée par un potentiomètre.
Le capteur est une CTN de 10k standard.
Le calculateur est un picaxe 14M2 permettant de traiter l'information, d'afficher la température instantanée et la température de consigne sur un afficheur LCD1602 à quelques euros.
Une version avec LCD série décrit dans ce blog et un picaxe 08M2 est également proposée
.
Le calculateur pilote l'élément chauffant par MOC et triac.
Pour tenir compte de la disparité des caractéristiques des CTN, une phase de calibration permet de calculer et de mémoriser les paramètres de la droite de tendance en se référent à un thermomètre étalon.
Reste une pin libre sur le 14M2 utilisable pour une option. Ex Buzzer en cas de dépassement de la bande de régulation et/ou mise en service d'une ventilation.
Pour la version LCD série, les options utilisent les ports libres et programmables du LCD. 

Et le schéma correspondant:

thermoprop

 

Voici un schéma équivalent adapté au LCD série décrit dans ce blog.

C'est plus simple, le 14M2 est remplacé par un 08M2.

L'option alarme et ventillation utilisent les ports C restés libres sur l'afficheur.

Le programme est également moins encombré par la gestion de l'affichage.

 

thermo 08M2 CTN LCD Série

 

Le système de régulation à bande proportionnelle est utilisé dans les régulateurs de chauffage UAA2016 et autres TDA1023. (Cliquez sur la courbe pour agrandir).

bande régul

On défini une bande autour de la t° de consigne (ici +/- 0,25°C) et un cycle de régulation (ici de 30s).

Dans cette bande, on calcule un temps de conduction de 0 à 30s en fonction de la température lue.

Au dessous de cette bande, on chauffe en permanence, au dessus, on ne chauffe pas.

 

La mesure de température:

La tension V de 0 à 5V lue au milieu du pont CTN-résistance est transformée en un nombre N de 0 à 1023 par une commande ADC10 du picaxe.

La droite T=f(N) nous donne la température correspondante.

Cette droite, de la forme T= a x N +b est propre à chaque CTN. Il faut donc la "calculer".

Pour calculer cette droite, nous allons mémoriser un point chaud et un point froid.

Retour à l'école: calculer une droite en connaissant deux points.

 

droiteCTN

 

Sur cette droite, considérons deux points fixes A et B, définis par (Na,Ta) et (Nb,Tb) et un point V variable (N,T).

La pente P, est définie par : P = (Tb-Ta) / (Nb - Na)

Nous avons aussi: P = (T -Ta) / (N - Na) 

D'où : (T - Ta) = P x (N -Na)

Et en mettant de l'ordre T = (P x N) - (P x Na) + Ta , (Equation d'une droite de la forme T= a x N + b)

Où N est le nombre de ADC et T la température.
 

La calibration:

Elle se fait à partir du programme introduit dans le picaxe. Il faut maintenir le poussoir "calib" appuyé à la mise sous tension pour entrer dans le mode calibration.

Plusieurs écrans se succèdent:

1 - Un écran présente les paramètres mémorisés. La première fois tout est à 0

2- Un clic sur "calib" donne un écran transitoire.

Au bout de 5 s sans toucher "calib", retour au programme principal.

3- Un clic dans les 5 s, affichage de l'écran d'introduction du point chaud.

Placez ensemble la CTN et un bon thermomètre à une température stable de 35 à 40°C, Ex: dans le poing fermé, ou prenez votre température (sous le bras, bien sûr).

Le potentiomètre permet d'afficher sur l'écran une température entre 0 et 50°C, réglez le sur la valeur lue sur le thermomètre (c'est serré, mais on y arrive). Cliquez pour mémoriser le point B de la courbe.

4- L'écran suivant sert à mémoriser le point froid A.

Dans un frigo à 7 ou 8 °C, c'est parfait. Lorsque la température est stabilisée, affichez la valeur lue et cliquez.

 

La procédure de calibration est terminée. L'écran affiche maintenant la température lue par la CTN et la valeur de consigne réglée par le potentiomètre. Les valeurs P, Ta et Na sont mémorisées dans la mémoire du picaxe et relues à chaque mise sous tension.

Pour connaître ces valeurs, coupez l'alimentation du picaxe et remettez la en appuyant sur calib. L'écran affiche la pente, Ta et Na.

Si ces valeurs donnent entière satisfaction, notez les pour les introduire "en dur" dans le programme et ne plus avoir à refaire la calibration, (par exemple, après une reprogrammation du picaxe).

 

thermoCTN

 

Ci dessus, la maquette du système de régulation version couveuse:
Le circuit est reproduit ici, tout y est. Dans la boite en carton, une ampoule de 25W, la CTN, la sonde du thermomètre étalon et un ventilateur de brassage, à l'extérieur, le ventilateur de refroidissement.
Sur la platine d'essais, le reste, picaxe, LCD, potentiomètre de consigne, triac, moc.
Le thermomètre étalon est à gauhe, pour vérification.
Sur l'écran LCD, vous arrivez peut-être à lire :

Consigne 37,2°C 
Températ 37,3°C

Le programme:

Voici un programme répondant au cahier des charges.

A recopier dans le PE (Programming Editor) fourni par le fabriquant des Picaxes.

Trois plages de régulation au choix:

De 0 à 50°C , plage la plus large.
De 5 à 35°C , plage convenant pour la régulation d'une habitation
De 35 à 40°C, pour une couveuse.

Les options sont écrites entre les balises #rem  et  #endrem.

 

Le programme prévoit aussi une possibilité de ventilation en cas de dépassement de la température de 0,35 °C.

Il est adapté au LCD série, plus court et facile à lire que le LCD parallèle, surtout quand les tabulations et les couleurs ont disparu.

Les programmes pour les deux LCD seront dans le pack en téléchargement

 

'THERMOSTAT CTN + PICAXE 08M2 + LCD1602 SERIE :MM 10/07/12

'code Afficheur lcd alpha pour 14M
#picaxe08M2

setfreq m16            'fréquence horloge interne
symbol baud= N4800_16  'vitesse liaison dérie LCD

'************ Nomination des variables byte *************
symbol ch5=b1
symbol ch4=b2
symbol ch3=b3
symbol ch2=b4
symbol ch1=b5
symbol temps=b6

'************ Nomination des variables word *************
symbol consigne=w6
symbol T=w7
symbol N=w8
symbol pente=w9 'pente de la droite
symbol Na=w10 'N pt A
symbol Ta=w11 'T pt A
symbol var2=w12 'variable temporaire
symbol var1=w13 'variable temporaire

 

'************ Nomination des ports ************
symbol chauffage= C.1

'****************************************************************
init:
read 200,word Ta,word Na,word pente
'************************************************
pente=92            'Après une calibration satisfaisante
Na=328              'on peut écrire le résultat ici
Ta=8600             'et supprimer le read ci dessus
'*************************************************
pause 4000
'******** calibration si poussoir apputé à la mise sous tension *******
if pinC.3=1 then         'Si C.3 appuyé à la mise sous tension
do:loop while pinC.3=1   'au relachement
gosub calibration        'vers calibration
endif

'******** programme principal ***********
debut:
serout C.0,baud,(254,128,"Consigne: ßC") 'position ligne 1, col1
serout C.0,baud,(254,192,"Temp",1,"rat: ßC") 'position ligne 2, col1
do
gosub lecCTN 'lecture de la CTN
gosub lecConsigne 'lecture de la consigne
gosub regul 'sub régulation
pause 4000 'pause 1s à 16MHz
loop

 

'****************************************************************
Calibration:

gosub VisuPar 'affichage des paramètres de la droite enregistrés

'******************************************************************
'return 'si les paramètres sont inclus dans le programme alors :return
'******************************************************************

'calibB: 'lecture t° chaude

serout C.0,baud,(254,128,"Calibration? 5s") 'position ligne 1, col1
time=0
do
if time>5 then
serout C.0,baud,(254,128," ")
return
endif 'retour suite programme après 5 s
loop while pinC.3=0 'fin de boucle attente
do: loop while pinC.3=1 'attente relachement

'ICI, on met à jour les paramètres de la droite
'en comparant avec un thermomètre étalon
serout C.0,baud,(254,128,"Calib Pt chaud ") 'position ligne 1, col1
serout C.0,baud,(254,192,"Temp lue:") 'position ligne2, col1
do
readadc10 C.2,var2 'lecture t° correspondante en /10°C
var1= 500**var2*64
var2=500*var2/1023
var2=var2+var1
bintoascii var2,ch5,ch4,ch3,ch2,ch1
serout C.0,baud,(254,202,ch3,ch2,",",ch1,"ßC") 'curseur L2 C10

pause 1000
if pinC.3=1 then
do:loop while pinC.3=1
exit
endif
loop
readadc10 C.2,var1 'var1 = V ctn varie de 0 à 1023
'serout C.0,baud,(254,1)

'calibA: 'lecture t° froide
serout C.0,baud,(254,128,"Calib Pt froid") 'position ligne 1, col1

do
readadc10 C.2,Ta 'lecture t° correspondante en /10°C
Na= 500**Ta*64
Ta=500*Ta/1023
Ta=Ta+Na
bintoascii Ta,ch5,ch4,ch3,ch2,ch1
serout C.0,baud,(254,202,ch3,ch2,",",ch1,"ßC") 'curseur L2 C10
if pinC.3=1 then
do:loop while pinC.3=1
exit
endif
loop
readadc10 C.2,Na 'V ctn varie de 0 à 1023
serout C.0,baud,(254,128," ")
'calPente:
var2=var2*100
Ta=Ta*100

var2=var2-Ta
var1=var1-Na
pente=var2/var1 'pente *100
write 200,word Ta,word Na,word pente
return

 

'******* LECTURE DE LA T° DE CONSIGNE ********************
lecConsigne:

'Choisir une plage de consigne au choix:

'Option 1 : Plage de consigne de 0 à 50°C

readadc10 C.2,var2 'lecture t° correspondante en /10°C
var1= 500**var2*64 'affichage d'une valeur de 0 à500_
var2=500*var2/1023 'par un pot sur 270 degrés_
var2=var2+var1 'c'est assez serré...
consigne=var2 'Mais on y arrive
bintoascii consigne,ch5,ch4,ch3,ch2,ch1
serout C.0,baud,(254,138,ch3,ch2,",",ch1,"ßC") 'curseur L1 C10
return

'Option 2 : Plage de consigne de 5 à 35°C
#rem
readadc10 C.2,var2 'lecture t° correspondante en /10°C
var1=300**var2*64
var2=300*var2/1023
var2=var2+var1
consigne=var2+50
bintoascii consigne,ch5,ch4,ch3,ch2,ch1
serout C.0,baud,(254,137,ch3,ch2,ch1,"ßC") 'curseur L1 C10
return
#endrem


'Option 3 :Plage de consigne de 35 à 40°C
#rem
readadc10 C.2,var2 'lecture t° correspondante en /10°C
var1= 50*var2/1023
consigne=var1+ 350
bintoascii consigne,ch5,ch4,ch3,ch2,ch1
serout C.0,baud,(254,137,ch3,ch2,ch1,"ßC") 'curseur L1 C10
return
#endrem

'******** LECTURE DE LA CTN *************************************
lecCTN:
'Equation de la droite: T = P*N - P*Na + Ta
'P = (Tb-Ta) / (Nb-Na)
var2=pente*Na
readadc10 C.4,N 'lecture t° correspondante en /10°C
T=N*pente+Ta max 65535
T=T-var2 'T est en millièmes de °C_
var1=T/100 'il faut diviser par 100
bintoascii var1,ch5,ch4,ch3,ch2,ch1 'pour l'affichage.
serout C.0,baud,(254,202,ch3,ch2,",",ch1,"ßC") 'curseur L2 C10
return

'***** SOUS PROGRAMME DE REGULATION ****************************

regul:

consigne=consigne*100 MIN 250 'les t° sont en millièmes de °C
var1=consigne-250           'Si t° < consigne-0,25°C_
if T< var1 then              'on
high chauffage               'chauffe.
serout C.0,baud,(255,%00000000)'arret ventil sur C.3 LCD
return
endif
var1= consigne+250 'Si t° > consigne+0,25°C_
if T > var1 then 'on_
low chauffage 'chauffe pas.
var1= consigne+350 'Si t° > consigne + 0,35°C_
if T > var1 then
serout C.0,baud,(255,%00001000) 'on ventile sur C.3 du LCD
endif
return
endif

 

var2=var1-T
serout C.0,baud,(255,%00000000) 'arret ventil sur C.3 LCD dans la bande de régulation
temps=30 * var2 / 500           'calcul du temps de commutation.
if time> temps then             'temps écoulé > temps commutation

      low chauffage              'on ne chauffe pas_
     else                       'sinon_
     high chauffage             'on chauffe

endif
if time>30 then                 'Fin de période de 30 s

     time=0                     'RAZ time
     low chauffage              'Arret chauffage, départ nouveau cycle

endif

return


'**** VISUALISATION DES PARAMETRES DE LA DROITE *****************
visupar:
serout C.0,baud,(254,1) 'effacement écran 'effacement écran
bintoascii pente,ch5,ch4,ch3,ch2,ch1 'visu de la pente
serout C.0,baud,(254,128,"Pente=",ch5,ch4,ch3,ch2,ch1) 'position ligne 1, col1
bintoascii Na,b2,b1,ch3,ch2,ch1 'visu Na
serout C.0,baud,(254,192,"Na=",ch5,ch4,ch3,ch2,ch1) 'position ligne 2, col1

bintoascii Ta,b2,b1,ch3,ch2,ch1 Viso Ta
serout C.0,baud,(254,200,"Ta=",ch5,ch4,ch3,ch2,ch1) 'position ligne 2, col10

do: loop while pinC.3=0 'Attente appui C.3
serout C.0,baud,(254,1) 'effacement écran

do: loop while pinC.3=1 'relachement C.3

return

 

Un pack en téléchargement ICI

Comprenant:

Le fichier .bas du programme pour LCD série ci dessus

Le fichier.bas équivalent pour LCD parallèle

Les schémas des deux circuits

Le dossier Excel de la simulation CTN + pont pour visualiser et simuler la linéarisation d'une CTN quelconque.

 

Afficher la suite de cette page



Créé avec Créer un site
Créer un site