Lettura potenziometro lineare

Richieste di supporto in merito a problemi su hardware e firmware

28/03/2012 12:03:35
Gravatar
Totale Interventi 8

Lettura potenziometro lineare

Ho bisogno di loggare un potenziometro lineare per un tempo <=1ms, 

facendo dei test con lo Spyder Fez, ho fatto questo tipo di operazione

 

un timer settato a 1ms come tick che legge la percentuale e la appende su una stringa aggiungendo i milisecondi

un'altro timer che è settato a 1000ms che al tick fà il print su consol della stringa e la pulisce

 

Il problema è che ricevo una lettura ogni 10/12 ms quando và bene... 

 

come posso fare?

28/03/2012 12:17:48
Gravatar
Totale Interventi 75

Re: Lettura potenziometro lineare

Purtroppo, almeno in questo momento, la risoluzione temporale che ti serve non è alla portata di una scheda basata su .NET MF.

Per campionare un ingresso analogico alla frequesta di 1000 sample al secondo ti serve un componente esterno dedicato, come ad esempio un'altra piccola scheda a microcontrollore (io ho usato per questo stesso scenario un MSP430 LaunchPad reperibile al costo di circa 5€ che colloquia con la scheda FEZ via SPI).

In alternativa puoi utilizzare (ma è più complicato) una soluzione basata su RLP, ossia l'esecuzione di codice nativo (da scrivere in C, in altri termini) come indicato qui : http://code.tinyclr.com/project/372/sampling-adc-at-up-to-3khz-or-more-using-rlp/

Se può interessarti, proprio per questo tipo di applicazioni ho progettato (e sto realizzando) una scheda prototipo basata sull'USBizi (il chipset del FEZ-Panda, per intenderci) contenente al suo interno un MSP-430 e un CPLD (diciamo un FPGA "in miniatura") che specializzano le funzionalità in cui il .NET MF è più "debole".

28/03/2012 14:56:28
Gravatar
Totale Interventi 8

Re: Lettura potenziometro lineare

grazie!

Non ho molto avuto tempo di approfondire ora ma ne ho ordinati 3 visto il costo :) e l'assenza di spese di spedizione, anche se il mio terminale è "portabile" quindi è difficile che riesca a mettere la scheda o persino 2 (ho due potenziometri), visti questi limiti comincio a dubitare che possa supportarmi quello che ho in mente 

GPS 20mhz 
IMU9 razor
2 SLS190/095 p&g
Temperatura IR

ed eventualmente ricevere dati da dispositivi ANT+

il tutto loggato 10/s tranno i pot che dovrebbero essere loggati da 1000 in sù in teoria.

a tuo parere... vista l'esperienza una Spyder può supportarmi funzionalità simili?

O devo sbassare di molto il tiro?

28/03/2012 22:04:41
Gravatar
Totale Interventi 75

Re: Lettura potenziometro lineare

Sono indiscreto vero se chiedo che tipo di dispositivo devi realizzare? Semprerebbe un controller per un velivolo, se non fosse per i potenziometri lineari...di cui ignoro completamente l'uso previsto!

Ad ogni modo, per tornare sul tema, il campionamento di segnali analogici e più in generale l'acquisizione di segnali con timing nell'ordine dai 20 ms in giù è piuttosto critico in schede .NET MF (20ms è lo slot temporale concesso dallo scheduler della runtime a ciascun thread, per esempio), che sono "by design" più votate all'implementazione di logiche complesse, a gestire comunicazioni "ricche" (Ethernet, WiFi, ZigBee, ecc.), a pilotare dispositivi complessi quali display, ecc.

Ciò non implica che in generale debbano essere scartate, ma semmai integrate con hardware esterno o eventualmente "spremute" (soluzione in realtà poco "elegante" sul piano della qualità del progetto software, però) scrivendo in nativo (o accedendo dorettamente ai registri del microcontrollore, feature implementata sulle schede GHI e illustrato nel wiki su tinyclr.com) quello che in "managed" stenta a funzionare. Certo è che se la parte nativa poi diventa corposa (rispetto alla controparte managed) c'è da chiedersi se non si poteva scegliere la strada dello sviluppo tutto nativo, no?

Tieni conto comunque ogni scheda .NET MF ha comunaue almeno due interfacce di comunicazione (I2C e SPI) che possono tranquillamente lavorare a 1-2Mbps, così come c'è un ottimo supporto per la UART hardware che anche a 115200 non impegna minimamente il normale "flusso" di funzionamento del firmware principale. Alcune schede (quelle GHI ad esempio) implementano in hardware anche un canale di comunicazione parallelo (utilizzato tipicamente per pilotare display), portando le interfacce a larga banda (per non parlare della rete, dove supportata) a ben 3-4 scelte possibili. Questo significa che una volta individuato il "giusto" componente esterno non ci sono di norma altri aspetti critici da affrontare.

29/03/2012 22:52:15
Gravatar
Totale Interventi 8

Re: Lettura potenziometro lineare

Eccomi, scusa il ritardo nella risposta ma tra famiglia e lavoro mi dedico a questo mio hobby :) appena posso, 

Si stò creando uno strumento di telemetria per bici..

potenziometri lineari, gps, IMU9, temperatura ecc..

Ne sò poco di elettronica sono 2 anni  che mi ci dedico a tempo perso, programmato qualche pic con la piattaforma di sviluppo EasyPic, poi mi sono buttato a scuriosare con il microframework.

Da inesperto ti chiedo .. come mi conviene loggare questi dati ?

ti spiego, pensavo di lanciare dei tread paralleli quantìi sono o componenti e scrivere al volo i dati su una queue centrale, e alla fine un'altro tread si occupava di elaborare i dati e o salvarli su sd oppure inviarli per ZigBee..

non sò se sia il metodo più corretto?

La lettura dei 2 potenziometri al momento posso portarla a 10ms, poi vedrò, il porblema è sincronizzare il tutto, cioè, se loggo solo la percentuale riesco a stare sui 8/9ms se comincio a mettere un timestamp i tempi si appesantiscono di molto .. ma altimenti come metto i dati su una linea temporale?

Ho un pò di confusione :)

 

avevo aperto parallelamente a questo tred un'altro nel sito ufficiale MS http://www.netmf.com/gadgeteer/forum/default.aspx?g=posts&t=2373 dove per velocizzare mi consigliavano l'uso di un'array di double.

Ma a anche a quel punto .. come salvo? faccio un array con dimensione 1000 poi salvo usando come indice i millisecondi?
Poi con un'altro processo terminato dovrei svuorarlo ed elabolarlo ogni secondo.. credo sia difficile da allineare bene.

 

:) Grazie Lorenzo per le dritte  

01/04/2012 22:17:38
Gravatar
Totale Interventi 75

Re: Lettura potenziometro lineare

Moooolto interessante! Sono discretamente appassionato di bici (esco ogni giorno se ce la faccio e ho totalizzato quasi 7000 km negli ultimi 12 mesi) e la cosa non ha mancato di stuzzicare la mia curiosità, sopratutto perché non sembra che i sensori di cui parli forniscano i segnali che mi sarei aspettato di dover rilevare in una telemetria ciclicstica. Nella mia idea di telemetria penserei infatti a rilevare e trasmettere velocità, frequenza della pedalata, frequenza cardiaca, posizione GPS, ma niente di tutto questo utilizzerebbe i potenziometri lineari, sensori di temperatura o IMU.

Puoi dirci qualcosa in più sul tuo progetto o è top secret Sealed?

Quanto al tuo quesito, l'approccio che suggerisci ricorda molto quello che tipicamente avviene all'interno di un firmware basato su un qualche tipo di RTOS, in cui vari Task si contendono slice temporali dello scheduler e realizzano uno pseudo-parallelismo. E' chiaro che il multi threading permette di avvantaggiarsi nei casi in cui ci siano latenze dovute a I/O, per cui sono d'accordo in linea generale, ma il rovescio della medaglia è che in questo modo tipicamente perdi di determinismo, per via della "caoticità" dello scheduler di sistema, che tra l'altro utilizza degli slot temporali molto molto lunghi (20 ms).

Il mio consiglio è quello di avvalersi di una schedina slave per la parte di trasduzione, in cui il timing dell'acquisizione sia assolutamente autonomo ed indipendente da quello della scheda master, in modo tale da essere più deterministico anche nell'indicazione del timestamp del campione, per poi prevedere nel firmware master un polling (idealmente via SPI o I2C) al ritmo massimo permesso. La parte ZigBee la lascerei alla scheda .NET MF in virtù delle possibilità offerte da librerie quali MFToolkit (su codeplex).

Idealmente il collo di bottiglia dovrebbe quindi essere il bitrate dello ZigBee che per XBee è intorno ai 250Kbps, più che sufficiente per lo scopo, no?

02/04/2012 09:55:45
Gravatar
Totale Interventi 8

Re: Lettura potenziometro lineare

Si ma di fondo neanche mi serve zigbee.. la necessità è salvare su sd i dati, inviarli in realtime sarebbe un plus.
Io dopo aver corso 13 anni in xc vista la mancanza di tempo di allenarmi negli ultimi anni ho cominciato a praticare il downhill,
e come direttore sportivo seguo una squadra di coppa.

Quindi volevo farmi e testare con loro un dispositivo.. tutto qui .. quindi per questo vedi che ho dato la priorità ai potenziometri giroscopi ecc , invece che l'ANT+ per cadenza HR ecc...

Se ti interessa posso condividere il progetto e sei hai del tempo da perdere mi puoi dare una mano a mettere i mattoni per farlo partire dal verso giusto :) 

02/04/2012 10:01:35
Gravatar
Totale Interventi 2

Re: Lettura potenziometro lineare

Volentieri, anche perché potrebbe essere un buon caso d'uso per la nuova scheda di cui ti parlavo che sono (miracolosamente) riuscito a realizzare questo fine settimana (qualche dettaglio nel Blog appena trovo un po' di tempo per scrivere).

02/04/2012 10:06:19
Gravatar
Totale Interventi 75

Re: Lettura potenziometro lineare

Ehm, ha risposto per me il mio "alter ego"...

02/04/2012 10:50:25
Gravatar
Totale Interventi 8

Re: Lettura potenziometro lineare

:) immaginavo

appena ho tempo cerco di fare uno schema di ciò che ho in mente e dei dispositivi che stò collegando .

Non conosco I2C al di fuori dell'utilizzo di base, ma ho visto in giro degli Hub  I2C cioè 4 ingressi e 1 uscita .... ma per caso riesco con 1 porta a controllare 4 periferiche  I2C come con l'usb?