Showing posts with label PROXXON. Show all posts
Showing posts with label PROXXON. 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.



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 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