Interpolazione "interattiva" valori?

Ciao a tutti!
Sto implementando un sistema un pò complesso di gestione di alcuni motori...mi trovo nella necessità di dover calcolare i valori intermedi necessari ad un movimento, avendo partenza e fine.
Mi spiego meglio.

Mettiamo che io abbia un motore, con un encoder solidale all'asse.
(mettiamo che ad inizio operazioni io setti il punto "minimo" e il punto "massimo" usando i valori dell'encoder, quindi io so che il motore avrà come escursione da X a Y. Non ho problemi di fine corsa, diciamo...li gestirò "fuori", come limite massimo e minimo otlre i quali comunque non si potrà andare. )

mettiamo che io decida di fissare due punti a e b all'interno della corsa consentita (praticamente saranno dei "valori" del contatore dell'encoder) , e decida di voler far andare il motore da A a B in un tempo che può decidere l'utilizzatore, "programmandolo".
Come faccio a far calcolare ad Arduino i "passi intermedi" tra A e B considerando che ci deve mettere un tempo prefissato?

Sarebbe una cosa molto simile ad una "normale" interpolazione, ma a naso potrebbe servirmi un integrale dato che voglio mettere il tempo come variabile, giusto? :slight_smile:
E' già un pò che ci penso ma non riesco a trovare una soluzione!
Spero di essere stato sufficientemente chiaro, non è semplicissimo, via web! Se c'è qualcosa di incomprensibile, insultatemi pure e io cercherò di spiegarlo meglio XD

Mi date una mano o almeno uno spunto ? :stuck_out_tongue:

Aiuuuttto! :stuck_out_tongue:

Grazie mille a tutti in anticipo!

È una cosa molto difficile se deve essere precisa.

Devi muovere il motore da A a B nel tempo t1. Il problema é la rampa di accelerazione e di frenata che deve essere considerata nel calcolo della velocitá.
Senza accelerazione (dove il motore part subito con la velocitá costante) il motore deve essere pilotato in modo che la frequenza del segnale del encoder sia (B-A)/t1. Con le rampe di accelerazione e frenata la frequenza deve essere piú alta da compensare il tempo perduto per la accelerazione/frenata. Qua sta il problema.

Ciao Uwe

Ti crei un funzione che faccia fare un step il più piccolo possibile al motore. Una piccola rotazione, anche infinitesimale.
Calcoli quanti step servono per andare da A a B.
Ti calcoli in base al tempo che deve impiegare il motore per andare da A e B quanti cicli loop() farebbe il micro. Basta un calcolo di massima.
Dividi gli step necessari per andare da A a B per il numero di cicli ed ottieni l'incremento per ciclo.
Crei una funzione che ad ogni ciclo loop() muove il motore di n step.

Il metodo non considera i transitori di avvio o arresto.