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

C++Builder Discussion :

Simuler un signal PWM [Non suivi]


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 115
    Par défaut Simuler un signal PWM
    Bonjour,
    Peut simuler facilement un signal PWM via le port serie ou parallèle d'un PC le tout avec borland c++?
    Merci de votre aide....

  2. #2
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 136
    Par défaut
    Je suppose que tu demande si on peut faire un signal PWM avec le port RS232 ou //.

    Déjà, pourrais tu en dire plus sur ton signal PWM?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 115
    Par défaut
    Oui c ca exactement. Je veux pouvoir envoyer un PWM(frequence entre 10 et 500Hz) sur le port serie au pourcentage choisi dans un text ou combo peut importe. Merci de votre aide....

  4. #4
    Rédacteur
    Avatar de dvsoft
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2002
    Messages : 176
    Par défaut Re: Simuler un signal PWM
    Bonjour

    Citation Envoyé par jeannot27
    Bonjour,
    Peut simuler facilement un signal PWM via le port serie ou parallèle d'un PC le tout avec borland c++?
    Merci de votre aide....
    Oui, c'est simple à faire.

    Tu calcul quelle est la période de ton signal, pour connaître la durée de chaque état, et tu affecte cette valeur à ton timer. Sur chaque événement OnTimer, tu change l’état du signal de sortie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void __fastcall TForm1 :PWMTimerTimer(TObject* Sender)
    {
    	static bool bPWM = false;
     
    	bPWM = ! bPWM;
    }
    Et si ton signal n’est pas un signal carré, tu change la valeur de la property interval de ton timer a chaque fin de demi periode. (Haut,Bas)

    Tu peux utiliser par exemple, le signal DTR comme bit de sortie. Il existe des composants gratuits pour piloter le port serie.

    TComport:
    http://petit.developpez.com/serie/cours_tcomport/

    Async Pro
    http://sourceforge.net/projects/tpapro/


    Voila, bon courage
    ALain

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 115
    Par défaut
    En fait je fais un champ ou l'utilisateur va donner le pourcentage du PWM, un bouton générer et voila....J'aimerais travailler avec un signal de periode 20ms.....est ce possible d'echantilloner a cette frequence via la pin RTS du port serie ?
    Merci
    mon code dans le Timer:
    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
     
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
        if(high == true)
        {
           ComPort1->SetRTS(true); //Mise à +15V de RTS
           high = false;
           Timer1->Interval = StrToInt(Edit1->Text)* 0.2 ;
        }
        else
        {
           ComPort1->SetRTS(false); //Mise à -15V de RTS
           high = true;
           Timer1->Interval =  20 - StrToInt(Edit1->Text)*0.2;
        }
    }

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 26
    Par défaut
    Bonjour,

    Une période de 20ms sous windows, c'est chaud!.

    Même si tu peux théoriquement obtenir cette période, tu n'auras jamais une stabilité suffisante pour générer un rapport cyclique constant.
    Pour t'en convaincre :
    Supposes que tu désires une précision de 10% (je ne suis pas exigeant)
    imaginons que ta sortie soit réglée sur 10%, ton T_ON devrait avoir une durée de 2ms +/- 0,2ms. A ma connaissance, il est impossible d'obtenir cette précision sous Windows.

    Si tu travailles sur une application professionelle, je te conseille plutôt d'utiliser un petit automate programmable en liaison avec ton soft PC.
    Tu trouveras facilement des modèles très bon marché intégrant une fct PWM. Il existe aussi des cartes PCI spécialisées qui implémentent ce type de fonctionalité.

    Dans tous les cas, la précision d'un TTimer ne suffit pas pour travailler correctement à une période aussi basse.

    Bruno

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 115
    Par défaut
    En faisant des essais, je suis arrivé a 200ms de periode pour avoir un PWM clair a 50% (donc en fait 100ms un changement d'etat toutes les 100ms...)
    comment optimiser le code pour realiser le moins d'operations possible dans le timer... car c'est lui qui met le bordel non? si j'ai mon Timer reglé sur 100ms par ex, il faut que les operations contenus dans le timer mettent moins de 100ms...non? comment exterieuriser du code hors du timer?
    Merci

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 26
    Par défaut
    Bonjour,

    Il est vrai qu'un TTimer n'est pas forcément la bonne méthode pour obtenir les meilleures performances en termes de résolution et de précision.

    Il y a eu des posts récents à ce sujet ici.
    Pour ma part, j'ai fait des essais avec les différentes technos possibles (QueryPerformanceCounter, mdi...), mais le meilleur résultat que j'ai pu obtenir c'est par un simple thread et un bon dosage de GetTickCount et de Sleep dans la méthode Execute du thread.

    Mais ton problème de fond n'est pas ici. Il vient tout simplement du système d'exploitation qui ne permet pas de descendre aussi bas en période, tout au moins pour ton application qui exige :
    - Une période relativement stable.
    - Un rapport cyclique TRES stable.
    Ce qui est impossible à atteindre sous Windows avec T=20ms!

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    En supposant que l'on puisse utiliser le MIDI, on devrait obtenir une bonne
    précision. Il suffit de fixer les paramètres du métronome en conséquence.

    L'astuce, si cela en est une, consisterait à utiliser une callback pour transmettre
    les messages MIDI (ponctuels). Le cycle s'appuie sur un note_on suivit d'un note_off,
    en boucle, dont les durées respectives règlent la symétrie du signal.

    Le signal MIDI est transmis sur son propre port de sortie et de ce fait, on peut,
    normalement, se servir de ce processus pour travailler simultanéement sur l'un des
    ports SERIE.

    Par contre... c'est du genre "usine à gaz" !!!

    A plus !

  10. #10
    Membre très actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Par défaut
    Le plus simple serait à mon avis de piloter un petit NE555 qui génèrerait le signal PWM, en fonction de la tension moyenne présente sur une broche du port parallèle ou du port série ou autre ( un condensateur en parralèle avec une résistance pour moyenner, relié à un transistor sur le controle du NE 555 ).

    De manière général, si tu voix les mots "rapides", "précis" et "PC" dans la même phrase, tu peux te faire du soucis ^^

    En revanche, il existe un composant TIMER plus performant que le standard donné par Borland ... je n'ai plus le nom en tête, je vais essayer de le retrouver.

    S'il ne manque pas bcp de précision pour que ca marche, c'est peut-etre une solution.


    [Edit] j'ai trouvé : http://www.ciemmesoft.com/componenti/categorieing.asp?ID=13&PAG=1&LANG=2&ORD=1&QTA=10

    J'ai jamais testé par contre, mais d'après les commantaires tu peux tapper dans le 0.1ms ( Ca me laisse perplexe quand même, ils se sont peut-etre planté d'un zéro mais c'est à essayer)

    " This component provides timing accurate to 0.0001 seconds. The timer can trigger events at a stable speed"

  11. #11
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Ici il semble qu'il faille générer ce signal depuis un PC sur un port série.

    Si le sujet peut être décliné sous forme de réalisations électroniques discrètes ou
    non, alors on a le choix quant aux circuits intégrés à utiliser mais on n'est plus
    vraiment sur le bon forum !

    D'ailleurs un simple 555... ça me laisse un peu perplèxe compte tenu de la fréquence
    et de la symétrie. La fréquence d'un 555 n'est-elle pas liée au temps de charge et de
    décharge.. donc... toute variation de symétrie devrait se traduire inévitablement par
    une variation de fréquence... et ça supposerait donc une usine à gaz hardware, pour la
    précision).
    Autant prender un xr2206 ou un ic8038 ou directement un DCO ou un µC et dans ce cas précis,
    la liasion série ne servirait plus qu'à transmettre la fréquence et le rapport de symétrie
    à un dispositif doté, lui, d'un ou plusieurs timers de précision.
    Mais là, ça devient de la plomberie (et pour ceux qui le prendraient mal... mon fer à souder
    n'est jamais très loin !) !

    Si l'objetcif est de générer un signal carré asymétrique BF, dans ce cas on peut le faire
    directement via la carte son ! La précision est alors liée à la fréquence d'échantillonnage.
    Reste à savoir, ici, comment le signal est exploité et quelle est l'importance de la précision
    dans le traitement en aval ! Tout comme le MIDI, l'AUDIO implique également une mise en oeuvre,
    donc du développement !


    A plus !

  12. #12
    Membre très actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Par défaut
    haaa, la carte son c'est pas bête du tout comme idée ... par contre faut regarder ce que ca rend au niveau fréquence, parceque la carte coupe la BF mais je sais pas à combien ... 50 Hz ? ca fait du 20ms ... ouai ca doit passer.

    Autre problème, la tension de commande, est-ce que la carte son délivre qq chose de suffisent ?
    S'il faut rajouter un Aop en comparateur derrière, autant reprendre l'idée du NE.

    sinon ya des cartes qui échantillonnent jusqu'à 96 kHz et même au-delà ( 44kHz pour les standards ).

    Concernant le NE555, oui c'était pour le principe, mais si c'est pour commander un moteur ou un servomoteur, on fait des miracles avec ses petites bestioles, avec des composants stables en températures et une carte bien isolée CEM pour les parasites.
    Mais c'est vrai qu'on est vraiment vraiment limite. La solution exar est la meilleur je suis de ton avis aussi.

    L'avantage c'est que c'est du low cost ^^, si on commence à mettre du µC là dedans, le prix décole toute suite.

    Mais j'y pense, j'avais piloté 8 servomoteurs en PWM il y a quelques années avec les 8 DATA du port parallèle ... c'était en Borland TurboC sous DOS mais je me rappel que j'avais des problèmes de stabilité du signal qui m'avait poussé à couper l'alimentation des moteurs après mise en position aproximative.

    J'avais attribué cela aux parasitage du PC ( ca rayonne pas mal ces bestioles ) mais maintenant qu'on en parle, à tout les coups c'était un problème de stabilité en fréquence du au timer qui était pas super synchro.
    On a donc une fois de plus la preuve de la limitation du TIMER interne d'un PC.

  13. #13
    Membre très actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Par défaut
    Au plus j'y pense au plus je me dit que la carte son c'est pas bête du tout.

    Faut juste rajouter un comparateur derrière pour réhausser le signal peut-etre car la tension de commande doit être en 5 ou 10v je suppose ?
    (je sais pas combien ca sort une carte son).

    C'est plus simple que les autres solutions, par contre pour avoir un signal de 10 Hz de période ... j'ai peur que ce soit trop coupé par le filtre de la carte son, tu en penses quoi ?

Discussions similaires

  1. [L.V.9] signal PWM
    Par projetelec dans le forum LabVIEW
    Réponses: 4
    Dernier message: 17/06/2011, 16h21
  2. [LV 10.0] Simuler un signal sans vi express
    Par kalisha stark dans le forum LabVIEW
    Réponses: 7
    Dernier message: 31/05/2011, 09h33
  3. Signal PWM sous simulink
    Par prince013 dans le forum Signal
    Réponses: 0
    Dernier message: 06/12/2009, 15h27
  4. Réponses: 6
    Dernier message: 21/07/2008, 18h42
  5. Comment simuler un signal souris
    Par shiin dans le forum Linux
    Réponses: 1
    Dernier message: 12/09/2006, 09h03

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