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

Arduino Discussion :

Problème avec le DAC du MKRZERO


Sujet :

Arduino

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant Ingénieur
    Inscrit en
    Juin 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Etudiant Ingénieur

    Informations forums :
    Inscription : Juin 2015
    Messages : 5
    Par défaut Problème avec le DAC du MKRZERO
    Salut tout le monde,

    J'ai un problème assez étrange avec mon nouveau Arduino MKR ZERO. Dans mon projet, J'ai besoin d'un contrôle parfait sur mon DAC. Ce modèle n'a pas beaucoup de documentations, la seule chose sur laquelle je bosse avec est le lien ci-dessous:

    https://store.arduino.cc/usa/arduino-mkrzero

    On voit que la référence est de 3.3V pour un DAC de 10 bits. En théorie, je dois donc pouvoir avoir des steps de 3.3/1023 Volt. Je fais donc un test avec le code ci-dessous (je sais que ça ne marche pas juste avec ce code, je mets uniquement les lignes importantes qui comptent pour ce test)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    pinMode(A0,OUTPUT);                         //W_Voltage
    analogWriteResolution(10);
     
    for (float i=0; i <= 1023; i++){
        delay(500);
        analogWrite(A0,i);
        delay(500);
        Serial.println(i);
    }
    Je branche donc ainsi mon voltmètre entre le ground et l'Output A0/DAC pour observer ce qu'il se passe, tout en ayant le step affiché à l'écran via le moniteur série. J'observe alors que mon DAC évolue dans un cycle de 255 steps, donc de 8bytes. J'entends par là que, pour chaque 0,255,511, etc... steps, je vais avoir 0V. Mais cela n'est pas le plus gros problème que je rencontre! En effet, en plus de cela, je n'arrive pas à dépasser 2.2V, ce qui correspond à 175 steps. Entre 175 et 255, mon voltage reste bloqué à 2.2V, pour finalement revenir à 0V à 256 steps, et recommencer la même chose sur un cycle de 256 bytes. En fait, si j'utilise le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    analogWrite(A0,1023);
    Je n'arrive pas à atteindre 3.3V, mais je vais de nouveau lire 2.2V. Est ce que cette anomalie est déjà arrivé à quelqu'un? Je suis vraiment embêté car j'ai vraiment besoin d'un contrôle parfait de mon DAC, mais là en ce moment ce n'est vraiment pas le cas...

    Je vous remercie en avance pour votre aide!

    Cordialement,

    Maxime Mano.

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 253
    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 253
    Par défaut
    Salut,
    Voici la doc de ton microcontrôleur : http://ww1.microchip.com/downloads/e.../40001882A.pdf

    Citation Envoyé par maxlelezard
    On voit que la référence est de 3.3V pour un DAC de 10 bits.
    Où tu vois ça ? Sur un schéma ? Dans la doc ?

    Citation Envoyé par maxlelezard
    En théorie, je dois donc pouvoir avoir des steps de 3.3/1023 Volt. [...]
    Je branche donc ainsi mon voltmètre entre le ground et l'Output A0/DAC pour observer ce qu'il se passe, tout en ayant le step affiché à l'écran via le moniteur série. J'observe alors que mon DAC évolue dans un cycle de 255 steps, donc de 8bytes. J'entends par là que, pour chaque 0,255,511, etc... steps, je vais avoir 0V. Mais cela n'est pas le plus gros problème que je rencontre! En effet, en plus de cela, je n'arrive pas à dépasser 2.2V, ce qui correspond à 175 steps. Entre 175 et 255, mon voltage reste bloqué à 2.2V, pour finalement revenir à 0V à 256 steps, et recommencer la même chose sur un cycle de 256 bytes.
    Ton programme est un générateur de rampe, la tension augmente effectivement de 0 à Vref puis retombre à 0 et ainsi de suite.
    Comment est réglé ton voltmètre ? en mode DC il mesurera une valeur moyenne donc attention à la mesure, elle ne sera pas celle que tu attends. Idem en AC, il mesurera une valeur RMS (efficace) et non une valeur max.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Etudiant Ingénieur
    Inscrit en
    Juin 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Etudiant Ingénieur

    Informations forums :
    Inscription : Juin 2015
    Messages : 5
    Par défaut
    Salut Vincent et merci de ta réponse,

    Citation Envoyé par Vincent PETIT Voir le message
    Où tu vois ça ? Sur un schéma ? Dans la doc ?
    Je peux voir cette valeur à la page 787 de la doc que tu viens de m'envoyer. Mais sinon il s'agit aussi de la valeur que l'on peut trouver avec le lien du produit en ligne.

    Nom : edededed.png
Affichages : 230
Taille : 28,2 Ko

    Citation Envoyé par Vincent PETIT Voir le message
    Ton programme est un générateur de rampe, la tension augmente effectivement de 0 à Vref puis retombre à 0 et ainsi de suite.
    Comment est réglé ton voltmètre ? en mode DC il mesurera une valeur moyenne donc attention à la mesure, elle ne sera pas celle que tu attends. Idem en AC, il mesurera une valeur RMS (efficace) et non une valeur max.
    Je l'ai fait en mode DC, mais j'ai également utilisé un oscilloscope pour vérifier la valeur. À vrai dire, les valeurs étaient cohérentes comme je le disais pour un DAC 8 bit, mais qui se bloque à 2.2V.

  4. #4
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 253
    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 253
    Par défaut
    C'est très étrange.
    Je ne connais pas ce micro mais le DAC peut être référencé avec 3 sources de tension, au choix.

    Nom : im7.png
Affichages : 218
Taille : 19,6 Ko



    VREFA (disponible sur le connecteur) donc aucune tension dessus par défaut.

    Nom : im5.png
Affichages : 217
Taille : 32,5 Ko

    VDDANA qui est relié au 3.3V via le filtre passe bas L6 C27||C30
    Nom : im4.png
Affichages : 205
Taille : 17,8 Ko

    Ou par la référence interne du micro qui pour moi est de 1V
    Nom : im6.png
Affichages : 201
Taille : 27,5 Ko

    Au démarrage le micro est par défaut réglé sur la référence interne de 1V (sauf si Arduino fait quelque chose dans ton dos)
    Nom : im3.png
Affichages : 212
Taille : 47,4 Ko


    Je pense que Arduino doit référencer le DAC sur VDDANA. Quelle est l'impédance de la charge ? As tu vu qu'elle doit être de 5kΩ mini ? Es tu dans cette caractéristique ?
    Nom : im8.png
Affichages : 208
Taille : 49,6 Ko

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Etudiant Ingénieur
    Inscrit en
    Juin 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Etudiant Ingénieur

    Informations forums :
    Inscription : Juin 2015
    Messages : 5
    Par défaut
    Il suffisait simplement de ne rien mettre du tout. Je déteste quand la solution est aussi évidente. :p Pour ceux dans le même cas que moi, il faut mettre le analogWriteResolution(10); dans le loop(), et non dans le setup(), sinon ça ne marche pas. Puis, comme je disais, il suffit de ne rien préciser sur l'état de A0. Par défaut, il considère qu'il s'agit du DAC, si un état est considéré, il s'agira d'une sortie analogique standard qui ne pourra aller au delà de 2.266V. Encore merci!

  6. #6
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    il faut mettre le analogWriteResolution(10); dans le loop()
    c'est curieux. Cela voudrait dire que le micro n'enregistre pas la valeur ?
    Faut-il le mettre avant chaque analogWrite() ?

    uis, comme je disais, il suffit de ne rien préciser sur l'état de A0
    c'est à dire ? Dans la doc j'ai vu aussi que A0 se transformait en DAC0, ce qui revient au même car les deux voies sont sur la même broche.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Etudiant Ingénieur
    Inscrit en
    Juin 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Etudiant Ingénieur

    Informations forums :
    Inscription : Juin 2015
    Messages : 5
    Par défaut
    Je sais que tout cela est étrange, mais là je parle juste en terme d’expériences et d'essais. Je n'ai pas vraiment d'explication rationnelles à cela. Pour résumer :

    - écrire le analogWriteResolution() en setup() ne sert à rien, il sera juste ignoré. Il s'agit en effet d'un état à préciser avant chaque mesure.Le switch en loop() entre la mesure 8 et 10 bits marche d'ailleurs très bien, mais le setup() lui ne veut rien savoir.

    - si je précise l'état de A0, soit un output classique, je vais obtenir précisément un blocage à 2.266V. J'ai pas vérifié les autres sorties analogiques, mais je parie qu'elles font probablement la même chose. La seule façon que j'ai trouvé pour éviter cela est juste de ne rien écrire sur son état, puis là ça marche on a bien un DAC 10 bits allant jusqu'à son maximum proche de 3.3V.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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