Vai al contenuto
PLC Forum


Interrupt - generare un interrupt


roberto8303

Messaggi consigliati

.. che ne pensi?

Che non si fa così :)

Ci sono due cose da considerare (leggere il manuale!) risoluzione del D/A 11 bit + segno, formato della AQWx 32.000 counts, ma 11 bit fa 2048, non 32000, che scritto in esa è 7d00, mentre 2047 in esa è 7ff; se moltiplichi per 15 (cioè f esa) hai esattamente la stessa cosa. Quindi moltiplicare l'errore per 15 è come moltiplicarlo per 1 :D

Questo perchè Siemens per sua comodità ti fa scrivere le uscita analogiche shiftate a sx di 4 bits.

Se vuoi un'uscita di 100 mV minimi dovrai avere 307 scritto in AQW0

Tu avrai qualche cosa di simile: AQW0 = errore * gudagno;

Se vuoi, ad esempio, avere un riferimento minimo di 100mV, devi fare:

VWxx = errore * guadagno

se VWxx => 307 ==> AQW0 = VWxx, se VWxx<307 ==>AQW0 = 307

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti


  • Risposte 91
  • Created
  • Ultima risposta

Top Posters In This Topic

  • roberto8303

    61

  • Livio Orsini

    31

mmm...non ho capito... :rolleyes: io non volevo moltiplicare per 15...e ne sommare 100mv ma il corrispondente 307...

comunque mi sembra di aver capito che se in AQW0 ho un errore minore di 307 lo faccio uguale a AQW0 se ho un errore maggiore AQW0 lo faccio uguale a 307?? non ho capito per niente... :lol:

poi non sommo 307 ad AQW0 ma nella word prima di trasferirla in AQW0...perche non posso farlo non mi è chiaro...

Link al commento
Condividi su altri siti

Se il valore di AQW0 è maggiore di 307 lo lasci così.

Se il valore di AQW0 è minore di 307 scrivi 307

Chiaro ora? Non devi sommare niente, si fa solo una soglia di velocità minima. Se tu avessi un inverter in vettoriale potresti mettere una soglia più bassa. Con un azionamento chopper in continua o brushless si sta sui 10 mV.

La moltiplicazione per 15 serve solo per riportare in scala 1:1 l'uscita anlogica. Questo perchè i 4 bits meno significativi di AQWx son solo di figura. In pratica la vera scrittura sarebbe

bit 15 segno

bit 14 bit pià significativo

.....

bit 4 bit meno significativo

bit 3 n.a.

bit 2 n.a.

bit 1 n.a.

bit 0 n.a.

cioè AQW0 ==> 0111 1101 0000 0000 ==> +32.000 +2047 = 0000 0111 1111 1111

e AQW0 ==> 1111 1101 0000 0000 ==> -32.000 -2047 = 0000 1111 1111 1111

In pratica no si sfrutta tutta la scal del D/A perchè Siemens vuole evitare la saturazione. In effetti negli A/D si può entrare con un po' più di 10 v

Link al commento
Condividi su altri siti

Ahhh ecco ora si che è kiaro... :) ma quante cose sto imparando da te!! pero prima di fare questo ho provato a modificare nell inverter che è un vettoriale...! ma sotto la soglia di 0,5 non scende... non ho capito perche eppure è configurato come sensorless slv...cè anche una formula sul manuale dell inverter che in pratica aumentando la frequenza a 100hz invece di 50 hz si arriva a 25mv...invece di 100mV..io l ho lasciato a 50 hz perche gia è abbastanza veloce nel posizionarsi! quindi come mi dici tu il guadagno che era a 6 nel posizionatore devo portarlo a 15?

Ahh mi sono dimenticato di dirti un altra cosa...quando configurai il modulo em 235 mettendo in ingresso una tensione di 10volt precisi (come da manuale... :) )nella tabella di stato AIW0 non era 32000 ma 29000!!!potrebbe essere che em235 non è configurato bene ??ma provai a girare quei due potenziometri sul modulo ma piu di tanto la tensione non variava!!!dovrei fare anche questa prova mi sa...

Ultima cosa 96mV che sono 307 nel AQW0 se scrivo 307 comunque l inverter non legge 96 mV non so se mi faccio capire che intendo...

