In questo esempio collegheremo un motorino stepper (passo-passo) alle uscite del PLC. Per maggiori informazioni sul funzionamento di questi motorini consiglio il sito di Vincenzo Villa: www.vincenzov.net/tutorial/passopasso/stepper.htm
Il motorino usato è del tipo "unipolare" e verrà pilotato dal PLC in "wavemode" e "halfstep".
Il wavemode è il sistema base nel quale le 4 fasi (A,B,C,D)del motore, vengono pilotate in modo sequenziale ad una alla volta.
PASSO A B C D 1 1 0 0 0 2 0 1 0 0 3 0 0 1 0 4 0 0 0 1
L'halfstep (mezzo passo) segue invece la seguente successione.
PASSO A B C D 1 1 0 0 0 2 1 1 0 0 3 0 1 0 0 4 0 1 1 0 5 0 0 1 0 6 0 0 1 1 7 0 0 0 1 8 1 0 0 1
Nel pilotaggio halfstep il motorino risulta più lento rispetto al pilotaggio wavemode ,in quanto, per fare un giro completo, ci vogliono 8 passi invece di 4, però in virtù di questo, avrà maggiore coppia al rotore. Come interfaccia di collegamento tra PLC e motorino stepper, si possono usare 4 relé a 24Vdc, oppure, per raggiungere anche velocità maggiori, si può usare un circuito con componenti elettronici.
Indice |
schema di base
P1= rotazione a SX in wavemode P2= rotazione a SX in halfstep P3= rotazione a DX in halfstep P4= rotazione a DX in wavemode P5= diminuisce velocità rotazione P6= aumenta velocità rotazione
IL motorino che ho usato ha 6 fili, di cui due dello stesso colore (verde). Questi vanno collegati assieme e rappresentano il comune, gli altri andranno collegati ai contatti "n.o." dei relé oppure ai transistor di potenza di un circuito elettronico. Se durante la prova del circuito il motorino invece di girare vibra solamente, provare a invertire due fasi, per esempio, il filo bianco con il giallo. Il motorino l'ho recuperato da una vecchia stampante, se lo trovate del tipo a 4 fili, per il nostro esperimento non va bene, in quanto non è "unipolare" ma "bipolare", è invece adatto quello a 5 o 6 fili.
Il programma
Il programma da inserire nel PLC si può considerare composto da 4 parti. La prima, seg.1, riguarda la gestione della velocità di rotazione del motorino. In pratica, i due pulsanti P5 e P6 posti su I0.5 e I1.3, hanno il compito di incrementare e decrementare il contenuto del contatore up/down "C47". Tale contatore verrà poi utilizzato dai segmenti 2,3,4 per variare il tempo di conteggio dei temporizzatori T32 e T97. La seconda parte del codice, riguarda i seg. 2,3,4. Con questa routine si provvede alla generazione di un segnale pulsante sul merker "M10.0". La frequenza di tale segnale è controllata tramite il contenuto di "C47". Il fronte di salita del merker "M10.0" verrà utilizzato per sincronizzare le varie operazioni, sia per la creazione del wavemode che per l'halfstep. La terza parte riguarda il funzionamento in "wavemode", e va da seg.5 a seg.11. Come già detto sopra, il sistema wavemode prevede l'alimentazione delle fasi ad una alla volta. Invertendo il senso della sequenza è possibile invertire il senso di rotazione del motorino. Per ottenere tale sequenza si fa uso di istruzioni di "scorrimento dei byte":
- SRB = fai scorrere byte verso DX
- SLB = fai scorrere byte verso SX
Vengono ruotati i bit della variabile "VB100" con una frequenza dettata dall'andamento del merker M10.0. La "VB100" verrà poi trasferita al byte di uscita QB0. La quarta parte del programma,riguarda il funzionamento halfstep (mezzopasso) da seg.12 a seg.21. Dalla tabella esposta sopra si nota che, oltre al fatto di compiere otto passi per un giro completo, abbiamo la necessità (per alcuni passi) di alimentare due avvolgimenti contemporaneamente. Per ottenere tale andamento sul byte di uscita QB0 sono state memorizzate nel "BLOCCO DATI" otto variabili con valori corrispondenti agli otto passi.
Pagina del blocco dati
VB110 8 VB120 12 VB130 4 VB140 6 VB150 2 VB160 3 VB170 1 VB180 9
Il programma provvederà a richiamare le otto variabili in modo sequenziale con velocità dettata dal "M10.0" e passerà il contenuto nel byte di uscita QB0.
Il listato AWL
seg.1
LD I0.5 // se I0.5 è alto si incrementa C47
A SM0.5 // se I1.3 è alto si decrementa C47
LD I1.3 // il merker speciale SM0.5 fornisce un
A SM0.5 // impulso di clock ogni secondo.Mettendolo in
LD I0.0 // serie agli ingressi si ottiene una variazione
CTUD C47,+255 // costante di C47 a pulsante premuto. I0.5= P5,I1.3=P6
seg.2
LD I0.1 // i tre segmenti dal 2 al 4 sfruttano la combinazione
O I1.5 // dei due temporizzatori da (1ms) T32 e T96 per
O I0.3 // creare un segnale pulsante sul merker M10.0.
O I1.4 // la frequenza del segnale varia con la variazione
AN T32 // di C47 che è il valore (PT) dei temporizzatori.
TON T96,C47 // ci sarà generazione del segnale pulsante solo
seg.3
LD I0.1 // se uno dei pulsanti sugli ingressi è premuto
O I1.5 // I0.1= P1 ; I1.5=P4 ; I0.3=P2 ; I1.4=P3
O I0.3
O I1.4
A T96
TON T32,C47
seg.4
LD I0.1
O I1.5
O I0.3
O I1.4
A T96
= M10.0
seg.5 // da seg.5 a seg.11 "wavemode" LD SM0.1 // tramite il merker speciale SM0.1, la VB100 MOVB 8, VB100 // verrà inizializzata all'avvio con il valore (8) seg.6 LD I0.1 // se l'ingresso I0.1 è "on" (P1 premuto) A M10.0 // e M10.0 è alto EU // rileva fronte di salita SRB VB100,1 // esegui scorrimento del byte di un posto verso DX seg.7 // come sopra, ma esegue lo scorrimento del byte LD I1.5 // di VB100 verso sinistra per I1.5 ad "on" A M10.0 // La velocità di scorrimeto del byte è EU // dettata dall'andamento del M10.0 SLB VB100,1 seg.8 // da seg.8 a 9 si controlla lo scorrimento di VB100 LDB= VB100,0 // se VB100 vale 0 (zero) MOVB 8,VB100 // trasferisci il valore 8 nella VB100 seg.9 LDB= VB100,16 // se VB100 vale 16 MOVB 1,VB100 // trasferisci il valore 1 nella VB100 seg.10 LD I0.1 // se pulsante su I0.1 (P1) è premuto MOVB VB100,QB0 // assegna la VB100 all'uscita QB0
seg.11 LD I1.5 // se pulsante su I1.5 (P4) è premuto MOVB VB100,QB0 // assegna la VB100 all'uscita QB0
seg.12 // da seg.12 a seg.21 "halfstep"
LD I0.3 // Premendo il pulsante su I0.3 (P2) si
A M10.0 // otterrà l'incremento del contatore in su
EU // "C48" con frequenza dettata dal fronte di salita
LD C48 // di M10.0. Raggiunto il valore preimpostato (8)
CTU C48,8 // il contatore ripartirà da zero
seg.13
LD I1.4 // come sopra ma per pulsatne su I1.4 (P3)
A M10.0 // e contatore C49.
EU // Nei segmenti successivi da seg.14 a seg.21
LD C49 // si avrà il controllo del contenuto dei due contatori
CTU C49,8 // C48,C49 allo scopo di assegnare,per ogni valore,una"VB"
// memorizzata nella pagina del "blocco dati" al byte QB0
seg.14
LD I0.3 // se pulsante su I0.3 (P2) premuto
AW= C48,1 // e C48 vale 1
LD I1.4 // oppure pulsante su I1.4 (P3) premuto
AW= C49,8 // e C49 vale 8
OLD // (esegue l'or dei due ramai)
MOVB VB110,QB0 // assegna al byte di uscita QB0 il valore di VB110
seg.15 LD I0.3 // se pulsante su I0.3 (P2) premuto AW= C48,2 // e C48 vale 2 LD I1.4 // oppure, se pulsante su I1.4 (P3) premuto AW= C49,7 // e C49 vale 7 OLD // ( or dei due rami "LD" I e II livello stack) MOVB VB120,QB0 // assegna al byte di uscita QB0 il valore di VB120
seg.16 LD I0.3 AW= C48,3 LD I1.4 AW= C49,6 OLD MOVB VB130,QB0 seg.17 LD I0.3 AW= C48,4 LD I1.4 AW= C49,5 OLD MOVB VB140,QB0
seg.18 LD I0.3 AW= C48,5 LD I1.4 AW= C49,4 OLD MOVB VB150,QB0
seg.19 LD I0.3 AW= C48,6 LD I1.4 AW= C49,3 OLD MOVB VB160,QB0
seg.20 LD I0.3 AW= C48,7 LD I1.4 AW= C49,2 OLD MOVB VB170,QB0
seg.21 LD I0.3 AW= C48,8 LD I1.4 AW= C49,1 OLD MOVB VB180,QB0
Dopo aver scritto il codice nel "Blocco di codice" del MicroWin, e aver salvato i dati (le otto VB) nella cartella del "Blocco Dati", è possibile testare il programma con il simulatore di CanalPlc. Esportare in una cartella il listato in AWL, con il comando "ESPORTA" del MicroWin, avviare il simulatore di CanalPlc e dal menù "configuration" scegliere il tipo di CPU che deve essere CPU224. Caricare il programma nel PLC con "load PLC". Prima di mandare in run il PLC virtuale, cliccare dal menù "program" su "PASTE DATA (DB1)" e richiamare il DATA BLOCK Data(DB1). A questo punto si può mandare in run il PLC.
Ciao a tutti.

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)