Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

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



  1. #1
    achampion

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


    ------

    Bonjour:

    Je voudrais générer une onde sinusoidale à l'aide d'un PWM. Pour faire cela je sais qu'il faut générer plusieurs PWM de même fréquence, mais avec diffèrent duty cycle. Pour la fréquence de chaque PWM c'est bon j'arrive à la calculer, par contre pour le duty cycle de chaque PWM j'ai quelque problème.

    Avec mes calculer je sais qu'il faut avoir 200 PWM dont chaqu'un a une fréquence de 2Khz.(Mon PWM a une amplitude de 0 à 3.3V);

    Je sais qu'il faut utiliser Look Up Table de sine, mais je ne comprend pas trop comment (http://www.daycounter.com/Calculator...lculator.phtml)

    MERCI

    -----

  2. Publicité
  3. #2
    Qristoff
    Animateur Électronique

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

    Bonjour,
    Après essayé de générer un triangle , maintenant tu veux un sinus...
    Si tu veux faire un géné de fonction, tu as plus vite fait de prendre un AD9833 ou AD9837 à programmer directement via le µc, ce sera plus souple !
    Tout existe, il suffit de le trouver...!

  4. #3
    achampion

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

    Je suis malheureusement obligé d'utiliser seulement un uC et (une résitance et une capacité). D'autre suggestions?

  5. #4
    PIXEL

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

    attention à la fréquence maxi de ton signal...

    Tonton Shannon veille

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    achampion

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

    D'accord pas de problème, mais pour calculer le duty cycle je fais comment?

  9. #6
    PIXEL

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

    ben..... tu commences par tes cours

  10. Publicité
  11. #7
    jiherve

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

    Bonjour,
    pour générer sinus ou triangle une seule PWM suffit, il faut faire varier le rapport cyclique de façon ad'hoc, c'est le principe des ampli classe D!
    La fonction "son" d'un vieil APPLE II reposait sur ce principe.
    Il faut donc une PWM de fréquence très supérieure à celle du signal à générer.
    http://documentation.renesas.com/doc...n/sinewave.pdf
    JR
    Dernière modification par jiherve ; 01/11/2013 à 12h45.
    l'électronique c'est pas du vaudou!

  12. #8
    PIXEL

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

    au pire , le double..... SHANNON oblige

  13. #9
    jiherve

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

    Re,
    oui mais c'est limite, ne pas mégoter => x10 ou plus.
    un autre :http://atmega128.lightnote.net/pwmsin.htm
    JR
    Dernière modification par jiherve ; 01/11/2013 à 12h48.
    l'électronique c'est pas du vaudou!

  14. #10
    freepicbasic

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

    Pour synthétiser un signal , il faut en premier déterminer la fréquence d’échantillonnage
    c est a dire combien de samples on veut sur la courbe sinusoïdale , sachant que le signal ainsi synthétisé sera sous forme d'escalier car chaque sample change brutalement le niveau de sortie.
    Ce signal aura donc de nombreuses harmoniques , et il faudra au minimum un réseau RC pour limiter la bande et lisser le signal.

    Plus le nombre d’échantillons est grand, plus le signal est précis et fidèle.
    Le nombre d'échantillons déterminent la fréquence d’échantillonnage avec un octet soit 256 échantillons serait possible
    Pour un signal de 2khz cela ferait une fréquence d’échantillonnage de 2 000 x 256 = 512 000 hz ...
    C'est déjà bien trop élevé pour un petit µc.
    avec 16 samples ont aurait 2 000 x 16 = 32 000hz , ça devient possible mais le µc risque de ne plus faire que ça...

    Si l'on descend au dessous Nyquist nous dit que la fréquence minimale est (freq max x 2) facile a comprendre il faut au moins une alternance positive et une négative pour avoir un son...

    On peut utiliser en sortie un DAC ou plus économiquement un réseau R2R
    Dans le cas du PWM on l'initialise pour on met simplement la valeur dans le registre.

    Au niveau de la fréquence la fréquence du PWM elle devra t être suffisamment haute pour ne pas être audible donc 20khz mini.
    Pour la fréquence d'échantillonnage il faudra filtrer pour ne pas l'entendre aussi.

    Il sera nécessaire aussi de charger le registre PWM au moment de son interruption , car un chargement aléatoire risque de perturber le PWM et l'on risque de passer à travers le compteur si la valeur diminue alors que le compteur était déjà au dessus ce qui engendre des glitchs.


    Pour les valeurs de la table
    On peut faire rapidement un essai avec GWBASIC sous DOS
    Que l'on trouve facilement sur le net.
    exemple;
    http://www.gw-basic.com/downloads.html

    calcul avec 64 samples
    Code:
    10 FOR I=1 TO 16:PRINT : NEXT I
    20 DIM C(33)
    30 AMP = 32
    40 SCREEN 2
    50 CLS
    60 FOR I=1 TO 20: PRINT : NEXT I
    70 F=0
    80 OPEN "tab.asm" FOR OUTPUT AS #1
    90 FOR I=0 TO 6.28 STEP(6.28/AMP)
    100 C(F) =SIN(I)*(AMP/2)
    110 PRINT INT (C(F)) +AMP,
    120 PRINT #1,"    retlw 0x";HEX$(C(F) +AMP)
    130 F =F +1
    140 NEXT I
    150 CLOSE#1
    160 '
    170   LINE(140 ,64)-(500,64)
    180  LINE(140 ,1)-(140,128)
    190 '
    200 FOR I=0 TO 31
    210  IF I<>0 THEN LINE(X,64+C(I)*3)-(X,Y)
    220  Y = 64+C(I)*3
    230  IF I<>0 THEN LINE(140 + I*10,64+C(I)*3)-(X,Y)
    240  Y = 64+C(I)*3
    250  X=140 + I*10
    260 PSET(X,Y) 'PRINT c(i)
    270 NEXT I
    280 A$=INKEY$
    290 IF A$="" THEN GOTO 280
    Ce qui génère un code dans un fichier "tab.asm";
    Dessine la sinus synthétique
    et liste les nombres


    Code:
        retlw 0x20
        retlw 0x23
        retlw 0x26
        retlw 0x29
        retlw 0x2B
        retlw 0x2D
        retlw 0x2F
        retlw 0x30
        retlw 0x30
        retlw 0x30
        retlw 0x2F
        retlw 0x2D
        retlw 0x2B
        retlw 0x29
        retlw 0x26
        retlw 0x23
        retlw 0x20
        retlw 0x1D
        retlw 0x1A
        retlw 0x17
        retlw 0x15
        retlw 0x13
        retlw 0x11
        retlw 0x10
        retlw 0x10
        retlw 0x10
        retlw 0x11
        retlw 0x13
        retlw 0x15
        retlw 0x17
        retlw 0x1A
        retlw 0x1D
        retlw 0x20
    Pour la table de look up une simple boucle avec un index fera l'affaire.


    Pour un PIC Microchip il est important de mettre cette table dans un début de segment
    exemple en 0X100
    et mettre dans W l index en faisant un addwf PCL,f on va sur le retlw correspondant

    Code:
    ORG 0100H
    MyTab
      addwf PCL,f
    
      retlw ...
       ; ... table ci dessus
      retlw ...
    pour appeler on fera simplement ;
    Code:
    movf MonIndex,w
    call MyTab
    movwf MyPWM
    le tout dans une boucle avec un delay (ou pas car ça va mettre un certain temps) selon la vitesse d’échantillonnage désirée.
    Dernière modification par freepicbasic ; 01/11/2013 à 18h32.
    A+, pat

Discussions similaires

  1. Générer une onde triangulaire à l'aide d'un PWM
    Par achampion dans le forum Électronique
    Réponses: 5
    Dernier message: 30/10/2013, 19h39
  2. Générer se signal carré à l'aide du NE555
    Par zhiliga dans le forum Électronique
    Réponses: 5
    Dernier message: 06/06/2010, 19h48
  3. générer un sinus
    Par electro23 dans le forum Électronique
    Réponses: 7
    Dernier message: 01/02/2009, 15h29
  4. Générer Sinus Déphasé (pour moteur)
    Par arsh2046 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.