Visualizzazione post con etichetta Impianto elettrico. Mostra tutti i post
Visualizzazione post con etichetta Impianto elettrico. Mostra tutti i post

domenica 7 giugno 2020

Decoder DCC e analogico per Servo con Arduino Nano

L'utilizzo dei motori per servo comandi si è molto diffuso anche fra i fermodellisti per comandare scambi e più in generale piccoli automatismi, la diffusione di Arduino  come controllore a basso costo ha dato maggiore impulso a questa tendenza.
Di progetti in rete per comandare servomotori ce ne sono diversi, in questo articolo ve ne presento uno che ha qualche caratteristica particolare: ogni servomotore può essere comandato da una centrale DCC e anche da un interruttore esterno direttamente connesso ad un pin di Arduino, in altre parole il decoder può essere usato anche senza una centrale DCC. Altra caratteristica è quella di regolare l' angolo di deviata del motore facendo muovere questi lentamente e scegliere la posizione ottimale, in questo modo è possibile regolare finemente la posizione che permette allo scambio di raggiungere la posizione desiderata con una buona precisione una volta montato il motore.
Il progetto iniziale è stato pensato per i motori servo e tortoise, nella versione presentata è disponibile solo la funzione servo. Lo sketch è derivato da un'idea presente su un forum inglese da un ottimo modellista d'oltremanica, Dave Renshaw, che ringrazio pubblicamente per aver condiviso il programma che ho poi rivisitato aggiungendo alcune funzioni; nel file .ino ci sono i riferimenti delle fonti.
Lo sketch utilizza la libreria DCC_Decoder.h disponibile a questo link, alla fine dell' articolo è possibile scaricare il file da caricare su Arduino. Esso contiene molti commenti ed è possibile modificarlo a piacimento.Lo schema elettrico è molto semplice, è composto dall' interfaccia DCC che rende disponibile il segnale digitale sul pin D2 di Arduino e da un semplice alimentatore per fornire la tensione ai motori e ad Arduino stesso.


Come accennato, Arduino pilota i servomotori anche in analogico:  per poter muovere i servo occorre un semplice interruttore on-off (non un deviatore), cioè basta mettere il pin relativo (PAD 1-5) a massa (PAD 6) per cambiare la posizione.
Per questo decoder ho disegnato un circuito stampato dalle dimensioni contenute: 52x58mm, alla fine dell' articolo sono disponibili i files gerber per la costruzione del PCB.
All'avvio, collegando il monitor dell' IDE di Arduino alla porta USB di Arduino (velocità 115200), vengono visualizzati i parametri di configurazione, in particolare per ogni motore:
- L' indirizzo
- Il pin cui di Arduino cui è connesso il servo
- Il pin cui collegare lo switch per il comando in analogico
- L' angolo di delle posizioni dritto/deviata
- L'ultima posizione memorizzata

Il decoder all'accensione posiziona i servo secondo l' ultima configurazione salvata, ciò è possibile perchè lo sketch memorizza ogni movimento in EEPROM. Per ripristinare i valori di default basta digitare 'r' dal monitor dell' IDE e premer ENTER. Al riavvio il decoder caricherà la configurazione di default. Tale configurazione è modificabile tramite i valori inseriti nella stringa configData[] seguendo le istruzioni all' interno dello sketch.
Un'altra caratteristica di questo decoder è lo "scollegamento" software del servo una volta che è stato comandato: in pratica, quando si invia un comando al servo, dopo che questo si è correttamente posizionato lo sketch "scollega" il servo dal in di Arduino conil comando:

devices[i].servo.detach();

ciò al fine di evitare i fastidiosi ronzii che possono verificarsi con alcuni modelli di motore. Il "detach time" è impostato a 1,2 secondi con la variabile:

int ServoDetachTime = 1200;

Programmazione indirizzo DCC
L' indirizzo del decoder è l' indirizzo del servo nr.1 (connesso al pin D3), i successivi servomotori avranno indirizzi di valore successivo a questo, ovvero se il servo nr. 1 ha indirizzo 6, gli altri saranno 7, 8, 9, e 10.
Per poter programmare l'indirizzo occorre eseguire i seguenti passi in DCC mode ovvero con il decoder connesso ad una centrale digitale:
1. Accendere il decoder
2. Collegare il segnale DCC della centrale
3. Premere il pulsante reset di Arduino, premere il pulsante S1, il led al pin 13 si accende
4. Inviare dalla Centrale DCC un comando scambi con l' indirizzo desiderato, dritto/deviata non è importante.
5. Premere il pulsante S1
6. Premere reset di Arduino

A questo punto il decoder ha memorizzato l'indirizzo del comando che è stato inviato dalla centrale quale indirizzo del servo nr.1. E' importante notare che il nuovo indirizzo non deve rientrare nel range dell'indirizzo attuale dei 5 motori gestiti dal decoder, in altre parole se i servo hanno indirizzo ad esempio da 11 a 16, il nuovo indirizzo non deve avere come valori da 11 a 16.


Regolare la posizione dei servo
E' possibile regolare l'angolo di movimento del servo in entrambi i sensi, tale funzione è molto utile per una regolazione fine della deviata. La procedura è la medesima sia in DCC che in analogico.

Per regolare la posizione dei servo si agisce in questo modo:
1. Muovere il servo che si desidera regolare inviando un comando dalla centrale (DCC) o agendo sull' interruttore (analogico)
2. Premere il pulsante S1, il servo si metterà nella posizione centrale e il led sul pin 13 lampeggia lentamente ad indicare che si è in fase di regolazione
3. Premere nuovamente il pulsante S1, il led lampeggia più velocemente e il servo inizia a spostarsi lentamente verso un lato. Quando questo avrà raggiunto la posizione desiderata premere il pulsante S1
4. Il servo si posiziona di nuovo al centro e inizierà a spostarsi lentamente nel verso opposto, il led lampeggia ancora più velocemente. Quando questo avrà raggiunto la posizione desiderata premere nuovamente il pulsante S1

La procedura è terminata e le nuove posizioni sono memorizzate nella EEPROM, per verificare il corretto funzionamento provare a dare i comandi dritto/deviata, il servo dovrà muoversi secondo le nuove impostazioni.

 In figura la foto del prototipo montato e delle board ricevute dal produttore cinese (il primo ordine - 5 piastre - è veramente economico 😉 e la qualità è veramente alta!). Accanto al pulsante per la programmazione, si vede il connettore per il comando dei servo in analogico.





Per chi fosse interessato ai files gerber per la realizzazione del PCB ne faccia richiesta tramite il modulo di contatto del blog in Home Page, riceverete un link ai files necessari.





















domenica 13 ottobre 2013

Gestire un cappio di ritorno in digitale con con Arduino (parte I)

Quando per esigenze di scena o semplicemente di percorso nel nostro tracciato ferroviario si viene a creare un cappio di ritorno, il nostro sistema digitale rileverà necessariamente un corto circuito quano un rotabile lo impegnerà.
Questo succede perchè una fase (in digitale non si ragiona in poitivo-negativo) del segnale DCC vene in contatto con l'altra quando il rotabile raggiunge il deviatoio che crea il loop.

Per poter gestire questo evento straordinario bisogna innanzitutto a livello di cablaggio isolare completamente la tratta del loop dal deviatoio mediante scarpette isolanti. L'azione da svolgere è semplicemente quella di invertire le due fasi tra loro quando il rotabile è completamente nel tratto sezionato.

Esistono numerosi dispositivi che svolgono questa funzione automaticamente il più famoso è il Lenz LK-200.

In questo articolo tuttavia illustrerò un metodo per gestire i loop in maniera totalmente automatizzata mediante Arduino.

Le principali funzionalità del sistema sono:


  • Comando dello scambio motorizzato mediante servocomando.
  • Rilevazione dell'occupazione del loop mediante barriera IR
  • Possibilità di utilizzare pulsanti esterni per movimentare il deviatoio.
  • Possibilità di utilizzare il DCC per movimentare il deviatoio.
Il principio di funzionamento è semplicissimo. Quando la barriera IR viene interrotta (quindi il treno stà ancora transitando) il sistema attenda che la barriera venga liberata (quindi il treno è completamente nel loop). Dopo un ritardo impostabile il sistema predispone il deviatoio per l'uscita al loop e commuta un relè che inverte le fasi del segnale DCC.
Mediante pulsanti esterni o mediante un comando DCC è quindi possibile scegliere il verso di percorrenza nel loop.

Ecco un piccolo video per illustrare il funzionamento del sistema






martedì 21 maggio 2013

Il protocollo Xpressnet


