Mesurer une tension via l'ADC d'un AVR
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

Mesurer une tension via l'ADC d'un AVR



  1. #1
    Apollon13

    Mesurer une tension via l'ADC d'un AVR


    ------

    Hello le groupe !

    Je reviens vers vous sur un point : la mesure d'une tension avec une précision à 0,1V au moins.

    Mon cahier des charges:

    - tension allant de 0V à 20V.
    - Précision à 0,1V.
    - Mesure d'une tension aux bornes d'une charge placée dans le Drain d'un FET (entre VCC et le Drain).

    Là où j'ai obtenu la valeur exact, même à 0,01V c'est en faisait un soustracteur avec un ampli OP OP177 entre Valim (20V) et V Drain.

    --> Si j'ai 3V aux bornes de ma charge, L'ampli OP fait 20 - 17 = 3V.

    Par contre une fois la tension entrée dans le µC, c'est la cata...y'a des erreurs. je ne sais pas trop comment m'y prendre niveau soft.
    Dans un programme vu sur le net j'ai vu un truck bien compliqué par rapport à moi:

    Code:
    // convert adc reading to voltage (display values)
    unsigned int analog2v(unsigned int aval)
    {
            double r;
            // 100* 2.56*VDIV/1024:
            r=((double)aval * VDIV )/4.0;
            return((unsigned int)r);
    }
    Petite question à part: Je me base avec les valeurs que m'indique un voltmètre à 30€, mais qu'est ce qui me dit qu'il est pas à coté de la plaque ? même avec un deuxième voltmètre.

    Ma question: pouvez vous m'aider à réaliser cette partie, c'est à dire un voltmètre fiable et précis ?

    Grand Merci !

    -----

  2. #2
    PIC sur PAC

    Re : Mesurer une tension via l'ADC d'un AVR

    Bonsoir,
    si tu mesure directement une tension flottante et/ou au dessus de la tension d'alim de l'Atmega c'est sur que cela ne va pas fonctionner correctement.
    il faut passer par un pont diviseur et/ou un amplificateur différentiel.
    peux tu quand même faire un schéma?
    c'est juste une valeur de 0.1 de plus ou du bruit?
    Dans le doute reboot

  3. #3
    Apollon13

    Re : Mesurer une tension via l'ADC d'un AVR

    Non bien évidemment je ne dépasse pas 5V en entrée. Sinon je mets un pont diviseur de tension.
    J'ai même fait un différentiel à gain variable avec des OP177... Ca me sort une valeur ultra précise mais c'est bel et bien le µC qui interprète mal la donnée.

    Alors soit c'est mon soft qui est trop "basique" soit c'est le µC qui possède une erreur trop importante... et c'est là que je bloque.

  4. #4
    eldudo

    Re : Mesurer une tension via l'ADC d'un AVR

    La valeur typique de l'erreur n'est pas décrite dans la datasheet ?

  5. A voir en vidéo sur Futura
  6. #5
    Apollon13

    Re : Mesurer une tension via l'ADC d'un AVR

    Voilà la doc:
    http://www.atmel.com/images/doc2502.pdf

    Ca commence page 206 (avec les caractéristiques de l'ADC).
    Page 216 on a les erreur de non linéarité et d'offset.
    Page 218 des formules.

    Je suis un peu pommé dedans mais je vais tenter de lire tout ca.

  7. #6
    PIC sur PAC

    Re : Mesurer une tension via l'ADC d'un AVR

    Bonsoir,
    tu peux aller voir ce post:
    http://forums.futura-sciences.com/el...dc-un-avr.html

    nous avions discuté de l'adc. perso j'avais un pb de boucle de masse sur ma plaque à essai.
    peux tu présenté ton montage et ton code d'initialisation de l'ATMEGA?
    Dernière modification par PIC sur PAC ; 02/10/2012 à 18h27.
    Dans le doute reboot

  8. #7
    micka_ch

    Re : Mesurer une tension via l'ADC d'un AVR

    Bonjour,

    Un schéma de la partie analogique ne serais pas du luxe. Ensuite la partie du code qui fait initialisation de l'adc et la routine de lecture de la valeur analogique.

    Parce que la fonction "analog2v" ne nous renseigne pas vraiment sur ce qui se passe.

    Par contre je te donne déjà un conseil, évite d'utiliser des doubles ou des floats dans un petit uC 8 bits, ça "coute" énormément en temps de calcul et en mémoire.

    Salutations

  9. #8
    Apollon13

    Re : Mesurer une tension via l'ADC d'un AVR

    PIC sur PAC:

    Merci c'est super intéressant, j'ai tout lu.
    Apparemment vous aviez tous les deux des soucis avec l'AVR qui pour ta part ont été résolus.

    Un schéma de la partie analogique ... J'en ai pas vraiment puisque je fais des essais sur platine. Je mesure la tension aux bornes d'une charge via un soustracteur c'est tout. Le soustracteur me renvoie exactement la même valeur que je peux mesurer aux bornes de la charge à 0,01V.

    La sortie du soustracteur va directement dans l'entrée ADC0 du µC (sans pont diviseur puisque je me limite à 5V).

    Je divise ADCW par 4 puis multiplie par 10 pour avoir la bonne valeur sur l'afficheur.

    Mon code:

    Code:
     
    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCW;
    }
    
    
    
    void affichage (void)
    {
    Volt = ADCW / 4;
    Volt = Volt * 10;
    
    
    dizaine = (Volt / 1000) + 48;
    unite = (Volt  / 100) % 10 + 48;
    dixieme = (Volt / 10) % 10 + 48;
    
    
    lcd_gotoxy(8,0);
    lcd_putchar(dizaine);
    
    lcd_gotoxy(9,0);
    lcd_putchar(unite);
    
    lcd_gotoxy(10,0);
    lcd_putsf(",");
    
    lcd_gotoxy(11,0);
    lcd_putchar(dixieme);
    
    }
    Dernière modification par Apollon13 ; 02/10/2012 à 19h53.

  10. #9
    Apollon13

    Re : Mesurer une tension via l'ADC d'un AVR

    Sinon je vais me pencher sur ca :

    http://docs-europe.electrocomponents...6b80703071.pdf

  11. #10
    micka_ch

    Re : Mesurer une tension via l'ADC d'un AVR

    Bonsoir,

    La fonction read_adc me parait correcte as-tu déjà testé cela ? La valeur retourner de la fonction devrais varié en 0 et 1024 si la tension de l'entré analogique varie de 0 à Vref. D'ailleur, quelle est ton Vref ?

    Ensuite 2 chose me paraissent bizarre :

    - Pourquoi tu fais Volt = ADW /4; et pas Volt = read_adc(Cannal)/4;
    - Ensuite je ne comprend pas ton opération /4 et *10, c'est censé te donné la tension à l'ADC ?

    Un proposition pour convertir ton résultat le résultat conversion en mV serais UAdc_mV = ( 5000*read_adc(cannal) )>>10;

    Salutations

  12. #11
    Apollon13

    Re : Mesurer une tension via l'ADC d'un AVR

    Salut,

    Je faisais /4 pour avoir la tension en volt...

    Je vais éssayer ce soir ton programme voir ce que ca donne et surtout essayer de le comprendre.
    En multipliant par 5000, il va me faloire une sacrée longueur de variable...

    Merci

  13. #12
    micka_ch

    Re : Mesurer une tension via l'ADC d'un AVR

    Re,

    Dans la fiche technique (page 212) il te donne



    Avec ADC la valeur numérique de la conversion. Donc si tu transforme cela pour obtenir Vin ça donne :



    Traduit en code C avec des nombres à virgule flottants si Vref=5V

    Code:
      float UAdc_V;
    
      UAdc_V = 5.0*((float)ADC)/1024.0;
    Traduit en C avec des entiers si Vref=5000 mV

    Code:
      U16 UAdc_mV;
    
      UAdc_mV = (U16) ( (5000*( (U32) ADC) )>>10) ;
    L'opération >>10 revient à diviser par 1024. Tu as juste besoin de caster en 32 bits pour la multiplication et une fois divisé par 1024 la variable tiens sur 16.

    A+

  14. #13
    Apollon13

    Re : Mesurer une tension via l'ADC d'un AVR

    Salut,

    Effectivement ca fonctionne mieux.

    Maintenant, comment savoir si mon multimètre à 30€ est plus précis que mon Atméga8535... Parce que moi je compare par rapport à ce que m'affiche mon multi mais ca se trouve mon multi est pas aussi précis que ca... je vais comparer avec plusieurs multis !

  15. #14
    PIC sur PAC

    Re : Mesurer une tension via l'ADC d'un AVR

    Tant mieux que cela fonctionne maintenant.
    Tu peux peux être de créer une tension de ref par montage si tu disposes de qques résistances de précision et/ou d'une bonne alim.
    Dans le doute reboot

  16. #15
    Apollon13

    Re : Mesurer une tension via l'ADC d'un AVR

    Salut,

    Bon y'a toujours un soucis en fait... C'est pour réaliser un appareil de mesure de tension aux bornes d'une charge donc il me faut la valeur EXACT de la tension à 0,01V près.
    Je ne peux pas me permettre d'afficher 2,60V à la place de 2,55V...

    A la limite si il faut utiliser des circuits spéciaux dans la mesure de tension ca ne me dérange pas. Si il faut je rouvre un poste à ce sujet.

  17. #16
    PIC sur PAC

    Re : Mesurer une tension via l'ADC d'un AVR

    Le soucis c'est que si tu veux être précis ou plutôt étalonné il va falloir te rapprocher d'un étalon (pas l'animal ). Tu n'as pas accès à un appareil contrôlé périodiquement (voltmètre source étalon ...).?
    au fait quel est ta gamme de mesure voulue?
    si ton CAN est sur 10 bits avec 5V tu dispose de 0.005 volt pour le lsb avec un jitter de 2 lsb t'es déjà à la limite de ta spec.
    Dans le doute reboot

Discussions similaires

  1. Comment mesurer le déphasage courant tension à l'aide d'un oscilloscope?
    Par PeterMacGonagan dans le forum Électronique
    Réponses: 11
    Dernier message: 02/02/2012, 08h01
  2. temps pour mesurer une tension sur un pic
    Par alainav1 dans le forum Électronique
    Réponses: 7
    Dernier message: 28/08/2011, 11h46
  3. Mesurer une tension de seuil
    Par invite71a2f53b dans le forum Électronique
    Réponses: 13
    Dernier message: 18/05/2008, 22h57
  4. Mesurer la tension a la sortie d'un controleur.
    Par invitee6825c80 dans le forum Électronique
    Réponses: 7
    Dernier message: 20/09/2007, 07h03
  5. mesurer une tension
    Par invitec7a604e1 dans le forum Électronique
    Réponses: 11
    Dernier message: 06/05/2006, 19h20
Découvrez nos comparatifs produits sur l'informatique et les technologies.