Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

8
voti

S7-200 e Stepper

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

s7 200 e stepper.JPG

s7 200 e stepper.JPG


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.

0

Commenti e note

Inserisci un commento

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.