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 :

Souci lors de mon expérience pour mon TIPE


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2021
    Messages : 2
    Par défaut Souci lors de mon expérience pour mon TIPE
    Bonjour,
    je m'appelle Théo je suis en CPGE et j ai un TIPE assez complexe et j ai une grosse parti info ou je me débrouille vraiment mal. J ai donc besoin de votre aide. J ai fais un programme tant bien que mal qui marche. Il consiste à analyser une tension d'entrée et la renvoyer sur une sortie PWM le but est d avoir une sinusoïde en sortie. Voici le programme :

    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
    // Fonction setup(), appelée au démarrage de la carte Arduino
    void setup() {
        int valeur; // valeur à ici une valeur inconu, elle sera donné plus tard
        float tension; // cela permet à la carte d'alouer la place nécessaire aux différentes variable dès le début  du programme
      // Initialise la communication avec le PC
      Serial.begin(57600);
     
    // Renvoie la tension a la sortie 9 PWM
    pinMode(9,OUTPUT);
    }
     
    // Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
    void loop() {
     
      // Mesure la tension sur la broche A0
      int valeur = analogRead(A0);
      analogWrite(9,191); //Activer une modulation a 75% (191/255) sur la broche 9
     
      // Transforme la mesure (nombre entier) en tension via un produit en croix
      float tension = valeur * (5.0 / 1023.0);
     
      // Envoi la mesure au PC pour affichage et attends 250ms
      Serial.println(tension);
      delay(200);
     
      digitalWrite(9,LOW); //Arreter la modulation
    }
     
     
    //Si le code envoi régulièrement sur le port série un nombre (entier ou à virgule) sur une ligne (avec Serial.println()), vous pouvez demander au logiciel Arduino de vous tracer 
    //un graphique en temps réel de ces valeurs. Le traceur s'active dans le menu outils -> traceur série Vous pouvez choisir la vitesse de communication du port série avec la liste de sélection en bas du graphique.
    Seulement avec ce programme j obtiens de belle sinusoïde que en basse fréquence (genre 300Hz ) en haute fréquence ( 1kHz à 2kHz ) j ai des tracé qui sont impossible a analysé

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    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 252
    Par défaut
    Bonjour,
    Je ne vois pas de relation entre la tension mesurée int valeur = analogRead(A0); et le PWM généré analogWrite(9,191);, est ce normal ?

    Qu'est ce que tu as mis comme filtre passe bas après le PWM pour l'intégrer afin de le transformer en sinus ?

    Nous sommes d'accord, tu souhaites faire ceci ?

    Nom : STM32-PWM-DAC-DMA-Sine-Wave-Generation.jpg
Affichages : 894
Taille : 54,7 Ko

  3. #3
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 630
    Par défaut Sens ?
    Bonjour,

    A moins que ce ne soit l'inverse ? Une sinusoïde lente (superposée à 2.5V) se présente en entrée et est affichée sur le moniteur série en mode tracé de courbe ?

    Si le moniteur série est chargé de présenter la sinusoïde, le analogWrite ne sert donc à rien.

    Si ça marche effectivement jusqu'à 300 Hz, il faut déposer un brevet et effacer Nyquist et Shannon des livres de traitement du signal. Avec une pause de 200 ms la fréquence maximale d'échantillonnage est au plus de 5 Hz. Il en résulte que la sinusoïde doit avoir une fréquence inférieure à 2,5 Hz pour être correctement (et encore !) reproduite.

    Par ailleurs, le convertisseur prend 100 us, donc même en faisant sauter le délai de 200 ms il n'est pas possible de dépasser 5 kHz sur un Arduino et il faut remarquer que la fréquence d'échantillonnage effective est alors assez peu connue.

    Enfin, pour avoir une représentation correcte, il est inutile de faire la conversion en tension car cela ne donne rien de plus.

    L'hypothèse de Vincent forme un problème plus intéressant (PWM en entrée décodé pour récupérer les valeurs d'une sinusoïde) surtout si le filtrage doit être numérique

    Salutations

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2021
    Messages : 2
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Bonjour,
    Je ne vois pas de relation entre la tension mesurée int valeur = analogRead(A0); et le PWM généré analogWrite(9,191);, est ce normal ?

    Qu'est ce que tu as mis comme filtre passe bas après le PWM pour l'intégrer afin de le transformer en sinus ?

    Nous sommes d'accord, tu souhaites faire ceci ?

    Nom : STM32-PWM-DAC-DMA-Sine-Wave-Generation.jpg
