Problème de précision d'un DDS à très basses fréquences

8

Pour la première fois de ma vie, j'utilise cette puce DDS (AD9850) pour créer une onde sinusoïdale à la fréquence souhaitée, où je télécharge le code de la table de recherche et la fréquence souhaitée. commande via un avec micro-contrôleur. Donc, mes connaissances pour le moment sont très limitées.

La chose semble bien jusqu'à présent, mais le problème se situe à des fréquences très basses. À 1 Hz et même 0,5 Hz semble bien. Mais j'ai aussi besoin de jusqu'à 0,1 Hz.

Voici la sortie du DDS lorsque j'envoie le chiffre 0,1 au DDS via le micro contrôleur:

entrez la description de l'image ici

Dans mon code, j'envoie la commande du PC au micro sous forme de chaîne et la convertis en double. Mais pour plus de simplicité et pour vérifier, j'utilise ce code , et pour 0,1 Hz, je mets sendFrequency (0,1) dans la boucle.

Mais comme vous le voyez, la période est d'environ 11,5 secondes au lieu de 10 secondes pour la commande 0,1 Hz.

J'espère que je pourrais bien expliquer le problème. Existe-t-il un moyen de calibrer ou d'affiner cela afin d'avoir un résultat plus précis? Ou devrais-je vivre avec la précision? Btw où dans la fiche technique on peut se référer à une telle incertitude relative?

floppy380
la source
1
alors, quel est le mot de contrôle que vous envoyez à la puce DDS, et quelle est l'horloge de référence que vous utilisez pour la puce DDS? À quoi vous attendiez-vous et à quelle distance se trouvent ces 11,5 s? Nous aurons besoin de beaucoup plus de connaissances sur votre système!
Marcus Müller
@ MarcusMüller J'utilise ce code softgeniedoc.dk/contents/projects/AD9850_tonegen/AD9850.html juste un peu modifié mais le noyau est le même. Je ne pourrais pas déduire quelle est l'horloge utilisée à partir du code. J'ai fourni le code et la puce de quoi d'autre vous avez besoin plus laissez-moi vous fournir.
floppy380
vous avez connecté la puce à une horloge de référence. Vous êtes littéralement le seul au monde à pouvoir nous dire quelle est l'horloge de référence; le circuit est assis devant vous, pas devant nous!
Marcus Müller
Oh je vois que je pensais que c'était corrigé ou changé par le code. Je vais mesurer et revenir.
floppy380
Il s'agit de ce module telecnatron.com/modules/ad9850/index.html donc il semble 125MHz
floppy380

Réponses:

9

Ce n'est pas une question de précision, c'est une résolution.

Le recto de la fiche technique spécifie une résolution de réglage de 0,0291 Hz avec une horloge de 125 MHz.

