Sommario:

Strumento di misurazione della velocità di avanzamento CNC ricavato da rottame: 5 passaggi
Strumento di misurazione della velocità di avanzamento CNC ricavato da rottame: 5 passaggi

Video: Strumento di misurazione della velocità di avanzamento CNC ricavato da rottame: 5 passaggi

Video: Strumento di misurazione della velocità di avanzamento CNC ricavato da rottame: 5 passaggi
Video: Tapered Ball Nose Bits - Part 34 - Vectric For Absolute Beginners 2024, Novembre
Anonim
Strumento di misurazione della velocità di avanzamento CNC realizzato con rottami
Strumento di misurazione della velocità di avanzamento CNC realizzato con rottami

Qualcuno ha mai desiderato misurare l'effettiva velocità di avanzamento su una macchina CNC? Probabilmente no, finché le punte di fresatura non sono intatte dopo un lavoro CNC… ma quando iniziano a rompersi regolarmente, forse è il momento di indagare. In questo tutorial puoi seguire una ricerca per determinare la velocità di avanzamento effettiva di una macchina CNC. Coprirà la parte di reverse engineering di una stampante, firmware Arduino, software per PC e i risultati che ho ottenuto con l'aiuto dei miei colleghi, e una spazzatura trasformata in tesoro.

Passaggio 1: materiali, strumenti, dispositivi utilizzati per avviare il progetto

Quando ho iniziato a lavorare su questo, ho pensato a un breve elenco delle cose di cui avremo bisogno:

  • meccanismo smontato del carrello della stampante
  • strumenti manuali per modificarlo
  • saldatore, saldatura, fili
  • multimetro
  • oscilloscopio o analizzatore logico - questo non è assolutamente necessario
  • Alimentazione elettrica
  • microscopio
  • Arduino nano + piedinatura
  • PC con Arduino IDE, Visual Studio 2008 Express + strumenti grafici MS installati
  • (MPU6050 - Ho finito per non usarlo)
  • disposto a cercare tutto ciò che non sai fare

All'inizio pensavo che una scheda MPU6050 mi avrebbe permesso di misurare la velocità di avanzamento su tutti e tre gli assi contemporaneamente. Avendo l'accelerometro al suo interno, ero sicuro che sommando i dati dell'accelerometro mi avrebbe dato il valore desiderato: la velocità su ciascun asse. Dopo aver scaricato e modificato uno snippet Arduino che mostrava i dati grezzi sul monitor seriale, ho scritto un piccolo programma per PC in Visual Studio che ha elaborato i dati e li ho tracciati su un grafico per una più facile interpretazione. Ho dovuto scaricare sia Visual Studio C# Express 2008 che gli strumenti di creazione di grafici per questo.

Dopo aver programmato un po' e aver cercato tutte le cose di cui avevo bisogno per la comunicazione seriale, ho finito con i valori tracciati, ma non importa quello che ho fatto, non era utilizzabile. Piccoli ma improvvisi movimenti comporterebbe picchi enormi, mentre i viaggi più lunghi non comparirebbero nemmeno sui grafici. Dopo due giorni passati a martellare l'MPU6050, alla fine mi sono arreso e mi sono rivolto a qualcos'altro: il meccanismo di feedback della posizione di una stampante smontato.

Passaggio 2: cose hardware che dovevano essere fatte

Cose hardware che dovevano essere fatte
Cose hardware che dovevano essere fatte
Cose hardware che dovevano essere fatte
Cose hardware che dovevano essere fatte
Cose hardware che dovevano essere fatte
Cose hardware che dovevano essere fatte
Cose hardware che dovevano essere fatte
Cose hardware che dovevano essere fatte

Ingegneria inversa

