Étape 6: Taux d’échantillonnage ~ 40 kHz
Voici une explication simple (tout ce que vous devez savoir pour l’instant) :
Essentiellement dans la fonction setup(), j’ai dit l’Arduino que je veux qu’il en permanence mesurer broches A0 et oublier les autres entrées analogiques tous ensemble. Alors tandis que d’autres choses sont en cours dans la fonction loop(), l’Arduino est constamment mise à jour une variable appelée « ADCH » avec les nouvelles valeurs de A0 à un taux de 38,5 kHz (c’est un échantillon chaque 26us, vous pouvez le voir sur la Fig. 2). Lorsque je veux obtenir une de ces valeurs, que je peux mettre une variable égale à ADCH, ou comme je l’écrivais dans mon code :
incomingAudio = ADCH ;
J’ai eu diminuer la résolution de ces mesures analogiques, un petit peu pour obtenir un taux d’échantillonnage plus élevé. Dans la dernière étape, nous étions en utilisant analogRead() pour mesurer la tension du signal comme une valeur comprise entre 0 et 1023, maintenant, ces valeurs seront toujours entre 0 et 255. En outre, un monitorage continu des A0 signifie que les autres broches analogiques sont désormais inutiles, mais si vous avez vraiment besoin de mesurer un potentiomètre ou un capteur, Découvrez comment vous pouvez faire avec une broche numérique à l’aide de RCTime It n’est possible que les broches analogiques peuvent encore servir de broches d’e/s numériques, mais je n’ai pas testé en fait cela encore, laissez un commentaire si vous l’essayez !
L’explication compliquée (pas nécessaire, mais pour ceux que cela intéresse) :
J’ai manuellement la valeur analogique interne de l’Arduino convertisseur numérique (ADC) à 500kHz et lire une valeur 8 bits d’analogiques 0 d’entrée de l’ADCH directement (je viens de lire les 8 bits les plus significatifs de la 10 bit ADC pour gagner du temps dans le code). J’ai mis le compteur de l’ADC à 500KHz parce que l’ADC prend 13 cycles d’horloge pour lire une nouvelle valeur analogique. 500/13 = ~ 38,5 kHz qui m’énerve assez proche de 40 kHz (taux d’échantillonnage audio standard) sans introduire de bruit supplémentaire. Comme vous pouvez le voir sur la Fig. 2, cela donne moi un échantillon chaque 13/500 000 = 26us. Beaucoup des idées ici (les convertisseurs et les compteurs) sont similaire à la configuration des interruptions de minuterie Arduino, et vous pouvez en savoir plus sur comment cela fonctionne ici.
Comme dans l’étape précédente, j’ai envoyé les valeurs de la variable "incomingAudio" sur un 8 bit DAC pour que je puisse visualiser les données comme il était entreposé dans l’Arduino. Vous pouvez voir le signal entrant (jaune) et de sortie de la DAC (bleu) dans les images ci-dessus. Remarquez combien mieux l’Arduino suit le signal par rapport à la dernière étape. Dans la figure 2, vous pouvez voir que la taille de palier est jusqu'à 26us (comparativement à 125us lorsque vous utilisez analogRead). Encore une fois, vous pouvez voir les effets de la coupure à 0V et 5v sur la Fig. 3.
Le code pour la fréquence d’échantillonnage de 38,5 kHz avec sortie DAC est donné ci-dessous.