🛠 GPIO et PWM sous 3,3 V : les règles d'or du Teensy 4.0
Objetivos
Dominar la parte digital: el Teensy 4.0 ofrece 40 pines (de los cuales 24 son accesibles en una protoboard sin soldadura), todos con capacidad de interrupción, 31 pines PWM distribuidos en 19 grupos con frecuencia independiente (analogWriteFrequency), y ajustes finos por pin: resistencia de pull-up/pull-down/keeper, limitación de slew, 7 niveles de fuerza de salida (≈150 Ω a ≈21 Ω) y 4 niveles de ancho de banda de salida (50/100/150/200 MHz). Sobre todo, integrarán la regla de supervivencia n.º 1: nada es tolerante a 5 V (excepto VIN y VUSB).
Material
- 1 Teensy 4.0 + cable USB
- 1 botón pulsador entre el pin 2 y GND
- 1 LED + resistencia de 330 Ω en el pin 6
- Protoboard + cables — alimentación únicamente por USB (5 V)
Las cifras que importan
- Nivel alto de salida: 3,3 V; entrada por encima de 3,3 V = riesgo de daño (palabras de Paul Stoffregen en el hilo de lanzamiento: « Except the VIN and VUSB pins, nothing is 5V tolerant on these new parts »).
- Corriente de salida: la página de producto recomienda 4 mA máx. por pin (la tabla de comparación técnica muestra 10 mA — una inconsistencia oficial documentada; retengan el valor conservador, 4 mA, y verifiquen el esquema).
- Cualquier LED en serie con una resistencia adecuada (330 Ω para 3,3 V ≈ 3 mA) funciona sin driver.
- 49 temporizadores en total (3 módulos FlexPWM de 32 bits, 32 de 16 bits, 4 decodificadores de cuadratura, 4 IntervalTimers, 3 watchdogs, 2 GPT).
Código completo
// Bouton sur 2 (pull-down interne), LED PWM sur 6.
const uint8_t BTN = 2;
const uint8_t LED = 6;
void setup {
Serial.begin(9600);
pinMode(BTN, INPUT_PULLDOWN); // pull-down interne : pas de résistance externe
pinMode(LED, OUTPUT);
analogWriteFrequency(LED, 20000); // 20 kHz pour le groupe de la broche 6
}
void loop {
static uint16_t pwm = 0;
static int8_t pas = 8;
pwm += pas; // respiration 0..255
if (pwm >= 255 || pwm == 0) pas = -pas;
analogWrite(LED, pwm);
if (digitalRead(BTN) == HIGH) { // front simple
Serial.println(F("bouton!"));
delay(100);
}
delay(10);
}
Verificación esperada
El LED parpadea suavemente a 20 kHz (frecuencia muy por encima del parpadeo perceptible — un osciloscopio o un simple smartphone grabando en cámara lenta confirman el PWM). La pulsación del botón imprime en el Monitor Serie. Cambien analogWriteFrequency y observen que cada grupo de pines tiene una frecuencia independiente: esta es la base para controlar varios motores o LEDs sin acoplamiento de frecuencia.
Errores frecuentes
- Conectar un sensor de 5 V (Arduino clásico, HC-SR04, etc.) directamente a un pin: el Teensy 4.0 NO es tolerante a 5 V, a diferencia del Teensy 3.2 — usen un divisor de tensión o un traductor de niveles.
- Confundir los contadores PWM oficiales: la página de producto anuncia 31 pines PWM, la tabla técnica « 27 total » para el 4.0 — inconsistencia documentada entre las dos páginas de PJRC; verifiquen la funcionalidad en el esquema de su pin.
- Olvidar la regla del pin 13: en modo entrada, nunca usen INPUT_PULLUP (el LED naranja polariza el pin).
- Sobrecargar un pin: por encima de los 4 mA recomendados, la tensión de salida colapsa; para un relé o una tira de LEDs, usen un transistor.
- Los pines 24 a 33 están en las almohadillas INFERIORES de la placa (junto con las del puerto USB host y la SD) — invisibles desde la protoboard, hay que soldarlos o usar pinzas.
- Alimentar por 3,3 V: no admitido sin una modificación de hardware especial; el pin de 3,3 V es una salida del regulador integrado.
Otros tutoriales para esta placa
- Premiers pas sur le Teensy 4.0 : Teensyduino, Loader et premier Blink
- Entrées analogiques et capteur de température interne : le ADC et ses limites
- Piloter un ruban WS2812 sans bloquer le CPU : WS2812Serial et OctoWS2811
- Contrôleur MIDI USB : un potard qui joue du piano (MIDIx4/MIDIx16)
- Comprendre la mémoire : 2 Mo de flash, 1 Mo de RAM TCM/DMA, EEPROM émulée et LittleFS
- Deux ports USB simultanés : périphérique 480 Mbit/s ET hôte USB sur les pastilles
Ejemplos de código para esta placa
clignotante.inoArduinotouche-capacitive.inoArduinoanalogique-12-bits.inoArduinomidi-piano.inoArduinopwm-respiration.inoArduinoservo-angle.inoArduino