Attivare e gestire una candela con ArduinoUNO
Spark plug parte 1: generare archi elettrici utilizzando componenti automotive
In questo tutorial andremo a vedere i passi da compiere per attivare e gestire una candela automotive, in inglese spark plug. L’obiettivo è di generare archi elettrici di qualche kilovolt partendo da una tensione continua di 12V. Lo schema proposto, ovviamente semplificato quanto più possibile, simula il processo di gestione degli attuali autoveicoli benzina. Infatti, quest’ultimi, per dar vita alla combustione all’interno del motore necessitano di un carburante (benzina) e di un sistema di innesco affidato ad un piccolo arco elettrico generato da una candela all’interno della camera di combustione. La sincronizzazione tra il comando di un iniettore e il comando della relativa candela fanno si che avvenga lo scoppio e il motore, di conseguenza, sia attivo.
Prendendo in esame un autoveicolo benzina a quattro cilindri possiamo affermare che ogni singola candela viene attivata circa 7 volte al secondo in regime di minimo (750-900 giri/minuto dell’albero motore), comandate con un duty-cycle del 95%. Quanto segue permettere quindi di gestire la candela con i parametri appena descritti.
Per realizzare il nostro circuito abbiamo bisogno dei seguenti componenti:
- 1 Spark Plug: https://amzn.to/2Pc9jek (qualsiasi candela di qualsiasi marca va bene)
- 1 bobina di accensione (ignition coil): può andare bene sia un sistema a bobina singola (ricavata da autoveicoli più datati che sfruttano lo spinterogeno come distributore meccanico della scintilla) sia un sistema a doppia bobina (sistema a scintilla persa) per attivare contemporaneamente 2 candele.
- 1 cavo siliconico per candele (non risparmiate su questo cavo… rappresenta la sicurezza di questo progetto)
- 1 transistor di potenza (2N6384): https://amzn.to/2PGM9gY
- 1 resistenza 10k
- 1 resistenza 100k
- 1 scheda programmabile ArduinoUNO o compatibile
Schema elettrico e principio di funzionamento:
ArduinoUNO verrà programmato affinché una sua uscita digitale continui ad oscillare, alla frequenza di 7 Hz, tra lo stato logico HIGH e lo stato logico LOW. Di fatto la scheda così programmata produrrà un’onda quadra che, attraverso una resistenza di 10K giungerà alla base del transistor 2N6384. Nelle svariate prove mi sono accorto che transistor BJT e MOSFET funzionano correttamente solo per alcuni cicli prima di danneggiarsi a causa della mancanza del diodo di ricircolo in antiparallelo alla bobina. La soluzione ideale, ma costosa, sarebbe quella di utilizzare un IGBT dedicati al mondo automotive con relativo circuito di comando, in alternativa possiamo utilizzare un BJT DARLINGTON di potenza come il 2N6384. Questi transistor sono robusti e sopravvivono alle sovratensioni generate dalla bobina.
Il transistor, configurato per lavorate tra la zona di interdizione e la zona di saturazione, si comporta come un’interruttore digitale pilotato alla frequenza prestabilita nel software di ArduinoUNO. Per approfondire l’argomento rimandiamo al seguente articolo:
Nella bobina di accensione, alimentata a +12V, scorrerà una determinata corrente che verrà bruscamente interrotta e ripristinata alla frequenza di lavoro del transistor. Questa violenta interruzione generà una sovratensione che, attraverso la bobina, sarà portata a qualche kV e tramite cavo siliconico alla spark plug (o più comunemente chiamata candela).
La candela DEVE aver il terminale finale connesso a GND (potenziale 0V) per chiudere il circuito. Se tale connessione è assente, oltre a creare una forte instabilità del circuito, non permetterà la generazione della scintilla.
Programmazione ArduinoUNO:
Per pilotare correttamente il transistor abbiamo la necessità di generare un’onda quadra. Se vogliamo avvicinarci a parametri reali di un autoveicolo dobbiamo considerare una frequenza di 7Hz (quindi un periodo di circa 140ms) e un duty cycle del 95%. Quindi scriviamo il programma:
int pin_bobina = 10; //pin digitale di comando void setup() { pinMode(pin_bobina, OUTPUT); } void loop() { digitalWrite(pin_bobina,LOW); delay(136); // circa il 95% di 144ms digitalWrite(pin_bobina,HIGH); delay(8); // circa il 95% di 144ms }