🛠 GPIO et PWM sous 3,3 V : les règles d'or du Teensy 4.0
Objectifs
Maîtriser la partie numérique : le Teensy 4.0 offre 40 broches (dont 24 accessibles sur breadboard sans soudure), toutes interrompables, 31 broches PWM réparties en 19 groupes indépendamment cadencés (analogWriteFrequency), et des réglages fins par broche : résistance de tirage pull-up/pull-down/keeper, limitation de slew, 7 niveaux de force de sortie (≈150 Ω à ≈21 Ω) et 4 paliers de bande passante de sortie (50/100/150/200 MHz). Surtout, vous intégrerez la règle de survie n° 1 : rien n'est tolérant 5 V (sauf VIN et VUSB).
Matériel
- 1 Teensy 4.0 + câble USB
- 1 bouton poussoir entre la broche 2 et GND
- 1 LED + résistance 330 Ω sur la broche 6
- Breadboard + fils — alimentation par USB uniquement (5 V)
Les chiffres qui comptent
- Niveau haut de sortie : 3,3 V ; entrée au-delà de 3,3 V = risque de dommage (parole de Paul Stoffregen dans le fil de sortie : « Except the VIN and VUSB pins, nothing is 5V tolerant on these new parts »).
- Courant de sortie : la page produit recommande 4 mA max par broche (le tableau de comparaison technique affiche 10 mA — une incohérence officielle documentée ; retenez la valeur conservatrice, 4 mA, et vérifiez le schéma).
- Toute LED en série avec une résistance adaptée (330 Ω pour 3,3 V ≈ 3 mA) passe sans driver.
- 49 timers au total (3 modules FlexPWM 32 bits, 32 × 16 bits, 4 décodeurs quadrature, 4 IntervalTimers, 3 watchdogs, 2 GPT).
Code complet
// 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);
}
Vérification attendue
La LED respire à 20 kHz (fréquence bien au-delà du scintillement perceptible — un oscilloscope ou un simple smartphone en enregistrement vidéo au ralenti confirme le PWM). L'appui sur le bouton imprime dans le Moniteur. Changez analogWriteFrequency et observez que chaque groupe de broches est indépendamment cadencé : c'est la base pour piloter plusieurs moteurs ou LED sans couplage de fréquence.
Erreurs fréquentes
- Brancher un capteur 5 V (Arduino classique, HC-SR04, etc.) directement sur une broche : le Teensy 4.0 n'est PAS tolérant 5 V, contrairement au Teensy 3.2 — utilisez un diviseur de tension ou un translateurs de niveaux.
- Confondre les compteurs PWM officiels : la page produit annonce 31 broches PWM, le tableau technique « 27 total » pour le 4.0 — incohérence documentée entre les deux pages PJRC ; vérifiez la fonctionnalité sur le schéma de votre broche.
- Oublier la règle de la broche 13 : en entrée, n'utilisez jamais INPUT_PULLUP (la LED orange polarise la broche).
- Surcharger une broche : au-delà de 4 mA recommandés, la tension de sortie s'effondre ; pour un relais ou une bande de LED, passez par un transistor.
- Les broches 24 à 33 sont sur les pastilles INFÉRIEURES de la carte (avec celles du port USB host et de la SD) — invisibles côté breadboard, il faut les souder ou utiliser des pinces.
- Alimenter par le 3,3 V : non supporté sans modification matérielle spéciale ; la broche 3,3 V est une sortie du régulateur embarqué.
Autres tutoriels pour cette carte
- 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
Exemples de code pour cette carte
clignotante.inoArduinotouche-capacitive.inoArduinoanalogique-12-bits.inoArduinomidi-piano.inoArduinopwm-respiration.inoArduinoservo-angle.inoArduino