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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
3V3 ── Rs 150 Ω (¼ W) ──●────── Fil résistif 22 Ω (50 cm) ─── GND

●───(wiper mécanique)─── Rprot 1 kΩ ──●───→ GPIO ADC (ESP32)

C 100–220 nF

GND

Rpull 1 MΩ

GND

(option) clamps ESD au nœud ADC:
- Dhigh: anode au nœud ADC, cathode à 3V3 (1N4148 ou Schottky BAT54)
- Dlow : anode à GND, cathode au nœud ADC

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
3V3 ── Rs 150 Ω (¼ W) ──●────── Fil résistif 22 Ω (50 cm) ─── GND

●───(wiper)── Rin 100 Ω ──┐
│ Vin(+)
MCP6001/2 3V3 ┌─┴─┐
│ │
Rg 10 kΩ ────┤ − │────┬──── Rf 68 kΩ ──┐
(→ GND) │ │ │ │
└───┘ │ Cf 47 nF
Rout 1 kΩ │
│ │
Sortie AOP ────────────────●───────────────→ GPIO ADC └──────────────┘

C 100–220 nF

GND

Rpull 1 MΩ

GND

Découplage AOP: 100 nF (et 4,7–10 µF) entre Vcc et GND près du boîtier.

(option) clamps ESD au nœud ADC:
- Dhigh: anode au nœud ADC, cathode à 3V3
- Dlow : anode à GND, cathode au nœud ADC

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.

  1. 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).
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[ Piste 22 Ω (50 cm) ]====================(vers GND)
|
+-- via connecteur → (court) → [AOP] (option B)
| |
Rout Rf//Cf
1k |
| +→ court vers entrée (−)
[C 100–220 nF] |
| |
GND Rg → GND

3V3 → Rs 150Ω → extrémité “haut” de la piste

[AOP] et/ou [Rout+C+Rpull] groupés à 1–2 cm de la broche ADC de l’ESP32.
Plan GND sous toute la zone. I2S/HP routés à l’écart.

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
2
3
4
5
6
7
8
9
10
11
12
13
3V3 ────────────────┐

[ PISTE ] ←— curseur (wiper)
│ (≈10–20 kΩ totale)
GND ────────────────┘

Wiper ── Rprot 1k ──●───→ ADC_in

C 100–220 nF

GND

Option: Rpull 1 MΩ (Wiper → GND) pour un niveau défini si le wiper “flotte”.
  • 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
               Rtop 10k
3V3 ──────────/\/\/\───● Vexc_div ──/\/\/\─── GND
| Rbot 15k
| (Vexc_div ≈ 1.98 V)
v
LM358 (canal A en suiveur)
Vexc = ~1.98 V ─────────● (sortie canal A)

Alimentation LM358:
- Pin 8 → 3V3
- Pin 4 → GND
- Découplage: 100 nF + 4.7–10 µF près du boîtier

Piste:
Vexc (~1.98 V) ──┐

[ PISTE ] ←— wiper

GND ─────────────┘

Wiper → LM358 canal B (suiveur):
- Pin 5 (IN+) ← Wiper
- Pin 6 (IN−) ← Pin 7 (OUT B) (suiveur)
- Sortie canal B (Pin 7) ── Rprot 1k ──●──→ ADC_in

C 100–220 nF

GND

Option: Rpull 1 MΩ (Wiper → GND) et/ou clamps ESD au nœud ADC.

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
2
float p = (float)adc / (float)ADC_FULL_SCALE; // 0..1
p = clamp(p, 0.0f, 1.0f);

Avec LM358 (Vexc ≈ 1.98 V, ADC ref 3.3 V):

1
2
3
4
5
const float VrefADC = 3.3f;
const float Vexc = 1.98f; // mesurez-la au multimètre pour être précis
float v = (adc * VrefADC) / ADC_FULL_SCALE; // V à l’ADC
float p = v / Vexc; // 0..1
p = clamp(p, 0.0f, 1.0f);