Showing posts with label MF70. Show all posts
Showing posts with label MF70. Show all posts

BOXEDCNC: Brushless ESC pwm response, linearizing output for PID control, and smoothing the sensor values

Once assembled and tested, i had a lot of data collected from brushless spindle controller, i've used to implements a better control method, a PID control. I've spent long time updating the code to find what was going wrong. Regarding PID, there are a lot of good articles in the web, some implemented also on the Arduino universe. Start your readings from the incredible series of post from Brett, if you want to know more about PID.
In this post i want to describe my solution to some of the headache i had to implement:
  1. Keep it fast if what you want to control react fast (a spindle is really different from sous-vide or temperature PID room controller). My timing between refresh is now 50ms.
  2. Keep it steady, eliminating every distraction from the PID computation (like delays).
  3. Linearize the output of the PID, before applying to the ESC to get rid of the PID constants.
  4. Try to guess the output value, before enabling PID.
  5. Divide the PID constants in aggressive and conservative variants depending from the error between desired set point and actual reading.
  6. Don't try to find a magic method to find constants. Try various values starting only from progressive, then enabling integrative, and only at last using derivative.
The next image shows the schematic of the brushless controller. There are four sensors in the system, but the fourth is not showed because is a temperature sensor.



The main loop in CNC mode use the GCode Spindle commands (like S5000) as target value to control with PID in a closed loop the motor RPM, trying to minimize the error between target and actual speed.


The major drawback i discovered using the affordable Turnigy ESC is the non linear response of the motor's rpm in the basic free spinning condition (without torque applied). As you can see in the next image, the RPM relation between Arduino PWM uS interval and motor RPM is something similar to a quartic function. I think this is quite common when using the writeMicroseconds function approach. In fact you can control the servo with high precision writing an interval typically between 1000uS and 2000uS. In the next graph is possible to see the real data registered regarding RPM and the Power Source output tension and current given to the ESC. Without any resistance applied to the motor's  shaft, the ESC absorbs circa 70W at the maximum speed. The power source drop voltage between zero and maximum speed is only 0.30V (from 12.87V to 12.50V).


To avoid strange PID behaviors, i needed to implement a fast transformation function. 
The rest of the post is about how i've implemented a SMA (Simple Moving Average) to smooth the RPM readings, and about the linearization of the output of the ESC.

The start is a simple moving average using integer array to take care of the fast RPM refresh process, without dedicated onboard hardware. This was software implemented using a simple array which hold a certain number of integer numbers (from 30 to 50). These values are the microseconds between two consequents falling edge (or raising, is the same) of the rpm optical sensor, collected on   interrupt pin. This happen continuously with a period in a range from 2.000 and 15.000 uS. The array index is incremented every interrupt, and is zeroed using the modulo operator in one code row.
The result is a Simple Moving Average of the continuous RPM data, which is implemented using  this code in the interrupt function:
void rpmMeter() //INTERRUPT CALLED FUNCTION
 {
   RPMIndex = (RPMIndex +1)%(RPMIndexSize-1); 
   RPMTimes[RPMIndex] = micros() - RPMTimeold;
   RPMTimeold = micros();
 };
Once 50ms i compute the sum of the array, and divide the result by number of elements in the array to obtain a smoothed RPM fresh value.

The next step is to transform the output from the horrible quartic function to a simple linear response.
This happens using another array containing the uS timing values at which corresponds the desired output. I think this is a fast method because the loop only need to lookup in a prewritten array using the index as input.


The next graph shows the test results without smoothing (real data). In the x axis there are the values of the linearized output range, in the y axis the RPM logged.



BOXED CNC: Brushless Spindle & Controller, MpIde sketch

Di seguito il link allo sketch per il Fubarino SD (MPIDE) da scaricare:

Download link: PDE SKETCH MPIDE

Richiede le seguenti librerie standard:

  • Servo.h
  • LiquidCrystal.h
  • Bounce.h
  • PID_v1.h
  • stdlib.h:

I pin utilizzati:
  • LCD RS = 10;
  • LCD E = 11;
  • LCD DB4 = 12;
  • LCD DB5 = 13;
  • LCD DB6 = 14;
  • LCD DB7 = 15;
  • VOLTAGE SENSE = A1
  • CURRENT SENSE = A3
  • RPM INTERRUPT = 4
  • SPINDLE PWM = 9

BOXED CNC: Brushless Spindle & Controller

Per le vacanze di natale ho fatto passi avanti su un progetto che avevo in mente da tempo: la sostituzione del motore della MF70 con un motore brushless.

Un ringraziamento per holcon1 che ha individuato un motore adatto alla conversione: Youtube video

Il sistema è composto da un motore brushless (Hobbyking NTM 3536 - 1800kV - 875W), pilotato con un Turnigy Plush 80A e comandato da un Fubarino SD (un micro Arduino-inspired con un potente PIC a 32 bit, 80Mhz) ed alimentato da un alimentatore 12V da 85A inizialmente destinato ad un server. La velocità massima attesa è di 22kRPM, poco superiore a quella originale della MF70.


Il controller ha 3 modalità di funzionamento, stand-by, manuale e cnc (accetta comandi via usb).
Per la modalità manuale c'è un pratico e preciso potenziometro multigiro (non si può abilitare il motore se il potenziometro non è a zero). Per la modalità CNC sono accettati i comandi standard per l'accensione dello spindle, impostazione della velocità, stop dello spindle.




Completato un sensore di tensione con un voltage divider, da completare il sensore di corrente e RPM (per il PID): ho calibrato la lettura confrontandola con il multimetro digitale.

Per far sapere alla PSU di fornire i 12V è stato necessario collegare due (Enable e Voltage Sensing).



Ho scoperto che l'albero del motore ha un diametro di poco inferiore ai 4mm ed il pignone standard della MF70 non calza bene (troppo grande). Al momento ho provato a brasarlo e fissarlo, ma temo che la tenuta meccanica non sia eccezionale. Di seguito anche un adattatore che ho fatto al volo con il vecchio motore da un pezzo di ottone da 10 mm di spessore.



Quando potrò ordinare il kit mandrino della Usovo (ER11 Collet adapter) spero si possa risolvere diversamente l'accoppiamento.

BoxedCnc, Mf70 parte VII: accessori

La PROXXON offre un'ampia disponibilità di accessori su misura.
Ecco alcuni di quelli che già possiedo con qualche commento sulla loro funzionalità.

Frese al carburo di tungsteno da 3mm, 2mm ed 1mm
La fresa da 3mm è molto robusta ed è il mio cavallo da lavoro. Sono già alla terza. Le due precedenti hanno fallito nel plunge. Aiuta molto utilizzare rampe di discesa progressive (esempio ingresso elicoidale). Quando questo non è possibile è rischioso utilizzarla di punta. La fresa da 1mm, come potete immaginare, è delicatissima. Vengono vendute anche singolarmente.


Immancabili ganasce per serrare i pezzi sulla base. Queste sono optional, mentre sulla mia PROXXON erano di serie. Da notare che un'altro aspetto positivo della PROXXON (che tuttavia si paga) sono le pratiche scatoline di legno che contengono gli accessori.
Ho imparato che i gradini si usano con la parte più lunga in verticale.



Una morsetta molto precisa in acciaio. Il serraggio dei bulloni laterali richiede un pò di pratica. I dadi vanno avvitati prima di inserirla nella slitta e mantenuti con poco filetto innestato per permetterne l'inserimento. Troppo movimento e dovrete ricominciare da capo.
Quando si serra il pezzo, per quanto la morsa sia precisa il pezzo si solleva leggermente dal lato della ghiera manuale (infatti le parallele si possono sfilare).
La PROXXON vende anche un set di parallele che non ho ancora provato (mi sono fabbricato due parallele in alluminio con la stessa cnc). Sarà uno dei prossimi acquisti.

Punte da incisione. Questa raffigurata è destinata all'incisione delle lettere. In catalogo ne hanno due, ma non sono stato in grado di apprezzarne la differenza. La qualità è eccellente così come la durata, rispetto ai prodotti "cinesi" che ho avuto modo di usare. Tuttavia l'angolo è troppo elevato e si fa presto a creare un solco troppo grande e rovinare una incisione su un pezzo appena lavorato.

BoxedCnc, Mf70 parte VI: performance

Di seguito qualche dato sulle performance della MF 70 convertita a CNC

AREA DI LAVORO:
X: 120mm
Y: 40mm 
Z: 80mm (esclusa la fresa)
L'asse Y è l'aspetto più limitante dell'area di lavoro. Mi sono trovato in varie situazioni a desiderare qualche mm in più. In futuro conto di aumentarne l'escursione fino a 50/60 mm, sostituendo il carrello con un pezzo dal PROXXON GE 70 opportunamente modificato.

VELOCITA' DI SPOSTAMENTO: 500 mm/min
E' tanto? E' poco? E' perfetta per gli spostamenti rapidi. Bisogna considerare che normalmente taglio l'ottone a 60 mm/min con una passata di 0.5/0.7 mm e le passate di finitura da 0.1 mm le faccio a 220 mm/min sempre sull'ottone. Il motore oltre tale soglia da segni di cedimento, per cui il rateo di velocità massima è ampiamente sufficiente.

RISOLUZIONE TEORICA: 1/50.800 mm
RISOLUZIONE PRATICA: 0.0003125 mm
La vite della PROXXON avanza il carrello di 1mm per ogni rivoluzione. I motori hanno 200 step per rivoluzione. Il driver può suddividere ogni step  in 256 microstep. Tutta questa precisione è eccessiva in quanto la meccanica non è in grado di raggiungere tali precisioni, per cui ho limitato i microstep a 16 per step. Questo mi ha permesso di aumentare la velocità massima di spostamento. E' infatti necessario ricordare che la porta parallela ha un numero limitato di impulsi per secondo che può trasmettere (circa 50 kHz)

