Но есть нюанс ...

Поскольку мои уважаемые читатели подавляющим большинством изъявили желание прочитать о точности резистивных схем, у меня не остается выбора и я приступаю к изложению. Следует заметить, что вопросы точности исторически разрабатывались в контексте измерений, а мы будем их рассматривать в обратном направлении, хотя на результаты это никоим образом не повлияет.

Для начала введем основные понятия — предположим, что мы имеем некоторое истинное (или точное) значение произвольного параметра (Po) (например, сопротивление резистора) и практически измеренное значение этого параметра (P). Тогда мы можем ввести понятие «погрешность», численно равную разнице между этими двумя значениями. Если мы возьмем модуль полученного значения, то получим «абсолютную погрешность»:∆P=|P‑Po|.

Практическая ценность данного показателя несколько сомнительна, поскольку погрешность в 100 Ом для резистора в 10 МОм явно несущественна, а вот для резистора в 1 кОм весьма значительна. Поэтому вводят дополнительный показатель, «относительная погрешность»: δP=∆P/Po, который более информативен и удобнее в применении в силу отсутствия размерности. Обычно относительную погрешность указывают в процентах (%), но встречаются и промиле (%%) и даже миллионные (ppm) и миллиардные (ppb) доли. Мы далее будем иметь дело с первым представлением — в процентах, хотя это и несущественно.
Примечание на полях (Пнп): внимательный читатель спросит, а что делать, когда истинное значение равно нулю, ведь «на ноль делить нельзя». Ну, во-первых, можно … необходимое пояснение для ошеломленных читателей — делить можно, разделить нельзя, но это все шуточки. А по существу — считают, что истинное значение в знаменателе (и только в нем) равно измеренному и тогда получаем δP=|P-0|/P=100% - вполне логичный результат.

Итак, имеется показатель, характеризующий точность поддержания какого-либо параметра, в данном случае сопротивления резистора. Обычно мы будем иметь дело со значением 5% - стандартный ряд E48, но в практических применениях используется и 2% - ряд E96 и даже 0.1% - ряд E240.
Пнп: цифра в индексе определяет количество номиналов в ряду на декаду, откуда легко получить отношение между соседними номиналами 10^(1/48)=1.049~1.05. Где-то читал, что ряды номиналов были созданы таким образом, чтобы резистор любого номинала можно было бы положить в какую-то ячейку кассы, выглядит данная гипотеза правдоподобно.

Поскольку мы крайне редко будем использовать резистор в одиночку и чаще будем создавать систему из неточных резистивных компонентов, необходимо знать, как будет влиять точность компонента на точность системы в целом. Рассмотрим различные функции от одного аргумента и определим точность вычисления функции в зависимости от точности аргумента.

Рассмотрим для начала линейные функции — прибавление константы и умножение на константу.
Начнем с умножения и решим задачу «в лоб». Пусть f(x)=kx, тогда f(x+dx)=k*(x+dx) и относительная погрешность значения функции
q(k*x) =|k*x-k*dx-k*x|/(k*x)=k*|dx|/(k*x)=|dx|/x=qx.
Пнп: здесь и далее символ d будет заменять
∆, а символ q - δ, ничего личного, просто так мне удобнее. Вывод — при умножении параметра на константу (заданную абсолютно точно) относительная точность сохраняется.

Теперь сложение: f(x)=x+k, тогда
q(x+k)=|f(x+dx) - f(x)| / f(x) = |x+dx+k-(x+k)| / (x+k) =
|dx|/(x+k) = |dx|/x - |dx|/x*
k/(x+k)=qx*(1-k/(x+k))
.
В предположении, что x и k всегда одного знака (к примеру, положительны), относительная погрешность не возрастет, а иногда и уменьшится. Пнп: да, нам повезло, сопротивления отрицательными не бывают, иначе операция сложения была бы запрещенной с точки зрения оценки точности.

