Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Filtri Passa-basso Digitali - Come realizzarli?


Messaggi consigliati

Inserito:

Mi trovo nella necessità di dover filtrare il segnale di un ingresso analogico in tensione (0-10 V), per poter eliminare spike e disturbi vari che potrebbero arrivarmi.

E' da escludere l'uso di filtri analogici perchè, dipendentemente dal regime di funzionamento, mi cambiano le caratteristiche dei disturbi.

Avendo la possibilità di programmare in "C" stò cercando di implementare delle funzioni di filtraggio; ho già pensato come fare un semplice "media mobile", ma mi piacerebbe anche cercare di fare un passa-basso a frequenza di taglio programmabile.

C'è qualcuno che ha già lavorato su queste problematiche che mi può "imboccare", o anche solamente dirmi dove reperire informazioni in merito ?

In rete ho trovato molta teoria ma poca sostanza implementativa <_< .

Grazie


Inserita:

Non ho esperienza in merito, quindi non so se i miei consigli ti potranno essere utili più di tanto.

L' unica cosa che posso dirti è che ai tempi dell' università mi ero studiato i filtri digitali sul libro "The Scientist and Engineer's Guide to Digital Signal Processing" scaricabile gratuitamente da internet.

Il volume, peraltro chiarissimo (a mio avviso) nelle spiegazioni, conteneva gli algoritmi per implementare i vari tipi di filtro (se non ricordo male scritti in BASIC :D ).

Inserita:

Realizzare un filtro digitale con un dispositivo PLC è un lavoro che assorbe troppe risorse alla CPU che, tra l'altro, non è stata concepita per queste cose.

Comunque realizzare un passa basso digitale, si basa sulla medesima metodologia di un passa basso analogico. Lo puoi realizzare con circuiti RC o LC, puoi usare vari tipi di polinomi. Poi lo devi campionare. Il primo limite te lo pone la frequenza di campionamento, che con il PLC non può certo essere elevatissima (5ms-10ms sono già un bel limite) poi ci sono i calcoli, che solitamente si devono eseguire in virgola mobile per non avere errori talmente elevati da vinificare il lavoro.

In genere la media scorrevole, magari un po' elaborata, è l'algoritmo più adatto per filtrare le variabli acquisite con PLC.

Inserita:

Grazie per il riferimento al libro.

Anche se il tempo di campionamento non è eccessivo (4-8 msec) penso di poter far qualcosa.

Purtroppo non potrò usare calcoli in virgola mobile, che non posso utilizzare nel task veloce. Vedrò cosa salterà fuori :D

Grazie comunque

Inserita:

[at]Livio, mi é capitato di dover eseguire il filtraggio di un segnale analogico in un macchina codatrice (disturbi energia statica originati dalla frizione del materiale) ho dovuto provare un paio di tecniche (ho usato un tick da 2,5ms). Non so cos'è una media scorrevole, probabilmente é la stessa procedura he alla fine ho adottato ma confesso la mia ignoranza abissale. Potresti descrivermela o consigliarmi qualche link?

Saluti

Inserita: (modificato)

La media scorrevole o "slide window" (finestra scorrevole) è un algoritmo semplice ma che da buoni risultati. Assumiamo come esempio che tu esegua la media su 10 campioni, con un clock da 2.5ms. Se esegui la media classica ogni 2.5ms acquisisci un campione e lo sommi ai precedenti; dopo 25ms hai completato la raccolta, dividi per 10 ed ottieni il valore medio (media smeplice), quindi riparti. In questo modo, ogni 25 ms, ottieni il valore medio su dieci campioni.

Se applichi il medesimo algoritmo (media aritmetica semplice) ma con la tecnica "slide window" operi nel seguente modo.

Prepari un vettore di 10 elementi (array di 10), azzeri il registro somma, inizializzi a zero il puntatore al vettore.

Ad ogni clock acquisisci un valore, incrementi il puntatore se è <9, lo memorizzi nell'elemento puntato, lo sommi al registro di somma.

Se il puntatore è arrivato a 9, significa che hai acquisito 10 campioni. dividi la somma per 10 ed ottieni la prima media.

Dal prossimo campionamento avrai sempre un valore mediato su 10 campioni.

Se il puntatore = 9 lo azzeri, sottrai al registro somma il valore dell'elemento puntato, memorizzi il nuvo valore nell'elemento puntato e lo sommi al registro somma, dividi la somma per 10 ed ottieni la media.

Dopo il primo azzeramento del puntatore si esegue sempre la sostituzione dell'elemento puntato con il nuovo elemento, si esegue sempre la sua sottrazione prima della somma del niovo elemento.

Il buffer dive sono contenuti i 10 elementi del vettore è detto anche buffer circolare (o coda circolare) perchè viene riciclato all'infinito.

Cosa hai ottenuto di differente?

- 1 Ottieni una media su 25ms ogni 2.5ms, quindi aggiirni più rapidamente la tua misura.

- 2 Il sistema si comporta come un integratore. Un segnale a gradino viene acquisito come una rampa di 25ms

- 3 eventualo spike vengono assorbiti e "addomesticati" più dolcemente

Modificato: da Livio Orsini
Inserita:

Ciao a tutti, LUCIOS io utilizzo un sistema che non ruba alcuna risorsa e che forse ti può essere utile, si comporta come un filtro RC ed è facilmente implementabile nel software..

Si tratta di "parzializzare" il contributo che il segnala analogico fornisce ad ogni ciclo PLC secondo la seguente formula:

0 > Alpha > 1

( RcOut(t-1) * (1 - Alpha)) + ValueIn(t) * Alpha = RcOut(t)

esempio:

con Alpha = 0.1

sostanzialmente il valore in uscita RcOut del ciclo n-1 viene moltiplicato per 0.9

mentre il nuovo valore in ingresso ValueIn del ciclo attuale viene moltiplicato per

0.1, il risultato è che RcOut del ciclo attuale viene così costruito con un contributo del solo 10% del nuovo valore in ingresso acquisito mentre il 90% è fornito dal precedente valore che deve essere salvato ( questa è la risorsa che sfrutta il sistema )

Ovviamente più piccolo è Alpha più il filtro è performante, essendo t=tempo ciclo PLC ci sono dei limiti oltre il quale non ci si deve spingere...

Spero di esserti stato utile...

(per che PLC lo devi utilizzare ??)

Ciao

Inserita:

Val, l'algoritmo che usi è estremamente semplice ma, appunto per la semplicità, soffre di un notevole difetto. Un campionamento anomalo influisce per il 90%, se usi i due passi con alfa = 0.1.

Poi se vuoi assimilare il tutto ad un gruppo RC devi assimilarlo ad un sistema esponeziale sulla base dei logaritmi naturali. In pratica dal primo campionamento tieni il 63%, del secondo 23,3%, del terzo 14,05 e così via per almeno 10 campionamenti. Ma a questo punto le risorse necessarie comunciana a pesare..

Inserita:

Mi spiace contraddirti (relativamente alla prima parte del messaggio) Livio, ma un campione anomalo non può influire del 90% perchè il 90% dell'esempio è composto da ValueIn * Alpha dopo (n) campioni, un variazione repentina del segnale in ingresso influisce proprio del valore ValueIn * Alpha (come cita la formuletta)....

Comunque per tagliare la testa al toro, come si suole dire, allego questo grafico risultato dal campionamento dei valori in esame...

Il PLC è un s7 400, il tempo di campionamento è 0.4sec, in x trovate il numero dei campioni (con base dei tempi appunto 0.4sec), in y i due valori...

Ho generato in ingresso al filtro una "quadra" anomala con passaggio valori da 0 a 1000 e successivamente a 2000, 1000 poi nuovamente 0.

Alpha in questo esempio è pari a 0.004 (risposta abbastanza rapida si può ovviamente diminuire "Alpha" per ottenere risposte più lente).

Ciao

(scusate la riduzione dell'immagine ma nonostante venga consentito un allegato di 40k, a 20 e 18k non riuscivo ad allegare il grafico questo è da 12..)

Inserita:

Ok val, sembra semplice, se riesco faccio qualche prova.

Il plc in questo caso è un cnc, più esattamente un Fanuc 18I.

Ciao

Inserita:
Mi spiace contraddirti (relativamente alla prima parte del messaggio) Livio...

Non è per far polemica, Val, ma avresti dovuto leggere meglio il mio post. Io ho fatto riferimento ad alfa=0.1 e non, come nel tuo esempio, a 0.004. Chiaramente diminuendo alfa aumenta il tempo di andata a regime, quindi l'effetto filtrante.

Però, come evidenziato dal tuo esempio, l'algoritmo ha si un effetto filtrante, ma ha un andamento non lineare che, per alcune applicazioni, può dar luogo ad inconvenienti. Pensa ad una variazione a gradino. Con un andamento lineare, rampa, puoi anche ricostruirla con precisione e facilità dopo il filtraggio. COn un andamento non lineare è ancora possibile ma con maggiore difficoltà

Inserita:

Ciao..

Alpha = 0.1 era un esempio.. per far capire i rapporti tra le grandezze, per quanto riguarda invece le varie possibilità appena ho un po'di tempo fornirò grafici con un po' di "reazioni" (anche perchè è interessante verificare l'applicabilità del sistema ai vari casi).

Comunque nel primo messaggio citavo:

"Ovviamente più piccolo è Alpha più il filtro è performante, essendo t=tempo ciclo PLC ci sono dei limiti oltre il quale non ci si deve spingere..."

I limiti di questo sistema sono appunto certi andamenti del segnale entrante, mi scuso di essere stato generico, comunque anche per quei casi ho ottenuto ottimi risultati ponendo più "filtri" in cascata, miglior risultato con Alpha uguale per tutti i moduli in cascata.

Io (programmatore Siemens) dispongo del programma standardizzato (da me quindi è relativo) per s7 serie da 300 in su, se qualcuno lo desiderasse per applicarlo basta postare un messaggio qui con gli opportuni riferimenti, sarò lieto di fornirne copia.. (ovviamente in forma gratuita)

Nessuna polemica comunque, spero di essere stato comunque utile..

Ciao a tutti..

Inserita:

Val la cosa mi interessa, visto che come ho scritto in un post ho problemi di stabilità su una regolazione su un s7-300

grazie

mediceo2004[at]yahoo.it

Inserita:
Nessuna polemica comunque, spero di essere stato comunque utile..

Certo che il tuo contributo è stato utile e costruttivo. Discutere soluzioni con relativi pregi e difetti risponde pienamente allo spirito del forum. Anche la polemica può essere utile, a condiszione che non sia sterile e personale. Al massimo ognuno rimane della propria idea però, nel frattempo, sono stati sviscerati i vari argomenti facendo cresecere le conoscenze di tutti i partecipanti.

aleb2, come ti ho scritto, nell'altro post devi prima capire il perchè il sisema è instabile. Se filtri il segnale di ingresso potresti andare incontro a guai maggiori; un filtro passa basso è comunque un ritardo, se la tua instabilità è causata da quello che sospetto, il filtraggio della variabile di ingresso accentuerebbe l'instabilità.

Inserita:

Grazie per il chiarimento Livio, alla fine era proprio il sistema che avevo usato (anche se con un array più piccolo).

Che brutta cosa l'ignoranza ;)

Saluti

IZ5FCY Roberto
Inserita:

Perdonatemi la presunzione dell'ultimo arrivato.

Non riesco a capire perchè 'aggravare' le prestazioni di un PLC per una operazione di filtraggio che può essere demandata ad un filtro passa basso harware programmablie esterno.

I data sheet della Linear Technology e della National riguardo ai filtri programmabili, potrebbero essere d'aiuto.

Torno a chiedervi di scusarmi se mi sono introdotto 'di getto'.

Saluti Roberto

Inserita:
Non riesco a capire perchè 'aggravare' le prestazioni di un PLC per una operazione di filtraggio che può essere demandata ad un filtro passa basso harware programmablie esterno.

Hai ragione, ma purtroppo, in questo caso non so esattamente il comportamento del segnale in ingresso (potrebbe essere necessario costruire dei filtri ad hoc).

Si tratta di una applicazione di tipo "prototipale" , quindi vorrei prepararmi un mini-arsenale di strumenti software da poter utilizzare durante il collaudo.

Non mi preoccupa l'aggravio delle prestazioni poichè dovrei avere tutta la potenza di calcolo necessaria.

Ciao

Inserita:
Non riesco a capire perchè 'aggravare' le prestazioni di un PLC per una operazione di filtraggio che può essere demandata ad un filtro passa basso harware programmablie esterno.

1 - Cosa significa aggravare? Il dispositivo PLC deve comunque essere usato. Se la scelta della CPU è stata effettuata in base alle necessità d'impianto è da verificare che il software aggiuntivo non costringa la CPU a lavorare in condizioni di "hung up" o, in italiano corrente, che non sia "impiccata".

2 - Se le condizioni del punto 1 sono rispettate non succede niente. Non esistono, ancora, organizzazioni sindacali pronte ad indire scioperi sulle condizioni di lavoro delle CPU :rolleyes: . Quindi che la CPU sia occupata al 30% delle sue possibilità od allo 85% non fa differenza.

3 - Se per inplementare un algoritmo di filtraggio è necessario ricorrere ad una CPU con prestazioni superiori sarà necessario effetture una valutazione economica completa. Perchè anche se l'aggravio di costo per una CPU più potente fosse leggermente maggiore di un filtro esterno (visti i prezzi correnti dei due dispositivi è improbabile) non è detto che sia comunque vantaggioso.

Da ultimo, ma non meno importante, bisogna considerare tutta una serie di condizioni che fanno preferire l'uso di una funzione software all'utilizzo di un dispositivo HW dedicato e specialistico.

Affidabilità e disponibilità. Ogni componente aggiunto diminuisce l'affidabilità del sistema, tutto quello che non c'è non si può rompere; contemporaneamente aumenta i tempi di ricerca guasto diminuendo, di conseguenza, la disposnibilità del sistema.

Cablaggi. Un aggiunta di uno o più componenti aumenta la complessità dei cablaggi, con conseguente incremento della possibilità di disfunzioni.

Poi c'è una considerazione umana. Esistono ancora persone che preferiscono pensare e progettare piuttosto che comprare ed assemblare "scatolette". Capisco che questa filosofia è opinabile, però l'uomo non vive, o non dovrebbe vivere, di solo pane.

Inserita:
2 - Se le condizioni del punto 1 sono rispettate non succede niente. Non esistono, ancora, organizzazioni sindacali pronte ad indire scioperi sulle condizioni di lavoro delle CPU  . Quindi che la CPU sia occupata al 30% delle sue possibilità od allo 85% non fa differenza.

Forse ci vorrebbero delle organizzazioni "Telefono blu elettrico" ;) per proteggere i poveri sviluppatori dalle grinfie dei clienti in odore di follia! :huh:

Ciao

Inserita:

Scusate l'assenza prolungata ma i cantieri che seguo mi portano un po' lontano da una qualunque connessione internet.

ebeb2 ti mando subito il blocco e se ti servono spiegazioni chiedimi pure..

Per il resto sono d'accordo sui confronti direi anch'io che è lo spirito giusto..

Ciao a tutti..

  • 2 months later...
Inserita:

Vi racconto che cosa mi e' successo in merito a memorie e cpu.Ho inizato a programmare sul serio 6 Anni fa con omron poi per problemi di memoria sono passato a siemens poi sono finito con una ditta che costruisce dei plc che non hanno nulla da invidiare alle multinazionali,dove ho risolto tutti i miei problemi di

utilizzo(cpu) , parliamo con una spesa inferiore almeno del 50%.Morale chi inizia a programmare senza avere le idee chiare su cosa deve fare e quali sono i limiti del plc che ha davanti,sicuramente si trovera' in difficolta,oppure se realizziamo un programma semplice non ci sono problemi.........Saluti :(

Inserita:

una partecipazione "veloce"

nelle applicazioni in cui si hanno linee di trasmissione (quindi bus etc) l'impiego di filtri hardware è una fase di progettazione che richiede pazienza, abilità, esperienza e simulazioni ad OK. Come altri hanno sottolineato si introducono dei ritardi che non sono proprio il massimo.

Inoltre hanno bisogno di un buon riferimento (massa)per funzionare bene, cosa che non sempre è possibile avere.

I filtri software hanno l'indubbio svantaggio di "appesantire" la gestione software, ma se questo non è un problema...

Io comunque sono un sostenitore dei filtri Hardware per "abitudine".

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