BACKLASH MISURATO: 0.1 mm (corretto via software)
Il backlash della MF70 è consistente e peggiora se non si registrano continuamente i giochi dei cuscinetti reggispinta. Penso tuttavia che questo non dipenda solo dalla meccanica della macchina, ma anche dal kit di conversione. LINUXCNC è in grado di effettuare una compensazione software del backlash, tuttavia la differenza tra avere una macchina a zero backlash e un qualunque numero maggiore di zero è apprezzabile nei cicli G02 e G03, ovvero archi, cerchi e percorsi elicoidali.
Quello che succede infatti è che mentre un asse attraversa un quadrante senza inversioni di direzione, l'altro si ferma e riparte nell'altra direzione (con il seno e coseno dell'angolo). La compensazione software nell'inversione muove rapidamente l'asse della distanza impostata per compensare il gioco meccanico. Poiché la precisione non è di questo mondo e soprattutto i giochi peggiorano di uso in uso, spesso si può apprezzare l'accelerazione della compensazione.
Per approfondire il backlash segnalo:
CNCCookbook - backlash
LINUXCNC - manuale html - backlash

BoxedCnc, Mf70 parte V: il cuore della CNC

Per completare la cnc, il compito di trasformare gli impulsi dal pc in segnali di potenza per i motori stepper, è stato affidato ad un buon acquisto su ebay: 4 schede COMPUMOTOR OEM650.




Sono driver industriali per motori passo passo, certamente sovradimensionati per le mie esigenze, ma avevo questi sottomano.
Sono studiati per motori fino a 6.9 ampere per fase (i miei poveri motori sono da 2.0), microstepping.

Ottima qualità, oggi sono disponibili molte alternative ad una frazione del prezzo.



In basso a sinistra lo stage di alimentazione dei motori, prodotto dalla IMS Motion (oggi Schneider). Si tratta di un alimentatore switching a 48V.

Per far colloquiare i driver con la porta parallela sono andato sul sicuro acquistando una scheda C10 da CNC4PC (link) invece di farmene una in proprio. Alla resa dei conti ritengo di aver fatto la scelta giusta evitando ore di grattacapi sulle tracce della pcb. Inoltre, da non sottovalutare, la scheda ha tutti gli ingressi isolati con optocouplers ad alta velocità.
Infine il prezzo compreso di spedizione è assolutamente onesto e adeguato per il prodotto. Il servizio di supporto post vendita è veloce ed efficace. Credo che farò altri acquisti da questa società.

Per i cavi non ho badato a spese ed ho acquistato da un rivenditore di surplus militare in zona, del cavo schermato multipolare in teflon. Ho aggiunto i nuclei in ferrite consigliati dalla Parker (Compumotor) e voilà!

La C10 mi ha permesso di inserire tre switch collegati in serie per l'homing e tre switch distinti (uno per asse) per il limite di spostamento positivo.

Un ulteriore ingresso è stato infine utilizzato per l'E-Stop a fungo (molto professionale!).



BoxedCnc, Mf70 parte IV: il controllo della CNC

Nel 2009 per controllare una macchina CNC a livello non professionale le possibilità erano sostanzialmente:

  • MACH3 su Windows
  • EMC su Linux (oggi LINUXCNC)
  • Altri programmi minori proprietari, sempre per Windows.
Oggi grazie agli sforzi pionieristici della Microchip, della Atmel, e di Linuxfordevices (link), potete mettere su un sistema embedded sotto i 100€ controllato via ethernet magari con UN touchscreen. Sull'argomento ho intenzione di fare qualche considerazione in seguito.

La scelta è stata per l'os Linux (grazie Linus Torvalds!) per le seguenti ragioni ancora oggi valide:
  • è gratuito
  • funziona in modo egregio
  • è gratuito
  • è affidabile
  • è gratuito
  • gira anche su un tostapane
  • è gratuito
Il software LINUXCNC (link) è sostanzialmente gratuito (licenza GNU) come il sistema operativo.
Naturalmente sono partito dai latency test per scegliere la scheda madre, il resto è stata pura alchimia.

Per chi non fosse (ancora) esperto di linuxcnc, il "test di latenza" serve a determinare la performance dell'hardware per il realtime.Se date una occhiata a questa pagina avrete una idea più chiara di cosa ci si può aspettare.
In poche parole, un sistema stabile, al test di latenza presenta un max-jitter inferiore a 15-20ms, e quindi è un buon candidato per governare una cnc con una buona performance.
Per essere chiari, un pc potente non è sempre sinonimo di buone performance: una scheda video non compatibile, la gestione del power management, una driver per una scheda video proprietario, tanto per fare degli esempi, possono rendere il computer instabile per il realtime: in generale studiando i vari forum ho capito che "less is better".



Linuxcnc funziona bene con la cara vecchia porta parallela, che sta scomparendo dalle schede madri di nuova generazione in favore dell'usb. Il vantaggio di tale porta è che facilita la conversazione del pc con il mondo esterno, mettendo a disposizione 8 output, 5 input e 4 input/output TTL (5volt).

Ebbene la scheda che ho scelto, di form factor MINI ITX è la INTEL D945GCLF2.
Sopra una immagine di repertorio, sotto come l'ho installata nel box in legno:


Sulla sinistra la scheda madre, completa di un banco di ram da 2gb e sotto la piattina c'è una Compact Flash che funge da hard disk. Sulla destra il retro di uno schermo lcd smontato della Asus ed in alto un alimentatore per pc. I cavi tutto sommato sono abbastanza ordinati.

Le porte usb ed il tasto di accensione li ho riportati sul pannello in legno con delle prolunghe. Inoltre ho aggiunto una presa con fusibile e tasto di accensione retroilluminato.

Il fascio di cavi che attraversa la parete di legno per andare nel "retroquadro" della cnc contiene l'alimentazione per le schede di controllo dei motori stepper. In alto invece la piattina della porta parallela.



BoxedCnc, Mf70 parte III: la MF70

In dettaglio cominciando dalla PROXXON MF70.

La MF70 è una piccola fresatrice a tre assi manuale, prodotta dalla tedesca Proxxon (link). Si trova dai intorno ai 300€ e viene fornita con un set di accessori abbastanza completo per iniziare.

(Immagine dal sito della Proxxon)

Cosa ci piace della MF 70?
  • Le dimensioni. Perfetto per una cnc da ripostiglio.
  • Il prezzo. Non si trova nulla di paragonabile, anche in ragione di qualità inferiori.
  • La qualità dei componenti e dei dettagli. La base è in acciaio, rettificato dove serve (nella parte inferiore, sotto la guida xy e sotto la colonna dell'asse z). La colonna è una estrusione in alluminio. Il gruppo xy invece è un misto di estrusioni ed un pezzo centrale pressofuso. Le guide sono a coda di rondine e sono accoppiate con fasce in ottone. Queste sono tenute al loro posto da grani metrici e dadi di serraggio (come sulle macchine professionali). Il tutto è registrabile.
  • Il colore. Il verde e giallo della Proxxon, per quanto faccia molto anni '80 è per me ormai sinonimo di divertimento.

Cosa non ci piace della MF 70? E' difficile trovare dei difetti se si escludono i limiti derivanti proprio dalle qualità sopra elencate (penso in particolare alla limitazione della dimensione dei pezzi lavorabili, che sul mio modello corrispondono a 40mmx120mm sul piano xy). Comunque si potrebbe migliorare:
  • Potenza del motore. 100w sono pochi quando vuoi fare passate più profonde nell'ottone o nell'alluminio: comunque se avete molto tempo con piccole profondità di taglio si possono avere delle belle soddisfazioni. Il mio motore comincia a dare segnali di deterioramento delle spazzole.
  • I grani di registrazione: tendono a stringersi ed allentarsi, perlomeno sul mio modello.
  • Il sistema di trattenuta della fresa: va stretto a morte per non far muovere la fresa, ma dopo un po si stacca ed è difficile trovare il ricambio (quello della mf70 va stretto con due chiavi, il modello a catalogo si può stringere solo a mano).
Dopo un paio di anni di utilizzo posso dire che è un bell'oggetto, pratico e affidabile, comunque sono di parte, adoro la Proxxon e tutti i suoi prodotti.

Un parere personale su dove acquistarla: rivolgetevi ai rivenditori, il prezzo è molto simile a quanto potete trovare online e potete scegliere scegliere subito gli accessori di cui avete bisogno (ad esempio le frese a codolo). Ho rivalutato da tempo il piacere di comprare in un negozio: potrete toccare con mano i prodotti, scegliere gli accessori, fare domande e se fortunati ricevere risposte, ma soprattutto dopo aver pagato potrete tornare subito a casa con il vostro bell'oggetto senza dover aspettare con ansia i corrieri. Tutto questo vale qualche euro in più.

BoxedCnc, Mf70 parte II: scatola aperta

Cosa c'è dentro la scatola?


La foto è sfocata, ma si vede tutto.
Tolto il coperchio esce fuori tutto il necessario:

  • Proxxon MF70 convertita a CNC tre assi + quarto asse della Usovo
  • Pc embedded con schermo lcd integrato, E-Stop ed hub USB
  • Tastiera, mouse e pendant realizzato in casa.


BoxedCnc, Mf70 parte I: scatola chiusa

Quando si ha poco spazio ma si vuole avere un piccolo laboratorio cmc, ecco che bisogna inventarsi qualcosa. Ecco che mi sono venute in mente quelle belle scatole per i torni da orologiaio, tipo Lorch per intenderci.
Prese le misure dello stipo dove riporlo, è cominciata la fabbricazione.

Quello che vedete nella foto sopra è il risultato finale, una perfetta BoxedCnc che contiene tutto ciò di cui l'uomo meccanico moderno ha bisogno per fresare in casa.

La geometria è semplice: un parallelepipedo diviso in due parti, tre lati cadauna: la struttura e la chiusura.



La base è fatta di legno lamellare IKEA (un pezzo di un top), spesso circa 4cm: molto resistente e rigido, anche se pesante.
Le pareti sono invece fatte di legno di pero, molto leggero, anche se poco resistente ad urti e tacche.
Infine due pannelli di compensato "marino" di piccolo spessore per gli scomparti dedicati all'elettronica: leggero o robusto.

Le cerniere sono da valigia: pratiche.

Popular posts