Перейдем к нелинейным функциям и рассмотрим для начала квадратичную f(x)=x*x. Тогда q(x*х)=((x+dx)*(x+dx)-x*x)/(x*x) = (2*x*dx+dx*dx)/(x*x) =
2*dx/x+dx*dx/(x*x) = 2*qx+qx*qx.
Пренебрегая членами второго порядка малости, получим q(x*x)=2*qx, то есть погрешность при возведении к квадрат возрастает в 2 раза. Можно провести аналогичное решение для произвольного показателя степени k, но сначала упростим процесс.

Для этого воспользуемся формулой Ньютона и заменим f(x+dx) на f(x)+f’(x)*dx, тогда
qf(x) = (f(x)+f’(x)*dx-f(x))/f(x) = f’(x)*dx/f(x)=f’(x)*dx/x*x/f(x)=qx*f’(x)*x/f(x)
и мы получили обобщенную формулу. Проверим ее на уже решенных задачах
q(k*x) = qx*k*x/(k*x) = qx (+),
q(x*x) = qx*2*x*x/(x*x) = 2*qx (+),
q(x) = qx*1*x/x = qx (+).

Тогда q(x^k) = qx*k*x^(k-1)*x/(x^n) = k*qx.
Отметим, что q(1/x) = |-1|*qx = qx.

Теперь легко перейти к функциям двух аргументов. Начнем со сложения.
f(x+y) = qx*1*x/(x+y)+qy*1*y/(x+y)=qx*x/(x+y)+qy*y/(x+y),
то есть при сложении относительные погрешности складываются с разными коэффициентами, каждый из которых менее единицы. В важном частном случае, когда qx=qy, получим q(x+y) = qx, то есть относительная погрешность суммы равна погрешности каждого слагаемого.

Далее рассмотрим умножение
f(x*y) = qx*y*x/(x*y)+qy*x*y/(x*y) = qx+qy,
что согласовано с формулой для квадрата.

Формулу для деления можно получить двумя способами — рассматривая деление, как умножение на обратное к знаменателю и тогда получим
q(x/y)=q(x*1/y)=q(x)+q(1/y)=qx+qy.
Но можно для тренировки использовать обобщенную формулу, тогда
q(x/y)=qx*1/y*x/(x/y)+qy*(x/y*y)*y/(x/y)=qx+qy, ч.т.д.

А вот теперь слайды можно перейти к резисторным схемам. Последовательное соединение резисторов приводит к формуле суммы, значит погрешность остается неизменной (при одинаковой погрешности слагаемых). Параллельное соединение также не представляет проблемы, если мы вспомним, что в этом случае складываются проводимости, или единицы, обратные к сопротивлению. q(1/(1/x+1/y))=qx. Значит, и в этом случае погрешность остается неизменной. Пнп: доказательство погрешности для функции x*y/(x+y) оставим пытливому читателю.

Рассмотрим теперь весьма часто применяемую схему, а именно резистивный делитель, который описывается формулой x/(x+y). С формальной точки зрения мы должны получить погрешность в 2 раза больше погрешности резисторов, поскольку вверху q и внизу q. Но проведем анализ при помощи обобщенной формулы, тогда:
qf = q(x/(x+y)) =
qx*
(1*((x+y)-1*x)/((x+y)*(x+y)))*x/(x/(x+y)) + qy*((0-1x)/((x+y)*(x+y)))y/((x+y)*(x+y)) = . qx*y/(x+y)^2*x/x*(x+y)+qy*-x/(x+y)^2*y/x*(x+y) =
qx*y/(x+y)-qy*y/(x+y)=(qx+qy)*y/(x+y).

И для частного случая qx=qy получим qf = 2q*y/(x+y).
Поскольку x и y положительны и не равны нулю, то итоговая погрешность коэффициента деления будет всегда меньше удвоенной погрешности резисторов. Если ввести параметр «отношение резисторов» k, равный x/y, по коэффициент передачи делителя будет равен 1/(1+k) с погрешностью 2*qx*k/(k+1) и, например, при одинаковых резисторах (k=1) погрешность будет равна погрешности каждого резистора. Интересно, что при k<1 мы получим погрешность коэффициента передачи меньшую, чем погрешность одного резистора, например для k=2/3 имеем qf=2*qx*2/3/(1+2/3)=qx*2*2/3*3/5=qx*4/5, что явно меньше qx. Лично меня получение результата функции более точным, нежели ее аргументы слегка удивляет, но такая картина вполне реальна. К примеру, погрешность функции f(x)=sqrt(x) в два раза меньше, чем погрешность ее аргумента.

К сожалению, при увеличении соотношения резисторов и, соответственно, уменьшению коэффициента передачи погрешность задания данного параметра стремится к сумме погрешностей резисторов и уже при k=9 практически от этой суммы не отличается qf=0.9*2*qx=1,8*qx. Гениальное решение сделать секционированный делитель не работает, потому что итоговая погрешность будет суммой погрешностей каждой секции и выигрыш становится эфемерным, и, скорее всего, превратится в проигрыш, хотя последнее утверждение требует доказательств.

Комментарии (11)


  1. NickDoom
    19.04.2024 15:38
    +3

    Поэтому даже восьмибитный COVOX требовал точность резисторов на MSB совершенно космическую. Иначе погрешность на MSB перекрывала несколько LSB (если не несколько десятков).

    А ещё я видел человека, который этим пренебрёг, а потом пытался получить на осциллографе пилообразный импульс, перебирая коды от 0 до 255 :)

    А вот у микрухи-буфера обычно довольно одинаковые параметры выходов — все разом на одной пластине сделаны, разброс в одну сторону. Да и сквозь килоомы их выходные сопротивления не очень уже заметны.


    1. sim2q
      19.04.2024 15:38

      Недавно видел на какой то CMOS микре, ( 74hc595 ?) один выход отличался от всех остальных где-то на 10-15%, но возможно подгорел :)


    1. Crash13
      19.04.2024 15:38
      +1

      COVOX..
      Как же это слово давно слышал. Словно пару жизней назад.

      P.S.: извините за оффтоп. Флэшбеки. Не удержался.


  1. Olegun
    19.04.2024 15:38
    +4

    Ошибка в заголовке это эпатаж?


    1. GarryC Автор
      19.04.2024 15:38

      Случайность, но Ваша версия мне тоже нравится.


    1. Thomas_Hanniball
      19.04.2024 15:38

      Скорее безграмотность, а не эпатаж.


  1. ALexKud
    19.04.2024 15:38

    Когда разобрал датчик давления от йокогава то был весьма удивлён, в схеме 4-20ma отсутствовал микросхема ЦАП. Два больших АSIC на одной стороне платы и много резисторов и конденсаторов на другой стороне с микросхемами в малых корпусах. Похоже на то что ЦАП был сделан на матрице R-2R. Приведённая погрешность этого датчика была сравнима с погрешностью датчика с микросхем ой ЦАП от Analog device. Температурная погрешность была побольше чем у датчика с интегральным ЦАП, но в общем датчик соответствовал своему классу. Резисторы на плате были зелёного цвета, то есть скорее всего 0.01% и 10 ppm температурой погрешности. Как минимум это должен быть 16-ти разрядный ЦАП и соответственно там не менее 32 резисторов должно быть в схеме.


    1. strvv
      19.04.2024 15:38

      когда нет возможности интегрального или решают в лоб - тоже решение, но так себе. зато какая себестоимость, космос!


  1. lgorSL
    19.04.2024 15:38

    Вариант с суммой выглядит подозрительно.

    Если ошибки независимые, то абсолютная ошибка суммы - корень из суммы квадратов ошибок.

    Типа для двух последовательных резисторов сопротивлением по 1кОм и отклонением в +-1 Ом суммарное сопротивление будет 2кОм и с отклонением в корень из двух Ом, а не в два Ома

    Никаких доказательств почему так (и при каких условиях) не помню, но откуда-то из глубин памяти всплыло.


    1. VT100
      19.04.2024 15:38
      +1

      √2 будет среднее отклонение при нормальном распределении отклонений, ЕМНИП.


    1. GarryC Автор
      19.04.2024 15:38

      Как указал VT100, среднее отклонение улучшается, но максимальное (а именно оно нас интересует при инженерных расчетах) сохраняется.