0,0291125×dix6232 Hz (puisque l'accumulateur de phase est de 32 bits)

Cela représente donc environ 30% de la fréquence de sortie souhaitée. Cela vient du résultat de l'ajout du LSB du mot de réglage à l'accumulateur de phase à 125 MHz - pour une fréquence d'horloge donnée, il est inhérent à la puce et au nombre de bits qu'ils ont choisis pour l'accumulateur de phase et le mot de réglage.

Vous pouvez essayer de réduire la fréquence d'horloge - le minimum est de 1 MHz, vous devriez donc être en mesure d'améliorer la résolution de plus de deux ordres de grandeur, à environ +/- 0,23% à 0,1 Hz.

0,23×dix-31×dix6232 Résolution Hz avec une horloge de 1 MHz

Malheureusement, d'autres choses vont devoir changer pour des performances optimales (en particulier le filtre de sortie - qui est généralement un filtre LC elliptique du 7e ordre sur ces modules).

Si vous n'avez jamais besoin d'aller au-dessus, disons, 1 Hz, vous pouvez simplement ajouter un filtre RC avec une coupure de, disons, 100 Hz à la sortie existante et il sera acceptable à de nombreuses fins.

Spehro Pefhany
la source
1
Rien ne divise le 125 MHz de ce que je peux voir (à part le DDS lui-même, bien sûr). Vous devrez dessouder l'oscillateur et le remplacer par un module de fréquence différent (inférieur). Ou désactivez-le et appliquez une horloge externe (elle peut avoir une entrée d'activation ... vous pouvez la rechercher). C'est un changement de matériel.
Spehro Pefhany
1
Oui, bien sûr, mais ils n'ont pas mis suffisamment de bits pour votre application. S'ils avaient ajouté encore 8 bits au mot de réglage et à l'accumulateur de phase, vous seriez heureux (et les personnes qui n'ont pas besoin de fréquences aussi basses devraient payer un peu plus et envoyer plus de bits pour régler le DDS afin qu'elles ne le fassent pas. être aussi heureux).
Spehro Pefhany
1
Correct. Mais il ne prend en charge qu'une horloge de 1 MHz, donc tout n'est pas perdu, même pour votre application. Le filtre de sortie du module (ces inductances, condensateurs et résistances) ne sera pas approprié, donc la sortie aura tendance à être bruyante avec une fréquence d'horloge beaucoup plus faible.
Spehro Pefhany
1
Rien à voir avec les épingles. Mais l'horloge du module et le filtre de sortie sont conçus pour une fréquence fixe de 125 MHz.
Spehro Pefhany
1
@SpehroPefhany - les FG de banc inférieur peuvent utiliser et utilisent des puces DDS premade. De plus, les circuits intégrés comme l' AD9106 peuvent effectuer une génération de forme d'onde arbitraire de type A / FG (taux fixe). (Les plus haut de gamme utiliseraient en effet un FPGA + RAM et un DAC séparé, mais ils sont toujours la même chose de base dans l'âme, juste rouler leur propre implémentation :)
ThreePhaseEel
7

Ce que vous recherchez sur la fiche technique est la résolution d'accord de fréquence. Pour cette puce, elle est de 0,0291 Hz pour une entrée d'horloge de référence de 125 MHz. Votre fréquence sera arrondie à un multiple de ce nombre. Ce nombre est basé sur la fréquence de l'entrée d'horloge de la puce.

Par exemple, 0,1 Hz sera arrondi à 0,0873 Hz (0,0291 * 3). La période pour 0,0873 Hz est de 11,5 secondes, ce que vous voyez.

Une fréquence d'horloge d'entrée plus basse donnera une précision plus élevée à des fréquences plus basses. Donc, si vous souhaitez une meilleure précision à des fréquences plus basses, abaissez la fréquence d'horloge.

Pangus
la source
Comment calculez-vous la fréquence de sortie arrondie? Par exemple, si j'envoie 0,5 à la puce, pouvez-vous montrer quelle formule est utilisée et quelle serait la sortie? Pour que je puisse prédire pour chacun
floppy380
Il arrondit à un multiple de 0,0291. Pour trouver des multiples les plus proches, divisez 0,5 par 0,0291, arrondissez au nombre entier inférieur le plus proche et multipliez par 0,0291. 0,5 / 0,0291 = 17,18 que nous arrondissons à 17. Puis 17 * 0,0291 = 0,4947. Donc, si vous entrez 0,5 Hz, vous verriez en fait 0,4947 Hz
Pangus
Oh bien, je peux même tracer l'erreur en fonction de la fréquence. maintenant
floppy380
@ChrisStratton Oups. Oui tu as raison. J'ai édité ma réponse. Merci
Pangus
1
Vous pouvez faire une modulation de fréquence et une modulation d'amplitude, mais je ne pense pas que vous puissiez changer la table de recherche sur la puce. Si vous êtes intéressé à créer des formes d'ondes arbitraires, alors il pourrait être utile d'examiner une autre puce ou d'obtenir un DAC et d'essayer de créer votre propre DDS
Pangus