Ribbon Controller
Schémas pratiques (avec et sans ampli op)
Vous avez 50 cm de fil résistif ≈ 22 Ω. On l’utilise comme “piste” alimentée via une résistance série pour limiter le courant, et on lit la position via un wiper. Ci‑dessous deux options:
- Option A: sans ampli op (simple, immédiat)
- Option B: avec ampli op (pleine échelle ADC, meilleure SNR)
Je propose un AOP très courant et facile à trouver: MCP6002 (ou MCP6001 en simple). Alternatives: TLV9002, LMV358 (RRIO). À éviter: LM358 “classique” sous 3,3 V (pas rail‑to‑rail, écrêtage vers le haut).
Option A — Sans ampli op (ADC direct)
Idée: ajouter une résistance série Rs pour limiter courant/chaleur; la piste (22 Ω) ne verra qu’une fraction de 3,3 V. Le wiper prélève la tension locale. On protège et on filtre l’ADC.
Valeur recommandée: Rs = 150 Ω (compromis conso/dynamique)
- Courant I ≈ 3,3 / (22 + 150) ≈ 19 mA
- Tension le long de la piste Vfil ≈ 0,42 V
- Puissances: PRs ≈ 55 mW (prendre 1/4 W), Pfil ≈ 8 mW
Variante basse conso: Rs = 220 Ω → I ≈ 13,6 mA, Vfil ≈ 0,30 V, PRs ≈ 41 mW, Pfil ≈ 4 mW
Schéma (ASCII):
1 | 3V3 ── Rs 150 Ω (¼ W) ──●────── Fil résistif 22 Ω (50 cm) ─── GND |
Notes:
- Réglez l’ADC en 0 dB (pleine échelle ≈ 1,1 V) pour bien exploiter 0–0,3/0,42 V.
- Impédance source côté wiper ≈ 22/4 ≈ 5,5 Ω au milieu: excellent pour le bruit; gardez le 1 kΩ série pour protéger l’ADC.
Option B — Avec ampli op (pleine échelle 0–3,3 V)
On garde Rs = 150 Ω (faible chauffe) donc Vfil ≈ 0,42 V, puis on amplifie en non‑inverseur vers 0–3,3 V.
AOP conseillé: MCP6002 (double) ou MCP6001 (simple), rail‑to‑rail entrée/sortie, alim 3,3 V.
Alternatives: TLV9002/TLV9062, LMV358 (RRIO). Éviter LM358 “ancien”.
Schéma (ASCII):
1 | 3V3 ── Rs 150 Ω (¼ W) ──●────── Fil résistif 22 Ω (50 cm) ─── GND |
Valeurs:
- Gain non‑inverseur = 1 + Rf/Rg = 1 + 68k/10k ≈ 7,8 → 0–0,42 V devient ≈ 0–3,28 V
- Cf 47 nF en // sur Rf → fc ≈ 1 / (2π · 68k · 47 nF) ≈ 50 Hz (lissage de contact)
- Plus réactif: Cf 22 nF (fc ≈ 106 Hz)
- Rin 100 Ω: limite ESD et améliore la stabilité d’entrée +
- Rout 1 kΩ + C 100–220 nF: filtre RC et protection de l’ADC
Grandeurs:
- I total ≈ 19 mA (comme Option A)
- Vout AOP ≈ 0–3,28 V (pas d’écrêtage avec MCP600x à charge élevée, typ. > 0,02–0,05 V des rails)
BOM récapitulatif
- Rs: 150 Ω, 1/4 W (ou 220 Ω pour baisser la conso)
- Fil résistif 22 Ω (50 cm) = “piste”
- Wiper mécanique (fil/lame) + guidage (film PET avec fente 1–2 mm)
- Protection ADC: Rprot/Rout 1 kΩ, C 100–220 nF (X7R), Rpull 1 MΩ
- Diodes de clamp (option): 2× 1N4148 ou 1× BAT54S (double Schottky)
- Option B (AOP):
- MCP6001 (simple) ou MCP6002 (double)
- Rg 10 kΩ, Rf 68 kΩ, Cf 47 nF, Rin 100 Ω
- Découplage: 100 nF + 4,7–10 µF près des broches Vcc/GND de l’AOP
Plan de routage (guidelines)
Objectifs: garder le nœud analogique propre, boucles courtes, filtrage au plus près, séparer numérique/bruit.
- Placement prioritaire
- Placez le réseau d’entrée ADC (Rprot/Rout 1 kΩ, C 100–220 nF, Rpull 1 MΩ) au plus près de la broche ADC de l’ESP32.
- Si AOP: placez l’AOP à 1–2 cm max du connecteur wiper. Gardez la boucle de contre‑réaction (sortie → Rf//Cf → entrée −) la plus courte possible (quelques mm).
- Rs (150 Ω) peut être un peu éloignée; elle dissipe ~55 mW (1/4 W suffit).
- Routage du nœud wiper
- Le segment wiper → (Rin/AOP ou Rprot/ADC) doit être court et éloigné des pistes I2S, PWM, CLK, et du HP.
- Si possible, bordez ce segment par un plan de masse ou une “garde” à la masse.
- Masse et alimentation
- Plan de masse continu sous la partie analogique.
- Découplage: condo 100 nF entre 3V3 et GND près de:
- l’ESP32 (déjà requis),
- l’AOP (obligatoire),
- éventuellement près du connecteur de la piste pour absorber les clamps ESD.
- Évitez que les retours de courant HP/ampli (MAX98357A) traversent la zone ADC: routez leur GND séparé jusqu’à un point d’étoile proche de l’alim 5 V/3,3 V.
- Clamps ESD
- Placez les diodes de clamp au plus près du nœud ADC (après Rprot/Rout). Préférez Schottky (BAT54) pour un clamp plus bas.
- Attention: ces diodes déversent dans le rail 3V3: assurez un découplage local (100 nF + 10 µF) et un régulateur tolérant.
- Filtre RC et stabilité
- Le C 100–220 nF doit être collé entre la broche ADC et GND. Trajet < 5 mm.
- Avec AOP: Cf en // sur Rf directement au‑dessus de l’AOP; gardez la piste sortie→entrée− très courte.
- Séparation analogique/digitale
- Maintenez 5–10 mm d’écart entre la piste wiper/ADC et:
- pistes I2S (BCLK/LRCLK/DIN),
- lignes vers le HP et l’ampli.
- Si croisement inévitable: croisez à 90° et sur couche opposée au plan GND.
- Connexions vers la “piste” 22 Ω
- Amenez 3V3 → Rs → extrémité “haut” de la piste avec une piste un peu plus large (I ≈ 20 mA).
- L’extrémité “bas” directement à GND (retour court vers le plan).
- Le contact wiper: connecteur dédié; si câble, utilisez un fil blindé ou une paire torsadée (wiper + GND).
Esquisse de placement (ASCII):
1 | [ Piste 22 Ω (50 cm) ]====================(vers GND) |
Conseils d’usage
- Le wiper ne doit jamais toucher directement 3V3 ou GND: guidez‑le avec un film PET/Kapton percé d’une fente de 1–2 mm au‑dessus de la piste.
- Si ça “craque” (micro‑coupures): augmentez C (100 → 220 nF), utilisez Cf 47 nF (option B), et soignez la surface de contact.
- Sur batterie: envisagez Rs = 220–330 Ω (I = 10–14 mA) et, si AOP, augmentez le gain (p.ex. 11× pour Rs = 220 Ω: Rg 10 kΩ, Rf 100 kΩ, Cf ~33 nF).
Le pont de Wheastone (autre possibilité)
Objectif: lire la position 0–100 % d’une piste résistive (≈10–20 kΩ sur 50 cm) avec un microcontrôleur. Deux variantes:
- Sans LM358: diviseur simple → 0–3,3 V.
- Avec LM358: excitation à ~2,0 V + suiveur → source basse impédance, propre pour ADC.
Note: L’ADC est supposé référencé à 3,3 V.
Variante 1 — Sans LM358 (diviseur simple)
Principe: on alimente la piste en 3,3 V; le wiper est un diviseur ratiométrique → Vwiper ∈ [0; 3,3 V], directement proportionnel à la position.
Schéma
1 | 3V3 ────────────────┐ |
- Impédance source au milieu ≈ R/4 ≈ 2,5–5 kΩ: OK pour la plupart des ADC.
- Rprot 1 kΩ + C 100–220 nF: filtrage anti‑bruit, protège l’ADC.
- Diodes clamp (option): vers 3V3 et GND si environnement bruyant.
Calcul position
- p (0..1) ≈ Vwiper / 3,3 V
- En comptages ADC: p ≈ ADC_count / ADC_full_scale
Avantages
- Minimal, pleine échelle 0–3,3 V, très peu de composants.
Variante 2 — Avec LM358 (excitation 2,0 V + suiveur)
Pourquoi: le LM358 n’est pas rail‑to‑rail en sortie à 3,3 V (sature vers ~2,1–2,2 V). Pour couvrir 0–100 % proprement, on excite la piste à ~2,0 V (dans la zone “safe” du LM358), puis on bufferise le wiper.
Topologie (LM358P DIP‑8, dual)
- Canal A: génère et bufferise Vexc ≈ 1,98 V à partir de 3,3 V.
- Canal B: suiveur (buffer) du wiper → ADC.
Schéma
1 | Rtop 10k |
Remarques
- Vexc par 10k/15k donne ~1,98 V; le canal A le bufferise pour une source basse impédance.
- Le canal B peut suivre le wiper jusqu’à ~1,9–2,0 V sans saturer, parfait pour l’ADC si vous réglez sa pleine échelle proche de 2,0–2,2 V (si disponible). Sinon, on corrige par logiciel.
Calcul position
- p (0..1) = Vwiper / Vexc
- Avec ADC référencé à 3,3 V: p = (ADC_count / ADC_full_scale) × (3,3 V / Vexc)
- Exemple avec Vexc ≈ 1,98 V: facteur ≈ 3,3 / 1,98 ≈ 1,667
- Clippez p entre 0 et 1.
Avantages
- Source très basse impédance (meilleure linéarité/rapidité ADC).
- Pleine échelle contrôlée et compatible headroom LM358.
Note alternative
- Si votre ADC offre une pleine échelle ~2,2 V (p. ex. “atténuation 6 dB”), vous pouvez aussi exciter la piste à ~2,1–2,2 V (Rtop:Rbot = 1:2), et lire directement sans correction (p ≈ ADC/FS_2V2).
Choix rapide
- Vous voulez simple et pleine échelle 3,3 V: Variante 1.
- Vous voulez un signal “propre” et robuste (longs câbles, bruit) avec votre LM358: Variante 2 (Vexc ≈ 2,0 V + buffers).
Conseils pratiques
- Placez C 100–220 nF au plus près de la broche ADC.
- Gardez des masses propres et un plan GND sous la zone analogique.
- Calibrez deux points (0 % et 100 %) en logiciel pour corriger les tolérances mécaniques/recette d’encre.
- Courant dans la piste (Variante 2): I ≈ Vexc / R_piste ≈ 1,98 V / (10–20 kΩ) ≈ 0,10–0,20 mA → puissance négligeable.
Exemples de calcul (pseudo‑code)
Sans LM358 (3,3 V pleine échelle):
1 | float p = (float)adc / (float)ADC_FULL_SCALE; // 0..1 |
Avec LM358 (Vexc ≈ 1.98 V, ADC ref 3.3 V):
1 | const float VrefADC = 3.3f; |