Componente · Alimentazione

Pacco batteria e alimentazione del robot

Come alimentare un'auto robot: perché 9 V cedono sotto i motori, come scegliere un pacco AA o 18650 e come evitare che logica e motori resettino la scheda.

Che cos’è

Il pacco alimentazione è la parte a cui i principianti pensano meno e che sbagliano più spesso. È semplicemente la batteria che fornisce corrente ai motori e all’elettronica, ma se la scegli male il robot scatta, si resetta o si rifiuta di muoversi, per quanto buono sia il codice. Un’alimentazione corretta è spesso la differenza fra un robot che funziona e uno che continua a riavviarsi.

L’idea chiave è che un robot ha due appetiti molto diversi per la corrente: i motori la bevono a ondate, mentre la logica la sorseggia in modo costante. Una sola batteria può alimentare entrambi, ma devono essere collegati in modo che i motori avidi non facciano digiunare il cervello sensibile.

Illustrazione della distribuzione dell'alimentazione: un pacco batteria a due celle alimenta una scheda driver del motore L298N, dotata di dissipatore ad alette, tramite un filo rosso Vin; il driver alimenta due motori a cilindro; una linea regolata a 5 volt alimenta una scheda Arduino, che invia quattro fili di segnale PWM e direzione al driver; un bus di massa comune collega in basso la batteria, il driver e Arduino.
Un pacco, due linee: i motori assorrono una forte corrente attraverso il driver, Arduino funziona con un costante 5 V regolato e ogni parte condivide una massa comune. Scarica SVG

Come funziona

Segui la corrente dal pacco:

  1. La batteria fornisce tensione non regolata: 6 V da quattro AA, 7.4 V da due 18650.
  2. La linea del motore va direttamente dal pacco al Vin del driver L298N. Qui proviene la forte corrente dei motori a ondate, tenuta completamente lontana da Arduino.
  3. La linea logica è un 5 V regolato (dal regolatore integrato nel driver oppure via USB) che alimenta Arduino e i sensori con una tensione pulita e costante.
  4. Una massa comune collega tutto. Ogni linea deve condividere la stessa linea di massa, altrimenti i segnali logici non hanno un riferimento comune e le letture diventano senza significato.

Con questa divisione, un motore che assorbe improvvisamente un ampere può far crollare la propria linea senza trascinare a terra anche i 5 V di Arduino.

Perché un blocco da 9 V non funziona

L’errore più comune al primo robot è alimentare i motori con una batteria rettangolare 9 V PP3. Sembra comoda, ma contiene pochissima energia e ha un’elevata resistenza interna. Appena i motori assorbono corrente, la tensione crolla: Arduino scende sotto il minimo e si resetta, così il robot sbalza e si riavvia in un ciclo. Un blocco da 9 V va bene per un breadboard che sorseggia milliampere; è la scelta sbagliata per qualsiasi cosa che faccia girare ruote.

Scelta e cablaggio

  • Abbina la tensione ai motori. I motori da 3–6 V funzionano bene con un pacco da 6 V o 7.4 V; usa la PWM per moderare la velocità invece di sottoalimentare il pacco.
  • La capacità è autonomia. Più mAh significano più tempo fra una ricarica e l’altra; le celle 18650 durano molto più delle AA ma richiedono un portacelle protetto.
  • Un interruttore, polarità corretta. Aggiungi un interruttore generale sul pacco e ricontrolla la polarità prima della prima accensione: l’inversione può distruggere immediatamente una scheda.
  • Non retroalimentare. Evita di alimentare Arduino contemporaneamente da USB e dalla batteria, a meno che la scheda non sia progettata per questo.
  • Aggiungi un condensatore di massa tra le linee del motore per assorbire la scarica all’avvio e stabilizzare la linea.

Resistenza interna: il numero che decide tutto

Ogni batteria si comporta come una fonte di tensione ideale con una resistenza in serie. Quella resistenza spiega tutto il motivo per cui un pacco funziona e un altro fa resettare la scheda.

V_under_load = V_open_circuit - (I x R_internal)

Un robot che richiede una scarica di 2 A a un pacco con 0.5 Ω di resistenza interna perde un volt prima che qualsiasi cosa a valle lo veda. Ecco cosa significa per le opzioni comuni:

Pacco Nominale Resistenza interna tipica Crollo a 2 A Verdetto
9 V PP3 alcalina 9 V 1.5–3 Ω 3–6 V Inutilizzabile per i motori
4×AA alcalina 6 V 0.6–1.2 Ω 1.2–2.4 V Marginale; si scarica in fretta
4×AA NiMH 4.8 V 0.1–0.2 Ω 0.2–0.4 V Buono, ma tensione bassa
6×AA NiMH 7.2 V 0.15–0.3 Ω 0.3–0.6 V Una buona scelta
2×18650 Li-ion 7.4 V 0.05–0.15 Ω 0.1–0.3 V Eccellente
2S LiPo 7.4 V 0.02–0.05 Ω Meno di 0.1 V Migliore, con precauzioni

Questa tabella spiega completamente il blocco da 9 V. Il problema non è la tensione: ha la tensione più alta dell’elenco. Il problema è che, con una scarica di 2 A, fornisce 3 V e il robot si resetta. La tensione a vuoto non dice nulla; il crollo sotto carico dice tutto.

Misuralo in due minuti

1. Measure the pack's voltage with nothing connected.       -> V_open
2. Stall the motors and measure again while stalled.        -> V_load
3. Measure the stall current with the meter in series.      -> I
4. R_internal = (V_open - V_load) / I

Scrivi il numero sul pacco con un pennarello. Aumenta con l’invecchiamento delle celle e un pacco la cui resistenza è raddoppiata è un pacco che ha iniziato a causare reset «casuali».

Il budget di corrente

Sommalo su carta prima di comprare qualsiasi cosa. Usa la corrente di stallo, non quella tipica.

Dispositivo Tipica Picco / stallo
Arduino Uno 45 mA 50 mA
ESP32 (Wi-Fi attivo) 80 mA 500 mA a raffica
Motore con ingranaggi TT ×2 300 mA 2 A
Motore con ingranaggi metallici N20 ×2 200 mA 1.6 A
Servomotore SG90 200 mA 650 mA
HC-SR04 15 mA 15 mA
MPU-6050 4 mA 4 mA
Array IR a 8 canali 100 mA 200 mA
GPS NEO-6M 45 mA 60 mA

Un robot tipico che evita ostacoli — Uno, due motori TT, un ultrasonico su un servomotore — ha un budget di circa 360 mA tipici e 2.7 A di picco. Dimensiona il pacco per il picco e dimensiona l’autonomia in base alla corrente tipica:

runtime (hours) = capacity (mAh) / average draw (mA)

2000 mAh di NiMH AA a 360 mA danno circa 5.5 ore di guida, molto più di quanto la batteria della maggior parte dei robot finisca mai per usare. La capacità è raramente il vincolo: lo è la capacità di assorbire le scariche.

Cablaggio corretto

Battery + ──── master switch ──┬──── motor driver VM  (the heavy path)
                               │
                               └──── 5 V regulator ──── Arduino, sensors
Battery − ─────────────────────┴──── COMMON GROUND ──── everything

Quattro regole, in ordine rispetto alla frequenza con cui vengono violate:

Massa comune, sempre. Ogni alimentazione, ogni scheda e ogni sensore è collegato a una sola massa. Una massa comune mancante non dà riferimento ai segnali logici e il guasto è silenzioso: nulla funziona, niente si scalda e non sembra esserci nulla di sbagliato.

Collega le masse a stella, non in catena. Porta ogni massa a un solo punto invece di concatenarle attraverso il driver del motore. La corrente di ritorno del motore lungo un filo di massa condiviso crea una differenza di tensione e le letture dei sensori cambiano ogni volta che i motori si muovono.

Interruttore generale sul filo positivo, prima di tutto. Poter fermare immediatamente un robot fuori controllo vale i due minuti necessari.

Protezione dalla polarità inversa. Un singolo diodo Schottky in serie costa ~0.3 V, oppure un MOSFET a canale P costa quasi nulla. Entrambi costano meno della scheda che un pacco invertito distrugge, e invertire un pacco richiede un solo momento di disattenzione.

Condensatori: che cosa correggono e che cosa no

Aggiungi un elettrolitico da 470–1000 µF tra l’alimentazione del motore, vicino al driver. Vale la pena farlo. Ci si aspetta però erroneamente che faccia cose che non può fare.

Che cosa risolve: le brusche transizioni di commutazione della PWM e della commutazione del motore, che hanno scala di microsecondi e si accoppiano alla linea logica come rumore.

Che cosa non risolve: una scarica sostenuta. L’aritmetica è intransigente:

dV = I x t / C
1000 uF supplying 2 A for 10 ms -> dV = 2 x 0.01 / 0.001 = 20 V

Un condensatore chiamato a sostenere una scarica del motore da 2 A per 10 ms dovrebbe far cadere 20 V, più di quanta ne abbia il pacco. Solo una batteria più rigida sostiene una scarica. Se la scheda si resetta all’avvio dei motori, un condensatore più grande non è la risposta: serve un pacco con minore resistenza interna.

Aggiungi anche un ceramico da 100 nF vicino a ogni pin di alimentazione di un IC. Svolge un compito del tutto diverso: gestisce la richiesta ad alta frequenza delle commutazioni interne del chip, alla quale l’elettrolitico è troppo lento per rispondere.

Scegliere la chimica

NiMH AA Li-ion 18650 LiPo
Tensione della cella 1.2 V 3.7 V 3.7 V
Resistenza interna Bassa Molto bassa Bassissima
Autoscarica Bassa (usa celle «pronte all’uso») Molto bassa Molto bassa
Scarica eccessiva Tollera Dannaggia sotto 3.0 V/cella Dannaggia sotto 3.0 V/cella
Ricarica Semplice, tollerante Richiede un caricabatterie adeguato o un BMS Richiede un caricabatterie bilanciato
Rischio di incendio Trascurabile Reale se usata male Reale se usata male
Ideale per Un primo robot La maggior parte dei robot Progetti ad alte prestazioni

