IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Raspberry Pi Discussion :

Comprendre le calcul de conversion analogique en C ?


Sujet :

Raspberry Pi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut Comprendre le calcul de conversion analogique en C ?
    Bonjour, j'ai mon pi pico2, je fais une acquisition de mesure sur l'entrée analogique, mais j'ai du mal à comprendre comment ce code fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            // 12-bit conversion, assume max value == ADC_VREF == 3.3 V
            const float conversion_factor = 3.3f / (1 << 12);
            uint16_t result = adc_read();
            printf("Raw value: 0x%03x, voltage: %f V\n", result,  conversion_factor);
            gpio_put(LED_PIN, 1);
            printf("Raw value: 0x%03x, voltage: %f V\n", result, result * conversion_factor);
    comment on obtient 0.806 ? c'est la résolution du convertisseur ?

    si j'ai un convertisseur 12 bit et que je suppose que j'ai un mot de 11bit pour définir la tension j'aurais une résolution
    de 0.0016v par résolution (3.3V/2047), je suppose que le bit du poids le plus fort sert à déterminer s'il est négatif ou positif

    avec mon multimetre je mesures à la tension d'entrée une valeur de 0.79V ce qui ne correspond pas au resultat du moniteur .
    comment on comprend ce 3.3f ? pour le 1<<12 je suppose que c'est à cause d'une valeur signé , qu'on travail sur un signal qui peut être positif et négatif.
    le Raw Valeur c'est la valeur brut récupérer dans le registre du convertisseur ou c'est la l'adresse ou se trouve le registre du résultat lu ?

    printf("Raw value: 0x%03x, voltage: %f V\n", result, conversion_factor)


    Nom : mesure_courant.png
Affichages : 138
Taille : 106,8 Ko
    merci d'avance pour la réponse

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 210
    Billets dans le blog
    48
    Par défaut
    Salut,

    par défaut, le résultat de la conversion est un entier non signé sur 12 bits. Donc un entier entre 0 (pour 0V) et 4095 (pour la tension de référence 3,3V), soit une résolution 3,3/4096 = 0,81 mV.

    0x18c = 396, et 396 x 3,3 / 4096 = 0,319043V, cqfd

  3. #3
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 252
    Par défaut
    Bonjour,
    Les formules génériques sont celles-ci :

    Valeur_brut_ADC = (Tension_mesurée * 2^Nbr_bits_ADC) / VREF

    Et comme l'a dit f-leb

    Tension_mesurée = (Valeur_brut_ADC * VREF) / 2^Nbr_bits_ADC

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    Merci de ces réponses.
    Par contre l'affichage du calcul est correcte mais il me faut vérifier pourquoi ce que je mesure ne correspond pas à la tension de mon multimetre, il faut que j'essaye de mettre 1V avec une alim fixe car la elle provient d'une tension aux borne d'une résistance ...

  5. #5
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 252
    Par défaut
    Il faut aussi que tu t'assures que l'impédance de ta résistance est en accord avec l'impédance d'entrée de ton ADC (~100k)

  6. #6
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 644
    Par défaut
    Bonjour,

    On fait une division par 4096 car c'est un simple décalage, mais au sens strict cela signifierait que 4095 ne correspond pas à 3V3 mais à 3.3*4095/4096 V ( en fait à la plage semi ouverte [3.3*4095/4096 V .. 3.3 V[ ).

    Ceci étant, ce ne sont pas des instruments de mesure

    Salutations

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/06/2015, 14h03
  2. Conversion analogique numerique
    Par abouniski dans le forum Simulink
    Réponses: 1
    Dernier message: 29/05/2013, 15h21
  3. Comprendre le calcul du PGCD
    Par sanstitre dans le forum C++
    Réponses: 12
    Dernier message: 01/12/2011, 10h06
  4. [débutant] conversion analogique-numérique
    Par corent105 dans le forum LabVIEW
    Réponses: 2
    Dernier message: 20/05/2009, 09h32
  5. [XSLT] Calcul, et conversion de nombres
    Par bobic dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 03/12/2008, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo