Vai al contenuto
PLC Forum


Cronometrare Il Tempo - con un PIC 16F84


Neway

Messaggi consigliati

Sto realizzando un sensore di accelerazione da mettere all'interno di un modello di razzo, e si basa sull'inerzia di un liquido scuro all'interno una fialetta di vetro. la fialetta non è completamente piena, c'è una bolla d'aria che viene rilevata da una fotocellula. La fotocellula si trova nella parte bassa della fialetta, in modo che in condizioni normali la luce del led non arrivi al fototransistor; quando c'è una decelerazione il liquido passa tutto nella parte superiore facendo scattare la fotocellula. Il sistema dovrebbe servire per attivare una carica pirotecnica che faccia uscire il paracadute.

E' un sistema che non è stato mai utilizzato e necessita quindi di un attento collaudo per evitare eventi pericolosi sia per il mezzo che per le persone. Il metodo più facile di collaudo è registrare esattamente quanto tempo dopo il lancio il circuito rileva la decelerazione e metterlo a confronto con una ripresa da terra.

Per sapere esattamente quando avviene l'evento dovrei trovarmi a bordo del modello :P , ma non potendo devo limitarmi a cronometrare il lasso di tempo che intercorre tra due input che entrano nel PIC: il primo alla partenza (penso userò un interruttore meccanico) e il secondo alla decelerazione (il vero punto della mia ricerca).

Tra i due eventi passano circa 8 secondi

La domanda è perciò: come faccio a cronometrare il tempo tra due eventi?

Uso il TMR0?

Mi affido alle vostre menti :lol:

Grazie

Link al commento
Condividi su altri siti


Che risoluzione temporale occorre? Se un errore di 256 microsecondi e' accettabile si puo' usare il TMR0 in free running (lo si lascia conteggiare senza mai ricaricarlo) con un quarzo da 4MHz e niente prescaler, in questo modo il timer va in overflow esattamente ogni 256uS (3906,25Hz) e basta contare quanti overflow avvengono tra lo "start" e lo "stop". Con una variabile a 16 bit si possono contare fino a 65535 impulsi, corrispondenti a circa 16,77 secondi.

Per convertire il numero di impulsi in tempo si potrebbe fare: impulsi*1677/65536, e si otterrebbe un valore intero compreso tra 0 e 1677, con un'approssimazione di 1 centesimo di secondo.

Tuttavia il sistema di rilevazione mi lascia qualche dubbio... se la decelerazione e' dovuta in buona parte all'attrito con l'aria allora ok, ma sulla Luna non funzionerebbe. E inoltre, anche se l'effetto frenante dell'aria fosse sufficiente, la rilevazione avverrebbe allo spegnimento del propulsore (quando la velocita' e' massima) e non all' inizio della discesa...

Claudio F

Modificato: da Claudio F
Link al commento
Condividi su altri siti

Usare il tmr0 è quindi una buona idea, ma come faccio a rilevare quando va in overflow?

Magari riuscissi a farlo arrivare sullo spazio :) Purtroppo mi fermo bene che vada a 1 Km, sono solo modelli non chissà quale trovata aerospaziale. La decelerazione è buona perchè si passa da circa 15G a -2G circa: da 15 a 0 per lo spegnimento del propulsore, da 0 a -2 per l'attrito con l'aria che a 600Km/h si fa sentire.

Il circuito dovrebbe infatti scattare dopo questi eventi:

- Il razzo è fermo, il liquido copre la fotocellula: la variabile "fotocellula" è a 0

- parte il razzo, propulsore acceso, accelerazione positiva, il liquido continua a coprire la fotocellula: la variabile "fotocellula" è sempre 0.

- si spegne il propulsore, accelerazione negativa, il liquido va nella parte alta della boccetta lasciando la fotocellula scoperta: la variabile "fotocellula" è ora a 1

- il razzo continua a decelerare finchè non si ferma, accelerazione = 0, la forza di gravità fa scendere il liquido che torna a coprire la fotocellula: la variabile "fotocellula" è nuovamente a 0.

qui dovrebbe scattare il relè, quando la variabile torna a 0

Anche se l'esito dovesse essere fallimentare saprò usare meglio i PIC :D

Link al commento
Condividi su altri siti

Ad ogni overflow viene settato il bit T0IF (nel pic16F84 per esempio si trova nel registro INTCON), questo bit va riazzerato a mano, altrimenti poi rimane sempre alto. Puo' essere testato in due modi, o con una routine che ne controlla costantemente lo stato (polling), oppure affidandosi agli interrupt, il bit T0IF infatti puo' attivare una richiesta di interrupt nel momento in cui si setta a 1.

Ok, per la "frenata" siamo a posto ;) ... il problema pero' si sposta.... il liquido puo' tornare sul fondo del contenitore solo se il contenitore accelera verso il suolo meno di quanto faccia il liquido stesso, in sostanza dovrebbe essere presente una forza inerziale che in un campo gravitazionale puro non ci sarebbe (anche in questo caso sulla Luna il liquido non si schioderebbe di un millimetro dalla sommita' della fiala), questo vuol dire che affinche' il liquido torni giu' e' necessario che il razzo venga frenato dall'aria anche nella fase di discesa (facile).... e che riesca nel contempo a rimanere dritto (meno facile?:huh:)

Link al commento
Condividi su altri siti

Un razzo è di forma tale per cui durante il moto la punta sarà rivolta sempre davanti e la coda sempre dietro, lo dico anche per esperienza.

in ogni caso il circuito scatterebbe. Ci sono due casi:

1) c'è vento, quindi il modello segue una traiettoria parabolica. Una volta arrivato al punto di massima altezza (apogeo) dopo la decelerazione punta verso il basso e comincia ad accelerare, il liquido tornerebbe quindi verso il basso della fialetta.

2) Non c'è vento, il modello si ferma in verticale. La forza di gravità prevale e il liquido torna in basso. Se così per un qualunque motivo non fosse il modello punterebbe verso il basso (punto 1).

Ti ringrazio per i consigli elettronici e per le obiezioni che fanno sempre bene.

Cercherò di scoprire come determinare l'overflow del TMR0 con Pic Basic Pro, visto che programmo in basic.

Grazie Claudio

Link al commento
Condividi su altri siti

effettivamente devo darti ragione! La tua ipotesi dovrebbe essere esatta! Grazie per avermi fatto scoprire l'ulteriore inghippo.

A questo punto direi che proverò sia una massa inerziale dotata di molle per il ritorno sia una fiala di liquido abbastanza fluido sperando nel fatto che negli istanti di microgravità il fluido vaghi casualmente finendo con molta probabilità a coprire la fotocellula. E' soltanto una prova.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...