GianLucaArrighiSalvade Inserito: 5 febbraio 2019 Segnala Share Inserito: 5 febbraio 2019 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 More sharing options...
DesmoGiec Inserita: 5 febbraio 2019 Segnala Share Inserita: 5 febbraio 2019 Non so bene se ho capito.. ma: 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° 96 + 120= 216, non sottraggo 360 e rimane 216 Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 5 febbraio 2019 Segnala Share Inserita: 5 febbraio 2019 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: 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. 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 More sharing options...
Livio Orsini Inserita: 6 febbraio 2019 Segnala Share Inserita: 6 febbraio 2019 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. Link al commento Condividi su altri siti More sharing options...
GianLucaArrighiSalvade Inserita: 6 febbraio 2019 Autore Segnala Share Inserita: 6 febbraio 2019 16 ore fa, DesmoGiec scrisse: Non so bene se ho capito.. ma: 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° 96 + 120= 216, non sottraggo 360 e rimane 216 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 More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora