entree-analogique.ino

Arduino Portenta H7 · Fichier : entree-analogique.ino · Langage : Arduino · Usage : Lire une entrée analogique 12 bits avec moyenne

L'ADC 12 bits du H7 offre seize fois la résolution des Uno classiques. La fenêtre glissante de 16 mesures donne des tensions stables pour un capteur industriel 0-3,3 V ou un diviseur de batterie.

Matériel requis

Une Arduino Portenta H7 (module ST STM32H747 double cœur Cortex-M7 @ 480 MHz + M4 @ 240 MHz, 8 Mo SDRAM, connecteur haut-density), alimentée par USB-C ou 5 V. 1 potentiomètre 10 kΩ pour tester (ou capteur 0-3,3 V).

Câblage

Curseur sur A0, extrémités sur 3V3 et GND. Entrée strictement ≤ 3,3 V (les broches ne sont pas 5 V tolérantes côté ADC).

Fonctionnement

analogReadResolution(12) exploite toute la conversion ; la moyenne logicielle divise le bruit par 4. Référence de conversion 3,3 V.

Exécution

Arduino IDE avec le core « Arduino Mbed OS Portenta Boards » : choisir « Portenta H7 » (cœur M7), le port USB-C puis Téléverser. Le sélecteur M7/M4 du mode DFU permet de charger aussi le cœur M4.

Variantes

Échantillonner en DMA (API Mbed ADC) pour un flux rapide, ou caler une référence externe pour la précision.

entree-analogique.ino

// ADC 12 bits (0..4095) sur A0 avec moyenne glissante.
const int CANAL = A0;
const int NB = 16;

uint16_t fenetre[NB];
int idx = 0;
bool plein = false;
unsigned long t0 = 0;

void setup() {
  analogReadResolution(12);
  Serial.begin(9600);
}

void loop() {
  if (millis() - t0 < 100) return;
  t0 = millis();

  fenetre[idx] = analogRead(CANAL);
  idx = (idx + 1) % NB;
  if (idx == 0) plein = true;
  int n = plein ? NB : idx;
  if (!n) return;

  uint32_t somme = 0;
  for (int i = 0; i < n; i++) somme += fenetre[i];
  uint32_t moyenne = somme / n;

  float tension = moyenne * 3.3f / 4095.0f;
  Serial.printf("brut=%lu  U=%.3f V\n", moyenne, tension);
}

← Retour à la fiche