—-articolo da completare——-
Dopo ulteriore prove (e soprattutto una fruttuosa ricerca su internet) sono riuscito a capire come poter adattare la curva di sensibilità del sensore e linearizzarla grossolanamente via software.
L’articolo originale lo potete trovare qui:
Voltage-to-Range Conversion Article
Alla fine abbiamo la formula linearizzata:
R = (m’ / (ADC + b’)) – k’
(ne esiste una versione anche per uP con floating point, ma non è il mio caso).
I parametri m’, b’, k’ si ottengono prendendo alcune misure e inserendole in questa tabella –> gp2d12_calc, ancora una volta messa a disposizione dalla Acroname Robotics.
Nel mio caso, con ADC a 8bit, Supply voltage 5 V e costante k = 4 (come suggerito dal documento); si ottiene:
m’ = 1697
b’ = -1
k’ = 4
In questo modo si ottiene un incremento lineare (o quasi) della tensione con il diminuire della distanza (tra 80 cm e 10 cm).
Altro punto da rivedere: gestione dell’ADC.
Utilizzo l’ADC0804LCN con risoluzione a 8 bit, che permette una precisione sicuramente superiore al necessario; una volta che il sensore effettua la misura, dopo un intervallo di circa 5ms lascia in uscita la tensione corrispondente alla distanza; l’adc campiona il valore e dopo 5us l’8515 riceve i dati sui piedini della porta A.
Il convertitore penso di impostarlo come self-clocking, ovvero l’impulso di clock non proviene dal uP (circuito RC in figura)
(figura da datasheet ADC)
Attraverso i tre bit /CS, /RD, /WR avviene il controllo da parte del uP.
Lettura dati&gestione memoria
Gli otto bit provenienti dal convertitore vengono salvati nei registri interni, linearizzati e successivamente salvati nella ram (sempre interna). Il trasferimento definitivo avviene nel periodo morto tra una lettura e un’altra e consente una successiva elaborazione dei dati e, soprattutto, il confronto tra loro (possibile implementare mappatura o una più razionale scelta di direzione).
Nella ram vengono memorizzate tutte le letture corrispondenti alle x letture del sensore (o perlomeno alle x posizioni scelte per il motore).
Prima di essere trasferite in ram è possibile implementare un algoritmo di scelta della direzione basato sul confronto delle ultime 10 letture;