p
u
b
l
i
c
i
t
é
publicité

Discussion: Générer un PWM

  1. #1
    Invité de passage
    Homme Profil pro
    Inscrit en
    septembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : septembre 2012
    Messages : 15
    Points : 0
    Points
    0

    Par défaut Générer un PWM

    Bonjour à tous, je viens à vous car je cherche à générer un signal PWM avec la comparaison de deux signaux : une porteuse (signal triangulaire) à une certaine fréquence comparé à un sinus de fréquence 50HZ.
    Je génère bien ce deux signaux que j'affiche sur le même graphe. A la fréquence de coupure de ces deux signaux génère un signal carré qui deviendra mon signal PWM. J'ai un soucis pour le générer...

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    A=5;%Amplitude du signal 
    t=0:1/1000:0.15
    i=A.*sawtooth(100*2*pi*t);%signal triangle 
    s=0.75*A.*sin(2*pi*50*t);
     
     
    for k=1:length(s)
        if (i(k)>abs(s(k)))
            pwm(k)=1;
        else
            pwm(z)=0;
        end
    end
     
    subplot(3,2,1)
    plot(t,pwm,'g')
     
     
    subplot(3,1,1)
    [AX,H1,H2] = plotyy(t,i,t,s,'plot');
    grid on
     
    set(AX(1),'ylim',[-6 6],'ytick',-6:2:6)
    set(AX(2),'ylim',[-6 6],'ytick',-6:2:6)
    axes(AX(1))
    axes(AX(2))
    Merci d'avance pour vos réponses,

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    juillet 2012
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2012
    Messages : 139
    Points : 222
    Points
    222

    Par défaut

    Déjà, tu as une erreur d'indice à la ligne 11
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          pwm(k)=1;
    else
          pwm(z)=0;
    Tu as mis z or il n'est pas déclaré.

    Ensuite au niveau des subplots :
    Les deux premiers nombres permettent de dire combien tu as de mini-figures au niveau des lignes et des colonnes. Par exemple ici, tu auras 3 figures par ligne et 2 figures par colonne soit 6 figures au total.
    Le dernier numéro indique l'emplacement où tu veux dessiner ta figure courante. Comme tu utilises deux fois l'indice 1, cela dessine tes mini-figures au même endroit.

    En espérant que ça "débloque" ton problème.

  3. #3
    Invité de passage
    Homme Profil pro
    Inscrit en
    septembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : septembre 2012
    Messages : 15
    Points : 0
    Points
    0

    Par défaut

    Merci j'ai pris en considération tes remarques qu'on l'on va citer d'"étourderies",J'ai en soit modifier le programme mais lorsque je modifie les valeurs du vecteur t, j'ai une erreur de ce style :

    ??? Error using ==> plot
    Vectors must be the same lengths.

    Error in ==> signal_tri at 22
    plot(t,pwm,'r')


    Voici le code modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    clc;
    clear all;
    A=5;%Amplitude du signal 
    frequ_ech=100000;%fréquence d'échantillonage 
    t=0:1/frequ_ech:0.02% échelle de temps 
    i=A.*sawtooth(200*2*pi*t);%signal triangle (porteuse) 
    s=0.75*A.*sin(2*pi*50*t);%signal sinus (consigne)
     
    pwm=0; %initialisation du PWM
     
    for k=1:length(s)
        if (s(k)<=i(k)&&s(k)>0)
            pwm(k)=1;
     
        elseif (s(k)<=i(k)&&s(k)<0)
            pwm(k)=-1;
        end
     
    end
     
    subplot(3,1,1)
    plot(t,pwm,'r')
    set(gca,'ytick',-6:0.1:6);
     
    subplot(3,1,2)
    [AX,H1,H2] = plotyy(t,i,t,s,'plot');
    grid on
     
    set(AX(1),'ylim',[-6 6],'ytick',-6:2:6)
    set(AX(2),'ylim',[-6 6],'ytick',-6:2:6)
    axes(AX(1))
    axes(AX(2))
     
    subplot(3,1,3)
    [AXy,H3,H4] = plotyy(t,pwm,t,s,'plot');
    %grid on
     
    set(AXy(1),'ylim',[-1.5 1.5],'ytick',-1.5:.2:1.5)
    set(AXy(2),'ylim',[-6 6],'ytick',-6:2:6)
    axes(AXy(1))
    axes(AXy(2))
    Merci d'avance

  4. #4
    Expert Confirmé Sénior
    Avatar de Winjerome
    Homme Profil pro
    Inscrit en
    septembre 2009
    Messages
    8 325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : septembre 2009
    Messages : 8 325
    Points : 30 544
    Points
    30 544

    Par défaut

    Bonjour,

    Le message d'erreur est plutôt clair : tes vecteurs t et pwm doivent être de la même longueur.

    Je te conseille de regarder la Qu'est-ce que la préallocation de mémoire ?
    Avant de poser votre question : FAQ, Tutoriels et recherche sur le forum
    Une erreur ? Messages d'erreur et avertissements
    "Ça ne marche pas" n'apporte aucune information utile permettant de vous aider. Expliquez clairement votre problème (erreurs entières, résultat souhaité vs obtenu...).

    En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
    L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
    Ma version améliorée de FireDVP

  5. #5
    Invité de passage
    Homme Profil pro
    Inscrit en
    septembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : septembre 2012
    Messages : 15
    Points : 0
    Points
    0

    Par défaut

    Super, je vous remercie !

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

Discussions similaires

  1. Générer un PWM sur un DSPIC30F en C
    Par vniversum dans le forum C
    Réponses: 2
    Dernier message: 19/06/2010, 21h49
  2. Réponses: 2
    Dernier message: 31/08/2002, 14h00
  3. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Général Algorithmique
    Réponses: 3
    Dernier message: 22/08/2002, 16h30
  4. [CR][VB] comment générer un état ?
    Par ndi dans le forum SDK
    Réponses: 3
    Dernier message: 22/08/2002, 13h13
  5. Réponses: 5
    Dernier message: 08/07/2002, 16h22

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