martedì 23 giugno 2015

Tarare il punto di arresto

Buona serata ai miei lettori!

Con questo post concludo la serie sulla configurazione dei decoder: ormai la stazione nascosta del mio plastico ha accumulato più di 100 ore di funzionamento senza grossi inconvenienti, gli automatismi hanno sempre funzionato bene così come i sensori. Quindi è ora di cominciare a pensare al piano superiore.

Ma torniamo al tema di oggi: il punto di arresto, o meglio l'inerzia di arresto e di partenza. La taratura di questo parametri è decisamente importante nel caso si vogliano operare trazioni doppie o simmetriche. Infatti, non è sufficiente tarare la curva delle velocità: se due loco hanno la stessa curva, ma inerzia diversa, ci si ritroverà giocoforza con una delle loco che slitta.

Questi due parametri sono legati a diverse CV, in funzione del profilo di arresto che desideriamo applicare. Alcuni decoder, come il Lenz STANDARD+ o l'ESU LokPilot 4, forniscono due modalità, distanza di arresto proporzionale e distanza di arresto costante. Qui sotto vedete due grafici di esempio tratti dal manuale del Lenz GOLD+.

15_distanza_di_arresto

Nel primo caso, a sinistra, quando il decoder riceve un messaggio di arresto (velocità impostata a 0), inizia subito a frenare ed lo spazio di arresto dipende dalla velocità: quanto più è alta, tanto più tempo impiegherà a fermarsi. Nel secondo caso, a destra, il decoder frena tanto più rapidamente quanto maggiore è la velocità. Purtroppo la strategia per ottenere la distanza di arresto costante non è univoca: ad esempio gli ESU LokPilot 4 introducono un ritardo variabile a seconda della velocità di partenza.

Ho fatto qualche esperimento, dato che ero piuttosto interessato alla distanza di arresto costante, soprattutto nella stazione nascosta dove ci sono i 7 binari tronchi, ma non sono stato molto convinto.

20150622_213808

Come potete vedere da questa foto, è vero che sono riuscito ad ottenere uno spazio di arresto di misura molto prossima alla lunghezza dei binari di ricovero ma, pensando alla possibilità di animare il traffico sul plastico, trovo che abbia ben poco senso che ogni loco impieghi 180cm per fermarsi, in qualunque condizione. E' vero che si può sempre abilitare la modalità manovra per aggirare questo comportamento, ma ve lo vedete un Frecciarossa 1000 con ha lo stesso spazio di arresto di una 245? Per questo ho deciso di disabilitare la frenata con spazio di arresto costante, impostando il bit corrispondente in ogni decoder (scusate se non sono preciso qui: purtroppo ogni costruttore usa il suo standard in questo caso).

Quanto allo spazio di arresto proporzionale, per tararlo è necessario scegliere una velocità di riferimento: nel mio caso ho scelto il soliti 30kmh discussi nel post precedente. Quanto alla distanza, visto che non ho così tanto spazio sul plastico, ho pensato di scegliere 20cm. Fatta questa scelta, ho segnato il punto di arresto con una freccia. Al primo tentativo, CV4 = 5, sono andato decisamente corto.

20150622_202329

A questo punto ho aumentato l'inerzia, CV4 = 20, ma sono andato abbastanza lungo.

20150622_202404

Terzo tentativo, CV4 = 15, ancora corto ma ci siamo quasi.

20150622_202436

Risultato finale, CV4 = 16, a segno sulla freccia. Ho ripetuto la stessa procedura anche con la E191.003 e fortunatamente il settaggio ha dato lo stesso risultato.

Per quanto riguarda l'inerzia di accelerazione ho usato come valore di primo tentativo lo stesso usato per l'inerzia di frenata. Fortunatamente è andato tutto bene al primo colpo, ed ora le due loco si comportano ottimamente e nessuna delle due slitta.

A presto!

martedì 16 giugno 2015

Tarare le velocità

Buona serata ai miei lettori!