Affichages : 894
Taille : 54,7 Ko
    int valeur = analogRead(A0) ca permet de prendre comme entré A0 (une entrée analogique) et analogWrite(9,191) c'est pour prendre en sortie une sortie PWM ici 9 a 75% -> 191 sur 255 pour pas prendre de risque et il n y a pas forcément de relation c'est une sorte d'initialisation. Je n ai pas encore mis de passe bas dans mon montage c'est peut être due à ça ? Oui je souhaite bien faire ce que vous avez montrer sur la photo. En tout cas merci pour votre aide et votre temps pris a me répondre !

  5. #5
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    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 252
    Par défaut
    Bonjour,
    Sans filtre passe bas pas d'intégration possible pour fabriquer un sinus a partir d'un signal PWM.

    Je vais essayer de faire court malgré qu'il y ait beaucoup de choses à écrire. Le filtre passe bas va servir à extraire la valeur moyenne du PWM, d'un point de vu fréquentielle le filtre atténue tout ce qui est après la composante continue à F0 pour ne garder qu'elle, afin d'avoir une tension continue. Comme cette tension continue réagit au rapport cyclique du PWM, on peut la faire augmenter et diminuer, et si on va assez vite on peut reproduire une sinusoïde.

    Quand on applique un échelon de tension (à gauche, par exemple le front d'un PWM) à un filtre passe bas, on obtient une la réponse exponentielle de droite (si tu observes bien tu peux deviner dans l'image de mon précédent message, une multitude de morceau de cette forme exponentielle.)
    Pièce jointe 608753

    Le filtre passe bas doit être calculé de telle sorte qu'il ne sélectionne que la composante continue qui se trouve dans le carré rouge et pas la fondamentale et les harmoniques, qui provoqueraient de l'ondulation car la fondamentale et les harmoniques sont des sinusoïdes.

    Nom : ScreenImage 6.png
Affichages : 401
Taille : 30,6 Ko

    Sur mon oscillo, partie basse de l'écran (qui est un zoom de la partie haute) on voit un signal en vert, c'est un PWM 0-5V tel qu'il sortirait d'un Arduino UNO ; la fréquence est de 1kHz et le rapport cyclique est de 10%. En dessous on voit un trait orange (en fait il est rose mais j'ai placé un curseur orange dessus pour le mesurer), c'est une fonction mathématique de type "filtre passe bas" de fréquence de coupure 40Hz.

    Pour facilité la mesure j'ai placé la valeur Max(M) en bas de l'écran de l'oscillo.


    PWM à 10%, Max(M) = 470mV

    Nom : ScreenImage 7.png
Affichages : 398
Taille : 33,9 Ko

    PWM à 50%, Max(M) = 2.45V (le trait orange est plus haut que dans l'image du dessus)

    Nom : ScreenImage 8.png
Affichages : 393
Taille : 33,3 Ko

    PWM à 90%, Max(M) = 4.43V (le trait orange est plus haut que dans l'image du dessus)

    Nom : ScreenImage 9.png
Affichages : 388
Taille : 33,0 Ko


    Donc si on regarde à un instant "T", comme avec un multimètre, un PWM qui passe dans un filtre passe bas bien dimensionné peut générer un signal continue de 470mV->2.45V->4.43V. Si dans ton arduino tu aurais une variable PWM qui ne prendrait que 3 valeurs (10%, 50% et 90%) qui croissent puis décroissent indéfiniment on aurait en sortie du filtre 470mV->2.45V->4.43V->2.45V->470mV->470mV->2.45V->4.43V ...

    Fait des essais


    ps : dans l'image que j'ai posté dans le message précédent c'est le principe de l'ampli classe D

  6. #6
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 630
    Par défaut Simuler
    Bonjour,

    Pour illustrer le filtrage :
    Nom : 21-11-17 09h50mn50s PWM.png
Affichages : 377
Taille : 41,3 Ko
    C'est un simulation de deux filtres RC placés l'un après l'autre.
    • Le signal 0 est l'entrée analogique.
    • Le signal 1 est le PWM résultant de la modulation par le signal 0
    • Le signal 2 résulte du premier étage de filtrage du signal 1
    • Le signal 3 résulte du premier étage de filtrage du signal 2, il est donc le filtrage à l'ordre 2 du filtrage du signal 1 (PWM)


    On constate une perte d'amplitude sauf bien sûr sur la composante continue et un déphasage relativement à la sinusoïde d'origine. On voit aussi que le signal résultant n'est pas parfait et qu'un filtrage plus sérieux ne serait pas de trop. Cela illustre aussi pourquoi il est intéressant d'utiliser un PWM de fréquence élevée par rapport au signal modulant.

    Salutations

Discussions similaires

  1. Console vide lors de mon exécution
    Par mickl1722 dans le forum Eclipse C & C++
    Réponses: 1
    Dernier message: 08/09/2011, 22h56
  2. petite soucis esthethisme dans mon menu
    Par bullrot dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 17/06/2010, 16h44
  3. erreur xml générée lors de mon script php
    Par NicoO_O dans le forum Langage
    Réponses: 1
    Dernier message: 30/03/2009, 16h28
  4. Problème de base de données lors de mon stage
    Par mmanta1 dans le forum Sécurité
    Réponses: 3
    Dernier message: 09/06/2007, 21h15
  5. plantage lors de mon free
    Par salseropom dans le forum C
    Réponses: 16
    Dernier message: 17/02/2006, 18h43

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