Ovviamente, il meccanismo della stampante non aveva un numero di parte che avrei potuto usare per determinarne le proprietà esatte, c'era bisogno di un po' di reverse engineering per arrivare dove volevamo. Dopo aver esaminato attentamente il meccanismo e l'elettronica, ho deciso che la prima cosa doveva essere l'identificazione dei pin del sensore ottico. Questo doveva essere fatto per interfacciare il tutto con Arduino. Ho smontato la parte in plastica nera, estratto il PCB ed esaminato il sensore: aveva scritto ROHM RPI-2150. Questo mi ha reso felice, la speranza era alta di trovare una scheda tecnica. Sfortunatamente questa è una parte vecchia o personalizzata - non c'era nessuna scheda tecnica da trovare da nessuna parte sul web. Ciò significava che dovevo prendere in mano la situazione: sapendo che questi sensori di solito hanno un LED a infrarossi e due fototransistor all'interno, ho preso un multimetro, l'ho impostato sulla modalità di misurazione del diodo e ho iniziato a misurare tra i pin.

I pin di alimentazione sono generalmente facili da trovare: avranno condensatori attraverso di essi e di solito sono collegati con ampie tracce sui PCB. Le tracce di terra sono spesso collegate a più pad per una migliore reiezione del rumore.

Tuttavia, i pin di input e output non sono così banali. Quando si misura attraverso un diodo, lo strumento mostrerà la sua tensione diretta in una direzione e il sovraccarico (infinito) nell'altra. Sono stato in grado di identificare quattro diodi tra i pin, ho concluso che il quarto diodo deve essere una sorta di diodo zener o TVS, poiché era proprio tra i pin di alimentazione del componente. Individuare l'emettitore a infrarossi è stato facile, c'era un resistore 89R in serie con esso. Sono rimasto con due misurazioni diodi sui restanti due pin, quelli dovevano essere i due ricevitori.

Nota: Questi sensori hanno due ricevitori per poter determinare la direzione del movimento oltre a determinare la posizione contando gli impulsi. Queste due forme d'onda di uscita sono sfasate di 90°, questo viene utilizzato per produrre un impulso di conteggio avanti o indietro. Seguendo il numero di questi impulsi, è possibile determinare l'esatta posizione della testina di stampa.

Quando sono stati localizzati l'emettitore e i due ricevitori, ho saldato i fili sui loro pin, così posso interfacciare il sensore con Arduino. Prima di farlo, ho alimentato il sensore con 3,3 V, ho tirato la striscia tra il sensore un paio di volte e ho osservato l'onda quadra sulle uscite. La frequenza dell'onda quadra variava con la velocità del movimento e ho concluso che il sistema di misura è ora pronto per essere collegato ad Arduino.

Collegamento dell'Arduino

Il collegamento di questo nuovo 'sensore' è molto semplice. Basta collegare le uscite del sensore a D2 e D3 (pin con capacità di interruzione!) e le linee di alimentazione e la codifica può iniziare.

Passaggio 3: codifica Arduino

Codifica Arduino
Codifica Arduino

Il codice di Arduino è abbastanza semplice. Ho assegnato una funzione che viene eseguita ogni volta che D2 vede un fronte di salita, questa è la funzione elapse dal codice Arduino che ho allegato. Se dai un'occhiata ai segnali di un encoder quadratico, vedrai questo:

  • in una direzione la fase A è logico alto su ogni fronte di salita della fase B
  • nell'altra direzione la fase A è logico basso su ogni fronte di salita della fase B

Questa era la proprietà dell'encoder che ho sfruttato: poiché la funzione elapse viene eseguita ogni volta che D2 ha un fronte di salita, ho semplicemente scritto un if che incrementa un contatore quando D3 è alto e lo decrementa quando D3 è basso. Ha funzionato al primo tentativo, ho inviato il valore del contatore al monitor seriale e l'ho visto aumentare/diminuire quando ho spostato la testina della stampante sull'albero.

Per farla breve, il firmware fa la seguente cosa nella funzione loop:

  1. controlla il buffer di ricezione seriale per eventuali dati in entrata
  2. se ci sono dati in arrivo, controlla se è un '1' o no
  3. se è un '1', significa che il software del PC sta richiedendo il valore del contatore
  4. inviare il valore del contatore al PC via seriale
  5. ricominciare da 1.

Con questo, la palla è ora nel campo del software per PC. Entriamo in quello!

Passaggio 4: software Visual Studio C#

