Overblog Suivre ce blog
Editer la page Administration Créer mon blog

Thermostat à bande proportionnelle: CTN + Picaxe + LCD1602

Retrouvez cette page
et toutes les mises à jour
sur

http://electromag1.wifeo.com/ 

 

 

Il y a de nombreux capteurs de température,

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

 

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.

 

Voici la courbe Vs=f(T°C) obtenue sur Excel à partir de la belle équation ci dessus: 

 

 

      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)   ==> (T - Ta) = P x (N -Na)

Et en mettant de l'ordre      T =  (P x N) - (P x Na)   + Ta

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

  

La calibration:  

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.  

 

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.

 

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
 symbol baud= N4800_16
      symbol ch5=b1 
 symbol ch4=b2
 symbol ch3=b3 
 symbol ch2=b4 
 symbol ch1=b5
 symbol temps=b6
    
 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       
 
  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
 
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:

 

'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
 
'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
 
'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.

 

 

 

 

  

Partager cette page

Repost 0
Pour être informé des derniers articles, inscrivez vous :