Rieccomi qui, dopo giorni di apprendimento, test, e deprivazione di tranquillità mentale ![]()
Sono riuscito a ottimizzare la gestione dei motori, semplicemente usando come si deve la lib AccelStepper.
Ho scritto il codice in base a quello che volevo facessero, e a loro volta fanno quello che gli dice il codice: che bella sensazione :'D
Bando alle ciance.
@dinodf, grazie per il supporto, mi hai aiutato a far quadrare la situazione e la gestione dei motori.
Ho isolato i sensori di finecorsa perché complicavano la gestione, e ho utilizzato invece il conto dei passi effettuati, per fargli capire le rispettive posizioni (aperto o chiuso).
I finecorsa sono posizionati in modo che quando eccitati, il motore non è nella posizione giusta. E non mi è possibile spostare e regolare questi finecorsa. Quando usavo il primo sketch condiviso ero riuscito a inserire un mini ciclo FOR per farlo continuare di tot giri dopo che quello venisse eccitato. Funzionava, era l'unica parte che effettivamente muoveva i motori nel giusto modo, ovvero richiamando runSpeed() senza ritardi.
Cambiando approccio ed essendo costretto a riscrivere il codice per utilizzare al meglio AccelStepper, ho eliminato la lettura dei finecorsa perché appunto, sapendo i passi compiuti in apertura, sa anche quelli che deve fare per chiudersi.
Inizialmente ero preoccupato nel lasciarli sempre in tensione perché pensavo di non aver regolato a modo la corrente sul driver A4988, ma poi, facendo altre prove su altri motori, ho visto che la posizione del pot che la regola -sui motori effettivi usati nel progetto- è a circa l'80% dell'escursione massima.
I motori hanno una corrente max di 1.8A e il driver una corrente max di 2A. Direi siano perfetti così. I driver si scaldano, ma non mi preoccupano, adesso.
Mi rimane solo una cosa, da risolvere: quando Arduino viene inizializzato, con il setup dei vari pin, i motori si muovono per un attimo (2-3 secondi) facendo un casino dell'ostia perché sono già a finecorsa e quindi non potendo muoversi, saltano passi.
Come posso fare per evitare che durante l'inizializzazione si muovano come vogliano loro?
Bonus: alla fine del codice ho inserito 4 IF (uno per ogni motore) che fanno disabilitare i driver nel caso in cui il rispettivo stepper sia fermo o non stia andando da alcuna parte. Però non va, non capisco perché. Se riuscissi a disabilitarli una volta fermati -tramite moveTo- il driver non si scalderebbe mai, dato che l'escursione di questi motori è davvero corta, nel loro utilizzo. Ma come detto prima non mi preoccupa il calore, se non altro è per allungargli la vita tenendoli il più freddi possibile.
P.S. dinodf se vuoi pm il tuo indirizzo ti spedisco una birra da bere alla mia :')
v05_AS_testinviato_disableoutputs.ino (7.36 KB)
v05_AS_testinviato_disableoutputs.txt (7.62 KB)