Welcome! Log In Create A New Profile

Advanced

motore stepper con controlo posizione pid e encoder

Posted by c128 
motore stepper con controlo posizione pid e encoder
September 18, 2015 01:02AM
ho gia' realizzato una cosa del genere con arduino e stm32 ma per motori DC (principalmente per studio)
il tutto funzionava ma con frequenze troppo basse per gestire una stampante 3d

mi chiedevo invece se qualcuno ha sviluppato o conosce gia' un firmware per arduino per gestire un encoder abbinato ad un motore stepper!

vorrei misurare la quantita' di filo non alla spinta ma in prossimita' dell'extruder e ovviamente senza incidere sul peso di quest'ultimo

questo era il mio progetto per motori DC

[www.youtube.com]

con encoder hardware hctl2032


[www.youtube.com]

se nessuno ha un suggerimento per un software gia' pronto mi tocchera' svilupparlo confused smiley


si potrebbe implementare il controllo PID anche ai motori stepper XY per eliminare eventuali errori di perdita steps

Edited 2 time(s). Last edit at 09/18/2015 01:23AM by c128.
Re: motore stepper con controlo posizione pid e encoder
September 18, 2015 11:09PM
gia' fatto il codice per gestire il motore stepper con encoder e pid

[youtu.be]

migliorie da apportare:
- velocita'
- lettura interrupt per segnale step (arduino uno/nano pro non usabili perche' con soli due interrupt! )
- altro...


p.s. il motore dc che vedete nel video e' usato solo per la lettura dell'encoder, non avendo altro ho usato quello per i test

Edited 3 time(s). Last edit at 09/19/2015 02:47AM by c128.
Re: motore stepper con controlo posizione pid e encoder
September 19, 2015 05:57AM
Sarebbe sicuramente un bell'upgrade ma encoder "standard", economici ed abbastanza precisi ce ne sono in commercio?

Leonardo/Micro ne hanno 5 di interrupt, mentre la mega ne ha 6. L'ideale sarebbe la Due che ha tutti interrupt e ha la potenza di calcolo per gestirli da solo, credo...


Delta Fluo --> Stampante Custom tipo Delta - IeC v4.0 0.4 - Ultratronics - MK4due 4.3.1 (dev)
Re: motore stepper con controlo posizione pid e encoder
September 19, 2015 06:05AM
sto convertendo il programma per stm32 nucleo F4 anche perche' come costo siamo li ma potenza ne ha molta di piu'!

in alternativa con il teensy funziona subito senza modifiche basta aggiungere l'interrupt

econcoder precisi? sia quelli magnetici che quelli ottici sono sempre piu' precisi di un posizionamento a semplice "steps"

Edited 1 time(s). Last edit at 09/19/2015 06:06AM by c128.
Re: motore stepper con controlo posizione pid e encoder
September 19, 2015 06:52AM
Sulla precisione non saprei...conta che con il miscrostepping arrivi a 6400 step/giro con 1.8° e 1/32.
Sulla standardizzazione ne sai qualcosa? Se io voglio comprarmi un encoder che anche con poche modifiche riesco a montarlo senza spendere quanto un motore bello e pronto?
Non ho capito se vuoi usare una scheda dedicata solo per il controllo di motori più encoder o per tutto assieme. La nucleo ti gestisce tranquillamente tutta la stampante e costa 10€...


Delta Fluo --> Stampante Custom tipo Delta - IeC v4.0 0.4 - Ultratronics - MK4due 4.3.1 (dev)
Re: motore stepper con controlo posizione pid e encoder
September 19, 2015 07:38AM
si mi piacerebbe anche a me un marlin che gira su nucleo grinning smiley purtroppo qui nessun programmatore expert vuole sacrificarsi, ci sarebbe un bel po di lavoro per la conversione del codice

la gestione dell'encoder e' molto pesante non tanto in termini di memoria ma di interrupt che potrebbe benissimo andare a saturare il microcontrollore se impegnato a fare anche altre cose

adesso vedo di finire la versione semplice poi vediamo se si riesce ad ottimizzare il codice per gestire due stepper con encoder (4 sarebbe il top!) per nucleo

comunque riprovato adesso dopo un paio di modifiche il codice per arduino e' perfetto, si rimette al punto fisso come una molla e molto velocemente!

gli encoder ottici non costano molto e mi sembra che anche i chip magnetici/encoder per motori brushless sono calati di prezzo

Edited 1 time(s). Last edit at 09/19/2015 07:40AM by c128.
Re: motore stepper con controlo posizione pid e encoder
September 20, 2015 12:45PM
ok funziona anche per stm32 forse ancora meglio perche' ho usato i timers per l'encoder e l'interrupt per la sola lettura degli steps
l'encoder sembra ok il pid funziona bene e' da ottimizzare l'interrupt per il segnale step

con stm32 si possono gestire 4 encoder con timers a 16 bit diciamo che fin qui puo' andare bene anche per fare una reprap con tutti i motori con encoder compresi estrusori
Re: motore stepper con controlo posizione pid e encoder
September 21, 2015 05:47AM
Usi il PID per il riposizionamento?!
Quote
c128
e' da ottimizzare l'interrupt per il segnale step
Cosa intendi?

Se non ricordo male conosco degli amici che volevano lavorare al porting di Marlin per stm32, però non so se si sono dedicati ad altro o hanno portato avanti il lavoro...penso più la prima.

Quote
c128
gli encoder ottici non costano molto e mi sembra che anche i chip magnetici/encoder per motori brushless sono calati di prezzo
Puoi pubblicare qualche link?


Delta Fluo --> Stampante Custom tipo Delta - IeC v4.0 0.4 - Ultratronics - MK4due 4.3.1 (dev)
Re: motore stepper con controlo posizione pid e encoder
September 21, 2015 07:24AM
intanto il programmino per stm32 sembra ok, oggi ci ho lavorato sistemando una paio di cose
c'e' una leggera perdita di steps ogni tanto ma credo che sia colpa dell'encoder super economico e un po rovinato che ho usato come test

ora devo sviluppare il prototipo da mettere sopra l'estrusore con altro encoder supereconomico ma un po meno rovinato

diciamo che raffinando un po il progetto bisognerebbe usare il timer per generare un impulso steps preciso da inviare al motore, come ora l'impulso e' dimensionato impostando un delay
sembra comunque funzionare egregiamente anche in questo modo, poi verifico con l'oscilloscopio

encoder? diciamo che per gestire un estrusore come penso io basta un encoder tipo questo da 10 dollari
[www.aliexpress.com]

i piu' preciso magnetico
[www.aliexpress.com]

oppure il semplice chip
[www.youtube.com]

Edited 1 time(s). Last edit at 09/21/2015 07:28AM by c128.
Re: motore stepper con controlo posizione pid e encoder
September 21, 2015 07:36AM
Temevo prezzi del genere, sicuramente economici rispetto ad altro ma non penso comunque valgano la pena. Con cifre del genere preferisco investire su motori più potenti con driver adeguati....considerando anche il tempo di risposta degli encoder stessi, 60 ms sono tanti...


Delta Fluo --> Stampante Custom tipo Delta - IeC v4.0 0.4 - Ultratronics - MK4due 4.3.1 (dev)
Re: motore stepper con controlo posizione pid e encoder
September 21, 2015 03:27PM
Il secondo è un assoluto e per di più con uscita seriale da qui la lentezza, i magnetici a parità di risoluzione sono meno precisi per via del loro tipo funzionamento. Sei sicuro che 400 imp giri = 1200 in quadratura siano sufficenti perchè leggevo che di solito in un sistema retro azionato la testa di lettura deve avere una risoluzione ben più alta del minimo spostamento apprezzabile. Es in una cnc per gestire il centesimo servono delle righe ottiche/magnetiche con risoluzione del micron ecc.
Ne approfitto per chiedere vista l'enorme ignoranza in fatto di programmazione (mentre per gli encoder son collaudatore in una ditta vicentina che li fa), se ho capito bene arduino normale non c'è la fa...... ma allora non si potrebbe usare arduino due o una scheda tipo la alligator? usando dei pin liberi come ingressi?
Re: motore stepper con controlo posizione pid e encoder
September 21, 2015 08:56PM
per la velocita' secondo me l'encoder ottico dovrebbe andare bene, almeno dai test sembra perfetto come risposta e anche come risoluzione, certamente ci vorrebbe un piano e degli strumenti di test un po piu' professionali (purtroppo come homeless emigrato italiano questo e' il top che posso permettermi sad smiley )
ovviamente non si possono usare encoder di tipo seriale ma da collegare direttamente al microcontrollore
per esempio il motore che ho usato ha 0.9' per step quindi molto preciso e mi conta +100 righe ottiche per step sull'encoder

arduino normale gestisce abbastanza bene l'encoder ma ha un limite di interrupt di due, pochini!

basterebbe provare lo teensy 3.0 compatibile con le ottime librerie encoder
[www.pjrc.com]
librerie encoder
[www.pjrc.com]

dai test che ho fatto anche in passato su motori dc gli interrupt non sono proprio l'ideale per gestire encoder ad alta velocita', diciamo che vanno bene per posizionamenti di precisione a bassa velocita'
ecco perche' sto usando ora i timers sul stm32 che sembrano funzionare egregiamente alla massima velocita' del motore

sto progettando il supporto per l'encoder da applicare all'estrusore poi metto un video

Edited 4 time(s). Last edit at 09/21/2015 09:44PM by c128.
Re: motore stepper con controlo posizione pid e encoder
September 23, 2015 02:14PM
Per la velocità con un incrementale posso confermare, di solito li taro da 3000 a 5000 giri se non in alta risoluzione (8192 in su). Piuttosto a suo tempo erò perplesso circa la risoluzione per l'estrusore, parlando con un nostro ingegnere si diceva che l'encoder deve avere almeno un 4 volte tanto la risoluzione del motore che con 1.8° e 1/16 di step è 3200 spostamenti giro. Quindi occorrerebbe almeno un 3200 imp da usare in quadratura, ora un encoder con questa risoluzione ottico non è prorpio economico e neanche compatto. Si potrebbe pensare di utilizzare i chip a riflessione che arrivano facilmente a 5000imp giro ,ma non sono saldabili a mano (forse con lo stilo ad aria calda).
Re: motore stepper con controlo posizione pid e encoder
September 23, 2015 08:20PM
l'ingegnere ha ragione da un punto di vista teorico

