Skip to content

Lettura di un numero enorme di sensori analogici in tempo reale

Questo problema può essere risolto in vari modi, ma in questo caso condividiamo quella che a nostro avviso è la risposta più completa.

Soluzione:

La risposta più ovvia è il muxing, che significa creare percorsi elettrici in modo dinamico. Quindi basta iterare attraverso l'intera matrice, uno alla volta, o il numero di ingressi ADC (Analog to Digital Converter) che avete.

Se avete 3 ADC potete leggere una riga alla volta, poi cambiate gli ingressi in un mux e voilà, ora state leggendo la seconda riga, e poi continuate. Il problema di questa configurazione è che ci sono 80 righe e non esiste un mux 80:1 (ottanta ingressi per un ingresso) che io conosca. Ma ci sono mux 16:1 che si possono mettere insieme per ottenere 16*5=80 ingressi.

Avrebbe un aspetto simile a questo:

row  0-15 [16:1 mux]____________ 5 inputs in [8:1 mux]-ADC
row 16-31 [16:1 mux]_| | | |
row 32-47 [16:1 mux]___| | |
row 48-63 [16:1 mux]_____| |
row 64-79 [16:1 mux]_______|

I 4 segnali di ingresso ai mux 16:1 possono essere collegati insieme.

Quindi alla fine si ha un byte con segnali di controllo in questo schema:

Grouped up:
0, 3 bits for the 8:1 mux, 4 bits for the 16:1 mux

Bit for bit:
0,8:1 MSB, 8:1 LSB+1, 8:1 LSB, 16:1 MSB, 16:1 LSB+3, 16:1 LSB+2, 16:1 LSB+1, 16:1 LSB

Ciò significa che sono necessari 5 × mux 16:1 e un mux 8:1 = 6 circuiti integrati,

Moltiplicate per 3 perché potreste voler leggere una riga alla volta.

Ciò significa che si avranno 18 circuiti integrati, 7 segnali di controllo. È possibile ridurre il numero di circuiti integrati se si aumenta il numero di ingressi analogici. Sono 18 con solo 3 ingressi analogici.

Se invece si utilizzano 240/16 = 15 circuiti integrati, si ottengono 15 uscite analogiche dai 15 × 16:1 mux. Poi si potrebbe collegare in cascata con un mux 16:1, o 16:8. Alla fine si otterrebbero 16 circuiti integrati se si "ottimizzasse" il tutto con mux 16:1. Ma questo significherebbe che la vostra soluzione software non sarebbe così... elegante come sopra, sarebbe crisscross e modulus e altre cose, ma ehi, risparmiate 2 IC.

Quindi si legge una riga, la si elabora, poi si passa alla riga successiva, la si elabora, poi alla successiva e così via. Se date a ogni riga 10 µs, allora farete 80 righe in 0,8 ms, cioè $frac{1}{0,8ms}=1,25 kHz$, che è nell'intervallo a cui stavate pensando.

È possibile, ma è non un buon progetto.

Risolviamo la questione in un altro modo... più efficiente in termini di spazio e denaro.

*20 minuti più tardi* Hmmm... tutte le soluzioni che mi sono venute in mente sono o anche difficili da configurare e/o richiedono una calibrazione avanzata...

Oh beh, allora presumo che il vostro progetto sia appropriato per il vostro compito.

Buona fortuna.


Mi chiedo quali siano le altre soluzioni. Ti va di condividerle? - pandalion98

L'OP vuole misurare posizione e pressione. Sono due parametri. Questo significa che dobbiamo impacchettare queste informazioni all'interno di un segnale di tensione in modo da poterlo leggere e decifrare. Oppure dobbiamo inserirle in qualche altra unità di misura, come ohm, induttanza, capacità.

Ecco alcune delle mie idee, in cui penso solo a una colonna. Moltiplicate l'idea per 3 e avrete la soluzione completa per una chitarra a 3 colonne.

Prima idea:

Utilizzare due fili paralleli (a bassa resistenza) che vanno dal fondo della chitarra al manico della chitarra. Collegare la massa a uno dei fili sul fondo della chitarra. Realizzare un sistema di misura LR e misurare l'induttanza e la resistenza dell'altro filo, sempre sul fondo.

Quando si toccano entrambi i fili con un dito, si collegano i due fili e si ha alcuni induttanza. Più in alto si tocca la chitarra, più lungo sarà il circuito e maggiore sarà l'induttanza misurata. Più si preme, più superficie c'è tra i due fili e minore è la resistenza.

Non devono essere necessariamente due "fili", possono essere due nastri conduttori o qualcos'altro.

Perché non l'ho condiviso prima: Affinché sia affidabile, è necessario calibrare i sensori per ogni individuo, perché ognuno ha una diversa quantità di resistenza nella pelle. Ogni volta che si gioca, si suda e quindi si riduce ulteriormente la resistenza, quindi è necessario compensare questo aspetto. Ognuno suda in modo diverso, quindi anche questo aspetto dovrà essere calibrato per ogni persona.

Quindi l'induttanza => posizione del dito. La resistenza => la forza con cui si preme.

La deviazione dei valori che misurerete sarà nell'ordine dei nano Ω e nano H, il che significa che dovrete avere una conoscenza adeguata di CMRR e SNR. Altrimenti, tutto ciò che vedrete sarà la tensione di rete, supponendo che questo avvenga in ambienti chiusi. Oppure altre frequenze provenienti dal wifi o dalle lampade o da altre fonti di rumore. Quindi forse sarà necessario un filtro digitale adeguato. E... probabilmente è già al di fuori delle capacità e dello sforzo mentale accettabile di OP. Quindi l'idea è da buttare.

Seconda idea:

Creare una superficie conduttiva piatta sulla chitarra che sia collegata a terra.

Utilizzare un filo, un nastro conduttivo o un semplice conduttore piatto. Metteteci sopra della vernice non conduttiva o del normale nastro adesivo non conduttivo.

Fissatelo sulla chitarra dal basso verso il manico. Collegate il filo alla base della chitarra alle alte frequenze, nell'ordine delle centinaia di MHz. Ora inizieranno a verificarsi riflessioni evidenti. Perché tecnicamente avete una linea di trasmissione.... scadente in cui solo un lato è schermato.

Si invierà quindi un breve impulso a onda quadra e si misurerà il tempo necessario per farlo tornare indietro a causa della riflessione dovuta al fatto che il dito si trova sopra il filo isolato. Poi si misura l'ampiezza del picco riflesso alla base della chitarra. Quindi il tempo di percorrenza => posizione del dito. L'ampiezza della riflessione => quanto forte stavi premendo.

Non è una cosa semplicissima da configurare... se non si sa cosa si sta facendo. Quindi, ancora una volta, questo potrebbe essere uno sforzo eccessivo per OP. Quindi l'idea viene scartata.


Avrebbe un aspetto simile a questo:

enter image description here

Ho assunto un'impedenza caratteristica di 150 Ω, in altre parole una pessima linea di trasmissione. In realtà potrebbe essere peggio, non lo so, non l'ho mai fatto.

Ecco il link nel caso in cui qualcuno voglia scherzare.

Una delle parti più difficili sarà far corrispondere i punti finali a una resistenza, per questo potrebbe essere necessario un oscilloscopio o qualche altro strumento costoso.

L'altra parte difficile sarà quella di misurare effettivamente il TOF (Time of flight), ci sono alcuni IC in giro, ma non sono economici... ma si può sempre fare una sorgente di corrente costante e riempire un piccolo condensatore e poi leggere semplicemente la tensione.

L'idea è che quando un dito si avvicina al filo, il dito diventa parte del circuito e agisce come un condensatore. Più il dito è vicino, più è capacitivo. Per questo motivo la resistenza nel punto del dito diminuisce.

https://en.wikipedia.org/wiki/Transmission_line Scorrete un po' più in basso e vedrete che il parametro capacitivo fa parte del denominatore.

Ogni volta che un punto del filo non è compatibile, si verifica una riflessione, che può essere letta all'"uscita" da cui proviene il segnale. Se non c'è riflessione da nessuna parte, il segnale sarà terminato in uno dei due punti finali.

Più forte si spinge verso il basso, più area del dito diventa piatta => maggiore capacità dovuta all'area. Inoltre, qualsiasi materiale non conduttivo si trovi tra il filo e il dito verrà schiacciato leggermente per aumentare ulteriormente la capacità.

Terza idea:

Inserite un theremin all'interno della chitarra e misurate frequenza e ampiezza. Non so esattamente cosa emetta un theremin, ma sicuramente qualcosa si può usare.

A questo punto sono a corto di idee e dico di aver impiegato 20 minuti. Quando in realtà ne ho passati forse 10. Oh, bene. Ora ho sicuramente speso altri 10 minuti per scrivere questo, quindi i conti tornano.

A seconda della vostra fascia di prezzo, potreste prendere in considerazione l'uso di un FPGA tra il vostro Raspberry Pi e gli ADC, come la scheda DE0-Nano, che ha un buon supporto come scheda di sviluppo FPGA introduttiva. Questa soluzione ha il vantaggio di consentire la scrittura di codice per il clock di più o più ADC allo stesso tempo e la formattazione dei dati in un modo presentabile al Raspberry Pi.

Avete detto che stavate considerando l'MCP3008. Questo chip è SPI, quindi è possibile collegare più dispositivi insieme sullo stesso bus con diversi pin CS. Supponiamo di aver collegato tre chip a un bus, ottenendo così 24 canali ADC per 6 pin (tre linee dati e tre linee CS). Ciò significa 240 canali per 60 pin, il che rientra facilmente nelle capacità dell'FPGA.

Se si fa funzionare la linea di clock dell'MCP3008 alla sua frequenza massima di 2MHz, ci vorrebbero (15 clock/canale) * (8 canali/chip) * (3 chip/bus) * (1/2000000 secondi/clock) = 0,18ms per leggere tutti i 240 sensori, corrispondenti a una frequenza di campionamento di 5,56kHz.

Tre idee:

1. Fare un po' di multiplexing sul lato dell'alimentazione

In effetti, il circuito che avete descritto è costituito da un gran numero di resistenze variabili, ciascuna con un'estremità comune a una tensione di alimentazione. Si vogliono leggere tutti i valori delle resistenze e le altre risposte finora hanno per lo più suggerito approcci al multiplexing del segnale sul lato analogico.

Ma si potrebbe anche fare una parte o tutto il multiplexing sul segnale analogico. alimentazione dividendo il "binario" di alimentazione in n sezioni. Collegare insieme le serie di n sensori che hanno ciascuno un binario di alimentazione diverso. A questo punto, si alimenta un solo binario di alimentazione alla volta e si utilizza un ingresso ADC per leggere ciascun gruppo di piazzole. (Questo è il modo in cui funziona il circuito che legge la tastiera di un computer e il modo in cui sono cablati gli interruttori è spesso chiamato "interruttore a punti incrociati"). In definitiva, si potrebbe usare un solo ADC, collegato a tutti i "binari", e fare tutto il multiplexing collegando l'alimentazione a ciascun pad a turno.

L'unico inconveniente è che tutti gli altri pad devono essere isolati dal rail di alimentazione e non collegati a massa, come avverrebbe se si utilizzasse un'uscita digitale per ciascuno di essi. Ci sono diversi modi per risolvere questo problema, tra cui il cablaggio di ogni pad tramite un diodo, un transistor bipolare o un FET, oppure - non so quanto velocemente si possa fare in pratica, ma in linea di principio è possibile - utilizzando il pin di ingresso-uscita di un microcontrollore e impostandolo come uscita alta o come ingresso, quando dovrebbe avere un'impedenza relativamente alta.

L'accuratezza della misurazione dei sensori con questa tecnica potrebbe non essere perfetta rispetto all'uso di una singola sorgente di tensione fissa e di multiplexer analogici di alta qualità, ma sospetto che sarà abbastanza buona, soprattutto perché sono sicuro che i sensori di pressione avranno una certa tolleranza sulla loro resistenza - potrebbe essere necessario calibrarla per ogni sensore usando comunque una forza di riferimento.

2. Utilizzare microcontrollori con molti ingressi ADC.

Ad esempio, il PICAXE 40X2 ha 27 pin che possono essere utilizzati come ingressi analogici, per cui con 9 di essi si potrebbero coprire le proprie esigenze. È programmato in un semplice linguaggio BASIC e può agire come slave i2c - quindi si potrebbero leggere i 9 chip con un altro microcontrollore - oppure si potrebbe semplicemente inviare l'uscita di ciascun chip come dati seriali e leggerli nel computer host tramite convertitori seriali-USB. Non posso promettere con esattezza la velocità, ma credo che dovrebbe funzionare bene se il clock del PICAXE è alla massima velocità (64 MHz, utilizzando un risonatore esterno da 16 MHz). Naturalmente, se si è in grado di programmare un microcontrollore in C, si può fare la stessa cosa con il PIC18F45K22 su cui si basa il PICAXE.

3. Usare unità di ingresso analogiche di serie

Infine, se non vi dispiace spendere soldi per risparmiare tempo e la portabilità non è una priorità assoluta - ad esempio, se lo strumento deve essere legato a un rack con cavi spessi - potete acquistare un numero sufficiente di dispositivi di ingresso analogici ad alto numero di canali per misurare tutti i sensori contemporaneamente. Ad esempio, il Measurement Computing USB-2633 legge 64 ingressi analogici per poco più di 1.000 dollari.



Utilizzate il nostro motore di ricerca

Ricerca
Generic filters

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.