2012-08-02 7 views
1

Je programme des périphériques DAC de stm32f2xx. J'ai un tableau d'octets (Sound) & Je voudrais générer un signal avec une fréquence d'échantillonnage = 8K.Générateur de signaux DAC stm32

Maintenant, ma question est: Comment spécifier la fréquence d'échantillonnage?

Note: Je googlé beaucoup. J'obtiens seulement la génération d'onde de trangle et la génération d'onde sinusoïdale en utilisant DMA. Je ne veux pas utiliser DMA.

Merci à l'avance pour l'aide ... Cordialement,

+1

Pensez à poster votre question sur http://electronics.stackexchange.com/ – simon

Répondre

3

Il est pas pratique de jouer des formes d'ondes de la DAC sans utiliser DMA. Vous configurez le DMA avec vos échantillons et vous configurez le DAC pour utiliser une minuterie comme déclencheur. Ensuite, vous configurez votre minuterie pour déclencher à la fréquence d'échantillonnage souhaitée.

1

Je suis d'accord avec TJD qu'en général, il n'est pas pratique de le faire sans DMA, mais ce n'est pas impossible, en particulier à une faible fréquence d'échantillonnage.

On pourrait utiliser un jeu de minuterie pour déclencher toutes les 1/8000ème de seconde comme base de temps fixe. À partir de là, la routine d'interruption devra charger l'échantillon suivant dans le DAC. La fréquence d'échantillonnage peut être modifiée en changeant la base de temps de la minuterie.

Il serait un effort similaire pour écrire le code pour configurer le contrôleur DMA par rapport à l'écriture du code pour déplacer l'échantillon correct dans le tampon. Cependant, l'approche DMA serait plus fiable, possèderait probablement moins d'instabilité dans le taux d'échantillonnage, et libèrerait le noyau pour exécuter d'autres codes qui pourraient être nécessaires. En fait, avec la configuration TIM/DMA/DACs, vous pourrez peut-être arrêter le cœur ou entrer en mode veille pour que les horloges périphériques fonctionnent.

0

oui, je suis d'accord avec TJD aussi. L'utilisation de DMA est efficace et libère l'unité centrale pour d'autres tâches [bonne]

la gestion de la synchronisation dans le logiciel (noyau avec boucle occupée) [mauvaise] ne produira pas de bons résultats. (donc, utilisez la minuterie pour la synchronisation [bonne]).
maintenant pour la copie, vous devez consacrer CPU à faire la copie après un intervalle de temps spécifique (de boucle occupé ou délai d'attente de la minuterie) au CAD registre. [Mauvais]

à la fin que je recommande, connecter DMA et timer, et à la fin du délai, DMA va copier les données dans le registre DAC [bien]. cette solution n'apparaît que difficilement mais en fait beaucoup plus facile à utiliser quand elle est configurée.
[note: écrit en pov de quelqu'un qui essaie de comprendre/commencer quelque chose comme ça]

Questions connexes