Ce que vous allez faire
Nous allons nous intéresser à 2 techniques de conversion numérique-analogique qui vous permettront de mobiliser les connaissances acquises sur le GPIO et sur les timers.
Un convertisseur numérique-analogique est un dispositif qui convertit un nombre binaire en un signal analogique. Le terme anglais est DAC (Digital-to-Analogue Converter). Les DAC sont abondamment utilisés dans le domaine de l'audio, où tout est désormais numérisé.
Les DAC audio ont une résolution élevée (souvent 16 bits) pour une restitution audio fidèle. Dans certains cas, on peut cependant se contenter de dispositifs beaucoup plus rudimentaires et ce sont 2 DAC de cet acabit que nous allons mettre en œuvre.
Dans les 2 exercices ci-dessous, vous utiliserez votre fidèle bouton poussoir pour faire varier la valeur de la tension de sortie par paliers. De cette façon, vous pourrez utiliser tranquillement votre multimètre pour relever la courbe de la tension de sortie en fonction de la grandeur d'entrée et la comparer à la courbe théorique.
Avant de faire vos mesures, vérifiez la tension d'alimentation de votre carte. Il est très fréquent qu'elle soit sensiblement inférieure à 5V sur un port USB. Dans ce cas, tracez votre courbe théorique en utilisant la tension d'alimentation réelle.
DAC basé sur une échelle R-2R
Le câblage à réaliser est le suivant :
Nous avons ici un DAC avec une résolution de 4 bits, mais ce principe est généralisable à un nombre quelconque de bits. Ici, PC0 est le bit de poids le plus faible (LSB) et PC3 celui de poids le plus fort (MSB). Si vous vouliez un DAC 8 bits, vous devriez rajouter des résistances comme ci-dessous :
Notez que nous avons utilisé ici des résistances de 5.1kΩ par souci de simplicité, parce que c'est la valeur normale la plus proche de la valeur théorique de 5kΩ. Cependant, si vous n'avez pas de résistance de 5.1kΩ, vous pouvez utiliser 2 résistances de 10kΩ en parallèle à la place, ce sera pile-poil la bonne valeur.
Au niveau du code, vous devrez détecter les appuis sur le bouton poussoir pour incrémenter la valeur envoyée sur les lignes de GPIO PC0..PC3. La variable variera donc de 0 à 15 par pas de 1 puis reviendra à 0. A l'aide de votre multimètre, vous prendrez une mesure de la tension de sortie pour chaque valeur, tracerez la courbe correspondante et la comparerez avec la valeur théorique donnée par une règle de trois. Vous pouvez envoyer sur le terminal la valeur de votre variable pour être sûr de ce que vous observez.
A titre indicatif, voici les résultats que j'ai obtenu. Le fichier LibreOffice est ici.
DAC basé sur la PWM
Le câblage à réaliser est le suivant :
Au niveau du code, vous devrez détecter les appuis sur le bouton poussoir pour incrémenter la valeur du rapport cyclique. La variable variera de 5 à 95 par pas de 5% puis reviendra à 5. A l'aide de votre multimètre, vous prendrez une mesure de la tension de sortie pour chaque valeur de rapport cyclique, tracerez la courbe correspondante et la comparerez avec la valeur théorique donnée par une règle de trois. Vous pouvez envoyer sur le terminal la valeur du rapport cyclique pour être sûr de ce que vous observez. Vous calculerez la valeur du prescaler pour que la fréquence de votre signal PWM soit d'environ 25kHz.
A titre indicatif, voici les résultats que j'ai obtenu. Le fichier LibreOffice est ici.
Prolongements
Si le cœur vous en dit, vous pouvez étendre votre code pour générer un son, par exemple une onde triangulaire à 880Hz (un La 5), comme illustrée ci-dessous. Reliez un kit piéton à la sortie du DAC pour écouter le résultat. Avec le DAC R-2R, vous aurez besoin d'un timer pour séquencer les valeurs de la courbe. Avec le DAC PWM, vous pourrez utiliser les débordements du compteur.