voila je souhaite mesurer la température à l'aide d'un LM335,et ensuite après une conversion analogique numérique (celui du PIC18F6722), j'affiche le résultat sur un afficheur:et mon problème est: la valeur affichée n'est pas stable, par exemple, elle va varier entre 22,1°C et 24,5°C, alors que ma tension en entrée sur mon PIC est fixe:2,963V, et ma tension d'alimentation est elle aussi fixe:4,979V
Et voila ensuite le bout de programme pour la conversion A/N:
Code:
{
float van0;
ADCON0=0x01; // Sélection AN0/ADON = 1.
ADCON2=0xA5; // Justification à droite/Tps d'acquisition=4Tad/Horloge de conversion=16Tosc
GO_DONE=1; // Start Conversion A/N
while(GO_DONE); // attend EOC
GO_DONE=0; // Fin Conversion A/N
van0 = ((float)((ADRESH*256)+ADRESL)) * q; //Calcul de la tension présente sur AN0 (Float) (q=4.88e-3)
if (van0 > 4.5)
{
DetectTempProbeBat1 = 0;
}
if (van0 < 4.5)
{
DetectTempProbeBat1 = 1;
TempInstBat1 = (float)(van0 * 100-273.15); //Calcul de la température
sprintf (DATAtoLCD,"%6.1f",TempInstBat1);
}
}
Auriez vous une idée pourquoi la valeur affichée varie autant, cela doit venir au niveau de la conversion vu que la tension en entrée est fixe...
Merci d'avance
... Auriez vous une idée pourquoi la valeur affichée varie autant ...
Les causes d'instabilité peuvent être très nombreuses, et, pour trouver la (ou les) raison(s), il faut parfois ruser. Les causes les plus fréquentes peuvent être un défaut de filtrage (50 ou 100 Hz), ou des problèmes de masse, sans compter les instabilités possibles des références.
Peux-tu simuler ton capteur, par une source continue totalement indépendante, à pile, pour voir si, avec une telle source, super filtrée (100µF en parallèle), tu arrives à avoir des mesures stables?
Si cela n'arrive pas à être stable, suspecter les connexions, qui amènent des parasites (filtrer), ou des masses, qui, parcourues par des courants variables, provoquent des variations de tension, ou en référence, ou en mesure.
06/10/2008 - 07h19
jorg1n
Date d'inscription
septembre 2007
Messages
1 873
Re : Mesure température avec LM335
Bonjour,
je te remercie pour tes conseils, je vais essayer avec une alimentation stabilisée, et je vous tiens au courant
Encore merci
06/10/2008 - 07h32
jorg1n
Date d'inscription
septembre 2007
Messages
1 873
Re : Mesure température avec LM335
J'ai fais le test avec une alimentation stabilisée de labo, et j'ai toujours une variation. Par contre en ce qui concerne le filtrage, j'ai juste mis un capa de 100nf entre la mesure et la masse..dois je essayer avec une capa supérieure, 100µF comme me l'a conseillé genias??
De toute façon je vais essayer pour voir..
Merci d'avance pour vaut réponse
06/10/2008 - 08h41
DAUDET78
Date d'inscription
septembre 2006
Localisation
Ile de France
Âge
70
Messages
38 233
Re : Mesure température avec LM335
Et sur ton PIC (que je ne veux pas connaitre) il y a une tension de référence pour l'ADC ? Elle (ou le VDD) est stable? Il y a des condensateur de découplage?
Le mieux pour savoir si c'est un problème de soft : tu utilises un pont diviseur pour fournir une tension à l'ADC du PIC branché sur sa tension de référence. Si elle bouge, la valeur lue par le PIC devrait être fixe.
L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !
Tout d'abord, j'ai changé de capa, et mis une de 100µF, il y a toujours une variation, certes plus faible ( de 23,6 à 24,5 °C) mais c'est pas encore ça...
En ce qui concerne le PIC, la tension de référence est la tension d'alimentation du PIC, 4,979V et bien fixe.
Je vais faire le test avec le pont div.
Merci encore.
06/10/2008 - 16h46
HULK28
Date d'inscription
janvier 2006
Localisation
IDF
Messages
10 256
Re : Mesure température avec LM335
Bonsoir,
il faut effectuer au moins 10 mesures et moyenner le tout pour obtenir une valeur stable.
Ce qui n'est pas incompatible avec une mise en oeuvre soignée de la partie ADC (hardware et software).
Il faut de préférence utiliser une référence de tension autre que l'alim 5V du µC, et également bien soigner le routage Avref+ et Avref-.
Le moyennage permet d'obtenir un résultat parfaitement stable.
Voici une routine de mon crû que tu peux exploiter:
Code:
/******************************************************************************/
/* Fonction pour effectuer une mesure moyennée sur 10 acquisitions */
/******************************************************************************/
int mesure_tension_precision(void)
{
char a,i;
int Tab_tension[10];
Tab_tension[0]=0;
mes_tension=0;
for (a=0,i=0;a<9;a++,i++)
{
mes_tension = Adc_Read(9);
PORTD.F5=~PORTD.F5; // Led pour confirmer le passage dans le for
Delay_ms(5);
Tab_tension[i] = mes_tension;
if (i==9)
{
while(i>0)
{
i--;
mes_tension = (mes_tension + Tab_tension[i])/2;
}
}
Delay_ms(10);
}
return(mes_tension);
}