Lancenigo di Villorba TREVISO CORSO SERALE AREA DI PROGETTO ANNO SCOLASTICO 2006/2007 Allievo: NASATO GIANNI Tutor: prof. ITALO ZANIOL, MARCO FALAVIGNA MACCHINA A CONTROLLO NUMERICO GESTITA DA MICROCONTROLLORE 1 INDICE INTRODUZIONE pag. 3 SCHEMA A BLOCCHI DEL SISTEMA pag. 4 ANALISI DELLO SCHEMA A BLOCCHI E DEI PRINCIPALI COMPONENTI pag. 4/9 SCHEMA ELETTRICO DEL CIRCUITO DI CONTROLLO pag. 10/11 PIC 16F877 della Microchip SOFTWARE PER LA SIMULAZIONE DELLA SCHEDA DI CONTROLLO ( Proteus ver.9.4) pag. 11/12 SOFTWARE PER IL CONTROLLO NUMERICO ( KellyCam versione free) pag. 13/14 SOFTWARE PER DISEGNO CAD 2D – 3D ( AlphaCam ) pag. 15/16 SOFTWARE UTILIZZATO PER LA PROGETTAZIONE HARDWARE (Eagle 2D/3D) pag. 16/17 Vista della scheda di controllo in 3D realizzata con Eagle SOFTWARE PROGETTATO IN LIGUAGGIO ASSEMBLY (spiegazione delle principali routine) pag. 17/26 DOCUMENTAZIONE FOTOGRAFICA E VIDEO pag. 26/29 CONSIDERAZIONI FINALI (ed esempi di lavorazioni) pag. 29/30 PRINCIPALI ISTRUZIONI E METODOLOGIE PER ESEGUIRE LA FORATURA DI CIRCUITI STAMPATI pag. 31/34 2 Introduzione A conclusione del corso di studi presso l’ITIS “M. PLANCK” di Lancenigo (TV), ho pensato di realizzare un progetto che consentisse di unire le conoscenze acquisite sui microprocessori al controllo delle macchine utensili utilizzate per la lavorazione di diversi materiali ( materiali teneri e in particolare legno ) e la realizzazione di circuiti stampati ( asportazione rame mediante fresa e foratura ). Utilizzando il microcontrollore PIC16F877A, opportunamente interfacciato con tre motori e altre periferiche di controllo e comando, ho progettato una macchina (pantografo) a livello hobbistico che, mediante il controllo di tre assi X-Y-Z, realizza un sistema di controllo ampiamente utilizzato in campo industriale e che è comunemente chiamato CNC. CNC è l’abbreviazione di “Computer Numeric Control”, ossia una macchina per lavorazioni meccaniche, vedi tornio, fresa ecc., che viene comandata da un computer per eseguire delle lavorazioni ad un pezzo. Con un programma CAD (vedi Autocad), viene disegnato il particolare da realizzare, poi con un programma CAM (vedi KCAM) viene generato il programma usato dal controllo CNC. Una macchina a CNC di tipo hobbistico, come questa realizzata, è generalmente costituita dalle seguenti parti: • • • • • • • • Computer programmi CAD, CAM ed interpreti vari. Programma di controllo CNC file in formato Gcode del pezzo o lavorazione da eseguire controllo elettronico del CNC (Stepper drivers) gruppo alimentazione del controllo elettronico. motori passo passo (step motor) fresa che esegue le lavorazioni Meccanica della macchina a controllo numerico 3 Schema a blocchi del sistema e sua descrizione Lo schema a blocchi del sistema è quello rappresentato in figura. Il computer può essere un qualsiasi Personal Computer con sistema operativo DOS – Windows – LINUX – MAC su cui possa “girare” del software capace di gestire la macchina a CNC in tempo reale fornendo opportuni segnali di controllo utilizzando per questa applicazione la porta parallela. La comunicazione potrebbe avvenire anche tramite porta seriale RS232 oppure USB. Nel computer deve essere installato: un pacchetto applicativo CAD 3D che consente di disegnare il pezzo da ottenere a lavorazione finita. Un pacchetto applicativo CAM che traduce il file di disegno CAD in un programma di lavorazione per la macchina a CNC. Il microcontrollore ha il compito di gestire gli attuatori che controllano il movimento di tre assi ( potrebbero essere anche di più per lavorazioni complesse ). Il movimento dei tre assi controlla la posizione di un utensile portato in rotazione da un motore ( ad esempio un motore in corrente continua ). Le informazioni vengono fornite al microcontrollore dal PC tramite la porta parallela suddetta; a sua volta il microcontrollore potrebbe inviare al PC, sempre attraverso la parallela, segnali riguardanti lo stato di alcune periferiche ( fine corsa, tastatori, pulsanti di emergenza ecc. ). Riassumendo le periferiche interfacciate al microcontrollore sono: La porta parallela per ricevere segnali di controllo dal PC Una tastiera per posizionare manualmente l’utensile tre driver per il pilotaggio dei motori un driver per pilotare il motore che porta in rotazione l’utensile dei led di segnalazione un pulsante di emergenza (reset) Nella scheda è presente anche uno strip per la programmazione in circuit del microcontrollore. 4 Analisi delle periferiche La porta parallela Questa interfaccia verso il PC, anche se oramai in disuso, ben si presta alla mia applicazione. Questa porta, infatti, dispone di un numero di I/O adeguati ed inoltre la velocità di trasmissione delle informazioni soddisfa l’esigenza di una applicazione real time. In figura 1 è mostrata la piedinatura della porta (connettore femmina ): le linee in giallo sono uscite, quelle in celeste ingressi e quelle verdi la massa. In figura 2 sono indicati i nomi delle varie linee che sono derivati dalla iniziale applicazione di questa porta per il controllo di stampanti. Fig. 1 fig. 2 In tabella è riportato l’indirizzo di ciascun bit con il relativo indirizzo di porta. I nomi indicati in grassetto sono segnali in logica negata. 5 Tramite i segnali di uscita della porta parallela, il PC invia al processore i comandi per i motori che controllano i movimenti dei tre assi. Per ogni asse vengono utilizzati due segnali: uno controlla la direzione dello spostamento ( direction ), mentre l’altro (clock) lo spostamento di un passo. Un ulteriore segnale serve a controllare il motore che aziona l’utensile. In definitiva il microcontrollore dovrà interpretare questi segnali e comandare fisicamente le interfacce dei motori. La tastiera Tenuto conto che il tastierino è costituito da una matrice di righe e colonne sui cui incroci si trova un pulsante che mette in collegamento una riga con una colonna, la lettura di tale periferica può essere fatta portando a livello basso una colonna ( o una riga ) e fare la scansione ( lettura ) delle righe ( colonne ). Quando un tasto, che si trova sulla colonna suddetta, viene azionato, la riga corrispondente a questo tasto si trova a livello basso e come tale può essere letta. Configurando le colonne come ingressi e le righe come uscite, con opportuna scansione, si può stabilire il tasto azionato. In fase di lettura della tastiera è anche opportuno utilizzare del software che consente di eliminare i rimbalzi dei contatti. La logica da seguire è la seguente: a) quando viene riconosciuto un livello basso su uno degli ingressi, si chiama una routine di ritardo di 20ms che consente di ignorare lo stato della periferica finché vengono eliminati i rimbalzi. 6 b) Trascorso tale tempo, si attende che il tasto venga rilasciato ( si testa se l’ingresso viene portato a livello alto ). c) Riconosciuto questo evento si richiama la routine di ritardo e si prosegue con le successive istruzioni del programma. I motori passo-passo Per l’azionamento dei tre assi sono stati utilizzati dei motori passo-passo. Essi presentano vantaggi e svantaggi rispetto ad altri tipi di attuatori. Vantaggi: Non richiedono un sistema di retroazione che controlli la posizione dell’asse La logica di comando è puramente digitale e in genere mediante microprocessore La posizione è facilmente deducibile dal software di controllo A motore fermo il rotore può essere bloccato Svantaggi: La coppia disponibile è limitata a valori bassi Qualora la coppia frenante sia maggiore di quella motrice viene persa la posizione dell’asse All’aumentare della velocità la coppia motrice diminuisce Principio di funzionamento di un motore passo-passo Si prende in considerazione un motore passopasso bipolare costituito da quattro avvolgimenti Ph1, Ph2, Ph3, Ph4 disposti sullo statore a 90° l’uno dall’altro avvolti su quattro espansioni polari. Sul rotore è presente un magnete permanente. Per comprendere il principio di funzionamento è possibile ricondursi alla seguente schematizzazione costituita dal magnete e dalle 4 bobine. Iniziamo ad alimentare le due bobine in verticale. Il solenoide in alto affaccia il polo S alla calamita mentre il solenoide in basso mostra il proprio polo N. Poli opposti si attraggono, perciò il magnete si porterà con il polo N in alto ed il S in basso. Successivamente alimentiamo le due bobine poste in orizzontale. Anche questi solenoidi sono collegati in serie. Il magnete "vedrà" il polo S a destra ed il N a sinistra, e si 7 porterà in questa posizione compiendo un quarto di giro in senso orario. Proviamo ora ad alimentare le due bobine verticali ma invertendo la polarità della batteria rispetto al primo caso: la corrente circola in senso inverso, il polo S è ora in basso e quello N in alto. Il magnete ruota di un altro quarto di giro in senso orario, attirata dai poli opposti. La situazione è simmetrica rispetto al primo passo. Infine alimentiamo ancora le due bobine orizzontali, con polarità rovesciata rispetto al secondo caso. Il magnete ruota di un ulteriore quarto di giro, per avvicinare il proprio polo N al polo S che ora si trova a sinistra, ed il proprio polo S al polo N che ora è a destra. La sequenza prosegue ricominciando dal passo 1: così facendo il rotore tornerà alla posizione iniziale e avrà compiuto un giro intero. Questo è uno dei tanti modi di alimentazione degli avvolgimenti che comunque aiutano a comprendere come funziona un motore passo-passo. Driver per motori passo-passo Da quanto visto sul funzionamento dei motori passo-passo, il modo più semplice per pilotarli è quello di utilizzare quattro amplificatori binari che controllano la conduzione delle fasi. Tali amplificatori si realizzano con BJT oppure mosfet. Poiché i motori assorbono correnti piuttosto elevate ( in genere maggiori di 500mA ) è opportuno, se si utilizzano dei BJT, far riferimento a dei transistori Darlington caratterizzati da un guadagno statico di corrente piuttosto elevato che limita la corrente di pilotaggio a pochi mA. Nel progetto sono stati utilizzati dei transistori BDX53. 8 Transistor BDX53C Categoria hFE Lc max (A) Modello Pd max. Vceo max. transistor bipolari 750 min 8,0 NPN Darlington 60,00W 100,0 V TRANSISTOR BJT (bipolar junction transistor) E’ idealmente costituito due giunzioni PN realizzate su un wafer di silicio. E’ un dispositivo tripolare cioè a tre terminali. C: Collettore B: Base E: Emettitore EQUAZIONI IN REGIONE ATTIVA : IE = IC + IB IC = hFE IB IE = IB hFE + IB = IB (hFE + 1) IE ≈ IC POLARIZZAZIONE DEL BJT Per far funzionare il transistore come interruttore, è necessario che, con segnale di ingresso basso, esso si trovi in interdizione mentre, con livello alto, in saturazione. Se Vi è minore della tensione di soglia ( circa 1V per un darlington ) il BJT è interdetto in quanto IB=0. Con livello alto, si dimensiona RB in modo che 9 IB sia maggiore di IC/hFE di un 20 30%. Nel nostro caso i motori assorbono circa 1 ampere, per cui risulta RB = 470 ohm. Lo svantaggio maggiore di pilotare le fasi con questa tecnica, consiste nel fatto che la corrente di eccitazione di fase non sale istantaneamente al valore massimo quando il transistore si porta in conduzione, ma bensì con legge esponenziale che dipende dalla costante di tempo del circuito di eccitazione. Per questo motivo la velocità di rotazione deve essere limitata in quanto la coppia motrice cala all’aumentare della velocità. Ci sono varie tecniche che consentono di fronteggiare questo problema. La più vantaggiosa consiste nell’alimentare le fasi con una tensione maggiore di quella nominale in modo da ridurre il tempo in cui la corrente arriva a regime. Una volta raggiunto tale valore, si diseccita la bobina; la corrente continua a circolare nella fase grazie ai diodi di ricircolo in parallelo alla bobina. Quando la corrente scende al di sotto di un certo valore, si torna ad eccitare la bobina. Tale tecnica, denominata PWM, consente di raggiungere ottimi risultati con costi, però, sicuramente maggiori. Esistono svariati circuiti integrati che consentono il controllo del motore nel modo indicato: i più famosi sono la coppia LM297-298. Tuttavia la soluzione adottata consente un risparmio economico di circa venticinque euro anche se le prestazioni sono inferiori. Schema elettrico scheda di controllo basata su PIC 16F877A 10 disposizione dei componenti M o r s e t t i e r e Collegamento utensile c o l l e g a m e n t o m o t o r i Alimentazione Pin collegamento tastierino Connettore 25 poli LPT Pin collegamento programmatore on board. Il pic 16F877 Il PIC = Peripheral Interface Controller (Controllore di periferiche programmabile) è, in ultima analisi, un microcomputer. Dispone di: 8k di flash memory (area memoria programma) 368 byte di ram 256 byte di memoria non volatile Tutte le istruzioni, ad eccezione di quelle di salto, utilizzano 1 ciclo macchina che corrisponde a 4 periodi di clock può lavorare con un clock fino 20 Mhz ha fino a 14 sorgenti di interrupt (da periferiche interne e/o esterne) è possibile annidare fino ad 8 chiamate a subroutine in quanto lo Stack ha una profondità pari a 8 Ha un architettura RISC che significa : Reduced Instruction Set Computing, cioè può essere programmato con un numero limitato di istruzioni ( 35 ) Supporta la ICSP : In Serial Circuit Programming cioè la possibilità di programmarlo senza togliere il chip dalla scheda Le periferiche interne sono: 3 Timer (Timer0 8 bit, Timer1 16 bit e Timer2 8 bit) 2 moduli CCP capture, compare e pwm 11 8 ingressi analogici con conversione a 10 bit porta seriale sincrona/asincrona porta I2c porta di comunicazione parallela (PSP) diversi pin di i/o distribuiti su 5 porte (Porta, Portb, Portc, Portd, Porte) Ambiente di sviluppo del Software per simulazione e programmazione del microcontrollore (Proteus ver.9.4) Per la progettazione del software è stato utilizzato il programma MPLAB IDE v7.50. Per quanto concerne la simulazione, ho utilizzato il programma PROTEUS VER9.4 che risulta ottimale in quanto consente di analizzare adeguatamente il funzionamento del software che gira nel PIC e di metterlo a punto in tempi brevi. Questo programma mi ha dato sicuramente grandi soddisfazioni e risultati. Il modo di utilizzo è stato da parte mia istintivo e autodidatta; la simulazione si basa sui seguenti punti: si costruisce lo schema elettrico utilizzando i componenti in libreria. Nel mio caso ho utilizzato il PIC16F877, un ingresso gestito da parallela ,un tastierino , una serie di diodi led, dodici transistor NPN Darlington BDX53C e componenti di supporto. Si crea il software in linguaggio Assembler, per il controllo degli ingressi e delle uscite del microcontrollore. Si genera il file eseguibile o codice oggetto con estensione HEX ( quello che dovrebbe essere caricato nel PIC ) Si carica il file HEX sul PIC virtuale di Proteus. Negli ingressi della porta parallela cioè il PORTA, ho simulato un segnale di clock con frequenza 20 Hz Si procede con la simulazione Di seguito, in fig.4, è riportato lo schema elettrico realizzato e il listato dei componenti (fig.5) generato da PROTEUS. 12 Fig. 5 13 Software CAM per la gestione, via porta parallela, dei file GC,DXF,LPT (Kellyware KCam v4.0.22) View CNC control Questa funzione apre la finestra di controllo CNC. La finestra del controllo CNC, permette il controllo dei movimenti manuali e automatici degli assi. Insieme alle informazioni specifiche sulle caratteristiche dei movimenti. Keyboard Jog Controls Quando questa finestra è aperta, la pressione dei tasti freccia sul tastierino numerico del PC ( scroll lock attivo ) movimenterà gli assi; questi si sposteranno solo quando i tasti saranno abbassati; non appena verranno rilasciati il movimento verrà arrestato. 14 View Parallel port I/O display Questa funzione apre la finestra di visualizzazione della porta di I/O, dove è rappresentato lo stato corrente della logica sui PIN della porta parallela. Questa schermata può essere utile per diagnosticare problemi di comunicazione I/O. Table setup Parameters. Si apre con questa la tabella di impostazione. Da qui è possibile settare la redazione dei parametri di tabella CNC. Es. - Unità di misura (millimetri o pollici) -Numero di passi per unità di misura richiesti per azionare un asse. -Lunghezza massima di un asse. -Profondità dell’asse Z in modo spostamento o in modo lavorazione. -Inversione del sistema di coordinate dei motori. -Posizione di origine. PIN setup Port Maschera per il settaggio dei pin della porta parallela. Deve esserci una corrispondenza logica con l’hardware ed il software progettato per la scheda di controllo dei motori e del mandrino. 15 Software per disegno 2D-3D ALPHACAM Questo software, in pratica, è un CAD 3D con particolarità CAM. Si può disegnare qualsiasi oggetto comprese scritte 2D-3D. Rispetto ad altri CAD è necessario specificare le sezioni del pezzo da lavorare (specifica dimensioni materiale), decidere le varie caratteristiche di taglio, cioè, utensile usato, direzione da “prendere” (interna o esterna alla linea), profondità di lavorazione, faccia o volume di taglio. Grazie, poi, ad un post processor generico, il disegno, completo delle sue lavorazioni, viene salvato come file GC ( gcode) con tutte le coordinate negli assi cartesiani X Y Z. ♦ Simulazione 3D lavorazione pezzo. Schermata iniziale di “AVANZATO 3D 3 ASSI Pantografo: 16 L’immagine successiva rappresenta il disegno iniziale della struttura della macchina ( pantografo ), appunto progettata con questo CAD; successivamente i profili sono stati convertiti come taglio utensile nel formato GC (g code) Software utilizzato per realizzare schema elettrico e sbrogliato ( Eagle 4.11 ) Con il pacchetto applicativo Eagle V. 4.11 è stata progettata la parte hardware della scheda di controllo vale a dire schema elettrico e master per la realizzazione degli stampati. Questi passaggi sono stati eseguiti in laboratorio di TDP durante l’anno scolastico. Schermata principale: 17 Board. Schematic: Il software in linguaggio Assembler progettato con MPLAB V. 7.50 Assegnazione di variabili e localizzazioni memorie: ;***************** PANTOGRAFO ************************* list p=PIC16f877 __config ( _CP_OFF & _DEBUG_OFF & _WDT_OFF & _XT_OSC & _CPD_OFF & _BODEN_OFF & _WRT_ENABLE_OFF & _LVP_OFF ) #include <p16f877.inc> #define XPORT #define YPORT #define ZPORT PORTD PORTC PORTC 18 #define #define #define RELE INPUTPORT RELEPORT PORTD,0 PORTA PORTE,0 #define #define #define #define XF1 XF2 XF3 XF4 4 5 6 7 #define #define #define #define YF1 YF2 YF3 YF4 7 4 5 6 #define #define #define #define ZF1 ZF2 ZF3 ZF4 2 3 0 1 #define #define #define XBIT YBIT ZBIT 0 1 2 #define #define #define XDIR YDIR ZDIR 3 4 5 #define cblock STEPMASK 0X20 0X03 ; dall’indirizzo 0X20 si definiscono le varie label. ;ASSEGNAZIONE DI UN “NOME” ;SIMBOLICO ALLE FASI DEI MOTORI ; ;QUESTA TECNICA PERMETTE DI ;SPECIFICARE QUALE FASE ECCITARE ;SENZA DOVER OGNI VOLTA ;RICORDARE L’USCITA (PORTx,x) MS SAVE_W SAVE_S CONTX CONTY CONTZ CONTX1 CONTY1 CONTZ1 PORTAI CONT COUNTER1 COUNTER2 NEWSAMPLE OLDSAMPLE XSTEPCOUNTER YSTEPCOUNTER ZSTEPCOUNTER DUMMYPORT endc 19 Configurazione dei registri speciali del PIC MOVLW MOVWF B'00000001' OPTION_REG MOVLW B'01011100' MOVWF TRISB CLRF TRISE CLRF TRISC CLRF TRISD MOVLW B'00000111' MOVWF ADCON1 CLRF TRISA MOVLW 0XFF MOVWF TRISA MOVLW B'00000011' MOVWF TRISE BCF STATUS,5 ;******************* CLRF NEWSAMPLE CLRF OLDSAMPLE CLRF XSTEPCOUNTER CLRF YSTEPCOUNTER CLRF ZSTEPCOUNTER ;******************* CLRF CLRF CLRF CLRF CLRF CLRF CLRF CLRF CLRF CLRF PORTB PORTC PORTD CONTX CONTY CONTZ CONTX1 CONTY1 CONTZ1 CONT MOVLW MOVWF B'10100000' INTCON ;PRESCALE PER QUARZO 4 Mhz ;ASSEGNA PRESCALE A TMR0 - CONFIGURA ; PRESCALER ;CONFIGURA PORTB PER TASTIERINO ;PORTC OUT ;PORTD OUT ;CONFIGURA ADCON1 PER INGRESSI DIGITALI ;DEL PORTA ;CONFIGURA PORTA COME INGRESSI DIGIT. ;PORTE,0 e 1 COME INGRESSI ;BANCO 0 ;INIZIALIZZAZIONE DELLE VARIABILI ;MOTORI X, Y OFF ;RELE' OFF MOTORE Z OFF DIODI ON ;AZZERA CONTATORI PASSI ;ABILITA INTERRUPT Routine di Test: in questa parte di programma si rimane in attesa della pressione di un pulsante del tastierino per poter passare alla 20 modalità manuale, cioè il movimento degli assi tramite tastiera, oppure alla modalità automatica, assegnando Il controllo alla porta parallela: La scansione del tastierino collegato al PORTB, viene eseguita in maniera semplice. Il sistema di test pone inizialmente sempre a zero il bit meno significativo che controlla l’uscita di un diodo led (PORTB,0), mentre i bit rimanenti controllano la tastiera. Poniamo a valore alto tutti i bit tranne quello corrispondente alla colonna da testare. Successivamente si esegue un test per controllare se una riga viene portata bassa.In questo caso viene chiamata la routine POSIZIONA1. Si continua finché non viene premuto uno dei due tasti scelti per il passaggio alla lavorazione automatica. ;******************************* TESTA BCF PORTD,1 BCF PORTD,2 ;ACCENDE DIODI E SPEGNE RELE’ BCF PORTD,3 BCF PORTB,0 BCF PORTE,2 PORTB,5 PORTB,0 DIODO LED TESTA1 MOVLW MOVWF BTFSS CALL B'11011110' ;SCANSIONE COLONNA 3 (PORTB,5) PORTB PORTB,6 ;PREMUTO #? POSIZIONA1 ;POSIZIONAMENTO MANUALE ASSI MOVLW MOVWF BTFSS CALL GOTO B'11111100' ;SCANSIONE COLONNA 1 (PORTB,1) PORTB PORTB,6 ;PREMUTO *? scanningLoop;LAVORAZIONE AUTOMATICA TESTA1 :RITORNA A FARE IL TEST SENZA VARIARE ;LA CONFIGURAZIONE DIODI E RELE’ Routine posiziona: con la pressione di un tasto si chiamano le routine per l’eccitazione delle fasi dei motori. Questa parte di programma non si differenzia da quella spigata in precedenza; il test viene eseguito incrociando il controllo tra colonne e righe del tastierino. 21 ;********************ROUTINE POSIZIONA******************** POSIZIONA1 BSF PORTE,2 ;attiva segnalatore POSIZIONA XYZ ON OFF VAI CALL BSF BSF BSF BTFSC GOTO BTFSS GOTO BTFSC GOTO GOTO BCF BCF GOTO BSF BSF MS20 PORTD,1 PORTD,2 PORTD,3 PORTE,1 VAI PORTE,1 XYZ PORTE,2 ON OFF PORTE,2 PORTD,0 VAI PORTE,2 PORTD,0 ;SERIE DI TEST PER ATTIVAZIONE ;RELE’ ,IN D0 ,CON PULSANTE IN E1 E ;RISPETTIVA ACCENSIONE LED IN E2 ;SPEGNE DIODI MOVLW MOVWF B'01111110' PORTB ;SCANSIONE COLONNA 2 BTFSS CALL BTFSS CALL BTFSS CALL BTFSS CALL PORTB,3 SX_Z PORTB,6 DX_Z PORTB,2 DX_Y PORTB,4 SX_Y ;PREMUTO 5? ;CHIAMATA MOVIMENTO ;PREMUTO 0? ;CHIAMATA MOVIMENTO ;PREMUTO 2? ;CHIAMATA MOVIMENTO ;PREMUTO 8? ;CHIAMATA MOVIMENTO MOVLW MOVWF B'11011110' PORTB ;SCANSIONE COLONNA 3 ; BTFSS CALL BTFSS CALL BTFSS CALL PORTB,2 XY PORTB,3 DX_X PORTB,4 YX1 ;PREMUTO 3? ; CHIAMATA MOVIMENTO IN X-Y ;PREMUTO 6? ;CHIAMATA MOVIMENTO IN X ;PREMUTO 9? ; CHIAMATA MOVIMENTO IN X-Y MOVLW MOVWF BTFSS B'11111100' PORTB PORTB,2 ;SCANSIONE COLONNA 1 ; ;PREMUTO 1? 22 IN Z IN Z IN Y IN Y CALL BTFSS CALL BTFSS CALL YX PORTB,3 SX_X PORTB,4 XY1 MOVLW MOVWF BTFSC GOTO RETURN B'11111101' PORTB PORTB,6 POSIZIONA ; CHIAMATA MOVIMENTO IN X-Y ;PREMUTO 4? ; CHIAMATA MOVIMENTO IN Y ;PREMUTO 7? ; ;SCANSIONE COLONNA 1 ; Routine eccitazione fasi motore Come spiegato, il controllo del motore avviene eccitando le fasi secondo una certa sequenza. Si eccitano a rotazione le fasi in modo tale che il magnete interno compia uno spostamento di un passo (1,8° ) nella direzione desiderata. Nel mio caso le fasi sono state eccitate a due per volta in modo da aumentare la coppia motrice, cosa particolarmente gradita per l’azionamento degli assi X, Y. Una tipologia particolare di motore passo-passo utilizzabile sia in configurazione unipolare che bipolare, e quella a 6 fili. Nella figura questo tipo di motore è stato schematizzato con le quattro fasi racchiuse nel rettangolo tratteggiato. Passo Ph1 Ph3 Ph2 Ph4 1 I I 0 0 2 0 I I 0 3 0 0 I I 4 I 0 0 I La coppia disponibile, con eccitazione a due fasi per volta, è circa 1,4 volte maggiore di quella ottenuta con una sola fase attiva alla volta: infatti sul rotore agiscono due forze tra loro perpendicolari che producono una risultante con modulo 1.4 volte maggiore rispetto alle componenti assiali. Il consumo di potenza e quindi anche il riscaldamento del motore raddoppiano. Questo fatto potrebbe creare problemi in alcuni motori non adatti a questo tipo di pilotaggio. 23 • Di seguito è mostrata la routine spostamento: L’eccitazione dei motori è a due fasi per volta. ;********** ROUTINE SPOSTA ASSE Z VERSO ALTO *************** SX_Z BCF PORTD,1 ;ACCENDI DIODO INCF CONTZ MOVLW 4 ;CONTROLLA POSIZIONE SUBWF CONTZ,0 ; MOTORE BTFSS STATUS,2 GOTO SZ1 CLRF CONTZ BCF PORTC,2 ;UN PASSO BSF PORTC,0 ;LE DUE FASI ECCITATE BSF PORTC,1 RETURN SZ1 MOVLW SUBWF BTFSS GOTO BCF BSF BSF 1 CONTZ,0 STATUS,2 SZ2 PORTC,1 PORTC,0 PORTC,3 ;UN PASSO RETURN SZ2 SZ3 MOVLW SUBWF BTFSS GOTO BCF BSF BSF RETURN 2 CONTZ,0 STATUS,2 SZ3 PORTC,0 PORTC,2 PORTC,3 BCF BSF BSF RETURN PORTC,3 PORTC,1 PORTC,2 ;UN PASSO ;UN PASSO Sicuramente la parte di programma più importante riguarda la lettura e l’elaborazione dei segnali provenienti dalla porta parallela. Come detto in precedenza il controllo di ogni asse utilizza 2 linee: Direzione asse Clock ovvero il segnale che controlla l’avanzamento di un passo dei motori. L’hardware prevede che i segnali provenienti dalla parallela siano leggibili sul porto A del PIC ad eccezione del segnale che controlla lo stato del motore porta utensile posto nel porto E. 24 Di seguito è analizzata una parte della routine che interpreta tali segnali e controlla la posizione dei tre motori e del relè che aziona il motore porta utensile. ;********** ROUTINE LAVORAZIONE PEZZO ******************* scanningLoop BTFSC RELEPORT ;CONTROLLA SE ATTIVARE RELE’ BCF RELE BTFSS RELEPORT BSF RELE BTFSC RELEPORT BCF PORTE,2 BTFSS RELEPORT BSF PORTE,2 ;ATTIVA DISATTIVA SEGNALATORE Questo blocco di istruzioni è sufficientemente semplice; viene testato lo stato dell’ingresso RELEPORT così dichiarato: #define RELEPORT PORTE,0 Lo stato del bit zero del porto E, viene praticamente copiato nel bit zero del porto D che controlla lo stato dell’utensile. La variabile relè è stata così dichiarata: #define RELE PORTD,0 Il seguente blocco di istruzioni controlla se deve essere aggiornata la posizione dell’ asse X secondo la seguente logica: 1. viene letto il porto A e salvato nella variabile NEWSAMPLE 2. viene testato il bit che fornisce il segnale di clock relativo allo stato passato dell’asse X ( precedente ciclo di lettura ) memorizzato in OLDSAMPLE. a. Se questo bit è a 1 lo stato dell’asse non deve essere modificato in quanto se il nuovo stato è 1 significa che è in corso la temporizzazione relativa all’esecuzione di un passo se il nuovo stato è zero lo stato dell’asse non deve cambiare b. Se è 0 bisogna controllare lo stato presente. Se lo stato presente è 0 non è richiesto il cambiamento di stato dell’asse, se 1 si deve aggiornare la posizione chiamando in causa la routine UPDATEX . movf PORTA,W ;MEMORIZZA STATO PRESENTE MOTORI movwf NEWSAMPLE btfsc OLDSAMPLE,XBIT ;CONTROLLA STATO PASSATO DEL MOTORE X; SE OFF ;CONTROLLA NUOVO STATO goto noStepX ;SE ON NON INTERVENIRE LASCIA FASI ECCITATE BTFSC NEWSAMPLE,XBIT ;CONTROLLA NUOVO STATO MOTORE ASSE X CALL UPDATEX ;SE A 1 CHIAMA ROUTINE CHE CONTROLLA DIREZIONE E MUOVE ;DI UN PASSO noStepX btfsc OLDSAMPLE,YBIT ;IDEM ASSEY GOTO noStepY BTFSC NEWSAMPLE,YBIT CALL UPDATEY noStepY Al termine di questa routine viene aggiornato lo stato passato degli assi trasferendo in OLDSAMPLE il contenuto di NEWSAMPLE. 25 MOVF NEWSAMPLE,W MOVWF OLDSAMPLE GOTO ;AGGIORNA STATO DEI MOTORI ;LO STATO PRESENTE DIVENTA STATO PASSATO PER NUOVA ;SCANSIONE scanningLoop La routine UPDATEX movimenta il motore relativo all’asse X secondo questa logica: 1. viene controllata la direzione testando il bit 3 del porto A: a seconda dello stato di tale bit viene aggiornato lo stato del puntatore ( incrementato o decrementato di 1 ) che consente di recuperare dalla tabella XSTEPTASBLE i livelli logici con cui pilotare le fasi del motore X. Poiché i puntatori potrebbero assumere dei valori negativi ( ad esempio se inizialmente il valore del puntatore fosse 0 ed esso fosse decrementato per puntare al dato in posizione 3 della tabella, assumendo invece il valore 0xFF ) bisogna “correggere” tale situazione azzerando tutti i bit non significativi che potrebbero portarci fuori tabella. La variabile STEPMASK, inizializzata col valore 0x03, è una maschera che, tramite una istruzione di AND logico, consente di azzerare tutti i bit del puntatore ad esclusione dei due meno significativi che servono ad accedere ai dati di tabella. 2. letto da tabella lo stato dei transistori che pilotano le fasi del motore, si presenta il problema di modificare solo lo stato delle uscite che controllano il motore dell’asse X lasciando inalterate le altre. Il motore y, ad esempio, viene comandato dalle uscite 4,5,6,7 del porto C mentre le altre quattro comandano le fasi del motore Z. Dunque, se si vuole aggiornare, ad esempio, lo stato delle fasi del motore Y, si devono lasciare inalterate le uscite che controllano le fasi del motore Z e agire solo sulle uscite che controllano il motore Y. Ciò è possibile utilizzando opportune istruzioni logiche che, tramite delle maschere, agiscono selettivamente su uno o più bit di una parola. Nella fattispecie, il valore recuperato da tabella viene: a. salvato in una locazione di supporto ( DUMMYPORT ) b. viene caricata in accumulatore una maschera che contiene degli 0 nei bit corrispondenti alle uscite che controllano il motore. Utilizzando tale maschera si esegue un AND con i contenuti del porto che controlla il motore ( il risultato è salvato in accumulatore ). Resta così memorizzato lo stato dei bit che non devono essere modificati. c. Viene fatto l’OR tra DUMMYPORT ( nuovo stato delle fasi del motore ) con i risultati della precedente elaborazione ( bit che non devono essere modificati ). Il valore ottenuto può essere trasferito nel porto desiderato. Le considerazioni sviluppate per il controllo dell’asse X valgono anche per il controllo degli altri assi. UPDATEX BTFSS OLDSAMPLE,XDIR INCF XSTEPCOUNTER,F ;MOVIMENTAZIONE MOTORE X ;CONTROLLA DIREZIONE ASSE X ;SE 0 INCREMENTA PUNTATORE TABELLA 26 BTFSC OLDSAMPLE,XDIR DECF XSTEPCOUNTER,F MOVF XSTEPCOUNTER,W ANDLW STEPMASK CALL XSTEPTABLE ;SE 1 DECREMENTA PUNTATORE ;MASCHERA RISULTATO PER I SOLI 2 BIT MENO ;SIGNIFICATIVI ;SE AD ESEMPIO XSTEPCOUNTER ERA 0 PRIMA DEL DECREMENTO ;ESSO DIVENTA 0XFF DOPO DECREMENTO E SI ANDREBBE FUORI ;TABELLA ;RECUPERA NUOVO STATO FASI MOTORE X OUTTOXSTEPPORT MOVWF DUMMYPORT ;SALVALO MOVLW~( 1<<XF1 | 1<<XF2 | 1<<XF3 | 1<<XF4 );INVIA SUL PORTO CHE CONTROLLA ;MOTORE ANDWF XPORT,W ;LASCIANDO INALTERATI I BIT NON INTERESSATI IORWF DUMMYPORT,W ;CIOE’ 00001111 & PORTD = 0000XXXX MOVWF XPORT ;OOOOXXXX | XF4XF3XF2XF1OOOO = XF4XF3XF2XF1XXXX RETURN Alcune foto della meccanica ♦ La parte meccanica è stata realizzata in legno multistrato da 22mm, verniciato color grigio. Le guide sono in acciaio con cuscinetti a ricircolo di sfere. Il movimento degli assi avviene con vite senza fine. ♦ Particolare taglio dei pezzi di costruzione ( legno multistrato) 27 Struttura in legno multistrato da 22 mm Utensile Guide acciaio da 16/22 Angolo per posizionamento fisso punto “0” (90°) 28 Dettaglio scheda e comandi manuali Interruttore manuale utensile Alimentatore 13.8 V, 8 A picco-picco Regolatore giri utensile Presa unica per collegamento motori Hardware principale di controllo Tastierino per movimenti in manuale Connettore porta PARALLELA Pulsante per pilotare relè (utensile) in modalità manuale Particolare angolo posizionamento punto “o” , e sistema di fissaggio pezzo 29 Conclusioni Per concludere posso dire che questo progetto sviluppato nel corso dell'ultimo anno scolastico, mi ha dato grandi soddisfazioni in quanto sono riuscito, con la collaborazione degli insegnanti di TDP (Zaniol Italo) e sistemi (Falavigna Marco), a realizzare una macchina che riesce ad unire varie discipline tecniche cioè elettronica, informatica, meccanica nonché tecnologiche ( conoscenza dei materiali ). Sottolineo che le scienze meccaniche ed elettroniche viaggiano oramai insieme; avere una meccanica professionale, con spostamenti precisi al centesimo di mm, non sarebbe possibile senza un controllo elettronico realizzato con sistemi basati su microprocessore. La macchina a controllo numerico realizzata, consente di ottenere ottimi risultati per la realizzazione di basso rilievi in legno o plastica e risulta soprattutto ideale per l'incisione e foratura di schede in vetronite ( circuiti stampati). Una lavorazione 3D implica un tempo di esecuzione molto lungo. Per eseguire, ad esempio, la figura in rilievo qui evidenziata, servono dalle cinque alle sette ore a seconda dell’utensile usato( da 2-3 mm). Lavorazione su legno Immagine in scala di grigi L’’incisione ITIS MAXPLANCK impegna la macchina per circa 35 minuti 30 Per la foratura di un circuito stampato si ha una lavorazione veloce e precisa Di seguito vengono spiegati i passi principali per l’esecuzione della foratura di un circuito stampato. FORATURA BASETTA SU SBROGLIATO ESEGUITO DA EAGLE: • Nella schermata board, selezionare VIAS, Drills e Holes, 31 e rendere visibili solo PAD, Drills Holes • Dal menù file selezionare RUN e alla schermata successiva aprire il file dxf.ulp e scegliere dove salvare il file generato. C:\documenti\...... • Conversione del file dxf in formato G CODE per la lavorazione con software KCAM In ALPHACAM menù file input CAD, caricare il file salvato prima con EAGLE 32 Input CAD • Per la configurazione usata su Kcam si è costretti ad impostare un livello di scala = 0.1 vedi figura Selezionare SCALA , TUTTO, fattore di scala 0.1 • • Selezionare ora l’utensile oppure modificarne uno a seconda delle proprie esigenze ( es.:DIAMETRO 0.075 Cm) 33 • Passo successivo, foratura Di quanto si deve alzare Z per gli spostamenti (es. 0.2 Cm) Profondità del foro (es.:- 0.3 Cm) • • Menù file Scelta Post Post..Proces.. GENERICO 8600 mc sycam.arp Ok Menù file Output NC salvare con nome, il file verrà salvato con l’estensione ANC,questo perché non c’è un post proccessor adatto (es.: fori.ANC), bisognerà rinominare il file in un secondo momento con estensione *.GC 34 • Lavorazione pezzo Con il software KCAM. Menù file Open G Code file • Caricare il file generato con ALPHACAM e rinominato. (fori.GC). Il tempo per la visualizzazione dipenderà dalla grandezza del file e potrà essere di alcuni minuti. 35