Sull'onda dell'entusiasmo dell'essere riuscito a leggere le CV come si deve questo weekend sono subito passato alla taratura delle velocità delle loco. Però, per fare un buon lavoro, come si vede in questo post con video (link) di Vikas Chander, è necessario uno strumento per misurare la velocità delle loco in scala.

Cercando in giro su internet si trovano varie soluzioni: Vikas utilizza un sistema di Accutrack (link) basato su una barriera a raggi infrarossi da installare su un tratto di binario, ma esiste anche il sistema proposto da Bachrus (link) che si basa sulla lettura della velocità di rotolamento; in questo caso si usa un set di cuscinetti a sfera.

Dal mio punto di vista, il secondo sistema è preferibile: non c'è bisogno di un lungo tratto di binario per permettere alla loco di raggiungere la velocità da misurare, quindi il tutto rimane più compatto. Una soluzione per realizzare in casa questo sistema è quello di sfruttare un vecchio mouse di quelli con la sfera. Questi "topi" infatti usano una coppia di ruote traforate per individuare gli spostamenti della sfera.


Quanto la ruota gira, le lamelle ostacolano il fascio di luce emesso dal led (light emitter) e ricevuto dal rivelatore (light detector). Stessa cosa si può fare per misurare la velocità dei una loco: se la ruota fosse trascinata nel movimento da un assale della loco, basterebbe misurare quanto frequentemente il fascio di luce viene interrotto per conoscere la velocità della loco.

Ovviamente, per permettere la rotazione degli altri assi, sono necessari dei cuscinetti a sfera. E visto che nel cassetto degli attrezzi me ne erano rimasti una decina dal mio piega rotaie, ho iniziato il progetto. Purtroppo però il diametro dei cuscinetti era troppo grande e, visto che ne servono due per asse, sarebbero andati a cozzare contro i tubi lancia sabbia di alcune delle mie loco.

Pertanto sono tornato alla soluzione basata sulla barriera infrarossa. Fortunatamente i sensori IR che ho progettato, realizzato e che vi ho mostrato vari post fa possono essere riciclati per questo scopo. In questo caso il funzionamento è ancora più semplice: per misurare la velocità basta contare quanto tempo passa tra l'interruzione della prima barriera e della seconda.

20150614_143401

Per misurare i tempi e convertirli in una velocità è sufficiente un microcontrollore di bassa fascia: se ne trovano di molto economici in commercio, io preferisco il 12F1840 di Microchip. In questo caso però volevo qualcosa che fosse già configurato per interfacciarsi con il PC via USB, per mostrare il risultato della misura: avendo a disposizione un paio di schede di sviluppo di Xplain di Atmel, la scelta è caduta su quella.

20150614_143743

La potete vedere qui sopra dietro la basetta di sviluppo blu; quattro cavetti la collegano ai sensori: dall'alto alimentazione per i sensori a 5V, massa, e uscita di ciascun sensore. In questa immagine inoltre potete vedere che ho usato due spizze di legno per mantenere la basetta con i sensori ben parallela al binario.

20150614_143608

Il funzionamento del mio tachimetro casalingo è semplicissimo. Una volta programmato e collegato il sistema al PC, con il mio fido cellulare trasformato in controllo remoto per RocRail programmo la loco per farsi un giro sul cappio di ritorno a velocità costante.

20150614_143636

Quando la loco passa davanti al primo sensore si accende un led rosso, che segnala l'interruzione della barriera, ed il sistema inizia a contare in millesimi di secondi.

20150614_143706

Quando la loco passa davanti al secondo sensore, si accende anche il secondo led rosso ed il sistema trasmette al PC la velocità rilevata, tradotta in km/h in scala.

20150614_143834

Il sistema è in grado di distinguere il verso con cui la locomotiva attraversa il tachimetro e lo segnala inserendo il prefisso BWD -backward- se la loco sta andando indietro o FWD -forward- se sta andando avanti. Questo aiuta a verificare la simmetria nelle condizioni di marcia: capita a volte, infatti, di leggere in qualche recensione che il comportamento nelle due direzioni non è esattamente identico.

Ora che ho la possibilità di misurare la velocità delle loco, posso dedicarmi alla taratura. Come suggerito da Chander nel suo post, ho pensato di fissare la velocità media -step 14 su 28- a 30km/h, ovvero alla velocità che un macchinista dove tenere in approccio ad un segnale di prima categoria disposto a via impedita. Per quanto riguarda la velocità minima, ho cercato di scendere fino al passo d'uomo, ovvero 4km/h. Infine, per la velocità massima, basta cercare in rete la velocità massima del rotabile corrispondente.

A questo punto ho provato a sfruttare la capacità dei decoder di regolare automaticamente le velocità dei passi intermedi fissando la velocità minima (CV2), massima (CV5) e media (CV6). Ho fatto qualche prova, ma non sono stato soddisfatto dai risultati. Pertanto ho preferito utilizzare le CV 67-94 e creare una mia personalissima curva delle velocità; per fare questo ho dovuto anche impostare ad 1 il bit 5 della CV 29.

20150614_234944

Prima di tutto ho impostato una curva lineare da 2 a 56. Poi ho misurato con il tachigrafo la velocità della loco agli step bassi (1-3) alla ricerca dei fantomatici 4km/h. Con una curva fatta in questo modo è piuttosto facile trovare il valore giusto: se la velocità non corrisponde esattamente ad uno step, quindi ad un valore pari, allora è sicuramente il valore dispari tra i due step più prossimi. Stessa cosa vale per la ricerca dei 30km/h: in questo caso però la ricerca parte dai valori centrali (13-15). Infine, per quanto riguarda la velocità massima, ho usato ancora una volta una curva lineare, ma questa volta da 2 a 254.


Ottenuti i valori giusti, mi sono scritto un foglio di calcolo con Google Documents che imposta una curva lineare per gli step 1-14 ed una curva quadratica per gli step 14-28. Ho fatto in modo che la pendenza della curva allo step 14 per entrambe le metà della curva sia la stessa: in questo modo non si nota alcuno scatto al passaggio tra i due regimi.

Impostare la velocità per la E 190 322 CFI, che monta un Lenz STANDARD+ è stata una pacchia. In pratica mi sono ritrovato con un valore di 4 per i 4km/h, un valore di 30 per i 30km/h e di 160 per i 160 km/h. Una favola!! La E 191 003 FuoriMuro, che invece monta un Esu LokPilot 4, è stato decisamente più ostico.

Comunque sia, sono finalmente riuscito a fare la prima doppia trazione di Caprazzino: terminata la taratura, la E190 e la E191 si sono comportate ottimamente. Non si sono mai strattonate e hanno superato l'ingresso della stazione nascosta senza alcun problema, a tutte le velocità.

Ora tocca alla distanza di frenatura.

A presto!

martedì 9 giugno 2015

La lettura delle CV (3)

Buona serata ai miei lettori!

Finalmente sono riuscito a sistemare la lettura delle CV sul mio booster. La settimana scorsa ero effettivamente riuscito a leggere le CV in modalità lenta, ma i tempi di acquisizione erano troppo lenti per i miei gusti. La modalità "fastgetcv" offerta da RocRail avrebbe dovuto risolvere il problema, ma in realtà ne ha creato uno nuovo, legato al fatto che il programma leggeva sempre un valore in più rispetto al dovuto.

Lavorando durante il weekend sono riuscito a risolvere il problema.

Prima di tutto mi sono stufato di dover ricompilare tutte le volte TUTTO RocRail anche in presenza di minime variazioni di una porzione di codice secondaria. Di conseguenza, non me ne vogliano a male gli sviluppatori, ho disabilitato la ripulitura del codice a livello di makefile.

Ho pertanto ritoccato il file 'makefile' nella cartella 'rocrail', rimuovendo il comando

$(MAKE) clean PLATFORM=$(PLATFORM) NATIVE=$(NATIVE)$(CS)

dalle righe 162-167 e 171, in pratica da così...

makefile_pre

a così...

makefile_post

(guardate le foto ingrandite se volete vedere qualcosa...)

A questo punto, ogni volta che ricompilo il programma, il sistema si preoccupa soltanto dei file che ho modificato, così da mezzora di compilazione siamo passati ad un minuto. Ora sì che si ragiona!

Bene. Ora tocca alla funzione 'nmragetcvbyte' a cui si fa riferimento alla riga 495 di ddx.c. Questa funzione si occupa di inviare il segnale DCC per la lettura della CV ed aspettare il segnale di ACK corrispondente.

La parte incriminata della funzione parte intorno alla riga 1356, ovvero il ciclo di lettura vero e proprio. Immagino che le sviste di programmazione presenti siano legate ad una sedimentazione di diverse versioni, o almeno lo spero...

Dopo aver rimosso alcune inizializzazioni multiple della variale associata al segnale di ACK, la vera chiave di volta per il mio booster è stato abilitare il ciclo di attesa 'waitMM' anche in modalità 'fastgetcv'. Ovvero ho sostituito questo:

SerialOp.flush(data->serial);
ack = scanACK(data->serial);
sendsize = __createCVgetpacket(cv, value, SendStream, start);
if( value % 10 == 0 || !fastcvget )
  TraceOp.trc( __FILE__, TRCLEVEL_MONITOR, __LINE__, 9999,\
   "PT: sending %d bytes checking value %d...", sendsize, value);
SerialOp.write(data->serial,SendStream,sendsize);
if (start)
  ThreadOp.sleep(240);
else if( !fastcvget )
  ThreadOp.sleep(40);
ack = 0;
/* wait for UART: */
ack=waitUARTempty_scanACK(data->serial);
for( i = 0; i < (fastcvget ? 5:120) && ack == 0; i++ ) {
  ack = scanACK(data->serial);
  if( !fastcvget )
    SerialOp.waitMM(data->serial,5000,100);
}

con questo:

SerialOp.flush(data->serial);
sendsize = __createCVgetpacket(cv, value, SendStream, start);
if( value % 10 == 0 || !fastcvget )
  TraceOp.trc( __FILE__, TRCLEVEL_MONITOR, __LINE__, 9999,\
    "PT: sending %d bytes checking value %d...", sendsize, value);
SerialOp.write(data->serial,SendStream,sendsize);
if (start)
  ThreadOp.sleep(240);
else if( !fastcvget )
  ThreadOp.sleep(40);
/* wait for UART: */
ack = waitUARTempty_scanACK(data->serial);
for( i = 0; (ack == 0) && i < (fastcvget ? 5:120); i++ ) {
  ack = scanACK(data->serial);
  SerialOp.waitMM(data->serial,5000,100);
}

Non è molto diverso, ma è quel tanto che basta per fare la differenza! Ora posso finalmente scaricare il profilo di velocità della mia E191.003 FuoriMuro.

curvaVel_E191

Ed infatti, eccolo qui. Giusto qualche minuto di attesa e finalmente ho sotto mano la curva.
Ora posso sistemare la velocità massima e tutte le intermedie come si deve.

A presto!

giovedì 4 giugno 2015

La lettura delle CV (2)

Buona serata ai miei lettori!

Il lavoro sulla lettura delle CV continua. Durante la scorsa settimana ho ripulito il codice che avevo scritto per il microcontrollore: grazie ad un simpatico oscilloscopio su scheda (link) che mi ha regalato quest'anno mia moglie per il mio compleanno sono riuscito ad acquisire l'andamento temporale della corrente assorbita. Ci ho lavorato un poco su con il mio programma di elaborazione dati preferito (link) ed ho aggiornato di conseguenza i filtri per il segnale di ACK. E questo è il risultato:

20150603.232933.706 r9999c 000028AC impl/ddx 1334 PT: cvget for 0
20150603.232933.707 r9999c 000028AC impl/ddx 1341 PT: enable booster output
20150603.232933.708 r9999c 000028AC impl/ddx 1351 PT: power on cycle
20150603.232933.709 r9999c 000028AC impl/ddx 1353 PT: start polling...
20150603.232933.709 r9999c 000028AC impl/ddx 1367 PT: sending 678 bytes checking value 0...
20150603.232934.610 r9999c 000028AC impl/ddx 1367 PT: sending 216 bytes checking value 1...
20150603.232935.277 r9999c 000028AC impl/ddx 1367 PT: sending 216 bytes checking value 2...
20150603.232935.944 r9999c 000028AC impl/ddx 1367 PT: sending 216 bytes checking value 3...
20150603.232936.017 r9999I 000028AC impl/ddx 1059 PT: ACK detected.
20150603.232936.023 r9999c 000028AC impl/ddx 1405 PT: ack = 1
20150603.232936.023 r9999c 000028AC impl/ddx 1407 PT: disable booster output
20150603.232936.034 r9999I cmdr024C OControl 0211 Program event...value=3

Ok, ora ci siamo anche sui valori. Purtroppo però essendo disattivata la proprietà "fastgetcv", in presenza di valori elevati del valore della CV controllata, i tempi di acquisizione sono troppo lunghi per i miei gusti. Pertanto ho deciso di abilitare "fastgetcv", ma il problema del +1 si è ripresentato di nuovo... 

Però, guardando il log di rocrail, mi sono accorto di un comportamento secondo me anomalo:

20150603.233442.113 r9999c 00002FCC impl/ddx 1334 PT: cvget for 0
20150603.233442.113 r9999c 00002FCC impl/ddx 1341 PT: enable booster output
20150603.233442.114 r9999c 00002FCC impl/ddx 1351 PT: power on cycle
20150603.233442.114 r9999c 00002FCC impl/ddx 1353 PT: start polling...
20150603.233442.761 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.762 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.763 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.764 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.765 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.766 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.767 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.768 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.796 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.797 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.798 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.799 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.800 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.801 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.802 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.803 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.804 r9999I 00002FCC impl/ddx 1059 PT: ACK detected.
20150603.233442.870 r9999c 00002FCC impl/ddx 1405 PT: ack = 1
20150603.233442.870 r9999c 00002FCC impl/ddx 1407 PT: disable booster output
20150603.233442.885 r9999I cmdr0105 OControl 0211 Program event...value=4

Perché Rocrail impiega ben 17 passaggi per accorgersi che il segnale di ACK è attivo?
Devo studiare ancora un poco: purtroppo compilare RocRail richiede parecchio tempo, quindi il lavoro procede lentamente.

Nel frattempo, per non tediarvi ulteriormente con la programmazione, che con il modellismo c'entra solo in parte, vi faccio vedere qualcosa di curioso. Ricordate i primi post circa la linea principale di cui quella per Caprazzino è una diramazione?  Se sì, dovreste anche avere presente il fatto che era pensata sul tracciato della vecchia linea Rimini-Novafeltria. Si da il caso che il primo giugno sia andato a Pennabilli con mia moglie ed una coppia di nostri carissimi amici. Partendo da Bellaria, una delle possibili strade è proprio la provinciale costruita sul sedime della vecchia linea.

Pur non avendo la possibilità di fermarmi per scattare le adeguate foto del caso, sono rimasto piacevolmente stupito della quantità di manufatti ancora esistenti. Per dare una idea anche a voi, ecco una piccola carrellata tratta da Google Maps.

Ex stazione di Villa Verucchio




Imbocco galleria a Ponte Verucchio


Ex Stazione di Pietracuta




Ex stazione di Dogana


Potete trovare altre foto qui (link), sul sito di Ferrovie Abbandonate. Seppure in cattivo stato di conservazione, sono sicuramente un'ottima fonte di ispirazione per per il mio plastico. Mi sa proprio che questa estate potrei organizzare una spedizione fotografica per ottenere qualche particolare in più...

A presto!