Génération d'une fréquence précise via carte son en C

Génération d'une fréquence précise via carte son en C - C - Programmation

Marsh Posté le 14-11-2008 à 03:02:30    

Bonjour à tous!
 
Je cherche à contrôler 2 servo-moteurs (pour asservir une webcam) via la carte son de mon PC (le système en sortie est déjà fait et fonctionne très bien)
Je génère actuelle 2 signaux PWM (pour contrôler les moteurs) via Audacity. Ils s'agit simplement de deux signaux de période 18 ms avec un temps « haut » de 1,5 à 2,5 ms comme le montre l'image ci-après.  
http://www.bricotronique.com/montages/servosound/principe.png
et ci-après les signaux sous Audacity!
http://www.bricotronique.com/montages/servosound/Audacity.png
 
J'aimerai désormais générer ces signaux son avec un programme en C (je suis ouvert à d'autres langages mais ayant un programme en C en amont pour l'acquisition de données, je préfererai rester avec ca! :) ). Bien sûr ces signaux doivent être générer en temps-réel par le prog car ce sont est eux qui permettent de contrôler les servo-moteurs et donc changerons en permanence, je ne veux donc pas générer de fichier .WAV ou autre à lire.  
 
J'ai fait pas mal de recherche sur le net mais pour le moment sans succès!!!
Je vous remercie beaucoup pour toutes les pistes que vous pourrez m'indiquer!
 
 
 

Reply

Marsh Posté le 14-11-2008 à 03:02:30   

Reply

Marsh Posté le 14-11-2008 à 07:01:41    

Salut à toi,
 
Juste par curiosité, pourquoi utilises-tu des sigaux son pour controler ton servo-moteur? il se commande avec la sortie audio de ton PC uniquement?
 
J'ai vu rapidement l'existence d'une biblothèque <mmsystem.h> pour Windows qui semble descendre en suffisament bas niveau pour gerer tes fréquences.
 
A tester...


Message édité par h0taru le 14-11-2008 à 07:09:09
Reply

Marsh Posté le 14-11-2008 à 10:11:10    

Si il utilise ça je pense que c'est tout simplement parce que un son qui sort d'une carte son est un simple signal analogique tout bête. Tu lui fais passer ta sinusoïde/signal carré/rampe et c'est fini.
 
Après je ne sais pas comment faire ton truc :D

Reply

Marsh Posté le 14-11-2008 à 12:26:38    

Si c'est juste pour generer un signal il peut utiliser en théorie toutes tes sorties. Ce genre de programmation se trouve simplifiée sous Linux où les périphériques sont considérées comme des fichiers et où la glibc donnent toutes les fonctionnalités. Juste besoin d'utiliser par exemple outb(), les bons droits d'acces et des compteurs pour la fréquence.

Reply

Marsh Posté le 23-01-2009 à 19:47:45    

Bonjour  :hello:  
je voudrais savoir si tu as réussi à faire ton programme.
Je suis confronter au même probleme sauf que je dois génerer un signal ppm pour controler une radio et non directement les servos...
J'ai également penser à utiliser audacity pour tester mais je n'ai pas essayer (encore). A priori la carte son peut generer un signal de 20 khz ce qui est suffisant.
Pour ce qui de la programmation je suis en train d'essayer d'utiliser la fonction waveOutWrite() en c
Es tu arrivé à quelques choses?   :heink:  
 

Reply

Marsh Posté le 09-02-2009 à 09:17:14    

la librairie FMOD permet de faire ça. Moi j'avais généré des sinusoïdes avec les fréquences de mon choix avec changement en temps réel. De mémoire il y a un objet qui s'appelle oscillator dans cette librairie.

Reply

Marsh Posté le 09-02-2009 à 22:19:41    

Et, par curiosité, les cartes son n'ont pas de problème pour sortir des signaux carré ?
 
J'avais bidouillé des trucs pour générer du son en temps réel à une époque, et je crois que winmm permet effectivement de faire ce qu'on veut. De mémoire, il y a deux buffers (ou plus) ; on en remplit un pendant que la carte son est en train de sortir l'autre, ensuite on est notifié par une callback quand il faut remplir un nouveau buffer, etc. Du point de vue logiciel, on est absolument libre de générer le signal qu'on veut. Par contre il y a une latence qui dépend de la taille des buffers, des drivers et de la carte son, mais ça doit être de l'ordre de la centaine de millisecondes, donc pour contrôler des servo pas de soucis.


Message édité par youen le 09-02-2009 à 22:21:38
Reply

Marsh Posté le 12-02-2009 à 14:31:19    

bah tu peux prendre fmod, la sdl, ou autre.
 
Après tu auras le filtre passe-bas après le convertisseur, mais si avec Audacity et un oscillo tu vois que tu as ce qu'il te faut sur les cas extrêmes, ça devrait aller.


Message édité par bjone le 12-02-2009 à 14:31:48
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed