Многовариантный анализ в LTspice
Введение
Кроме разброса номиналов, нередко требуется учитывать влияние и таких возмущающих факторов, как температура, старение и т. п. Задача усложняется тем, что эти факторы действуют одновременно и оказывают комплексное влияние. И, при их возрастании сложность учета взаимного влияния увеличивается в геометрической прогрессии. То есть если факторов не много, скажем один или два, то решение можно найти при помощи калькулятора, карандаша и листка бумаги. Однако при возрастании количества факторов подобный инструментарий быстро становится бесполезным. А значит, понадобится что-то более серьезное. Например, компьютерный симулятор электронных схем LTspice.
В качестве прикладной задачи определим возможный разброс выходного напряжения опорного источника, вызванного отклонениями параметров компонентов, а также изменением температуры окружающей среды. Электрическая схема источника опорного напряжения (ИОН), собранного на микросхеме TL431, изображена на рис. 1. Допустим, по техническим условиям (ТУ) требуется, чтобы ИОН формировал выходное напряжение VOUT= 5 В ±1,5%. Этот пример является одной из многих типовых задач, с необходимостью решения которых разработчик электроники сталкивается в процессе своей деятельности.
В библиотеке симулятора нет специальной модели, позволяющей имитировать какие-то разбросы и температурные зависимости микросхемы TL431 (далее — микросхема), поэтому подготовим специальную тестовую модель, схема которой изображена на рис. 2.
Позиционные обозначения навесных компонентов на рис. 1 и 2 совпадают. Резисторы R2 и R3 образуют делитель, задающий выходное напряжение ИОН. Источник тока I2 имитирует опорный входной ток Irefмикросхемы. Независимый источник напряжения V1 имитирует опорное входное напряжение Vref микросхемы. ИТУН G1 имитирует внутренний операционный усилитель микросхемы. Источник тока I1 имитирует ток нагрузки ILOAD. ИОН питается от независимого источника V2 напряжением 9 В. Резистор R1 ограничивает максимальный выходной ток ИОН. Список возмущающих факторов и переменных параметров приведен в таблице 1.
Название |
Минимум |
Максимум |
Температура (T), °С |
0 |
50 |
Допуск сопротивления (dop), % |
–0,1 |
0,1 |
Температурный коэффициент сопротивления (tks), 10-6×1/°С (ppm*) |
–25 |
25 |
Входное напряжение (Vref), В |
2,475 |
2,515 |
Входной ток (Iref), мкА |
1,1 |
2 |
Ток нагрузки (ILOAD), мА |
0 |
6 |
Примечание. * ppm (parts per million) — миллионная доля.
Изменение температуры (temp) приводит к тому, что сопротивление резисторов R2 и R3 изменяется в соответствии с температурным коэффициентом сопротивления (tks). Это влияние совместно с допуском dopприводит к нестабильности величины сопротивлений резисторов. В результате сопротивление резисторов Rможет иметь любое значение в диапазоне Rmin–Rmax:
Rmin 9 R(1–dop/100)(1+(Tmin–Tnim)tks) = R(1–0,1/100)(1+0–20)×25×10–6 = R×0,9985, Rmax = R(1+dop/100(1+(Tmax–Tnom)tks) = R(1+0,1/100)(1+(50–20)×25×10–6) = R×1,0017, где Tnom = +20 °С.
В данном случае R2 = R3 = 10 кОм. Следовательно, для обоих резисторов минимальное и максимальное сопротивления будут одинаковыми: Rmin = 10×0,9985 = 9,985 кОм, а Rmax = 10×1,0017 = 10,017 кОм.
Оптимизация исследования
Чем больше любой из перечисленных факторов и параметров отклоняется в большую или меньшую сторону от своего номинального значения, тем больше отклоняется от своего номинального уровня выходное напряжение ИОН. Следовательно, для определения максимального разброса выходного напряжения достаточно учитывать только крайние отклонения возмущающих факторов и параметров. Взяв на вооружение этот принцип, можно значительно упростит задачу. В этом случае задача сводится к тому, чтобы измерить выходное напряжение для всех возможных комбинаций указанных выше факторов и параметров, если те принимают только два значения: максимальное и минимальное. Соответственно, общее число комбинаций для k факторов и параметров равно аналогичному значению двоичного кода:
N(k) = 2k, (1)
где k — число разрядов двоичного кода.
В таблице 1 перечислено шесть факторов и параметров, влияющих на стабильность выходного напряжения ИОН. Однако чуть раньше изменение температуры (T), температурный коэффициент (tks) и допуск (dop) были преобразованы в изменение сопротивления резисторов R2 и R3. В результате количество переменных параметров снизилось до пяти. Общее количество всевозможных комбинаций из этих параметров можно найти по формуле (1) как N = 25 = 32.
Использование директивы .TRAN
Директива .TRAN предназначена для исследования переходного процесса. Этот тип исследования позволяет моделировать поведение ИОН после подачи напряжения питания. Необходимо лишь организовать изменение номиналов и параметров компонентов модели в соответствии с двоичным алгоритмом.
Перебор комбинаций — в этом режиме исследования можно осуществить при помощи генератора двоичных комбинаций. Такой генератор можно построить на двоичных счетчиках или на независимых источниках напряжения. Предварительно необходимо установить соответствие между варьируемыми параметрами и двоичными разрядами. Вариант такого соответствия приведен в таблице 2. Также в таблице указаны минимальные значения всех параметров и приращения. Когда двоичный разряд равен 0, соответствующий ему параметр имеет минимальное значение. Когда двоичный разряд равен 1, соответствующий ему параметр равен сумме минимального значения и приращения.
Схема модели с генератором комбинаций на источниках напряжения изображена на рис. 3. Все источники напряжения имеют практически одинаковую настройку. Необходимо лишь указать номер двоичного разряда, для которого данный источник будет генерировать последовательность нулей и единиц. Для примера, на рис. 3 раскрыта строка настройки источника V1, генерирующего последовательность нулевого разряда. Настройка источника заключается в том, чтобы в указанные на рис. 1 позиции строки вписать 0. Для первого разряда надо будет вписать 1, для второго 2 и т.д. Список связей модели приведен в листинге 1.
R1 N002 Vout 560 G1 Vout 0 N003 N001 2.9 R3 N001 0 R={9.985k+V(k1)*32} R2 Vout N001 R={9.985k+V(k0)*32} V5 N002 0 9 B1 N001 0 I={1.1u+V(k3)*0.9u} B2 N003 0 V={2.475+V(k2)*0.04} B3 Vout 0 I={V(k4)*6m} V1 k0 0 PULSE(0 1 {period/2**(k-0)} {tf} {tf} {period/2**(k-0)-tf} {2*period/2**(k-0)}) V2 k1 0 PULSE(0 1 {period/2**(k-1)} {tf} {tf} {period/2**(k-1)-tf} {2*period/2**(k-1)}) V3 k2 0 PULSE(0 1 {period/2**(k-2)} {tf} {tf} {period/2**(k-2)-tf} {2*period/2**(k-2)}) V4 k3 0 PULSE(0 1 {period/2**(k-3)} {tf} {tf} {period/2**(k-3)-tf} {2*period/2**(k-3)}) V6 k4 0 PULSE(0 1 {period/2**(k-4)} {tf} {tf} {period/2**(k-4)-tf} {2*period/2**(k-4)}) .tran {period} .param k=5 period=32m tf=period/5000 .backanno .end
Листинг 1. Список связей модели с двоичным счетчиком
Название параметра |
Минимум |
Приращение |
Двоичный разряд |
Вес разряда |
Сопротивление резистора R2, кОм |
9,985 |
0,032 |
0 |
1 |
Сопротивление резистора R3, кОм |
9,985 |
0,032 |
1 |
2 |
Входное напряжение (Vref), В |
2,475 |
0,04 |
2 |
3 |
Входной ток (Iref), мкА |
1,1 |
0,9 |
3 |
4 |
Ток нагрузки (Iload), мА |
0 |
6 |
4 |
16 |
Результат исследования изображен на рис. 4. Исследование переходного процесса показывает, что при различных сочетаниях вариаций параметров, перечисленных в таблице 2, напряжения ИОН остается в диапазоне 4,948–5,058 В. Разброс выходного напряжения составляет 5,058 – 4,948 = 110 мВ. Отклонение выходного напряжения от номинального значения 5 В не превышает ±1,1%, что не хуже требований ТУ.
Альтернативный генератор двоичных комбинаций можно построить с использованием директивы .FUNC, которая разрешает создавать пользовательские функции. Один из вариантов генератора комбинаций может быть создан следующим образом:
.param k=5 period=1 .func mod2(x) if(x>2*int(x/2),1,0) .func ras(n) mod2(int(time/(period/2**(k-n))))
Здесь при помощи директивы .PARAM создаются переменные k и period. Переменная k определяет количество двоичных разрядов генератора комбинаций, а переменная period определяет длительность периода моделирования. Функция mod2(x) определяет четность целого числа x. Если число x четное, то функция возвращает 0, если нечетное, то 1. Функция ras(n) определяет состояние двоичного разряда с номером n.
Модель с генератором двоичных комбинаций, созданным при помощи директивы .FUNC, изображена на рис. 5. Список связей модели приведен в листинге 2.
R1 N002 Vout 560 G1 Vout 0 N003 N001 2.9 R3 N001 0 R={9.985k+ras(1)*32} R2 Vout N001 R={9.985k+ras(0)*32} V2 N002 0 9 B1 N001 0 I={1.1u+ras(3)*0.9u} B2 N003 0 V={2.475+ras(2)*0.04} B3 Vout 0 I={ras(4)*6m} .tran 0 {period} 0 {1u*period} .param k=5 period=1 .func mod2(x) if(x>2*int(x/2),1,0) .func ras(n) mod2(int(time/(period/2**(k-n)))) .backanno .end
Листинг 2. Список связей модели с генератором двоичных комбинаций
Результат исследования изображен на рис. 6. Эти результаты аналогичны полученным ранее. Применение пользовательских функций позволяет получить более компактный внешний вид модели. Однако в скорости полученная модель значительно проигрывает предыдущей.
Использование директивы .STEP
Методика многовариантного анализа, рассмотренная в предыдущем разделе, достаточно проста и обеспечивает очень высокую скорость моделирования. Однако эта методика подходит только для тех исследований, которые можно производить при помощи директивы .TRAN. С ее помощью невозможно осуществить многовариантный анализ при остальных видах исследования.
Указанную проблему предыдущей методики можно попытаться решить при помощи директивы .STEP. Эта директива в течение одного сеанса моделирования позволяет многократно запускать любой тип исследования с вариацией одного параметра. И этого, к сожалению, недостаточно, поскольку в нашем случае требуется одновременно изменять пять параметров, а не один. Проблему можно решить введением вспомогательной переменной ns (имя переменной может быть произвольным), которая будет выполнять роль своеобразного счетчика циклов. Именно эта переменная и будет варьироваться директивой .STEP. Изменение же требуемых параметров, в свою очередь, будет определяться состоянием счетчика. При этом количество циклов моделирования находят по формуле (1) как:
ns = 2k = 25 = 32,
где k — число варьируемых параметров.
Состояние любого из двоичных разрядов n, в зависимости от номера цикла моделирования ns, можно рассчитать по формуле:
Qindex = int(ns/2index)–2int(ns/2index+1), (2)
Схема модели многовариантного анализа с использованием директивы .STEP изображена на рис. 7. Список связей модели приведен в листинге 3.
R1 N002 Vout 560 G1 Vout 0 N003 N001 2.9 V1 N003 0 {Vref} R3 N001 0 {R3} R2 Vout N001 {R2} I1 Vout 0 {Iload} V2 N002 0 9 I2 N001 0 {Iref} .step param ns 0 31 1 .param R3=9.985k+(int(ns/2**1)-2*int(ns/2**(1+1)))*32 .param vref=2.475+(int(ns/2**2)-2*int(ns/2**(2+1)))*0.04 .param iref=1.1u+(int(ns/2**3)-2*int(ns/2**(3+1)))*0.9u .param iload=0+(int(ns/2**4)-2*int(ns/2**(4+1)))*6m .op .param R2=9.985k+(int(ns/2**0)-2*int(ns/2**(0+1)))*32 .backanno .end
Листинг 3. Список связей модели с директивой .STEP
Результат исследования изображен на рис. 8. Результаты моделирования аналогичны полученным ранее. Несколько иной подход продемонстрирован в [1, 2], где вычисление веса двоичного разряда производится с помощью пользовательской функции:
.func binary_digit(ns,n) int(ns/2**n)-2*int(ns/2**(n+1))
Для определения параметров также применяется пользовательская функция wc. Если параметр задан в виде минимального значения min и приращения inc, используется функция:
.func wc(min,inc,n) if(binary_digit(ns,n),min+inc,min)
Если же параметр задан в виде номинального значения nom и допуска dop (в %), используется функция:
.func wc(nom,dop,n) if(binary_digit(ns,n),nom*(1+dop/100),nom*(1-dop/100))
Применение пользовательских функций позволяет снизить количество текста в модели и улучшить ее читабельность. Однако время моделирования при этом увеличивается.
Схема модели многовариантного анализа с использованием директивы .STEP и пользовательских функций показана на рис. 9. Список связей модели приведен в листинге 4.
R1 N002 Vout 560 G1 Vout 0 N003 N001 2.9 V1 N003 0 {wc(2.475,0.04,2)} R3 N001 0 {wc(9.985k,32,1)} R2 Vout N001 {wc(9.985k,32,0)} I1 Vout 0 {wc(0,6m,4)} V2 N002 0 9 I2 N001 0 {wc(1.1u,0.9u,3)} .step param ns 0 31 1 .op .func binary_digit(ns,n) int(ns/2**n)-2*int(ns/2**(n+1)) .func wc(min,inc,n) if(binary_digit(ns,n),min+inc,min) .backanno .end
Листинг 4. Список связей модели с директивой .STEP и пользовательскими функциями
Результат исследования изображен на рис. 10. Результаты моделирования также аналогичны полученным ранее.
- Spencer J. Getting the worst-case circuit analysis with a minimal number of LTspice simulation runs. ANALOG DEVICES, 2017.
- K6JCA: Monte Carlo and Worst-Case Circuit Analysis using LTSpice, 2012 (Edited on 29 May 2020).