[Programmation] Gestion des données d'un gyromètre (MPU6050) avec un PIC
Répondre à la discussion
Page 1 sur 3 12 DernièreDernière
Affichage des résultats 1 à 30 sur 76

Gestion des données d'un gyromètre (MPU6050) avec un PIC



  1. #1
    AKA TENDO

    Gestion des données d'un gyromètre (MPU6050) avec un PIC


    ------

    Bonjour à tous. Ma question n'est pas bien compliquée mais je n'arrive pas à trouver la réponse exact à mon problème.
    Je suis en licence professionnelle et je travaille actuellement sur un projet où je dois utiliser un gyromètre, plus exactement le mpu6050 avec un MICRO PIC16F. je reçois bien les données par i2c et je les visualise dans un terminal, mais voilà, mon problème est que je ne sais pas comment les traiter une fois que je les reçoit. Ce que je veux dire c'est : quel calcul dois-je faire avec ces données? Car il y a 2 valeurs par axes, que ce soit pour le gyromètre ou l'accéléromètre. J'ai cru comprendre qu'il y avait une division par 16384 ou quelque chose comme ça (je n'ai plus le chiffre exact désolé). De plus si vous savez quel configuration des registres est la meilleure pour que le capteur soit bien calibré ce serait un plus. C'est assez urgent je dois avoir finis dans 3 semaines si quelqu'un a des réponses merci d'avance.

    Liens qui peuvent aider :

    DATASHEET CAPTEUR : https://www.datasheets.com/en/part-d...sense-50058861

    Exemple de code avec ce capteur: https://deepbluembedded.com/mpu6050-...cing-with-pic/

    -----

  2. #2
    umfred

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    Ton code a toi c'est quoi ?
    Tu dois tout de même savoir quels registres du capteur tu interroges et récupères? (nous on sait pas sans ton code)
    A partir de là, tu sais donc quelles infos tu récupères: a priori, ça doit être celles dont tu as besoin pour ton projet, donc tu dois savoir quoi faire de ces données. (nous, on ne sait rien du but de ton projet, donc idem du traitement à faire)
    La calibration, ça va en partie dépendre du positionnement du capteur sur ta carte et de la carte dans le système final (vu que les données sont fournies selon les axes x,y,z du capteur)
    https://product.tdk.com/system/files...datasheet1.pdf

  3. #3
    JPL
    Responsable des forums

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    Je me demande s’il ne serait pas mieux de déplacer la discussion vers le forum Électronique ?
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  4. #4
    AKA TENDO

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    Bonjour, et merci d'avoir repondu si vite. Je n'ai volontairement pas mis le code car je pense que ce n'est pas indispensable pour répondre a ma question mais je peux le fournir si nécessaire. Mon projet consiste a faire une maquette de planche stabilisé par des verins. J'utilise donc le capteur pour connaître l'inclinaison de la planche.

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

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    Et effectivement je connait mes registres je sais ce que je fais mais étant donné que c'est la première fois que j'utilise un gyrometre j'ai un peu de mal avec la datasheet. Je suis encore débutant . Merci de votre compréhension.

  7. #6
    umfred

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    le code en soit non, mais dans ton code tu interroges certains registres qui donnent donc certaines informations. Ici nous n'avons aucune information sur les registres que tu récupères et encore moins d'info sur comment tu veux utiliser ces infos.
    En fait, j'exagère un peu, on peut deviner que tu récupères les infos des registres de mesure du gyroscope et des accéléromètres (pages 29 et 31 de ta doc), on voit que chaque mesure est faite sous 2 octets, donc octet_MSB*256+octet_LSB donne la mesure pour chaque axe (en complément à 2)

  8. #7
    jiherve

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    bonjour,
    un gyromètre donne une accélération angulaire c'est inutile pour mesurer une inclinaison, il faut utiliser l’accéléromètre qui est sensible à la pesanteur ensuite c'est un problème de trigo assez simple.
    néanmoins attention aux vibrations parasites ce capteur y est très sensible.
    JR
    l'électronique c'est pas du vaudou!

  9. #8
    AKA TENDO

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    Alors effectivement j'ai oublié ces détails. je sais qu'il faut utiliser l'accéléromètre c'est ce que j'ai fait dans mon code, donc naturellement je configure le registre ACCEL_CONFIG comme tu l'as deviné. En revanche je crois que grâce à ton message je viens à peu près de comprendre ce qu'il faut faire ( je parle notamment du calcul que tu as mentionné avec MSB*256 + LSB) mais est ce que cela suffit pour avoir la mesure correct? Mon prof m'a montré un peu le code "solution" très rapidement mais je voyais une division par environ 16000 à un moment, mais je regarderai le code demain en cours pour être plus clair avec vous et si possible je vous mets la partie intéressante dans le forum. Pour ce qui est des parasites j'ai vu pas mal de forum parler de ça mais étant donné que je n'ai pas encore de mesures très nettes je ne sais pas si il faut que j'y fasses attention je regarderai ça après

  10. #9
    AKA TENDO

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    Je pense que j'ai choisis le bon thème étant donné que c'est de l'informatique industrielle ^^ mais c'est aussi de l'électronique vous n'avez pas tort sauf que je suis venu ici pour parler uniquement du coté info.

  11. #10
    umfred

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    c'est peut-être lié à la sensibilité, voir la page 29 de la doc des registres
    AFS_SEL=0 => Full Scale Range = ±2g => LSB Sensitivity = 16384 LSB/g

  12. #11
    jiherve

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    re
    oui c'est liè à çà mais il faut tout de même avoir assez se sensibilité pour détecter de faibles inclinaisons, donc cela se termine souvent par un filtrage soft.
    JR
    l'électronique c'est pas du vaudou!

  13. #12
    AKA TENDO

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    Oui voilà c'est la sensibilité, en clair il faut au final que je fasse (MSB*256+LSB)/16384 pour chaque axe ?

    De plus, j'ai vu dans certains exemples que des personnes décalaient de 8 bits vers la gauche les mesures qu'ils recevaient et je ne comprends pas le but (je vous copie colle un bout de code comme exemple) :
    * Ax = ((int)I2C_Read(0)<<8) | (int)I2C_Read(0);
    **Ay = ((int)I2C_Read(0)<<8) | (int)I2C_Read(0);

  14. #13
    AKA TENDO

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    Tu as éveillé ma curiosité, j'ai déja entendu parler de ça mais pourrais-tu détailler un peu plus pour moi "filtrage soft" stp ^^

  15. #14
    jiherve

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    re
    ton bout de code sert à concaténer les octets reçu MSB<<8+LSB.
    le filtrage soft est multiple et varié mais pour l'application c'est du passe bas , implémentation au choix : moyenne glissante, FIR,IIR etc etc.

    JR
    l'électronique c'est pas du vaudou!

  16. #15
    AKA TENDO

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    j'ai compris que le but était de concaténer mais je ne comprends pas pourquoi la personne fais ça et le résultat que ça va donner dans ce cas précis ( je pense que je manque juste d'expérience pour le coup, désolé pour les questions bêtes^^').
    Pour le filtre je comprends mieux de quoi tu parles, j'essayerai de m'y pencher plus serieusement le moment venu.

  17. #16
    jiherve

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    re
    je présume que sa routine "I2C_Read(0)" retourne le premier octet reçu sur l'I²C en provenance de la FIFO et dans ce cas on peut lire en séquence tous les registres qui lui sont associés.
    tu n'es pas sorti des ronces!
    JR
    l'électronique c'est pas du vaudou!

  18. #17
    AKA TENDO

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    Je vois ce que tu veux dire j'ai déjà vu ça dans d'autres codes que je comprenais mais dans ma tête ce n'est pas encore assez concret pour celui-ci.

    Merci de ton encouragement mais ne t'inquiètes pas pour moi, du moment que je reste motivé, comprendre n'est qu'une question de temps

  19. #18
    umfred

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    c'est un peu d'optimisation: une multiplication c'est moins rapide qu'un décalage de bits, après le compilateur peut transformer une multiplication par un décalage de bits ou laisser la multiplication selon le compilateur et ses options; indiquer de faire un décalage permet de s'assurer que le compilateur va faire un décalage.

  20. #19
    AKA TENDO

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    je crois que j'ai compris, en fait le but est d'être sûr que le micro reçoit bien les octets un par un sans écraser celui d'avant c'est ça?

  21. #20
    umfred

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    moi je parlais de l'opérateur << surtout
    qu'on le fasse à chaque octet reçu pour tout de suite avoir nos données, ou le faire a posteriori, ça revient au même: décaler l'octet de poids fort pour l'ajouter à l'octet de poids faible pour avoir le mot 16 bits
    il aurait très bien pu faire un truc
    Code:
    A_MSB=(int)I2C_Read(0);
    A_LSB=(int)I2C_Read(0);
    A=(A_MSB<<8) | (A_LSB);
    après c'est aussi selon ce que fait la fonction de lecture.

    Et le décalage permet aussi d'éluder le cas où la valeur est négative (chose que j'avais un peu zappé)

  22. #21
    AKA TENDO

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    d'accord ça y est j'ai compris, mais pourquoi veut-il faire un mot de 16 bit pour chaque axe du capteur ?

    Aussi fred tu as manqué une question importante que je t'ai posé à un moment : il faut au final que je fasse (MSB*256+LSB)/16384 pour chaque axe ?

  23. #22
    umfred

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    bah parce la mesure est sur 16 bits (2 mots de 8 bits) pour chaque axe.
    sinon passe plutôt par le décalage plutôt que la multiplication par 256 pour le MSB

    Le réglage de la sensibilité se faisant pour tous les axes, ça semble logique d'appliquer le même traitement aux 3 axes, non?

  24. #23
    AKA TENDO

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    Ok c'est bon j'ai compris maintenant. Donc je fais le mot de 16 bits avec MSB << 8 + LSB et ensuite je divise par 16384 et normalement j'ai la bonne mesure?

  25. #24
    AKA TENDO

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    Puis je fais le complément à 2 pardon j'avais oublié ce détail

  26. #25
    jiherve

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    bonjour
    la valeur est déjà en complément à deux, donc signée!
    JR
    l'électronique c'est pas du vaudou!

  27. #26
    AKA TENDO

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    Bonjour hervé, alors j'aimerai qu'on revienne sur ça. Fred a dis dans une réponse précédente que le décalage de bits servait aussi à éviter le cas où le nombre est négatif. Je n'ai pas compris cette phrase, de plus il me semble que j'ai besoin connaître les chiffres négatifs pour l'accéléromètre.

  28. #27
    AKA TENDO

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    Bonjour tous le monde, voici donc mon code ( que le main sans la config de mes registres) mais je n'arrive pas à avoir des valeurs cohérentes, elles sont bien signé mais varient beaucoup trop et ne sont pas aussi grande qu'elles devraient l'être (sur un exemple j'ai vu que l'axe Y doit se situé vers 16384 hors, je suis au maximum à 200) De plus, lorsque je fais un mot uniquement sur 8 bits pour tester le capteur répond bien mais la valeur n'est pas signée et la valeur va de 0 à 255, même si je fais un "int16".

    Code:
    void main (void)
    {
    
    int TestRS = 0;
    int axeY ;
    int axeX ;
    float toto;
    
    
       MPU6050_Init();
    
       do
          
          axeX= ((int)read_reg(REG_ACCEL_X1) << 8) | (int)read_reg(REG_ACCEL_X2);
          axeY= ((int)read_reg(REG_ACCEL_Y1) << 8 | (int)read_reg(REG_ACCEL_Y2));
          
          //axeX= (float)axeX/16384.0;
          //axeY= (float)axeY/16384.0;
          
       
          printf("\n\r axe Y: %d",axeY);
          printf("\n\r axe X: %d",axeX);
    }
    Dernière modification par Jack ; 18/01/2023 à 14h01. Motif: Modification balises code

  29. #28
    jiherve

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    bonjour,
    je ne sais pas trop ce que tu nommes REG_ACCEL_X1 et consorts mais en supposant que ce soit accx_msb,accx_lsb... alors en supposant que la routine read_reg renvoie un octet il faut écrire :
    axeX= (int)((read_reg(REG_ACCEL_X1) << 8) |read_reg(REG_ACCEL_X2));
    l'extension de signe ne doit se faire qu’après concaténation.
    pour la dynamique il faut avoir correctement initialisé les registres.
    et si la puce est horizontale c'est l'axe Z qui renvoie -1g
    JR
    l'électronique c'est pas du vaudou!

  30. #29
    AKA TENDO

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    Merci pour votre réponse et les informations que vous me donnez, je vais essayer et je reviens vers vous pour vous tenir au courant. Normalement les registres sont bien configurés.

  31. #30
    AKA TENDO

    Re : Gestion des données d'un gyromètre (MPU6050) avec un PIC

    Petite question à part: j'ai un problème depuis hier, mon capteur me renvoi un signal continu sur la pin SDA (une manip a été faite hier il y avait quelques problèmes de soudure sur la carte faites par des étudiant l'an dernier) est ce que cela signifie que mon capteur est mort? j'ai tenté de remettre mon code d'origine pour être sûr que je n'avais pas modifié mon code par erreur après avoir corriger grâce à ta réponse mais cela ne change rien, mon capteur renvoi 255 sur les 2 axes en permanence.

Page 1 sur 3 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/06/2014, 20h36
  2. Commander un gyrometre avec microcontrolleur STM32
    Par inviteabf616ac dans le forum Électronique
    Réponses: 4
    Dernier message: 18/04/2013, 16h18
  3. logiciel de gestion de bases de données
    Par invite77c12b56 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 28/02/2011, 20h07
  4. gestion d'une base de données excel (Visual basic)
    Par Thiersun dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 17/03/2009, 09h54
  5. Gestion de données par PIC
    Par invited5eecb60 dans le forum Électronique
    Réponses: 4
    Dernier message: 18/12/2008, 09h46
Découvrez nos comparatifs produits sur l'informatique et les technologies.