guarda questo che cosa ha realizzato con un encoder e posizionamento real time su motore brushless:

[www.youtube.com]

utilizza un stm32F4, il codice usa i timers per la gestione dell'encoder per il resto sto sbirciando per trovare qualche idea grinning smiley

qui c'e' tutto, un bel lavoro direi:
[vedder.se]

leggo nelle risposte "When I have time and the budget, I would like to build a CNC" probabilmente fa parte della categoria homeless come me smileys with beer

p.s. ho gia' finito di stamparmi il kit con encoder da aggiungere alla stampante thumbs up

Edited 4 time(s). Last edit at 09/23/2015 08:28PM by c128.
Re: motore stepper con controlo posizione pid e encoder
September 24, 2015 12:56PM
ecco fatto sembra funzionare bene:

[www.youtube.com]


aspetti da risolvere:
1. a basse velocita' poca fluidita' del movimento: un po a scatti (5mm/s)
2. aggiungere qualche controllo per eventuali errori: fine filo, blocco scorrimento, aggiungere funzione per controllo dimensione filo

next test, prova pratica di stampa smoking smiley

Edited 1 time(s). Last edit at 09/24/2015 12:58PM by c128.
Re: motore stepper con controlo posizione pid e encoder
September 24, 2015 02:34PM
Be vedo che usi un codice abbastanza grande, quanti impulsi giro hai? Riguardo il funzionamento del sistema quello che vorrei io è una cosa del tipo...... arduino da un comando di step per muovere il filo , verifica che il singolo comando di step sia corrisposto con un adeguato movimento del filo tramite rotella collegata all'encoder, se non è cosi ripete il comando finchè il filo non si muove, se dopo un tot di comandi ciò non avviene allora va in allarme. Ovviamente questo deve essere fatto prima che arrivi lo step dopo dall'arduino per un ulteriore avanzamento filo . Nei controlli professionali l'elettronica riesce a gestire tutti gli assi ed eventualmente ritardare i movimenti degli assi più veloci per aspettare l'asse più lento (oppure al limite andare in allarme) inoltre confermo che le righe ottiche o magnetiche che si usano di solito hanno un ordine di grandezza inferiore al minimo spostamento che si vuole gestire (es micron se il minimo è il centesimo). Come dicevo i driver con retroazione esisterebbero già fatti dai cinesi e sono stranamente ottimi prodotti ,ma costano più di 100e l'uno e sono esagerati per le rep visto che la corrente arriva a 7.8A max.
Ora sperando di essermi spiegato come vorrei utilizzare l'encoder, mi spieghi come fa un qualsiasi sensore a correggere un attuatore se la grandezza minima misurata è superiore al minimo spostamento dell'attuatore? Bisognerebbe fare delle misurazioni con un comparatore , se io mi sposto di 100 centesimi e l'encoder legge minimo il decimo come faccio a verificare che non siano 91,100 o 109 centesimi?
Tanto per capire , non è una critica al tuo lavoro, anzi :-)
Re: motore stepper con controlo posizione pid e encoder
September 24, 2015 03:06PM
"arduino da un comando di step per muovere il filo , verifica che il singolo comando di step sia corrisposto con un adeguato movimento del filo tramite rotella collegata all'encoder, se non è cosi ripete il comando finchè il filo non si muove, se dopo un tot di comandi ciò non avviene allora va in allarme"

si esattamete manca l'allarme e un controllo all'avvio di arduino perche' appena accendo arduino estrude 10mm boh!

oggi sono diventato matto con 1 filo interrotto e il posizionamento a bassi giri

gia' montata la stampante devo fare alcune modifiche perche' il pezzo e' realizzato sulla base del prototipo nuovo e non del muletto vecchio

Edited 1 time(s). Last edit at 09/24/2015 03:07PM by c128.
Re: motore stepper con controlo posizione pid e encoder
September 25, 2015 02:53AM
problemi riscontrati in stampa:
- il filo ha un effetto elastico e il gioco sul tubo di passaggio del filo amplificano la correzione pid
- il motore stepper deve lavorare sempre alla massima velocita' ma comunque troppo lento per una correzione pid istantanea

soluzioni
- allineare movimento stepper all'encoder
- utilizzare motore dc

movimento motore con encoder
[youtu.be]


prima stampa di test:

Edited 1 time(s). Last edit at 09/25/2015 07:55AM by c128.
Attachments:
open | download - WIN_20150925_13_40_51_Pro.jpg (83.7 KB)
Re: motore stepper con controlo posizione pid e encoder
September 26, 2015 10:43AM
Ciao
posso chiederti perchè montare l'encoder alla fine del condotto Bowden? se lo scopo è controllare l'avanzamento del filo per ottimizzare l'estrusione è inutile per i problemi che hai già riscontrato; considera poi che ogni materiale ha una resistenza a compressione diversa. Io lo monterei direttamente in uscita dall'estrusore, quantomeno controlli il lavoro della vite di trazione, che sarebbe già tanto; controllare il flusso effettivo con un Bowden la vedo un po dura; comunque bell'idea.


R2 Evo-Prometeo-Poseidon-Titan0
Multiextruder NPr3-WR4
[www.3dmakerlab.it]
Licenza Creative Commons
Re: motore stepper con controlo posizione pid e encoder
September 26, 2015 12:25PM
ho fatto un nuovo codice che elimina il problema delle oscillazioni
pero' ora ho riscontrato che gli interrupt non leggono bene gli steps e mi tocca spostare la lettura nei timers ...
Re: motore stepper con controlo posizione pid e encoder
September 27, 2015 05:58AM
sono un attimino arenato sui timer per il conteggio up/down degli steps se qualcuno ha un suggerimento sulla configurazione su stm32 ...confused smiley
Re: motore stepper con controlo posizione pid e encoder
September 29, 2015 03:06AM
sto ancora lavoranto sulla libreria timer per conteggio steps .... drinking smiley
Re: motore stepper con controlo posizione pid e encoder
October 07, 2015 01:38AM
ho appena finito il codice per contare gli impulsi di step e direction con il timer del stm32
una faticaccia mi sono dovuto studiare un bel po di roba!!
il conteggio sembra perfetto up/down provando con repetier

e adesso vediamo di aggiornare il codice cool smiley
Re: motore stepper con controlo posizione pid e encoder
October 09, 2015 05:38AM
aggiornato e funzionante da sistemare un paio di cosine ad esempio se faccio un doppio retraction si disallinea, ma se faccio un solo retraction e disallineo manualmente la posizione l'encoder mi corregge perfettamente l'errore
devo spostare sui timer anche gli step in uscita
Re: motore stepper con controlo posizione pid e encoder
October 09, 2015 09:48AM
ho finito la versione beta funzionante

compensa perfettamente gli errori di retraction con correzione tramite encoder in prossimita' della testina

video non completo perche' e' arrivato mio figlio che mi tortura piu' o meno ogni 5 minuti moody smiley

[youtu.be]

data la potenza considerevole del stm32F4 si possono aggiungere molte altre cose e miglioramenti ma diciamo che come algoritmo base va bene.

Edited 1 time(s). Last edit at 10/09/2015 09:49AM by c128.
Re: motore stepper con controlo posizione pid e encoder
October 19, 2015 09:51PM
la rilevazione attuale del retraction con o senza interrupt mi perde circa 10/20 segnali su 500 (500 steps = 1mm) a 40mm/s, mente a 20mm/s l'errore e' trascurabile intorno a 2/5

il punto e' che la funzione interna del stm32 di reset al volo del timer non mi funziona, il conteggio e' preciso ma al cambio di direzione del filo mi serve un reset del contatore molto veloce

ci sto lavorando credo di poter risolvere con due timer in master/slave

Edited 3 time(s). Last edit at 10/19/2015 10:15PM by c128.
Re: motore stepper con controlo posizione pid e encoder
October 29, 2015 06:13AM
il problema era il compilatore mbed
per chi interessa ho sistemato stm32 nucleo F401 per coocox
questa versione supporta molti driver per stm32 per chi usa le librerie integrate in coide bisogna fare la conversione dei driver
[github.com]
Re: motore stepper con controlo posizione pid e encoder
November 01, 2015 09:01AM
ok sistemato il codice adesso la correzione e' perfetta manca ancora qualche particolare
- ottimizzazione velocita' retraction


il funzionamento e' pari a quello di un motor messo direttamente sulla testina di stampa

relativo video

[youtu.be]


questa e' la prima stampa (oggetto [www.thingiverse.com])

Edited 1 time(s). Last edit at 11/01/2015 09:01AM by c128.
Attachments:
open | download - 100_1873.jpg (100.2 KB)
Re: motore stepper con controlo posizione pid e encoder
November 02, 2015 08:26AM
Il lavoro da pioniere che stai portando avanti è veramente interessante. Io seguo tutto con molto interesse. thumbs up
Re: motore stepper con controlo posizione pid e encoder
November 03, 2015 12:47AM
i risultati sono ottimi

allegata una stampa su slic3r con 3mm di retraction, 40mm/s di velocita retraction e 0.2 di layer

da migliorare alcune impostazione di slic3r per la stampa di oggetti piccoli

per il firmware che gestisce l'estrusore da aggiungere:
- indicatore di limite velocita' retraction (la velocita' del motore stepper e' impostata di default dal timer ma puo' essere modificata a piacere da dip switch)
- gestione risparmio energetico in caso di inattivita'


devo progettare il circuito PCB con 1 solo driver drv8825 per ora

prossimo obiettivo testina a colori con gestione encoder, ma intanto finiamo questo smileys with beer

p.s. per questa stampa mi sono accorto che il motore stepper dell'estruder si era allentato causando un gioco di 1mm, quindi la stampa dovrebbe risultare migliore
ora non posso stampare nuovamente il pezzo perche' sto facendo il pcb e ho la testina di stampa smontata per altri test

Edited 2 time(s). Last edit at 11/04/2015 09:58AM by c128.
Attachments:
open | download - 100_1887.jpg (103.7 KB)
Sorry, only registered users may post in this forum.

Click here to login