AZIONAMENTO DI UN BRACCIO MECCANICO CON UN PC E UN P 87511 di Conti S. e Garro A. 1 Introduzione Vediamo un circuito che controlla un modellino di braccio meccanico, reperibile in commercio, mosso da 6 motori passo-passo unipolari. Va detto, comunque, che il circuito può essere utilizzato anche per altri scopi: controlli di plotter, automatismi a spostamenti assiali, o qualunque altro dispositivo meccanico mosso da motori dello stesso tipo. Il circuito governa i 6 motori dell’apparato meccanico mediante 6 interfacce di potenza, ma chi volesse riutilizzarlo per altri scopi potrebbe togliere qualcuna di queste senza problemi, o aggiungerne altre 2 a condizione di modificare la sola scheda di supporto delle interfacce ed il software di gestione. 2 Presentazione del progetto Prendiamo spunto dall’azionamento di questo braccio, del tipo di quelli usati nell’industria, per introdurre una strategia di progetto per un lavoro, non più semplice, che può mettere in difficoltà gli inesperti. Il progetto prevede l’uso di un PC che stabilisce le azioni che deve eseguire il braccio segnalandole ad un controller remoto, progettato per un microprocessore 8751. Questo si limita ad eseguire le istruzioni che gli vengono trasmesse dal computer mediante la porta seriale RS232. 3 Descrizione del braccio meccanico Come si vede dalla fotografia presente nel file P1010016.zip il braccio è costituito da un basamento fisso su cui ruota un sistema costituito da 2 leve e una pinza a 3 leve, che chiamo “mano”. La mano può ruotare nei 2 sensi mediante un sistema che chiamo “polso”. Chiamo “gomito” il perno che unisce le 2 leve, “spalla” il perno che unisce la leva inferiore al supporto rotante che sostiene tutto. Chiamo “tronco” quest’ultimo supporto che permette una rotazione orizzontale di tutto il meccanismo. Va tenuto presente che un sistema meccanico come questo permette solo spostamenti rotatori dell’oggetto da muovere, mai rettilinei. 4 Schema a blocchi del controller Come si vede in fig. 4.1 lo schema di base è molto semplice, oltre al processore esso è composto da un multivibratore (NE555) che dà la temporizzazione di base per far eseguire i passi ai motori; da 6 interfacce di potenza per motori, che forniscono loro la corrente necessaria e permettono di sfruttarne tutta la velocità; da un decoder (74S138) che seleziona qual è il motore effettivamente controllato dal processore; da un bus controlli che va dal P alle interfacce per scegliere il modo di funzionamento di ogni motore; da un convertitore TTL-RS232 per l’interfacciamento col PC; c’è, infine, un interruttore di sicurezza, applicabile ad un cancello, che ferma ogni movimento in caso di apertura . 1 Tratto dall'articolo pubblicato su "Fare Elettronica" di Marzo 2001 MOTORI PASSO PASSO UNIPOLARI 5 5 5 5 5 5 Interfacce di potenza (con L297) selez. 74S138 3 enab. step ck NE555 8751 astabile ck ck ck ck ck ck avanti/indietro enable reset half/full ctrl interruttore cancello MAX232 TXD RXD (TTL) Al PC (RS232) Fig. 4.1 Schema a blocchi 5 Funzionamento di un motore p.p. unipolare Per capire certi dettagli del funzionamento del circuito bisogna prima conoscere la costituzione e il modo di utilizzo di un motore passo-passo unipolare, del tipo presente su questo braccio. N I A S S I N A' N S B I B' + I 1 3 2 4 Vcc - Schema di principio di un motore p.p. unipolare a magneti permanenti con circuito di pilotaggio Fig. 5.1 Struttura di base di un motore passo-passo unipolare L’ipotetico motore elementare che vediamo ha un rotore a magnete permanente magnetizzato in modo da presentare il nord e il sud su punti diametralmente opposti. A questo rotore sono affacciati 2 statori, su cui sono avvolti 2 avvolgimenti ciascuno, collegati centralmente fra di loro. Questo particolare collegamento obbliga la corrente che percorre un singolo avvolgimento a scorrere sempre dalla stessa parte, perciò a generare un campo magnetico orientato sempre allo stesso modo, da qui il nome “unipolare”. Nel momento in cui si dà corrente ad un avvolgimento il rotore ruota di un piccolo angolo fino ad affacciare il proprio sud al nord dello statore, lì si ferma, perciò si dice che ha fatto un passo. Ci sono 3 modi per controllarne gli spostamenti, 2 sono detti a passo intero, uno a mezzo passo. Un modo di controllarlo a passo intero (detto “normal drive mode”) è visibile in figura: vengono attivati 2 avvolgimenti per volta, in questo caso mediante i buffer 1 e 4 consentendo, così, il passaggio di corrente negli avvolgimenti A e B’. Si producono, in questo modo, i 2 poli nord che faranno ruotare il rotore di 90° in senso orario (il suo sud si fermerà al centro dei 2 nord di statore). Questo modo di funzionare è quello che sviluppa la maggiore coppia e provoca il maggiore assorbimento di corrente. Si vede bene dalla figura che per continuare la rotazione, in seguito bisognerà attivare i buffer 3 e 4, poi i 2 e 3, infine l’1 e il 3 per concludere il giro. Naturalmente invertendo la sequenza temporale delle attivazioni dei buffer il rotore ruoterebbe in senso contrario. Un altro modo di controllarlo a passo intero (detto “wave drive mode”) si ottiene attivando un solo avvolgimento per volta alternando gli statori da magnetizzare. Ad esempio se attiviamo dapprima il buffer 1, producendo un solo polo nord in alto mediante l’avvolgimento A, il rotore si ferma col suo sud in alto; se, poi, attiviamo il buffer 4 producendo un polo nord a destra mediante l’avvolgimento B’ il rotore ruota di 90° in senso orario per fermarsi col suo sud a destra. Si farà concludere il giro attivando prima il buffer 3, poi il 2. Anche questa volta invertendo la sequenza (buffer 2-3-4-1) si inverte il senso di rotazione. Questo modo di controllarlo sviluppa meno coppia e dà minore assorbimento di corrente. Alternando i 2 modi di controllo: 1 passo in wave drive mode, il passo successivo in normal drive mode, e così via, il rotore si sposta solo di 45° ad ogni passo anziché 90. Questo modo di controllarlo è detto “half step mode”, sviluppa una coppia variabile, dà anche un assorbimento variabile di corrente, ma consente dei posizionamenti più precisi dei dispositivi meccanici mossi dal motore. 6 Generalità sul funzionamento del sistema Va tenuto presente che il lavoro che abbiamo eseguito è a scopo didattico: finalizzato ad imparare a progettare hardware e software. Quest’apparecchiatura potrà, inoltre, essere utilizzata in futuro per prove di laboratorio, per cui il circuito realizzato offre molte possibilità di realizzare tipi di controllo diversi da quello usato attualmente. Il programma di controllo, già collaudato sul circuito, prevede il funzionamento in “half step” ma niente impedisce di modificare il SW per il processore e per il PC in modo da muovere i motori anche negli altri 2 modi. Il tipo di controllo a “mezzo passo”, che abbiamo scelto, è il più laborioso da effettuare tramite il SW di un processore, per cui è stato conveniente aggiungere dei circuiti integrati esterni che lo gestiscano e permettano, inoltre, la regolazione delle correnti che percorrono gli avvolgimenti per sfruttare al massimo la velocità raggiungibile dai motori. Perciò abbiamo utilizzato le interfacce con gli I.C. L297 della ST Microelectronics (www.st.com). Essi consentono il controllo del senso di rotazione; il controllo di modo: “half step”, “full step” a 1 fase e 2 fasi; danno la possibilità di fermare il motore tenendolo frenato o libero di muoversi; di dare un valore di origine alle coordinate della posizione di un motore (“home”). A questi L297 è sufficiente impostare il modo di funzionamento, in modo asincrono, mediante il bus controlli e fornire un impulso (dato dal fronte di salita del pin 39 del P, “stepclock” o Gab) affinchè facciano eseguire un passo ad un motore. Al processore, in questo modo, rimane solo il più semplice lavoro di interpretare un comando ricevuto dal PC, stabilire qual è il motore da muovere, selezionarlo applicando il suo numero al decoder 74S138 (pin 35, 36 e 37), applicare al bus controlli il livello appropriato per il pin avanti-indietro (pin 34), dare all’interfaccia gli impulsi del clock di passo, contandoli per capire quando il motore è giunto a destinazione, attendere, infine, un nuovo comando dal PC. Precisiamo che gli istanti in cui vengono forniti gli impulsi del clock di passo sono determinati dall’NE555 e che il protocollo di comunicazione prevede che prima che il motore sia giunto a destinazione, mentre ancora si sta muovendo, il PC invii già il comando da eseguire in futuro per aumentare la velocità del sistema eliminando i tempi di attesa. Sfruttando la buona velocità che ci consente il protocollo, abbiamo deciso di muovere un solo motore per volta per ridurre la complessità dei programmi di gestione. 7 Schema elettrico del controller (vedi file schmbtif.zip) Le parti principali che costituiscono la scheda controller (o mother board) sono il processore, il multivibratore realizzato con l’IC NE555, alcuni LED di segnalazione e il convertitore MAX232 per la comunicazione col PC. Completano la scheda i necessari componenti passivi. 8 Principio di funzionamento del controller Generazione degli impulsi di passo. Abbiamo scelto di generare gli impulsi del clock di passo mediante un multivibratore esterno per poter osservare gli effetti del cambiamento di velocità immediatamente mentre ruotiamo l’opportuno trimmer (R2). Questa scelta, inoltre, semplifica la stesura del software sia per il PC che per il P. Va detto, comunque, che, volendo, il multivibratore potrebbe essere eliminato fisicamente dal circuito e simulato mediante i timer interni dell’8751, ma con le conseguenti complicazioni dei programmi di gestione. Questo multivibratore genera un’onda quadra che ad ogni suo fronte di discesa provoca un interrupt per il processore, cioè interrompe l’esecuzione, da parte del P, del programma in corso e lo obbliga ad eseguire una routine in cui l’8751 stesso deve decidere se c’è qualche motore da muovere e, in tal caso, complementare il pin stepclock (pin 39). Questo pin è collegato al decoder 74S138, posto sulla scheda bus di supporto per le interfacce, che provvede a ritrasmetterlo all’ L297 interessato . Siccome il clock per gli L297 è attivo sul fronte di salita, il processore, dopo la complementazione, controlla se lo “stepclock” è alto e, in questo caso, considera effettuato il passo da parte del motore, perciò lo conta per stabilire quando questo sarà giunto a destinazione. Va notato che nel SW da noi realizzato la frequenza dello stepclock per i 297 è rigorosamente metà di quella dell’NE555. Premesso che il SW che possiamo fornire prevede velocità uguali per tutti i motori, va detto che volendo impostare velocità diverse per qualcuno di essi la frequenza del 555 andrà regolata per il motore più veloce e il che nuovo SW dovrà provvedere a rallentare i motori necessariamente più lenti. Interfacciamento col PC Alla trasmissione fisica dei dati provvede semplicemente un I.C. MAX232 che trasla i livelli di tensione dei bit da TTL, compatibili con l’8751, a RS232, compatibili con la porta seriale del PC. Questo MAX232 fornisce circa +12V per lo 0 logico e circa –12V per l’1 logico, valori accettabili per la porta seriale (COM) del PC. Altre parti del controller I LED di segnalazione non sono tutti utilizzati nel SW da noi realizzato. Quelli usati indicano: D6, D7 e D8 formano il numero binario che seleziona il motore attivo; D5 segnala il livello del clock di passo; D4 segnala il movimento in avanti o indietro; D3 segnala se il motore è abilitato; D2 segnala lo stato dell’interruttore del cancello. Il pulsante S1 “resetta” il processore, cioè fa ripartire l’esecuzione del suo programma azzerando alcuni valori che conteneva in precedenza. Va tenuto presente che la sua pressione durante il funzionamento del braccio meccanico arresterebbe ogni movimento e per rimettere in posizione di riposo i meccanismi bisognerebbe fare ricorso ai comandi impartiti dalla tastiera del PC. Il connettore U2 collega il bus controlli che parte dall’8751 alla scheda bus che porta il decoder e gli slot per le interfacce di potenza 9 Schema elettrico e funzionamento di un’interfaccia (Vedi file schinterjpg.zip) Ognuna delle 6 interfacce è composta da 2 parti principali: un circuito di controllo impostato sull’L297 e un circuito di potenza che fornisce la corrente necessaria ai 4 avvolgimenti del motore. L’I.C. L297 riceve i comandi dal P tramite il pettine JP1 e genera le tensioni delle fasi, necessarie a comandare il motore, sui suoi pin d’uscita 4,6,7,9 (fasi A,B,C,D). Ognuno di questi pin è collegato alle porte AND che controllano i 4 Darlington TIP110 che fanno scorrere corrente negli avvolgimenti. Per maggiore chiarezza un livello alto sulle uscite del 297 mandano in saturazione i finali e fanno scorrere la corrente di fase; questo, naturalmente, se anche l’altro ingresso (pin INH1 o 2) della porta AND è alto. dall'oscillatore dell'L297 clock A Q B S I carico sense R C COMP D R1 o 2 INH1 Vref INH2 Fig. 9.1.2 Fig. 9.1.3 La figura 9.1.2 mostra l’andamento di base, nel tempo, delle tensioni di controllo per il modo “half step”. Va tenuto presente che ad alcuni segnali si sovrappone (non si somma) quello dell’uscita Q del flip-flop della figura 9.1.3 . Questo secondo segnale, detto di chopper, permette più alte velocità del motore (come vedremo più avanti) e può essere indirizzato o alle tensioni di fase A,B,C,D o a INHx a seconda del livello del pin CTRL; esso serve a interrompere e a reinserire, ad intervalli regolari, lo scorrimento di corrente. Le uscite INH1 e 2 possono essere usate in 2 modi, o per accelerare la smagnetizzazione del motore quando in un avvolgimento viene interrotto lo scorrimento di corrente, o per regolare la corrente massima che scorre negli avvolgimenti con il metodo a chopper. Questi 2 modi servono, naturalmente, per aumentare la velocità del sistema. Il modo in cui agiscono INH1 e 2 è selezionato dal pin 11 (CTRL) dell’L297, se CTRL è a massa è attivo il 2° modo. Il 1° modo è più indicato per i motori bipolari che, però, necessitano circuiti d’uscita diversi. Nel nostro circuito una smagnetizzazione rapida del motore è garantita dai diodi D1, D2, D3, D4 che sono in parallelo ai 4 avvolgimenti, per cui quando un Darlington TIP110 va in interdizione la corrente, che tende a continuare a scorrere nello stesso verso nell’avvolgimento per autoinduzione, torna rapidamente a 0 passando attraverso il diodo. Gli altri 4 diodi, D5, D6, D7, D8, proteggono i Darlington dalle sovratensioni di commutazione causate dal carico induttivo. Le resistenze R1 e R2 (fig. 9.1.3) sono usate nel controllo a chopper per regolare la corrente negli avvolgimenti in modo che sia la massima possibile. Questo tipo di controllo permette di aumentare la velocità imponendo un fronte di salita della corrente molto ripido (eventualmente si può superare leggermente la tensione di targa del motore), ma questo impone la necessità di una limitazione del suo valore massimo per cui, una volta raggiunto questo valore, la corrente viene interrotta, fatta diminuire e poi riattivata da un oscillatore interno al 297. Le resistenze R1 e R2 hanno ai loro capi una tensione proporzionale alla corrente di fase, questa tensione viene confrontata con la Vref (pin 15 del 297), tarata mediante il trimmer R3, e nel momento in cui la prima supera la seconda un comparatore azzera o i pin INHx o le tensioni di fase A,B,C,D ( a seconda della tensione applicata al pin CTRL). L’azzeramento di INHx toglie l’alimentazione all’avvolgimento e la corrente scende; lo scorrimento verrà riattivato dopo un certo tempo determinato dalla frequenza dell’oscillatore interno al 297 che fa capo a R4 e C1. Segnaliamo che il periodo di oscillazione deve essere almeno 10 volte più basso della costante di tempo L/R degli avvolgimenti del motore per una miglior livellamento di I. Presentiamo, infine, gli altri comandi che può ricevere l’L297 sono: - di impostazione del verso di rotazione CW/CCW (orario/antiorario) - di selezione del modo di movimento a mezzo passo o passo intero HALF/FULL - di RESET: se posto a 0 impone alle uscite i valori ABCD = 0101 (“home”) - di ENABLE: se posto a 0 azzera le uscite A,B,C,D, INH1 e 2. Il motore, così, è disattivato ma libero di muoversi; va notato che per fermarlo tenendolo frenato bisogna togliere il clock di passo tenendo alta la tensione sul pin ENABLE. 10 Scheda bus per le interfacce Il semplice schema elettrico del modulo base (contenuto nel file schbustif.zip ) che riceve i comandi dal controller (vedi file schmbtif.zip) mediante il connettore U1 e li distribuisce alle 6 interfacce dei motori mediante il decoder U2 (74S138). In particolare il processore seleziona il motore da muovere mettendone il corrispondente numero identificatore sui pin 1,2 e 3 di U2 e applicando il clock di passo ai pin 4 e 5 (G2A e G2B). Sull’uscita del 74S138 selezionata viene ritrasmesso il clock per il motore. Il pin 6 dell’integrato non viene utilizzato nel SW da noi realizzato. Gli altri segnali di controllo (EN, A/I, H/F, RST, CTRL) vengono applicati in parallelo a tutte le interfacce di potenza partendo da U1. 11 Alimentazioni Le schede realizzate non hanno un alimentatore proprio ma bisogna utilizzarne 2 esterni. Uno da 5 volt 1 A per alimentare il controller; un altro, per alimentare i motori, da scegliere in funzione della loro tensione di targa e della corrente assorbita. Nel nostro caso abbiamo riscontrato un assorbimento di 2,2 A a 12 V quando tutti i 6 motori sono frenati. Va precisato che anche se il nostro programma fa muovere un solo motore per volta, l’alimentatore deve poter fornire la corrente anche per tutti gli altri perchè essi devono restare frenati (perciò percorsi da corrente) anche quando sono inutilizzati. Nella figura contenuta nel file collegtif.zip si possono vedere i collegamenti da effettuare tra un alimentatore a due tensioni di uscita, come quello da noi usato, e le due schede 12 Realizzazione pratica e circuiti stampati Tutti i circuiti stampati disegnati al PC con ORCAD e realizzati dai nostri allievi sono in doppia faccia e, naturalmente, ne sono serviti 6 per le interfacce, uno per la scheda bus e uno per il controller. Ne forniamo i files con i 6 disegni (riprodotti con lo scanner) con le relative disposizioni dei componenti - file pwbbustif.zip Circuito stampato della scheda bus, lato rame file comp_bustif.zip Disposizione componenti sulla scheda bus file schbustif.zip Schema elettrico della scheda bus file schmbtif.zip Schema elettrico della mother board file pwbmbtif.zip Circuito stampato mother board file comp_mb_int_tif.zip Disposizione componenti sull’interfaccia e sulla mother board file schinterjpg.zip Schema elettrico dell’interfaccia file pwbinter.zip Circuito stampato dell’interfaccia Infine è possibile trovare l’elenco dei componenti nel file partlist.doc 13 Presentazione del software Presentiamo, ora, i programmi per la gestione del sistema. Quello che riguarda il controller, qui fornito sia in formato HEX (per programmare l’EPROM dell’8751) sia in formato ASM (sorgente in assembler) per soddisfare la curiosità dei lettori (vedi files R1C2.ASM e R1C2.HEX). L’altro riguarda il PC, realizzato in QuickBasic, linguaggio tuttora in uso in applicazioni di robotica. Le due parti sono vincolate da un protocollo di comunicazione da noi ideato appositamente per le prestazioni desiderate. Una prima differenza tra i 2 tipi di programmi, che può interessare gli “hobbisti” in vena di esperimenti, riguarda la possibilità di effettuarne delle modifiche. Il programma per il PC è aggiornabile molto facilmente in fase di collaudo, invece quello per il processore è difficilmente modificabile perché bisognerebbe correggere il sorgente, riassemblarlo, cancellare quello vecchio scritto nella EPROM, infine, riscriverlo nella memoria. Il programma per l’8751, già collaudato sul circuito assieme all’altro programma, in effetti esegue comandi abbastanza semplici impartiti dal PC. Per cui il programma in Basic può essere modificato, per potenziare la gestione del sistema, in molti modi da chi volesse fare delle prove personali. 14 Il progetto dei programmi per il PC e il P Alcuni suggerimenti per il neofita che volesse cimentarsi in lavori di questo livello. Il progetto di questi programmi richiede la scelta delle prestazioni desiderate dal sistema, fissate queste si sceglie un elenco dei comandi da impartire sia al PC che al controller. A questo punto si può passare alla impostazione di un protocollo di comunicazione che lega il funzionamento del processore a quello del PC. Il passo successivo è la stesura dei diagrammi di flusso: sono diversi e abbastanza complessi. Quelli che sono stati disegnati da noi sono a mano libera e non sono fornibili come files. Dopo il disegno dei diagrammi di flusso si può iniziare ad editare i files sorgenti. Naturalmente, volendo realizzare un sistema dalle prestazioni complete, (cioè che dia la possibilità di registrare un programma di lavoro quindi di mandarlo in esecuzione) il protocollo risulta discretamente complesso per cui è inserito in un file a parte: file robot1pc.doc. Chi volesse ulteriori chiarimenti, potrà farne richiesta al promotore di questo SW, prof. Conti S., [email protected]. 15 Finalità dei programmi Dovendo il braccio eseguire lavori automatizzati anche piuttosto complessi, abbiamo pensato che la cosa migliore fosse memorizzare in un file (che chiamo “di lavoro” e che va memorizzato su un HD o FD) le varie posizioni che esso deve raggiungere. Questo file costituirà il programma di lavoro che il braccio dovrà eseguire. In fase di esecuzione, il PC dovrà rileggere ogni record del file di lavoro creato e trasmettere al controller dei comandi elementari tipo: - “manda il motore N alla posizione X” “fai un pausa di N centesimi di secondo”. Fissata questa impostazione di base, abbiamo realizzato i programmi per il PC e il controller affinché consentissero di gestire il braccio meccanico nei seguenti modi: - muoverlo, manualmente, in modo arbitrario - muoverlo manualmente per registrare un programma di lavoro - registrare la posizione attualmente raggiunta dal braccio in un record del programma di lavoro - eseguire un programma di lavoro registrato in precedenza - arrestare il braccio durante l’esecuzione di un programma di lavoro (immediatamente o al termine dell’esecuzione dell’istruzione attuale) Il programma per il PC consente, inoltre, di: - modificare, o anche editare, manualmente un file di programma di lavoro - stampare un file di lavoro. 16 Costituzione dei file di lavoro Va premesso che i tipi di comando che il PC deve gestire possono essere 3 : - di spostamento di un singolo motore (tipo “P”) di pausa di N centesimi di secondo (tipo “R”) di salto, che il PC deve effettuare, ad un altro record del file di lavoro (tipo “S”). Questo salto deve essere fatto per ricominciare un intero ciclo di lavoro. Un tipico file di lavoro, allora, è costituito da record i cui campi contengono: - le 6 coordinate (numeriche) di posizione che devono essere raggiunte da ogni motore al termine dell’esecuzione del comando - un commento descrittivo (facoltativo) - un parametro, che può essere un tempo di pausa (per i comandi di tipo “R”) o il numero del record a cui il PC deve saltare (per i comandi di tipo “S”) Le proprietà che i record devono soddisfare sono le seguenti: - Nei record di tipo P ci deve essere un solo motore che cambia posizione rispetto al precedente record dello stesso tipo. Se il PC ne trova 2 la cui posizione è cambiata si ferma e abbandona il programma. In questo caso l’utente dovrà controllare il file di lavoro e correggerlo. - Nei record di tipo S possono esserci più motori che cambiano posizione contemporaneamente. Ma la sequenza di movimenti per raggiungere la posizione finale è determinata dal PC e non dall’utente, perciò chi crea un file di lavoro prima di registrare un record di salto è meglio che porti il braccio in prossimità della posizione da raggiungere (quella da cui ricomincia la parte ripetitiva di un programma di lavoro). - Nei record di ritardo il PC non controlla le posizioni dei motori per cui anche l’utente se ne può disinteressare - I files di lavoro è meglio che non vengano mai scritti manualmente (tuttalpiù corretti) ci pensa il PC a crearli durante la registrazione di un programma di lavoro. 17 Scrittura dei programmi per il PC e il P I files HEX e ASM sono files di testo scritti in ASCII puro e possono essere copiati e letti con un editor qualunque, ma se vengono caricati sotto Windows devono essere salvati come file di solo testo. Il file HEX può essere, poi, utilizzato per un programmatore di EPROM. Il programma per il PC (R1G5.BAS), qui presentato, è nato in QuickBasic ma gira anche in Qbasic. Comunque chi non avesse i programmi per questi linguaggi potrà trovarne la versione eseguibile nel file R1G5.EXE. Questo file EXE gira su qualunque PC, IBM compatibile, senza fare ricorso agli interpreti Basic. 18 Breve guida per l’utente Vediamo le azioni essenziali che portano alla registrazione e al lancio di un programma, o file, di lavoro. Chi volesse un manuale per l’utente più completo lo potrà trovare nel file rob1manu.doc Lancio: chi vuole usare il file R1G5.EXE deve uscire da Windows, entrare in DOS e digitare R1G5 . Chi vuole, invece, usare l’ambiente Basic, dopo esserci entrato dovrà aprire il file R1G5.BAS, quindi lanciarlo (menù ESEGUI). Il programma, dopo una breve presentazione, chiede quale porta seriale (COM) si intende usare, immettere 1 o 2. Se si sbaglia poco male, non si guasta nulla, si può cambiarla in seguito (menù 5). Quindi il programma chiede se si intende cambiare i parametri di comunicazione, rispondere NO. A questo punto si entra nel menù principale di 7 voci: 1) Registrazione di un programma di lavoro 2) Esecuzione di un programma di lavoro 3) Modifica di un programma di lavoro 4) Esecuzione di comandi singoli, fuori programma 5) Cambio porta seriale 6) Stampa di un file di lavoro 7) Uscita Registrazione di un nuovo programma di lavoro: scegliere 1 . Il programma chiede il nome e il percorso di salvataggio del nuovo file da creare; si può immettere, ad esempio: A:\lavoro1.lav. A questo punto il PC chiede al controller le coordinate di posizione dei motori, se non sono tutte nulle si rifiuta di proseguire e l’utente dovrà provvedere ad azzerarle (menù 4) e poi ricominciare. Se sono tutte nulle, prosegue chiedendo all’utente di che tipo è il 1° record del nuovo file di lavoro (spostamento: P, ritardo: R o salto: S), immettere P . Viene, a questo punto, chiesto quale motore si vuole muovere: immetterne il numero, quindi mandarlo alla posizione desiderata (coi tasti /, *, -, +); quando vi è arrivato premere ESC per terminare i movimenti e registrare la posizione raggiunta nel file. Ricordarsi che si deve spostare solo un motore per ogni record. Se si vuole cambiare motore, prima di farlo bisogna rimandare quello, eventualmente, già mosso alla posizione iniziale. Ripetere questi spostamenti per tutto il ciclo di lavoro da eseguire. Quando si decide che il ciclo di lavoro è terminato e deve cominciarne uno nuovo, identico al precedente, bisogna prima portare il braccio in una posizione molto prossima a quella iniziale e registrare questo record di tipo P. Poi registrare il record finale, di tipo S, dando come parametro il numero di record a cui il programma deve saltare; il numero dovrà essere stato in precedenza annotato. Esecuzione un programma di lavoro già registrato: dal menù principale immettere 2 . Il programma di gestione chiederà, per prima cosa, le coordinate di posizione al controller, e se non sono tutte nulle si rifiuterà di proseguire (come prima). Se sono tutte azzerate verrà chiesto all’utente il nome e il percorso del file di lavoro; immettere, ad esempio: A:\ lavoro1.lav . Il programma di lavoro andrà in esecuzione. Sarà definitivamente terminato premendo A o T. Non è implementato un comando manuale di “pausa” (probabilmente inutile) ma segnalo che aprendo il contatto S2 della mother board, che simula il cancello, il braccio fa una pausa fermandosi e riparte richiudendolo. Terminata l’esecuzione di una lavorazione, l’utente dovrà riportare ogni motore del braccio alla sua coordinata 0 (menù 4). Svariati collaudi dei programmi permettono di affermare che se i file di lavoro sono compilati correttamente non ci dovrebbero essere problemi in fase di esecuzione, comunque è stato conservato un comando di “reset del controller” che permette di azzerare la RAM del processore in caso di dubbi per anomalie di funzionamento. Chi volesse un piccolo programma di lavoro, per vederne un esempio, può prelevare il file 2c3p1r.lav; questo programma fa spostare 2 oggetti su 3 posizioni diverse, finito il ciclo fa una pausa di 1 secondo, poi ricomincia. Segnalo, però, che per vederne il contenuto o stamparlo, bisogna utilizzare R1G5.EXE o BAS. 19 Conclusioni Il progetto presentato è piuttosto semplice perché i tempi scolastici non consentirebbero applicazioni di tipo professionale, comunque il programma per il controller può consentire all’utente di apportare migliorie al funzionamento di tutto il sistema modificando il solo programma per il PC. Ad esempio manca un comando che simuli lo spostamento rettilineo del braccio, ma per realizzarlo non sarebbe necessario modificare il file HEX basterebbe aggiungerlo al programma per il PC, tenendo presente che, comunque, dovrebbe essere realizzato come sequenza di spostamenti di singoli motori. 20 Elenco autori Il lavoro è stato realizzato dagli allievi Collia, La Monaca, Mercantili e Bianchini del corso di ELETTRONICA E TELECOMUNICAZIONI sotto la guida dei proff. Garro A. (HW), Conti S. (SW), Renolfi (Sistemi e Telecom.), De Vittor (T.D.P.), Mattachini (Elettronica gen.), Garavaglia (Lab.)