respiration.ino

GD32F103 (GigaDevice) — chip + placas compatibles Blue Pill · Archivo : respiration.ino · Lenguaje : Arduino · Uso : Respiration LED avec le PWM du timer

El core STM32F1 enruta analogWrite a los timers materiales: PA1 es el canal 2 de TIM2 y la frecuencia se fija por pin. El LED respira con un PWM de 20 kHz que ni los condensadores oyen.

Hardware necesario

Una placa de desarrollo GD32F103C8T6 (Cortex-M3 a 108 MHz, compatible pin a pin con Blue Pill), alimentada a 3,3 V/5 V, con un adaptador ST-Link o serie. 1 LED + resistencia de 330 Ω en PA1.

Cableado

Ánodo del LED en PA1 por 330 Ω a GND. PA1 debe quedar libre en el arranque (sin strap), lo que lo hace buena patilla de salida.

Funcionamiento

analogWrite configura el canal de TIM2 en modo PWM y escribe la comparación; el bucle solo rampa la consigna. 108 MHz de base de tiempos = resolución de fase holgada. Con Arduino: instale el core « STM32F1 » (Roger Clark, gestor de placas) y elija la placa « GD32F103C »; el LED de usuario es PC13 (activo en LOW). En C: biblioteca de firmware GD32F10x + ST-Link.

Para ir más lejos

Tres canales TIM2 (PA0/1/2) para un LED RGB, o salida a un MOSFET para una lámpara variable.

respiration.ino

// Respiration sur PA1 (TIM2CH2) — analogWrite du core STM32F1.
const int LED = PA1;
const int FREQ = 20000;        // 20 kHz : inaudible pour les composants

int niveau = 0;
int sens = 2;

void setup() {
  pinMode(LED, OUTPUT);
  analogWriteFrequency(LED, FREQ);   // core STM32F1 : frequence par broche
  Serial.begin(115200);
}

void loop() {
  niveau += sens;
  if (niveau >= 255 || niveau <= 0) sens = -sens;
  analogWrite(LED, niveau);
  delay(5);                          // rampe complete ~ 0,64 s
}

← Volver a la ficha