Il protocollo Xpressnet fu inventato da Lenz per connettere tra loro dispositivi di gestione quali Command Station, palmari, booster moduli feedback ecc. ecc. e si basa sullo standard RS485.
Il protocollo è di pubblico dominio ed è liberamente scaricabile dal seguente link .www.lenzusa.com/1newsite1/Manuals/xpressnet.pdf‎

Visto che Arduino monta una seriale perchè non sfruttarla per dialogare con un software di gestione plastico per veicolare i segnali di feedback  (ad assobimento, a pedale oppure a reed)?

Presto fatto, con poche righe di codice e studiando attentamente il protocollo si riesce a implementare abbastanza facilmente una emulazione del gateway LI 101F Lenz, il quale monitorando costantemente gli ingressi che, nel caso di una board Arduino Uno sono 12 escludendo i due pin 0 e 1 per la seriale, riesce a comunicare a RocRail lo stato dei sensori.

RocRail mappa i sensori a partire dal 512, in quanto da 0 a 511 sono riservati ai feedback posizionali per i deviatoi.

Naturalmente 12 ingressi sono pochini, ma già con una board Mega si hanno a disposizione 54 input di Feedback, oppure utilizzando i modulini di espansione di arriva ad una configurazione performante.






giovedì 2 maggio 2013

Modulo 8 uscite per accessori elettromagnetici

Il modulo ad 8 uscite per articoli elettromagnetici si basa sempre sul chip PCF8574 utilizzato in questo caso per pilotare uno stadio di potenza formato da un transistor TIP in configurazione Darlington.
Di seguito lo schema elettrico. Per chi ne avesse bisogno sono disponibili i file Eagle anche se si tratta di una versione beta, quando avrò terminato il testing i files verranno rilasciati con licenza GPL.

Lo schema è abbastanza semplice e si può notare come integri già una CDU (Capcitor Discharge Unit) con funzione anche di protezione per le bobine dei motori


La scheda ha tre morsettiere, la prima serve naturalmente per collegare i motori, la seconda serve per il collegamento del bus, e la terza per il collegamento dell'alimentazione di attivazione dei motori.

Per dimensionare la resistenza di base Rb ho ipotizzato una corrente di collettore Ic pari a 4A, quindi ricavo il valore di Ib tramite la formula:

Ib=3*Ic/Hfe

Il TIP121 ha un  Hfe pari a 1000 quindi:

Ib=3*4/1000=0,012 A

Per calcolare Rb

Rb=(Vdd-Vbe)/Ib

Essendo il transistor in configurazione Darlington la caduta di tensione tra Base ed emettitore Vbe è pari a circa 1,4V quindi:

Rb=(5-1,4)/0,012=360 Ohm



Il PCB è sviluppato a singola faccia per semplificare la realizzazione e presenta gli inevitabili ponticelli.

Lato rame

Lato componenti


La realizzazione non presenta difficoltà particolari, montate i componenti in ordine di altezza per meglio maneggiare la scheda. Questo è il risultato finale



sabato 9 marzo 2013

Interfaccia DCC per Arduino

Come primo passo per utilizzare Arduino con il DCC si rende necessaria la realizzazione di uno shield di interfaccia per poter permettere ad Arduino di interpretare correttamente i pacchetti provenienti dal bus DCC.

La cosa è abbastanza semplice e il tutto si riduce nello schema molto semplice riportato qui sotto.

Si può notare come il bus DCC sia disaccoppiato da Arduino mediante un photocoupler il quale trasferisce il segnale sul pin 2 mediante due resistori di pull-up.

Questa interfaccia presenta anche una morsettiera a 5 poli per il collegamento dei moduli I/O mediante il DAC-BUS.

I tre jumper inseriscono o meno i resistori di bilanciamento del bus, da inserire qualora sia presente più di un modulo di espansione o in presenza di problemi di comunicazione

Per lo sviluppo del PCB ho scelto la soluzione "shield", ovverosia un fattore di forma standard con i connettori a pettine per innestare la scheda direttamente sui connettori di Arduino.

Ecco il PCB a doppia faccia

LATO SALDATURA - BOTTOM
LATO COMPONENTI - TOP
SERIGRAFIA



Il montaggio della scheda non presenta nessun tipo di difficoltà trattandosi di componenti semplici e ben distanziati tra loro. Vi consiglio prima di procedere con la saldatura di prepararvi tutti i componenti

Procedere prima con i ponticelli di passaggio tra le due facce, poi i componenti passivi (diodi - resistenze), qini lo zoccolo per l'integrato, i pettini e per ultimi i componenti più voluminosi come i morestti e il portafusibile.
Alla fine del montaggio questo è il risultato:



Qui la scheda accoppiata correttamente con Arduino. Fate attenzione al morsetto di ingresso del segnale DCC, potrebbe interferire con lo schermo della porta USB di Arduino, vi consiglio di interporre un pezzo di nastro isolante.



Per testarne il funzionamento, all'interno del pacchetto MRWWA, (ne ho parlato nell'articolo precedente) è contenuto uno sketch chiamato DCC Tester. Caricatelo in Arduino, aprite il monitor seriale e se il risultato è quello della foto siete sulla buona strada! Quelli che vedete sono i pacchetti DCC riconosciuti da Arduino.



Se volete il PDF del PCB, lista componenti e altre informazioni scrivetemi pure a stefagnani at gmail.com (sostituite at con @) sarò lieto di rispondervi!

lunedì 26 novembre 2012

Impianto elettrico modulo scavalco

Terminata la costruzione dell'ultimo modulo, mi sono dedicato al cablaggio completo del modulo di scavalco.

I cablaggi alla fine sono risultati parecchi, in quanto oltre alle tre linee di trazione, ho cablato ogni scambio con un microswitch per la posizione del deviatoio e uno per la polarizzazione del cuore del deviatoio PECO

Innanzitutto ho realizzato tre PCB con il metodo della fotoincisione. Sul web sono presenti numerose guide e procudure, vi segnalo questa che si distingue per chiarezza.

Il master realizzato è conforme alle normative FSNAN ultime in vigore.

Questo è il risultato.



A norma FSNAN il PCB andrebbe realizzato in doppia faccia, ma avendo in casa solo basette monofaccia ho completato il montaggio realizzando i ponti mediante del filo rigido da 0,22 mmq.
Il banale montaggio si risolve con due connettori SUB-D a 25 poli entrambi maschi e una morsettiera a 15 poli.

Ecco il tutto montato e collaudato.



Per comandare i deviatoi ho realizzato una piccola console di comando riportnte lo schema di massima del tracciato. Ogni deviatoio viene comandato mediante due pulsanti NO e si ha un immediato feedback della sua posizione mediante due LED, uno verde (corretto tracciato) e e uno rosso (deviato).

La console è realizzata il legno MDF da 5 mm. La plancia è stata ottenuta da un foglio A4 laminato a caldo, opportunamente forato e incollato sul piano di MDF.

Con l'occasione ho anche battezzato la nascente stazioncina e il bivio ...

Sinottico di comando
 Il sinottico è collegato all'impianto mediante un flat da 40 poli (quelli comunemente utilizzati per gli Hard-Disks IDE) e da una basetta di appoggio con morsetti utili per il cablaggio.
Basetta di collegamento del sinottico all'impianto.

Come dicevo il cablaggio è "importante", per questo è imperativo un certo ordine e razionalità. a servizio dell'impianto ho installato due alimentatori, entrambi switching.

Il primo, da 12Vdc 5A dedicato al'alimentazione del sinottico e dei futuri segnali oltre che all'illuminazione. Mediante il tasto visibile in foto e un relè è possibile accendere e spegnere le luci a piacimento.

qui sotto un particolare dell cablaggio e dell'alimentatore e relativo relè

Alimentatore sinottico e illuminazione
Discorso a parte merita l'alimentazione per il movimento dei motori PECO PL-10.
Di fatto non sono motori ma semplici bobine. Come da riferimento del costruttore dovrebbero essere alimentati mediante una fonte a corrente alternata da 16 a 18 Vac. Le bobine si eccitano anche con una alimentazione in corrente continua. Le mie prove sono relative ia a 12 Vdc (alimentatore switching in foto) che 14 Vdc (alimentatore regolatore Fleischmann). Ebbene in ambedue i casi bisogna ricorrere ad una CDU (Current Discharge Unit)  per muovere le assetate bobine. Il problema è che per effettuare movimenti contemporanei è necessaria una CDU per ogni deviatoio ed inoltre è necessario un certo tempo tra un movimento e l'altro.

La situazione cambia radicalmente utilizzando un alimentatore a 24 Vdc, il movimento è rapido e deciso, con il mio alimentatore da 5A sono riusucito a fare 5 movimenti contemporanei (utili per impostare gli itinerari) ed inoltre tra un movimento e l'altro non è necessario attendere. qui sotto un dettaglio del cablaggio comprensivo dell'alimentatore deviatoi.