Но есть нюанс ...
Поскольку мои уважаемые читатели подавляющим большинством изъявили желание прочитать о точности резистивных схем, у меня не остается выбора и я приступаю к изложению. Следует заметить, что вопросы точности исторически разрабатывались в контексте измерений, а мы будем их рассматривать в обратном направлении, хотя на результаты это никоим образом не повлияет.
Для начала введем основные понятия — предположим, что мы имеем некоторое истинное (или точное) значение произвольного параметра (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)
ALexKud
19.04.2024 15:38Когда разобрал датчик давления от йокогава то был весьма удивлён, в схеме 4-20ma отсутствовал микросхема ЦАП. Два больших АSIC на одной стороне платы и много резисторов и конденсаторов на другой стороне с микросхемами в малых корпусах. Похоже на то что ЦАП был сделан на матрице R-2R. Приведённая погрешность этого датчика была сравнима с погрешностью датчика с микросхем ой ЦАП от Analog device. Температурная погрешность была побольше чем у датчика с интегральным ЦАП, но в общем датчик соответствовал своему классу. Резисторы на плате были зелёного цвета, то есть скорее всего 0.01% и 10 ppm температурой погрешности. Как минимум это должен быть 16-ти разрядный ЦАП и соответственно там не менее 32 резисторов должно быть в схеме.
strvv
19.04.2024 15:38когда нет возможности интегрального или решают в лоб - тоже решение, но так себе. зато какая себестоимость, космос!
lgorSL
19.04.2024 15:38Вариант с суммой выглядит подозрительно.
Если ошибки независимые, то абсолютная ошибка суммы - корень из суммы квадратов ошибок.
Типа для двух последовательных резисторов сопротивлением по 1кОм и отклонением в +-1 Ом суммарное сопротивление будет 2кОм и с отклонением в корень из двух Ом, а не в два Ома
Никаких доказательств почему так (и при каких условиях) не помню, но откуда-то из глубин памяти всплыло.
GarryC Автор
19.04.2024 15:38Как указал VT100, среднее отклонение улучшается, но максимальное (а именно оно нас интересует при инженерных расчетах) сохраняется.
NickDoom
Поэтому даже восьмибитный COVOX требовал точность резисторов на MSB совершенно космическую. Иначе погрешность на MSB перекрывала несколько LSB (если не несколько десятков).
А ещё я видел человека, который этим пренебрёг, а потом пытался получить на осциллографе пилообразный импульс, перебирая коды от 0 до 255 :)
А вот у микрухи-буфера обычно довольно одинаковые параметры выходов — все разом на одной пластине сделаны, разброс в одну сторону. Да и сквозь килоомы их выходные сопротивления не очень уже заметны.
sim2q
Недавно видел на какой то CMOS микре, ( 74hc595 ?) один выход отличался от всех остальных где-то на 10-15%, но возможно подгорел :)
Crash13
COVOX..
Как же это слово давно слышал. Словно пару жизней назад.
P.S.: извините за оффтоп. Флэшбеки. Не удержался.