Lo scopo del programma VS C# era spostare il carico computazionale dall'Arduino al PC. Questo software riceve i dati forniti da Arduino, calcola e visualizza la velocità sotto forma di grafico.

Quello che ho fatto per prima cosa è stato cercare su Google come eseguire la comunicazione seriale in C#. Ho trovato molte buone informazioni su MSDN.com insieme a un buon esempio, poi ho buttato via quello che non mi serviva, praticamente tutto tranne la parte di lettura. Ho impostato la porta COM e la velocità in modo che corrisponda a quella di Arduino, quindi ho fatto solo qualche tentativo e ho scaricato tutto ciò che arrivava sulla porta seriale in una casella di testo su più righe.

Dopo che i valori sono stati letti, ho potuto semplicemente utilizzare le funzioni readto e split per isolare una misurazione l'una dall'altra e dai caratteri delimitatori. Questi sono stati tracciati su un controllo Grafico e i valori hanno cominciato ad apparire sullo schermo.

Se non riesci a vedere il controllo Grafico nella tua casella degli strumenti VS, puoi cercare su Google il problema e trovare la soluzione qui (cerca la risposta n. 1): link

Il principio di misura

Per trovare la connessione tra il numero di conteggi e la distanza percorsa dalla testina, abbiamo azzerato il valore di conteggio, spostato manualmente la testina di stampa di 100 mm e osservato il cambiamento nei conteggi. Alla fine abbiamo ottenuto la seguente proporzione: 1 conteggio = 0,17094 mm.

Poiché possiamo interrogare la distanza e possiamo misurare il tempo tra i campioni, possiamo calcolare la velocità con cui avviene lo spostamento di posizione - possiamo calcolare la velocità!

C'è un tempismo software approssimativo di 50 ms grazie a TMR0, ma abbiamo osservato che questi tempi non erano troppo precisi. Infatti, dopo alcune misurazioni della velocità del software, abbiamo scoperto che i 50 ms temporizzati non sono affatto 50 ms. Ciò significava che i campioni non venivano prelevati a intervalli fissi, quindi anche il calcolo della velocità non poteva utilizzare una base temporale fissa. Una volta riscontrato questo problema, è stato facile andare avanti: abbiamo preso la differenza di distanza e la differenza di tempo e calcolato la velocità come D_distance/D_time (invece di D-distance/50ms).

Inoltre, poiché la nostra equazione restituirebbe la velocità in unità di mm/50 ms, dobbiamo moltiplicarla per 1200 per ottenere la distanza percorsa dalla testa in un minuto, in [mm/minuto].

Nota: il software di controllo fresatura CNC Mach 3 definisce gli avanzamenti in unità di [mm/minuto]

Filtraggio

Da questo momento in poi, le misurazioni sembravano essere abbastanza accurate, ma c'era del rumore sul segnale misurato. Sospettavamo che ciò fosse dovuto a incongruenze meccaniche nell'albero, nell'accoppiamento dell'albero, ecc., quindi abbiamo deciso di filtrarlo per ottenere un buon valore medio di ciò che viene misurato.

Regolazioni fini del software

Per modificare la frequenza di campionamento e la frequenza di filtro durante il runtime, sono state aggiunte delle barre di scorrimento, una per ciascuna. Inoltre, è stata introdotta anche la possibilità di nascondere le trame.

Passaggio 5: risultati

Risultati
Risultati
Risultati
Risultati
Risultati
Risultati
Risultati
Risultati

Dopo che le parti hardware e software erano pronte, abbiamo eseguito tre serie di misurazioni con mach 3 + my software, puoi vedere i risultati nelle immagini allegate. Esperimenti successivi hanno mostrato una migliore precisione, con filtri e frequenze di campionamento aumentate. I grafici mostrano la velocità misurata con un colore rosso fisso e la media con un trattino blu.

Detto questo, sembra che Mach 3 gestisca queste impostazioni di velocità in modo abbastanza accurato, ma ora lo sappiamo per certo:)

Spero che questo breve tutorial ti sia piaciuto sul reverse engineering e sulla trasformazione dell'acqua in vino!

Saluti!

Consigliato: