🛠 Acquitter un microphone PDM externe
Objectifs
Acquitter un flux audio PDM (Pulse Density Modulation) depuis un microphone MEMS externe connecté sur les broches exposées du Nicla Sense ME, puis transférer les échantillons décodés vers le port série. Le nRF52832 embarque un périphérique PDM matériel, et le core mbed l'expose en principe via la bibliothèque PDM/arPDM utilisée sur les cartes nRF d'Arduino. Ce tutoriel sert aussi d'avertissement documentaire : la base officielle de l'ABX00050 ne référence aucun microphone embarqué, contrairement à d'autres cartes de la famille.
Matériel
- Carte Arduino Nicla Sense ME (ABX00050) et câble micro-USB
- Microphone MEMS PDM (type INMP441 ou équivalent à broches VDD, GND, CLK, DATA)
- > elés ne sont pas non plus documentées : à valider avant tout montage définitif.
- >
Code complet
#include <PDM.h>
short buffer[256];
volatile size_t echantillonsLus = 0;
void onDonneesPDM {
int octets = PDM.available;
PDM.read(buffer, octets);
echantillonsLus = octets / 2;
}
void setup {
Serial.begin(115200);
while (!Serial);
PDM.onReceive(onDonneesPDM);
PDM.setGain(30);
if (!PDM.begin(1, 16000)) { // 1 canal, 16 kHz
Serial.println("Aucun micro PDM detecte");
while (1);
}
}
void loop {
if (echantillonsLus) {
for (size_t i = 0; i < echantillonsLus; i++) {
Serial.println(buffer[i]);
}
echantillonsLus = 0;
}
}
Vérification attendue
Si le périphérique PDM est disponible et le micro correctement câblé, la console série (115200 bauds) déverse des échantillons PCM 16 bits ; taper dans les mains produit des pics visibles. Sans micro, PDM.begin échoue et le message d'erreur s'affiche, ce qui est déjà une vérification utile du montage.
Erreurs fréquentes
- Confondre PDM et I²S : un micro PDM ne sort pas du PCM horodaté classique ; l'horloge CLK doit rester continue, sous peine de zéros ou de bruit blanc.
- Alimentation du micro inadaptée : le cœur de la carte fonctionne en 1,8 V et les broches externes sont traduites (VDDIO_EXT 1,8-3,3 V) ; vérifier la compatibilité du niveau CLK du micro choisi.
- Inverser CLK et DATA : symptôme typique, un signal constant à zéro ou un bruit parfaitement aléatoire.
- Oublier que le flux est exigeant pour le CPU : à 16 kHz, un envoi série échantillon par échantillon ne tient pas la cadence ; envoyer par paquets ou réduire le débit d'affichage.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_rgb.inoArduinoimu_bhi260.inoArduinorotation_fusion.inoArduinopression_bmp390.inoArduinonose_electronique.inoArduinoboussole_bmm150.inoArduino