Vai al contenuto
PLC Forum


Modificare un segnale encoder analogico con offset


GianLucaArrighiSalvade

Messaggi consigliati

GianLucaArrighiSalvade

Buongiorno a tutti;

Avrei bisogno del vostro aiuto per ricolvere un problema con l'offsettatura di un segnale analogico.

 

L'idea sarebbe quella di riuscire a traslare il segnale di un encoder multigiro che ha un uscita 4-20 mA (avrei bisogno di poter creare uno 0 virtuale diverso da quello fisico).

 

Il mio encoder fornisce un sengale 4-20 mA proporzionale al angolo del perno; arrivati a 360° (20 mA), se si prosegue nella rotazione, si otterrà che il sengale tornerà a 0° (4 mA) per poi proseguire con l'incremento.

 

Ho già tentato alcuni esperimenti col codice ma sembra che ciò che ho scritto funzioni correttamente solo per la parte di segnale superiore all'offset (ovvero quando il sengale virtuale dovrebbe partire da 0 ed arrivare al valore di offset); quando invece il segnale reale è inferiore al valore di offset il segnale virtuale dovrebbe andare dal valore di offset a 360°, ma nel mio caso la funzione restituisce valori negativi 😅.

 

Vi è già capitato di dover realizzare una cosa simile? come avete risolto?

 

Link al commento
Condividi su altri siti


Non so bene se ho capito..

ma:

peDoHmg.png

 

Puoi usare una roba simile:

scali il tuo riferimento analogico (mw510) in 0/360°

 

Prendi il risultato e ci sommi il tuo offset.

poi compari

Se la somma è nei 360, lasci la somma pulita.

Se va oltre i 360, fai la somma e sottrai 360.

Ad esempio, nel mio codice è tutto sfasato di 120°.

249 + 120 = 369, quindi sottraggo 360 = 9°

uLUCET6.png

 

96 + 120= 216, non sottraggo 360 e rimane 216

5Yy4E22.png

 

Link al commento
Condividi su altri siti

Ti serve per spostare lo zero e per tener conto dei giri (trabocco)?

 

Se vuoi spostare lo zero non vedo dove sta il problema.

Ammettiamo di volere avere lo 0 a 180° quindi con lettura pari a 12 mA.

Se la lettura è maggiore sottrai 12 mA (o il suo equivalente in counts) poi esegui la proporzione 8 : 180° = (valore - 12) : x.

Se la lettura è minore di 12mA sottrai 4 e risolvi 8 : 180° = (valore - 4) : x, poi esegui angolo =  x -180°, ottenendo un angolo negativo

 

Se invece devi gestire il trabocco devi memorizzare sempre l'ultima lettura.

Avrai i seguenti casi notevoli:

  1. Lettura precedente maggiore della soglia massima (p.e. 11mA) e lettura attuale minore soglia minima (p.e. 5mA) eseguito un giro completo sommo 1 al contatore dei riporti.
  2. Lettura precedente minore soglia minima (p.e. 5mA) e lettura attuale maggiore della soglia massima (p.e. 11mA) eseguito un giro compelto in negativo, sottraggo 1 al contatore dei riporti

Ho usato i ma per essere più chiaro, ma nella pratica userai i counts deltuo AD_C.

Questa tecnica èidentica a quellausata in coaso di conteggio numerico ovvero con contatore di impulsi.

Link al commento
Condividi su altri siti

23 minuti fa, Yiogo scrisse:

attenzione che lo sta chiamando encoder ma è un trasmettitore angolare

 

Questo s'era capito da subito, visto che è in analogico.:smile:

Link al commento
Condividi su altri siti

GianLucaArrighiSalvade
16 ore fa, DesmoGiec scrisse:

Non so bene se ho capito..

ma:

peDoHmg.png

 

Puoi usare una roba simile:

scali il tuo riferimento analogico (mw510) in 0/360°

 

Prendi il risultato e ci sommi il tuo offset.

poi compari

Se la somma è nei 360, lasci la somma pulita.

Se va oltre i 360, fai la somma e sottrai 360.

Ad esempio, nel mio codice è tutto sfasato di 120°.

249 + 120 = 369, quindi sottraggo 360 = 9°

uLUCET6.png

 

96 + 120= 216, non sottraggo 360 e rimane 216

5Yy4E22.png

 

Alla fine ho risolto con una cosa molto simile a questa; prima mi ostinavo a scomporre l'operazione in due parti ( segnale <offset e segnale >offset), ma purtroppo poi avevo sbagliato a calcolare l'entità della correzione da applicare. 

 

Qui sotto riporto il mio codice dopo la correzione:


// Nel caso in cui sia richiesto l'azzeramento assumo la posizione attuale come quota di 0

      U     #IN_bUsePosAsZero
      SPBN  ZeES

      L     #rSignEncNoOff
      T     #IN_OUT_rOffsetOnEncSign

ZeES: NOP   0

// Calcolo entità correzione da applicare nel caso in cui il segnale sia inferiore alla soglia di offset

      L     3.600000e+002
      L     #IN_OUT_rOffsetOnEncSign
      -R    
      T     #rCorrection

// Verifico se il segnale è superiore o inferiore all'offset ed applico le correzzioni opportune 

      L     #rSignEncNoOff
      L     #IN_OUT_rOffsetOnEncSign
      <R    
      SPBN  UOff

      L     #rSignEncNoOff
      L     #rCorrection
      +R    
      T     #rPosEncCorrected

UOff: NOP   0

      L     #rSignEncNoOff
      L     #IN_OUT_rOffsetOnEncSign
      >=R   
      SPBN  OOff
      L     #rSignEncNoOff
      L     #IN_OUT_rOffsetOnEncSign
      -R    
      T     #rPosEncCorrected

OOff: NOP   0

// Scrivo la posizione corretta dall'offset nel valore di uscita

      L     #rPosEncCorrected
      T     #OUT_rActPos

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...