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....
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....
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?
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....
Bonjour
Oui, c'est simple à faire.Envoyé par jeannot27
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.
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)
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; }
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
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; } }
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
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
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!
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 !
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"
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 !
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.
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 ?
Partager