Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Analizzatore di risposta in frequenza "fai da te"

Apparecchi di misura: oscilloscopi, multimetri, analizzatori di rete ecc
2
voti

[1] Analizzatore di risposta in frequenza "fai da te"

Messaggioda Foto UtenteFrenzi » 11 gen 2022, 15:39

Ciao a tutti, volevo presentarvi brevemente un progetto che penso possa essere molto utile a tutti, e per questo mi sento di condividerlo con voi. In pratica ero curioso di analizzare la risposta in frequenza di varie tipologie di filtri. Questo può essere fatto manualmente ma è un processo lento e laborioso.
Gli strumenti che ho utilizzato sono i "classici" da hobbista: oscilloscopio Rigol Ds1054z e generatore di funzioni FeelTech3200 (dovrebbero andare bene anche gli altri generatori della stessa casa costruttrice forniti di porta USB).
L'idea di base è semplice, ovvero automatizzare quello che fino adesso avevo fatto manualmente: si collega il generatore di segnali all'ingresso del dispositivo da testare (DUT), e si collega l'oscilloscopio con un canale sull'ingresso ed uno sull'uscita del DUT, rilevando il rapporto tra le ampiezze e lo sfasamento tra i 2 segnali. Si ripete quindi il procedimento per diverse frequenze impostate sul generatore di segnali.
Gli strumenti utilizzati possono essere collegati al PC tramite porta USB, e si possono comandare mediante semplici script in python. Ecco quindi che è nata l'idea.
Ho cercato qualcosa di già fatto, lo ho trovato e provato, ma non mi soddisfaceva. Così, partendo da quella base, ho sviluppato un nuovo script totalmente diverso nelle metodologie di misura e con molte più feature.
Quello che viene fatto in pratica è impostare sul generatore la frequenza richiesta, settare correttamente le scale dell'oscilloscopio ed eseguire le misurazioni; tutti i valori letti vengono inviati al PC che provvede a realizzare il grafico della risposta in frequenza.

Le principali funzionalità (al momento) dello script sono le seguenti:
> Plot della risposta in frequenza in termini di fase ed ampiezza
> Sweep in frequenza logaritmico o lineare
> Autorange di tensione e tempi, cercando di ottenere la massima risoluzione possibile
> Impostazione automatica dei principali parametri necessari per la misura
> Ripristino dei parametri originali dell'oscilloscopio dopo la misurazione
> Rilevazione di false misurazioni e ripetizione delle stesse
> Indicazione sul grafico di false misurazioni (qualora non sia stato possibile effettuarle correttamente) e di misurazioni non affidabili (in termini di fase se il modulo è molto molto piccolo)

Il progetto lo potete trovare al seguente link:  https://github.com/frenzi37i/BodePlot-Rigol
Qui trovate la prima release: https://github.com/frenzi37i/BodePlot-Rigol/releases/tag/v1.0.0-alpha
Al momento è da riga di comando ed è testato unicamente su windows.Sto comunque realizzando una GUI che spero di finire in tempi brevi . È scritto tutto in python, quindi per avviarlo è necessario averlo installato ed installare i pacchetti necessari. Trovate informazioni molto più dettagliate sul Readme della repo su github.
Ad ogni modo credo che sia molto semplice da utilizzare, in quanto, dopo aver copiato nello script l'indirizzo dell'oscilloscopio e la porta seriale del generatore, è sufficiente avviare lo script BodePlot.py, e tutto il resto viene chiesto direttamente all'utente.

Specifico che non c'e alcuna pretesa di precisione e vuole essere solo uno strumento di analisi qualitativa. Nonostante ciò,  sulle prove effettuate finora su filtri R-C sembra avere una buona precisione (molto prossima al diagramma di bode teorico).

Mi farebbe molto piacere che qualcuno lo provasse, per osservazioni sul funzionamento, bug o idee di sviluppo future.
Per capirne meglio il funzionamento potete leggere il readme su github o ancora meglio direttamente lo script, dato che è ben commentato (credo) e piuttosto straight-forward. Per qualunque dubbio sono ovviamente a disposizione.

Un saluto :-)
Avatar utente
Foto UtenteFrenzi
183 6
Frequentatore
Frequentatore
 
Messaggi: 121
Iscritto il: 4 giu 2015, 11:52

1
voti

[2] Re: Analizzatore di risposta in frequenza "fai da te"

Messaggioda Foto Utenteg.schgor » 11 gen 2022, 17:10

Puoi vedere qui
Avatar utente
Foto Utenteg.schgor
57,1k 9 12 13
G.Master EY
G.Master EY
 
Messaggi: 16880
Iscritto il: 25 ott 2005, 9:58
Località: MILANO

0
voti

[3] Re: Analizzatore di risposta in frequenza "fai da te"

Messaggioda Foto UtenteMarcoD » 11 gen 2022, 18:22

Dal punto di vista didattico, di programmazione e di sperimentazione è encomiabile.
Riguardo alle prestazioni, cerca in rete " nanovna " troverai un piccolo sistema
economico, interessante dalle elevate prestazioni.
Relativamente alle misure manuali, dipende dal tipo di filtro e dalle frequenza di interesse:
se non è molto complesso, basta rilevare il valore massimo, e poi i valori a -3, poi a -6, -20 e -40 dB. Nel giro di qualche minuto fai tutto.
O_/
Avatar utente
Foto UtenteMarcoD
10,1k 5 9 13
Master EY
Master EY
 
Messaggi: 5077
Iscritto il: 9 lug 2015, 16:58
Località: Torino

1
voti

[4] Re: Analizzatore di risposta in frequenza "fai da te"

Messaggioda Foto Utentexyz » 11 gen 2022, 19:21

Leggiti la guida a su come scrivere del codice Python conforme alla standard, si sono parti che fanno rabbrividire solo a guadarle:

https://www.python.org/dev/peps/pep-0008/

Scrivi nel codice:
Codice: Seleziona tutto
while(1):
metti un:
Codice: Seleziona tutto
while True:


In Python esiste "elif" usalo. Le variabili locali e i nomi delle funzioni in minuscolo. Usi gli array "[]" come tuple "()", usa quest'ultime sono più efficienti.
Avatar utente
Foto Utentexyz
6.761 2 4 6
G.Master EY
G.Master EY
 
Messaggi: 1751
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[5] Re: Analizzatore di risposta in frequenza "fai da te"

Messaggioda Foto UtenteFrenzi » 11 gen 2022, 22:37

@MarcoD: Riguardo al nano vna l'ho visto proprio l'altro giorno da PierAisa ed è sicuramente un aggeggio interessante. Tuttavia lo scopo fondamentalmente era didattico e per non spendere dei soldi in attrezzatura che avrei usato molto molto raramente; inoltre, vista la grande diffusione degli strumenti che ho utilizzato, mi faceva piacere realizzare qualcosa che potesse essere utilizzato e, perché no, migliorato anche da altri appassionati.
In qualsiasi caso, una volta collegato oscilloscopio e generatore di segnale al dispositivo da testare e al PC, basta lanciare lo script e in qualche minuto (a seconda degli step di frequenza impostati) lui completa automaticamente le misurazioni e plotta il grafico; come setup, a meno del PC, ci si mette quindi lo stesso tempo che ci si metterebbe a collegare un qualsiasi altro dispositivo di analisi, è anche per questo che ho trovato inutile acquistare l'analizzatore dedicato (che avevo già addocchiato).

@xyz: Per quanto riguarda la programmazione, sicuramente non sono un programmatore, e tanto meno in python; purtroppo lo uso molto di rado e soprattutto (a parte qualche eccezione) lo uso come "un C più comodo e rapido da usare". So che è sbagliato, ma non ho ancora avuto tempo di cimentarmi seriamente con questo linguaggio e questa potrebbe essere una buona occasione. Cercherò sicuramente di implementare quanto mi hai detto, oltre a leggere la guida che mi hai linkato. Per il momento mi interessava più avere uno script funzionante che "bello da vedere", ma ora ci sarà tempo anche per questo. Già che ci sono volevo chiederti se sai come aggiungere al plot semilogaritmico i tick sull'asse delle x per tutti i valori, e non solo per le potenze di 10, perché ci ho provato in tutti i modi ma non ci sono riuscito (sarebbe quello che in Matlab fai con 'grid minor').
Per quanto riguarda la GUI oggi ho provato a fare qualcosa, ma non ho mai fatto nulla del genere e lo trovo veramente ostico e soprattutto molto dispendioso in termini di tempo, quindi visto che lo script fa quello che deve mi sa che per il momento lo lascerò da linea di comando. Se qualcuno avesse voglia di svilupparla, molto volentieri.

Grazie come sempre, un saluto O_/
Avatar utente
Foto UtenteFrenzi
183 6
Frequentatore
Frequentatore
 
Messaggi: 121
Iscritto il: 4 giu 2015, 11:52

0
voti

[6] Re: Analizzatore di risposta in frequenza "fai da te"

Messaggioda Foto Utentexyz » 12 gen 2022, 3:35

Frenzi ha scritto:... volevo chiederti se sai come aggiungere al plot semilogaritmico i tick sull'asse delle x per tutti i valori, e non solo per le potenze di 10, perché ci ho provato in tutti i modi ma non ci sono riuscito (sarebbe quello che in Matlab fai con 'grid minor').

Se ho capito prova con:

Codice: Seleziona tutto
plt.grid(True, which='both', ls='-', color='0.65')


Altrimenti fammi vedere un esempio e vedo se è possibile farlo con Matplotlib.
Avatar utente
Foto Utentexyz
6.761 2 4 6
G.Master EY
G.Master EY
 
Messaggi: 1751
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

1
voti

[7] Re: Analizzatore di risposta in frequenza "fai da te"

Messaggioda Foto UtenteSediciAmpere » 12 gen 2022, 6:48

Grazie Frenzi!
Avatar utente
Foto UtenteSediciAmpere
2.598 4 5 8
Master
Master
 
Messaggi: 2931
Iscritto il: 31 ott 2013, 15:00

1
voti

[8] Re: Analizzatore di risposta in frequenza "fai da te"

Messaggioda Foto UtenteGioArca67 » 12 gen 2022, 8:38

xyz ha scritto:Leggiti la guida a su come scrivere del codice Python conforme alla standard, si sono parti che fanno rabbrividire solo a guadarle:

Perdonami, ma a me fa rabbrividire questo tuo modo di rispondere.
L'OP ha mostrato sicuramente un ottimo impegno ed ha da subito esplicitato il "fai da te" e la non velleità di ottimo, ma un semplice strumento qualitativo.
O dobbiamo tutti tenerci i nostri progetti nel cassetto perché altrimenti possiamo venire sbeffeggiati pubblicamente?
Avevi tanti modi per evidenziare la necessità di un miglioramento del codice, hai scelto uno fra i peggiori.
Avatar utente
Foto UtenteGioArca67
1.605 2 4 7
Master
Master
 
Messaggi: 1495
Iscritto il: 12 mar 2021, 9:36

1
voti

[9] Re: Analizzatore di risposta in frequenza "fai da te"

Messaggioda Foto UtenteGioArca67 » 12 gen 2022, 8:55

xyz ha scritto:
Scrivi nel codice:
Codice: Seleziona tutto
while(1):
metti un:
Codice: Seleziona tutto
while True:



In python 2.2.1 perfettamente lecito...
Python 2.3 - PEP 285:

"A Boolean type was added to Python 2.3. Two new constants were added to the __builtin__ module, True and False. (True and False constants were added to the built-ins in Python 2.2.1, but the 2.2.1 versions are simply set to integer values of 1 and 0 and aren't a different type.)"


Rabbrividisci ancor di più:
Codice: Seleziona tutto
print(True+1)

e indovina quanto esce?
Avatar utente
Foto UtenteGioArca67
1.605 2 4 7
Master
Master
 
Messaggi: 1495
Iscritto il: 12 mar 2021, 9:36

3
voti

[10] Re: Analizzatore di risposta in frequenza "fai da te"

Messaggioda Foto UtenteFrenzi » 12 gen 2022, 12:48

Grazie Foto UtenteGioArca67, effettivamente il commento di Foto Utentexyz è stato un po' "rude" nei modi ma ciò non toglie che avesse assolutamente ragione, e credo che non ci fosse alcuna intenzione negativa. Ho letto la guida che mi ha postato e ho cercato di correggere quanti più errori di "stile" possibile (spazi, nomi delle variabili, delle funzioni, commenti, ecc.); ho anche modificato il modo con cui vengono ritornati i valori dalle funzioni, tolto qualche commento inutile e utilizzato le tuple al posto degli array dove necessario; inoltre ho trovato diversi bug e ho modificato parecchio il funzionamento della misurazione, che adesso funziona decisamente meglio.
Come sempre, nonostante il modo non sia stato dei migliori, le critiche portano sempre ad un miglioramento, quindi grazie xyz :-) (Per favore, cerchiamo di non sviluppare sterili polemiche che credo rovinerebbero il post e basta)
Per quanto riguarda i grafici, ne allego qui uno per far capire cosa mi servirebbe che non riesco ad ottenere; in pratica, anche con il metodo di xyz, la griglia verticale viene plottata solo sulle potenze di 10, mentre a me piacerebbe averla su "tutti" i valori interi (e le loro potenze), in modo che salti subito all'occhio anche senza leggere la scala sulle x che è un grafico logaritmico e la lettura approssimata dei valori sia più semplice. In allegato c'è la risposta in frequenza realizzata per un filtro R-C con R=1k, C=10n, che come si può vedere è fedele alla risposta teorica.
O_/

P.s.: in qualsiasi caso, questioni di stile a parte, da ignorante mi sembra abbastanza anacronistico parlare di efficienza per uno script del genere, in Python, che gira su un PC con 16gb di ram ed un processore a 4 core a 3ghz. Chiuso OT
Allegati
Filtro_1k_10n.png
Avatar utente
Foto UtenteFrenzi
183 6
Frequentatore
Frequentatore
 
Messaggi: 121
Iscritto il: 4 giu 2015, 11:52

Prossimo

Torna a Strumentazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti