pwm-respiration.ino

Arduino Portenta H7 · Archivo : pwm-respiration.ino · Lenguaje : Arduino · Uso : Respiration LED avec PWM haute fréquence

Los temporizadores del H7 alcanzan frecuencias PWM muy por encima de los AVR: 100 kHz aquí, ideal para filtrar a tensión analógica real con un simple RC. La curva gamma mantiene la respiración natural.

Hardware

Un Arduino Portenta H7 (módulo ST STM32H747 doble núcleo Cortex-M7 @ 480 MHz + M4 @ 240 MHz, 8 MB SDRAM, conector high-density), alimentado por USB-C o 5 V. 1 LED + resistencia de 330 Ω (pines de 3,3 V).

Cableado

LED + 330 Ω entre D9 y GND. Para una tensión analógica suave: RC 10 kΩ / 100 nF tras el pin.

Funcionamiento

analogWriteFrequency reconfigura el temporizador Mbed; analogWrite aplica el ciclo de trabajo. El bucle sube en triángulo con gamma 2,2 cada 10 ms.

Ejecución

Arduino IDE con el core « Arduino Mbed OS Portenta Boards »: elige « Portenta H7 » (núcleo M7), el puerto USB-C y Subir. El selector M7/M4 del modo DFU permite cargar también el núcleo M4.

Variantes

Usar el DAC real (salida A0) para una tensión continua, o controlar un motor DC con PWM de 20 kHz.

pwm-respiration.ino

// Respiration LED sur PWM D9, frequence relevee a 100 kHz.
const int LED = 9;

float niveau = 0, pas = 0.02;
unsigned long t0 = 0;

void setup() {
  pinMode(LED, OUTPUT);
  analogWriteFrequency(LED, 100000);  // 100 kHz : hors spectre audible
  Serial.begin(9600);
}

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

  niveau += pas;
  if (niveau >= 1.0f) { niveau = 1.0f; pas = -pas; }
  if (niveau <= 0.0f) { niveau = 0.0f; pas = -pas; }

  analogWrite(LED, (int)(powf(niveau, 2.2f) * 255));
}

← Volver a la ficha