sabato 3 marzo 2018

Cominciamo a parlare di software

Finora nel racconto di questo blog ho descritto soprattutto oggetti concreti ed operazioni di montaggio. Mi sono reso conto da subito, però, che l'aspetto più complesso ed interessante di questo progetto sarà sicuramente la programmazione di Arduino. Le principali fonti di complessità saranno l'interfacciamento con i controller dei motori brushless e la definizione di una procedura di controllo basata sulla pendenza dell'asse.
Entrambi questi aspetti sono completamente nuovi per me, tuttavia mentre per l'interfacciamento con i controller mi sento abbastanza confidente, trattandosi di controller destinati ad essere impiegati per applicazioni semplici, la procedura di controllo del moto, invece, mi è subito parsa un bel grosso problema da risolvere.


Cominciamo, comunque, dall'inizio, con carta e penna.

L'aver utilizzato un solo accelerometro a 3 assi per controllare la potenza da applicare ai motori è senza dubbio un fattore limitante.
La figura mostrata sopra da uno schema iniziale delle forze in gioco e di come il sensore MPU6050 le misurerà.
Il grosso problema è che avremo solo due assi a disposizione, quello Z e quello X.
In condizioni di veicolo fermo, l'asse Z del sensore misura la proiezione dell'accelerazione di gravità sulla perpendicolare al piano dell'hoverboard, mentre l'asse X del sensore misura la proiezione della medesima gravità sul piano dell'hoverboard. Queste due grandezze sono ovviamente correlate per cui, in definitiva, si dispone di un'unica misura di input al sistema. La misura meglio utilizzabile sarà l'accelerazione in direzione X in quanto avrà le modificazioni numeriche più ampie in senso percentuale, e quindi maggiore sensibilità.
Si aggiunga a questo che le misure di accelerazione del sensore hanno sovrapposto un rumore che rende davvero difficile misurare con precisione la pendenza dell'hoverboard.
Questo rumore è frutto di due fattori: le irregolarità del terreno e del movimento dell'asse e un intrinseco rumore elettrico generato dall'MPU-6050.

Dopo aver riflettuto per molti giorni, mi sono convinto che un approccio al controllo del moto di tipo analogico, con un sistema lineare (parlando tra ingegneri 😉) che modula l'accelerazione con la misura della pendenza, non è proprio praticabile. Servirebbero sensori e processori con accuratezze ben oltre quelle che sto usando.

Alla fine, dopo lunghissime riflessioni, sono giunto alla conclusione che sarà necessario un approccio "a livelli" o, per meglio dire, discretizzato.
L'idea sarebbe quella di misurare le accelerazioni sull'asse X e definire delle soglie che stabiliscano in modo molto grezzo se l'hoverboard è orizzontale o un po' piegato in avanti o indietro. Così facendo gli effetti istantanei dell'accelerazione e del rumore verranno mascherati dal fatto che il software necessità solo di sapere se l'hoverboard è "un po' inclinato" o lo è "un po' di più", in avanti o indietro, senza aver necessità di una misura precisa.
Con il rilevamento di questi "stati di pendenza" il software applicherà la tensione di controllo (throttle) ai controller comandando le relative accelerazioni o rallentamenti delle ruote.

E' da notare bene che la descrizione data qua sopra è la prima bozza del programma ed è tutta da verificare. Non ho alcuna esperienza per dire se questo metodo funzionerà e se sarà soddisfacente.
Ma se non si comincia a fare, provando, come si può imparare?

Nessun commento:

Posta un commento