Il NiMH è la prima scelta giusta. Sei celle danno 7.2 V con bassa resistenza interna, tollerano gli errori e un pacco scarico è un inconveniente anziché un incidente.

Le celle Li-ion 18650 sono l’aggiornamento sensato: molta più energia per lo stesso peso, resistenza interna molto bassa e costo contenuto. Usa un portacelle protetto o una scheda BMS: le celle al litio portate sotto circa 3.0 V per cella subiscono danni permanenti, ed è esattamente ciò che fa un robot che funziona finché non si ferma.

Il LiPo è ciò che usano le costruzioni ad alte prestazioni ed è quello che richiede rispetto. Non ricaricarlo mai senza supervisione, non forarlo mai, non lasciarlo mai scarico e usa un caricabatterie bilanciato.

Risoluzione dei problemi

Sintomo Causa probabile Soluzione
La scheda si resetta all’avvio dei motori Crollo del pacco: resistenza interna troppo alta Misuralo; l’unica soluzione è un pacco con minore resistenza
Un condensatore più grande non ha aiutato Non avrebbe potuto Vedi il calcolo sopra; cambia la batteria
Nulla funziona, niente è caldo Nessuna massa comune Collega ogni massa a un solo punto
Le letture dei sensori cambiano quando i motori girano Masse concatenate Collega le masse a un solo punto
Il robot rallenta durante il funzionamento La tensione cala mentre il pacco si scarica Previsto; chiudi un ciclo di velocità o monitora il pacco
I motori sono deboli fin dall’inizio Caduta di tensione del driver più crollo del pacco Un L298N ha circa 2 V di caduta prima che i motori vedano qualcosa
Regolatore molto caldo Troppa tensione su un regolatore lineare Usa un regolatore switching o riduci l’ingresso
Il pacco si scalda durante la ricarica Caricabatterie sbagliato per la chimica Fermati. Abbina il caricabatterie alle celle
Il pacco Li-ion è morto e non si ricarica Portato sotto 3.0 V/cella Danno permanente: usa la prossima volta un portacelle protetto

Monitorare il pacco

L’ultima cosa che vale la pena aggiungere: un robot che conosce la propria tensione della batteria può fermarsi prima del brownout, e costa due resistenze.

// 100k / 33k divider: 8.4 V max in -> ~2.09 V at the pin. Safe for a 3.3 V ADC.
const float DIVIDER = (100.0 + 33.0) / 33.0;

float packVolts() {
  return analogRead(A0) * (5.0 / 1023.0) * DIVIDER;
}

Una precauzione che rende opportuno farlo con attenzione: su Arduino, analogRead è ratiometrico rispetto alla linea a 5 V, che a sua volta cala quando i motori girano. Misuri una batteria che scende attraverso un riferimento che scende e la lettura sale. Passa al riferimento interno da 1.1 V con analogReference(INTERNAL), dimensiona il divisore per quello e la lettura diventa onesta; il tutorial sugli ingressi analogici illustra esattamente questa insidia.

Esplora il grafo

Usato in queste costruzioni

Progetti, percorsi di apprendimento e simulatori che includono Pacco batteria e alimentazione del robot.

Domande

FAQ su Pacco batteria e alimentazione del robot

Quale batteria devo usare per un'auto robot con Arduino?

Un pacco 4×AA (6 V) o 2×18650 (7.4 V) che alimenta il driver del motore è la scelta standard. Entrambi forniscono la corrente necessaria ai motori senza crollare sotto carico. Durante lo sviluppo alimenta Arduino dall'uscita regolata a 5 V del driver oppure via USB.

Posso alimentare i motori di un robot con una batteria da 9 V?

Non bene. Un blocco 9 V PP3 ha pochissima capacità e un'elevata resistenza interna, quindi appena i motori assorbono corrente la tensione crolla e Arduino va in brownout e si resetta. Usa un pacco AA o 18650 per qualsiasi cosa con motori; riserva il blocco da 9 V a un breadboard.

Arduino e motori usano la stessa batteria?

Di solito condividono un pacco, ma su linee separate. I motori prelevano dal pacco tramite il morsetto Vin del driver; la logica funziona a 5 V regolati. Fondamentalmente, ogni alimentazione deve condividere una massa comune, altrimenti i segnali non hanno un riferimento comune e nulla viene letto correttamente.

Perché il mio robot si resetta all'avvio dei motori?

Perché l'avvio dei motori assorbe brevemente una forte scarica di corrente, facendo scendere la tensione condivisa sotto il valore necessario ad Arduino, che si riavvia. Le soluzioni sono: una batteria più rigida, linee separate per motori e logica alimentate dallo stesso pacco e un condensatore tra le linee del motore che assorba la scarica.

Per approfondire

Fonti