[Programmation] Générer une sinus à l'aide d'un MCU
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 32

Générer une sinus à l'aide d'un MCU



  1. #1
    novmbre2

    Générer une sinus à l'aide d'un MCU


    ------

    Bonjour,

    J'ai lu la discussion et je me suis dit que ma question serait peut-être en rapport avec.
    Je dois générer un signal sinusoïde sur une sortie du DAC du MCU. Pour cela je dois stoker mes données à convertir dans un tableau de 128 éléments.
    Je me demander comment je dois faire. Est ce que je dois utiliser un signal PMW sur lequel je récupérer ces valeurs et je convertir avec le DAC?

    Merci de votre réponse

    Bonne journée

    -----
    Dernière modification par Antoane ; 02/11/2017 à 16h47. Motif: Déterrage -> création d'une nouvelle discussion

  2. #2
    DAUDET78

    Re : Générer une sinus à l'aide PWM

    Citation Envoyé par novmbre2 Voir le message
    Est ce que je dois utiliser un signal PMW sur lequel je récupérer ces valeurs et je convertir avec le DAC?
    PWM et DAC, c'est deux méthodes pour sortir une tension analogique d'un µC . On utilise l'un OU l'autre !
    Je dois générer un signal sinusoïde
    A quelle fréquence ?
    sur une sortie du DAC du MCU
    Il y a un DAC dans ton µC ? Quelle résolution ?
    Dernière modification par DAUDET78 ; 02/11/2017 à 16h01.
    J'aime pas le Grec

  3. #3
    novmbre2

    Re : Générer une sinus à l'aide PWM

    Bonsoir,

    Merci pour ta réponse.
    Je début en mcu et je ne sais pas trop comment m'y prendre.
    Pourrais-tu m'expliquer comment faire avec un DAC? La grosse question que je me pose est comment est ce que je peux générer le signal, je ne vois pas comment faire.

    Après la résolution du DAC je ne l'a connais pas et sinon je pense que la fréquence serait de 16MHZ

    Bonne soirée

  4. #4
    DAUDET78

    Re : Générer une sinus à l'aide PWM

    Citation Envoyé par novmbre2 Voir le message
    je pense que la fréquence serait de 16MHZ
    Tu plaisantes ...... j’espère !
    J'aime pas le Grec

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

    Unhappy Re : Générer une sinus à l'aide PWM

    Heu.....

    Avec le PWM j'utilise ça comme fréquence après je ne sais absolument pas me servir d'un DAC
    Je suis en train de régarder la doc pour connaître la résolution.

    Je sais que la période de la sinusoïde est composée de 128 éléments. Donc f= 1/T = 1/128= 0,0078 HZ mais là c'est trop petit.....
    Dernière modification par novmbre2 ; 02/11/2017 à 17h20.

  7. #6
    novmbre2

    Re : Générer une sinus à l'aide PWM

    J'ai trouvé la résolution : 16-/32-bit
    Il peut aller de 8 KHZ à 192 KHZ, donc oui 16MHZ c'était beaucoup trop.....
    La master clock peut supporter 256 échantillons

  8. #7
    DAUDET78

    Re : Générer une sinus à l'aide PWM

    Citation Envoyé par novmbre2 Voir le message
    Avec le PWM j'utilise ça comme fréquence après je ne sais absolument pas me servir d'un DAC
    Je répète une nouvelle fois
    On utilise du PWM OU un DAC
    Donne un lien WEB sur la datasheet de ton µC
    J'aime pas le Grec

  9. #8
    DAUDET78

    Re : Générer une sinus à l'aide PWM

    Je sais que la période de la sinusoïde est composée de 128 éléments.
    qui tiennent dans une table de 32 éléments
    - de 0 à 90° , on lit la table de bas en haut
    - de 0 à 180° , on lit la table de haut en bas
    - de 180 à 270° , on lit la table de bas en haut et on change de signe la valeur lue
    - de 270 à 360° , on lit la table de haut en bas et on change de signe la valeur lue
    J'aime pas le Grec

  10. #9
    novmbre2

    Re : Générer une sinus à l'aide PWM

    C'est un tableau de 128 éléments donc si je comprends bien on le lit de haut en bas.
    Voici le lien de la datasheet: http://www.st.com/content/ccc/resour...DM00098321.pdf

    Merci beaucoup de ton aide.

  11. #10
    DAUDET78

    Re : Générer une sinus à l'aide PWM

    Citation Envoyé par novmbre2 Voir le message
    C'est un tableau de 128 éléments donc si je comprends bien on le lit de haut en bas.
    Non
    Citation Envoyé par Daudet
    - de 0 à 90° , on lit la table de bas en haut
    - de 0 à 180° , on lit la table de haut en bas
    - de 180 à 270° , on lit la table de bas en haut et on change de signe la valeur lue
    - de 270 à 360° , on lit la table de haut en bas et on change de signe la valeur lue
    Le DAC fait 12 bits de résolution et sa sortie est au max à 1Msps (je te laisse vérifier !) . Donc, à la louche, avec 128 valeurs de 0 à 90°, On peut sortir un sinus à 106/512=1953 Hz
    Alors, tes 16MHz annoncés, c'est pour le 1er avril .....
    J'aime pas le Grec

  12. #11
    novmbre2

    Re : Générer une sinus à l'aide d'un MCU

    D'accord merci beaucoup.

    Pourrais tu m'expliquer ton calcul s'il te plais, je ne vois pas d'où viennent les valeurs.

    Sinon si j'ai bien compris,
    Je fais un tableau
    Je le remplit de valeurs
    Je fait mon sinus avec le DAC

    Par contre, je ne comprends pas comment remplir le tableau. Il faut que j'appelle une fonction mais je ne comprends pas d'où viennent les valeurs que je vais mettre dans le tableau.

  13. #12
    DAUDET78

    Re : Générer une sinus à l'aide d'un MCU

    Citation Envoyé par novmbre2 Voir le message
    Pourrais tu m'expliquer ton calcul s'il te plais, je ne vois pas d'où viennent les valeurs.
    je ne peux pas être plus clair
    Par contre, je ne comprends pas comment remplir le tableau.
    ce tableau est en Flash et créé lors de l'écriture du programme . Tu le remplis comme tu veux (avec une calculatrice scientifique ou un programme en C ou en Basic) !
    Il faut mettre 128 valeurs qui représentent la valeur de sin(x) pour x variant de 0° à 90° par pas de 0,703125° car 0,703125x128=90
    J'aime pas le Grec

  14. #13
    novmbre2

    Re : Générer une sinus à l'aide d'un MCU

    D'accord,

    Donc je le remplit comme je veux.
    J'aurais une dernière question, si je veux le faire évoluer en triangle après une interruption, j'appelle une fonction triangle?

  15. #14
    DAUDET78

    Re : Générer une sinus à l'aide d'un MCU

    Citation Envoyé par novmbre2 Voir le message
    Donc je le remplit comme je veux.
    Non ! Comme tu peux !
    J'aurais une dernière question, si je veux le faire évoluer en triangle après une interruption, j'appelle une fonction triangle?
    non,
    Tu utilises un autre tableau de 128 valeurs qui représentent ton triangle
    J'aime pas le Grec

  16. #15
    jiherve

    Re : Générer une sinus à l'aide d'un MCU

    Bonsoir
    En l’occurrence c'est grosso modo l'index d'adressage de la table sinus!
    JR
    l'électronique c'est pas du vaudou!

  17. #16
    novmbre2

    Re : Générer une sinus à l'aide d'un MCU

    Bonsoir,

    Je n'ai pas compris ta réponse. Pourrais-tu t'expliquer?

    Merci de ta réponse et merci à l'autre personne aussi. Cela m'aide beaucoup.

  18. #17
    jiherve

    Re : Générer une sinus à l'aide d'un MCU

    re
    ben pour adresser ta table de sinus il faut générer des adresses qui s’incrémentent linéairement au cours du temps , donc a peu de chose prés un triangle.
    Tu comptes de 0 à 511 et en fonction des 2 MSB tu génères directement un triangle ou bien tu adresses ta table sinus.
    JR
    l'électronique c'est pas du vaudou!

  19. #18
    novmbre2

    Re : Générer une sinus à l'aide d'un MCU

    Hum

    Je crois avoir compris. Je vous remercie de votre aide à tout les deux et je vais faire ça demain. Si je n'y arrive pas je reviendrai vers vous avec d'autres questions.

    Merci encore

    Bonne soirée

  20. #19
    Teknic

    Re : Générer une sinus à l'aide d'un MCU

    Bonjour,


    si ça peut t'aider voici une méthode que j'utilise pour générer les valeurs des formes d'onde sinusoïdales ou autres:

    J'utilise un logiciel très simple "Chipmunk basic" avec un programme qui ressemblent à ça:

    Code:
    10 graphics 0
    20 option degrees
    30 cls
    
    40  for i = 0 to 4095
    
    50   a = int (8191 *sin ((i*360/4095))) +8191
    
    60   print (a);  ", ";
    
    70 next i
    Après calcul les valeurs apparaissent dans une fenêtre dont je peux sélectionner et copier le contenu.
    ça ressemble à ça:
    Code:
    8191 , 8203 , 8216 , 8228 , 8241 , 8253 , 8266 , 8278 , 8291 , 8304 , 8316  , etc...etc.....
    Tu remarqueras la présence de virgules entre chaque nombres, ce qui est bien pratique pour la suite.


    Ensuite je n'ai plus qu'à coller ça dans mon script arduino sous la forme suivante:

    Code:
    const int SINE [4096]   =   {  8191 , 8203 , 8216 , 8228 , 8241 , 8253 , 8266 ,  etc...etc.....   };

  21. #20
    novmbre2

    Re : Générer une sinus à l'aide d'un MCU

    Bonjour,

    Merci pour ton exemple, je comprends où je dois aller.

    Je doit donc créer un tableau de 128 éléments.
    Remplir le tableau avec une fonction sinus et une boucle for allant de 0 à 127.
    Et enfin, générer le signal sur la broche de sortie du DAC. (Là sera le plus dur pour moi je pense).

    Par contre je n'ai pas compris quelques petites choses:
    Citation Envoyé par DAUDET78 Voir le message
    Le DAC fait 12 bits de résolution et sa sortie est au max à 1Msps. Donc, à la louche, avec 128 valeurs de 0 à 90°, On peut sortir un sinus à 106/512=1953 Hz
    Je ne comprends pas d'où viennent les valeurs 106 et 512.

    Après je ne comprends pas dans ton programme Teknic, cette ligne:
    a = int (8191 *sin ((i*360/4095))) +8191

    Sinon je vois bien où tu veux en venir.

    Dans la première partie tu calcul les valeurs de ton sinus avec une boucle for.
    Tu vérifie les valeurs.
    Enfin tu remplis ton tableau.

    Peut-on faire afficher les valeurs du tableau calculé avec un MCU. Je sais qu'on programme en C et je sais programmer en C, mais j'ai toujours des difficultés à comprendre le principe du MCU. Pour moi ce n'est pas la même chose que programmer en C. Donc je ne sais pas si printf("") pourrait fonctionner.

    Bonne journée et encore merci

  22. #21
    DAUDET78

    Re : Générer une sinus à l'aide d'un MCU

    Citation Envoyé par novmbre2 Voir le message
    Je ne comprends pas d'où viennent les valeurs 106 et 512.
    1000000, c'est, à vérifier, le nombre max d'échantillons que tu peux sortir sur le DAC par seconde
    Il faut sortir 128 échantillons pour faire un quadrant (0° à 90°)
    Il y a 4 quadrants
    J'aime pas le Grec

  23. #22
    novmbre2

    Re : Générer une sinus à l'aide d'un MCU

    Ah d'accord je vois mieux d'où viennent les valeurs.
    Et le 1000000 vient de la documentation.

    Merci beaucoup

  24. #23
    Teknic

    Re : Générer une sinus à l'aide d'un MCU

    Citation Envoyé par novmbre2 Voir le message

    Après je ne comprends pas dans ton programme Teknic, cette ligne:
    a = int (8191 *sin ((i*360/4095))) +8191
    Cette formule n'est pas exactement adaptée à ton projet et si je n'ai pas précisé d'avantage c'est pour te laisser cogiter... c'est du niveau collège comme calcul.

    Des indices:

    Cette formule est faite pour sortir 4096 valeurs.
    Les valeurs sont codées en 14 bits ( donc de 0 à 16383).


    Citation Envoyé par novmbre2 Voir le message
    Peut-on faire afficher les valeurs du tableau calculé avec un MCU. Je sais qu'on programme en C et je sais programmer en C, mais j'ai toujours des difficultés à comprendre le principe du MCU. Pour moi ce n'est pas la même chose que programmer en C. Donc je ne sais pas si printf("") pourrait fonctionner.
    Je ne suis pas certain de comprendre ou tu veux en venir.
    Mais oui par exemple je peux balancer a peu près le même programme dans l'arduino et utiliser l'outil de communication "serial" pour afficher les valeurs dans une fenêtre sur mon ordinateur.

  25. #24
    Teknic

    Re : Générer une sinus à l'aide d'un MCU

    Citation Envoyé par DAUDET78 Voir le message
    1000000, c'est, à vérifier, le nombre max d'échantillons que tu peux sortir sur le DAC par seconde
    Il faut sortir 128 échantillons pour faire un quadrant (0° à 90°)
    Il y a 4 quadrants
    Ah ok, idem je ne voyais pas où tu voulais en venir.
    Elle est très bien ta suggestion de faire quatre quadrants pour limiter le nombre de données nécessaires.

  26. #25
    novmbre2

    Re : Générer une sinus à l'aide d'un MCU

    Ah d'accord. Désolé ma question était bête.

    Sinon je ne vois pas pour le triangle. On m'a dit:
    Tu comptes de 0 à 511 et en fonction des 2 MSB tu génères directement un triangle ou bien tu adresses ta table sinus.

    Mais je ne comprends pas ce qu'il faut faire. Je dois adresser ma table? Je suis un peu perdu là.....

  27. #26
    Teknic

    Re : Générer une sinus à l'aide d'un MCU

    Pour faire un triangle tu n'a pas besoin de table.

    Pour te donner une idée du principe, une prog sur arduino:

    Code:
    byte compteur;
    byte waveform;  // c'est le signal en sortie
    
    void setup() {
    }
    
    void loop() {
      compteur = compteur + 1;  // puisque le compteur est en 8 bits il compte de 0 à 255 puis revient à 0 
    
      if ( compteur < 128 ) {    // pente ascendante
        waveform = compteur;
      } else {                // sinon pente descendante
        waveform = 256 - compteur;
      }
    
    }

  28. #27
    novmbre2

    Re : Générer une sinus à l'aide d'un MCU

    D'accord merci beaucoup.
    La je vais faire le code. Tes exemples m'aideront beaucoup

    Je remercie aussi les deux autres personnes qui m'ont beaucoup aidé aussi

  29. #28
    jiherve

    Re : Générer une sinus à l'aide d'un MCU

    Bonsoir
    Ce que j'avais voulu dire c'est que la génération d'adresse peut servir directement à générer un triangle ou bien par l'intermediaire de la table à générer un sinus.
    C'est l'équivalent digital d'un générateur triangulaire suivi d'un convertisseur triangle sinus analogique, les bases en somme!
    JR
    l'électronique c'est pas du vaudou!

  30. #29
    novmbre2

    Re : Générer une sinus à l'aide d'un MCU

    Bonjour,

    Je comprends bien ce que tu dis mais je ne vois pas comment faire. Désolé je débute et la mcu n'est pas ma tasse de thé.
    Mais merci de ta deuxième explication je vais voir comment faire.

    Bonne journée

  31. #30
    Teknic

    Re : Générer une sinus à l'aide d'un MCU

    Citation Envoyé par novmbre2 Voir le message
    Bonjour,

    Je comprends bien ce que tu dis mais je ne vois pas comment faire. Désolé je débute et la mcu n'est pas ma tasse de thé.
    Mais merci de ta deuxième explication je vais voir comment faire.

    Bonne journée
    Ce qu'explique jiherve c'est que l'adressage ( c.a.d la variable "compteur" dans mon exemple) peut-être utilisé comme adresse pour aller piquer les valeurs de sinus ou utilisé, comme dans mon exemple, pour synthétiser un triangle. Dans les deux cas la même variable est utilisée mais de façon différente.

    Dans tout les cas ce "compteur" est incrémenté de 1 à chaque cycle.

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Générer un sinus cardinal
    Par lobodol dans le forum Électronique
    Réponses: 16
    Dernier message: 23/05/2014, 13h17
  2. Générer une sinus à l'aide PWM
    Par achampion dans le forum Électronique
    Réponses: 9
    Dernier message: 01/11/2013, 18h28
  3. générer un sinus
    Par invitedb432c09 dans le forum Électronique
    Réponses: 7
    Dernier message: 01/02/2009, 15h29
  4. Générer Sinus Déphasé (pour moteur)
    Par invitee7809ade dans le forum Électronique
    Réponses: 25
    Dernier message: 11/11/2006, 21h54
  5. Générer des signaux VGA à l'aide d'un DSP
    Par Rodrigue dans le forum Électronique
    Réponses: 7
    Dernier message: 29/10/2006, 18h14
Découvrez nos comparatifs produits sur l'informatique et les technologies.