Quante cose che non so!!!!

Link al commento
Condividi su altri siti

Allora vediamo quanto ho capito...

La VWxx = errore*guadagno=dove prendo il valore dell errore? e dove il guadagno..??

il resto ho capito da fare cosi...

SE VWxx è minore a 307==> AQW0 = 307

SE VWxx è maggiore a 307 ==> AQW0= VWxx

Link al commento
Condividi su altri siti

VWxx = errore*guadagno

Da uno dei miei primi messaggi

INTxx

VW100=VW100+VB10

VW102=HSC0

VW104 = VW100-VW102; VW104 = errore di posizione

VW106=VW104*VW200; VW106 = riferimento di velocità da mettere in uscita (fare i test per <-32000 e >32000) [VW106 ==> uscita nalogica]

fine sub INTxx

se sostistuisci hai:

VWxx = VW106

guadagno = VW200 o coefficiente di proporzionalità

Se scrivi 32000 in AQW0 esce una tensione di 10 V? Se si, con 307 dovrai avere 0.096 V e con 320 avrai, ovviamente, 100 mV

Link al commento
Condividi su altri siti

Scusa la mia cocciutaggine..... allora devo caricare il valore di 307 nella VWxx solo quando il confronto è verificato, in modo da avere una soglia minima di 100mV ma l inverter quindi continua a moversi fino a quando esco dal confronto? cioe vorrei capire come si comporta facendo questo..prima di scrivere nel programma vorrei avere le idee chiare...pero ti sto dando un po di fastidio mi sa... :( intanto corro subito a provare 32000 se corrisponde a 10v!

Link al commento
Condividi su altri siti

Allora, facendo riferimento al solito esempio:

se:

VW104 = errore di posizione

devi verificare se

VW104 < 5 E VW104 > -5 ===> AQW0 = 0 ed esco dalla routin di interrupt (5 è la soglia di banda morta, puoi farla di 3 o di 7 o di un altro valore che più ti fa comodo)

invece se:

VW104 > 5 O VW104 < -5 allora esegui

VW106=VW104*VW200; VW106 = riferimento di velocità da mettere in uscita (fare i test per <-32000 e >32000) [VW106 ==> uscita nalogica]

Se VW106 < 307 VW106 = 307

AQW0 = VW106

Link al commento
Condividi su altri siti

Livio una brutta notizia non sono riuscito a farlo! ho creato una sub3 attivata dal confronto della banda morta >-5 e <5 e nella sub3 mettevo 0 in Aqw0 e uscivo dalla sub con l altro confronto <-5 e >5 poi nel interrupt dove cè il posizionatore ho messo quei confronti per 307 ma provando non funziona neanche come prima...ho sbagliato! adesso ho portato il guadagno inziale che era a 9 a 14 e va preciso!pero comunque ci sono 90mV nel modulo analogico...La tua soluzione è parecchio interessante ma non riesco a scriverla nel programma! pero pensandoci un attimo ma il secondo confronto dell errore <-5 e >5 devono essere in parallelo?? per uscire dalla sub3? io li avevo in serie..posso riprovare ma credo che ci siano altri errori... :(

Link al commento
Condividi su altri siti

Anzi non è preciso facendo le prove ho inserito nel pannello la posizione vera letta da hc0 e mancano 20 impulsi.. e ho 90 mV... quindi Livio non mi resta che impegnarmi a capire cio che mi hai spiegato!devo riuscirci a tutti i costi!

Link al commento
Condividi su altri siti

Non devi fare una nuova sub, devi fare il test nella sub di interrupt. I due test sono in and:

VW104 < 5 AND VW104 > -5 ===> AQW0 = 0

Se, ad esempio VW104 = 4, 4 è minore di 5 e maggiore di -5; se invece VW104 = -4, -4 è minore di 5 e maggiore di -5

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Allora eccomi ora riesco a seguirti meglio :) e oggi avevo modificato il programma ma sempre usando il pannello poi stasera ho ripreso il programma quello vecchio salvato senza l uso del pannello e con la cpu sono andato in real time e ho capito meglio come deve funzionare...domani quindi mi ci metto!

Allora il primo confronto l ho capito e lo inserisco nel interrupt dove è il posizionatore... L altro confronto invece devo interpretarlo cosi: se la VW106 è maggiore di 307 allora mettila uguale a VW106.. se VW106 è minore di 307 allora la metto uguale a 307...

Link al commento
Condividi su altri siti

L altro confronto invece devo interpretarlo cosi: se la VW106 è maggiore di 307 allora mettila uguale a VW106.. se VW106 è minore di 307 allora la metto uguale a 307...

Si ma va messo anche questo nella sub di interrupt. è parte integrante del posizionatore.

Link al commento
Condividi su altri siti

Rieccomi... ho avuto un po da fare con altre cose... ho fatto il programmino Funziona alla grande!!non so se ho scritto corretamente i confronti ma funziona come abbiamo detto..Ho un margine di 5 impulsi di errore e sono un po troppi pero..perche mi si sposta di un grado..su un diametro di 200mm quindi domani abbassero l errore lo porta a 2 impulsi!ho portato l uscita AWQ0 a 400 in modo da avere 120mV un po piu alto di 100mV... ora Livio ti posto il programma Awl solo posizionatore collegato al pannello cosi se ti accorgi che ci sono errori madornali dimmelo tanto non mi offendo!!pero se funziona penso che non ce ne sono...apparte lo zero con l interrupt esterno..ma quello lo faro la prossima applicazione...GRAZIe infinite Livio!!

// Commento del segmento

LD SM0.0

MOVW VW240, VW300

*I +10, VW300

Network 2

LD SM0.0

AW> VW300, VW102

= M0.1

Network 3

LD SM0.0

AW< VW300, VW102

= M0.2

Network 4

LD SM0.0

AN M0.0

A M0.1

+I +6, VW100

Network 5

LD SM0.0

AN M0.3

A M0.2

-I +6, VW100

Network 6

LD SM0.0

DTI HC0, VW102

Network 7

LD SM0.0

MOVW VW100, VW104

-I VW102, VW104

Network 8

LD SM0.0

MOVW VW104, VW108

MUL VW200, VD106

Network 9

LD SM0.0

DTI VD106, VW106

Network 10

LD SM0.0

MOVW VW106, VW110

Network 11

LD SM0.0

MOVW VW110, VW112

AENO

*I -1, VW112

AENO

MOVW VW112, VW114

+I +1, VW114

Network 12

// Se l errore vw104 è minore di +/- 5 metti a 0 l uscita aqw0

LDW> VW104, -5

AW< VW104, 5

MOVW 0, AQW0

Network 13

LD SM0.0

AW> VW110, +0

MOVW VW110, AQW0

Network 14

LD SM0.0

AW< VW110, +0

MOVW VW114, AQW0

Network 15

LDW< VW106, 400

AW> VW104, 5

MOVW 400, AQW0

Network 16

LDW> VW106, -400

AW< VW104, -5

MOVW 400, AQW0

Network 17

LD SM0.0

AW> VW110, +0

A M1.5

= Q0.0

Network 18

LD SM0.0

AW< VW110, +0

A M1.5

= Q0.1

Network 19

LD SM0.0

AW>= VW100, VW300

= M0.0

Network 20

LD SM0.0

AW<= VW100, VW300

= M0.3

Link al commento
Condividi su altri siti

.ma quello lo faro la prossima applicazione...GRAZIe infinite Livio!!

Se il mio contributo ti è servito a qualche cosa son felice. Però i manuali li devi leggere e devi imparare a programmare correttamente, non a far funzionare i programmi con la mazza :) .

Il programma non lo leggo, tanto non riesco a vedere gli errori nei miei programmi, figurati in quello di un altro :lol:

Link al commento
Condividi su altri siti

ciao Livio ti riferisco una cosa detta da un tecnico vedendo la mia applicazione con il posizionatore che abbiamo fatto...praticamente mi è stato detto che non è una applicazione che si puo usare dove ci sono dei carichi meccanici variabili..in quanto al posizionarsi il motore ruota con una frequenza di 1hz circa il che non da coppia al motore per vincere la coppia antagonista...io gli ho risposto semplicemente che basta calcolare di quanta coppia si necessita e mettere il motore ed inverter che alla minimia frequenza riesca a a fornire la coppia richiesta...!! comunque funziona benissimo per l antenna...

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora

×
×
  • Crea nuovo/a...