Insieme ai cambiamenti di temperatura e all’invecchiamento, le tolleranze dei componenti elettronici determinano delle inevitabili variazioni statistiche delle prestazioni offerte da un dato circuito. Queste variazioni vengono definite sensibilità e il loro studio permette di prevedere quale sarà la massima variazione attesa di un dato parametro del circuito finale (per es. offset, risposta in frequenza, guadagno, ecc.) in base alle tolleranze dei componenti usati.
Il calcolo manuale delle sensibilità può essere particolarmente complicato quando un dato parametro dipende dal valore di molti componenti. A questo proposito, le simulazioni in SPICE sono un mezzo particolarmente efficace per prevedere gli effetti determinati dalle tolleranze dei componenti. Due strumenti frequentemente usati a questo scopo sono il metodo Monte Carlo e l’analisi worst case (WCA). Seppure non sia attualmente dichiarato nel manuale, il software LTSpice IV dispone di una funzione predefinita per il metodo Monte Carlo. Al contrario, non dispone di una funzione predefinita per l’analisi worst case, ma questa può essere facilmente implementata dall’utente mediante una funzione personalizzata.
1. Metodo Monte Carlo
Il metodo Monte Carlo si basa sull’esecuzione di un grande numero di simulazioni nelle quali i valori di ciascun componente vengono variati, di volta in volta, in maniera casuale. Questi valori seguono la distribuzione che si suppone abbiano nella realtà e sono incorrelati tra loro. Il metodo Monte Carlo è quindi un metodo statistico che fornisce una stima delle prestazioni reali di un circuito e permette di valutare l’errore atteso di un dato parametro rispetto al suo valore nominale.
Il metodo Monte Carlo può essere eseguito in LTSpice IV richiamando la funzione predefinita mc
all’interno del campo Value di ciascun componente usando la sintassi:
{mc(<nom>,<tol>)}
dove <nom>
è il valore nominale del componente e <tol>
la sua tolleranza espressa in forma decimale. Per esempio, un resistore da 10 kΩ con una tolleranza del 5% può essere espresso inserendo nel suo campo Value la sintassi:
{mc(10k,0.05)}
mentre ad un condensatore da 10 nF con una tolleranza del 10% può essere attribuito:
{mc(10n,0.10)}
Infine, è sufficiente aggiungere la direttiva:
.step param run 1 1000 1
per eseguire una serie di 1000 simulazioni nelle quali il valore di ciascun componente verrà variato, di volta in volta, in maniera casuale all’interno dell’intervallo di tolleranza specificato (10 kΩ ± 5% e 10 nF ± 10%). Si noti che per ottenere un’attendibilità statistica è necessario eseguire un grande numero di simulazioni.
In fig. 1 è stato simulato un filtro ad un polo ed uno zero usando il metodo Monte Carlo. I resistori e il condensatore hanno rispettivamente una tolleranza del 5% e del 10%.
L’analisi AC ha restituito un fascio di 1000 curve che descrivono il comportamento del circuito nel dominio della frequenza da un punto di vista statistico.
2. Analisi worst case
L’analisi worst case è utile quando è necessario valutare lo scenario peggiore che si potrebbe presentare nel caso in cui il valore di ciascun componente fosse esattamente al limite dell’intervallo specificato e nel caso in cui i valori di ciascun componente contribuissero, nel loro insieme, alla massima deviazione possibile del parametro d’interesse. Si tratta quindi di un metodo matematico il cui scopo è quello di prevedere la peggior situazione possibile (seppur questa sia in pratica molto improbabile) che potrebbe verificarsi nel caso in cui tutti i componenti presentassero un valore al limite della tolleranza specificata dall’utente. Questo metodo è utile per prevedere la variazione massima di un dato parametro che si potrebbe ottenere nel circuito finito ed è un utile strumento per verificare le ipotesi relative ad eventuali malfunzionamenti legati alle tolleranze dei componenti impiegati.
LTSpice IV non dispone di una funzione predefinita a questo scopo, per cui è necessario ricorrere ad una funzione definita dall’utente. Questo può essere ottenuto in vari modi, per esempio introducendo la direttiva:
.func wc(nom,tol) if(flat(1)>0,nom*(1+tol),nom*(1-tol))
e richiamando questa funzione all’interno del parametro Value di ciascun componente mediante la sintassi:
{wc(<nom>,<tol>)}
dove, ancora una volta, <nom>
è il valore nominale del componente e <tol>
la sua tolleranza espressa in forma decimale.
flat(1)
restituisce un numero casuale con distribuzione uniforme compreso tra -1 e +1. Pertanto, flat(1)>0
assume il valore vero
col 50% delle probabilità. La funzione usata per l’analisi worst case è del tipo if(x,y,z)
, dove se x
> 0,5, allora la funzione assume il valore di y
, altrimenti assume il valore di z
. In questo modo, la funzione if(flat(1)>0,x,y)
restituisce il valore x
oppure y
col 50% di probabilità.Applicando il calcolo combinatorio è facile dimostrare che l’analisi worst case restituisce al più una famiglia di \(2^n\) distine curve, dove \(n\) è il numero di componenti coinvolti nell’analisi. Tuttavia, poiché l’algoritmo usato in questo esempio restituisce nom*(1+tol)
o nom*(1-tol)
in maniera casuale, è necessario ripetere un numero di simulazioni sufficientemente superiore a \(2^n\) per avere un’elevata probabilità di esplorare tutte le possibili combinazioni. In pratica, un numero di simulazioni pari a \(10\times2^n\) è adeguato.
In fig. 2 è stata eseguita l’analisi worst case del circuito precedente lanciando una serie di 80 simulazioni.
Lascia un commento