Безумству храбрых поем мы песню
Недавно случайно узнал о существовании очаровательного девайса MG238 — тестера электронных приборов. Посмотрел пару видео, слегка офигел, нашел сайт автора (кстати проект открытый, я думаю, что производители-китайцы авторские не платят), посмотрел схему и офигел окончательно. То есть измерительная часть представлена 3 управляемыми делителями и ЭТО меряет все, что я увидел в ролике?
Первая мысль была — это фейк, но есть отзывы людей, данный прибор купивших и его использующих, и в основном позитивные. Тогда пришла вторая мысль — почему это не сделал я? На этот вопрос есть множество ответов, главным из которых будет «Старшая сестра не позволила». Для тех, кто в танке — это от присловья «Лень раньше тебя родилась». Ну да ладно, проехали, но все-таки, как ЭТО работает. Исходные коды выложены, схема дана, можно посмотреть, но возникло желание понять самому, раз сделать не успел, то хотя бы повторить (если не в железе, то в голове).
Начнем с, по моему мнению, простейшего — измерения сопротивления. Попытаемся понять логику автора разработки и ее особенности. В схеме прибора href=«www.mikrocontroller.net/wikifiles/f/f0/Schaltplan_transistortester.png» можно выделить 3 измерительные точки, каждая из которых содержит 2 сопротивления 680Ом и 470КОм, подключенные ко входу АЦП и к портам МК. Исходя из схемы, можно предположить следующий алгоритм определения неизвестного сопротивления — подключаем его между двумя измерительными точками, на одну из них подключаем питание через порт МК через резистор, а на другую — землю через порт МК, совмещенный с АЦП. Получаем классический делитель напряжения, для которого справедливо выражение
Ux=Uo*Rx/(Rx+R0), где U0 — напряжение питания, R0 — известное сопротивление, а Rx — исследуемое сопротивление.
Замерив теперь напряжение Ux за входе АЦП, можем рассчитать значение исследуемого сопротивления по формуле
Rx=R0*Ux/(U0-Ux).
Вроде бы все просто, но, как известно дьявол прячется в деталях. Попробуем определить диапазон измеряемых значений, На первый взгляд, диапазон измеряемого сопротивления простирается от 0 до бесконечности, но на самом деле при отдалении сопротивления от известного сопротивления точность измерения будет падать, поэтому хорошо бы было определить предельные значения сопротивлений, измеряемые с некоторой наперед заданной точностью при определенных условиях.
каким образом мы можем определить данный диапазон? Первое, что приходит в голову, это вычислительный эксперимент. Берем Excel, составляем таблицу, вносим формулы и получаем результаты — вполне конкретные числа, которые, в силу линейности по части параметров, легко масштабируются. Но это не наш путь, мы предпочитаем аналитический способ решения (хотя, конечно, в начале так и сделали).
Прежде всего примем, что значения U0 и R0 нам известны абсолютно точно (по крайней мере по отношению к U0 это действительно верно, поскольку мы меряем не реальное значение Ux, а масштабируем его на напряжение опоры, которое совпадает с напряжением U0, так что нас совершенно не интересует его абсолютное значение). В отношении эталонного сопротивления такое предположение выглядит более смелым, оставим его на долю калибровки. При таких предположениях точность полученного результата зависит только от точности измерения Ux, исследованием которого мы и займемся.
Точность выходного результат работы АЦП зависит от многих факторов, мы их все просуммируем и превратим в некий обобщенный показатель ошибки dUx. Конечно, такой подход сильно упрощает задачу, но вполне работоспособен, и для первого приближения, мы можем предположить, что АЦП в МК дает нам 10 точных двоичных разряда. Тогда ошибка преобразования составит dUx=U0/2**10 = U0/1024 (или для данной схемы 5/1024 ~ 5мВ, что абсолютно неважно). Мы же должны только запомнить цифру 1/1024 — единица младшего разряда и соответственно, ошибка измерения.
Исследуем поведение функции Rx(Ux)=R0*Ux/(U0-Ux) при небольших изменениях вблизи Uxo, представленных в виде Ux=Ux0+dUx, в первом приближении получаем Rx(Ux)=Rx(Uxo)+dUx*Rx`(Ux0), учитывая что Rx`(Ux0)=R0*U0/(U0-Ux)**2, находим что dRx=dUx*R0*U0/(U0-Ux0)**2, отсюда получаем qRx=dRx/Rx=dUx/Ux0*U0/(U0-Ux0)=qU*U0/Ux0*U0/(U0-Ux), или, разделив обе части на U0*U0
qRx=qU/(K*(1-K)), где K = Ux0/U0, или qRx/qU = 1/(K*(1-K)).
Обозначив целевое значение через qM, получаем квадратное уравнение
K**2-K+1/qM=0, решением которого являются значения
K1,2=(1+-sqrt((qM-4)/qM))/2.
Для начала увидим, что qM не может быть меньше 4, если мы не рассматриваем всерьез комплексные сопротивления, то есть в самом лучшем случае при K=1/2, то есть сопротивление исследуемого резистора равно сопротивлению эталона, точность измерения сопротивления в 4 раза хуже, чем предельно достижимая точность АЦП. Далее мы видим что по мере отклонения значения K от 1/2 ошибка измерения увеличивается и в пределе уходит в бесконечность. Немного о том почему это происходит. В левой части, при уменьшении измеряемого значения и при фиксированной погрешности измерения относительная погрешность будет неизбежно повышаться, так что здесь все ожидаемо. А вот в правой части дело немного хитрее — обратим внимание на знаменатель U0-Ux. Опять таки при неизменной абсолютной погрешности относительная погрешность всего знаменателя в целом опять таки будет возрастать, что и приводит к потере точности.
Теперь можно и посчитать — зададимся требуемой точностью 1%, учитывая qU~0.1% получаем qM=10 и, соответственно, K1=0.89 K2=0.11. Из этих значений легко получить Rmax/R0=7.87 и Rmin/R0=0.13. То есть, если мы задаемся значением эталонного резистора в 680Ом, мы вышеуказанным методом при заданных условиях с точностью 1% сможем померить резисторы номиналом от 86 ом до 5к3, а для резистора 470к соответствующий диапазон составит от 59к6 до 3700к, очевидно, что вне этих пределов точность будет ниже. Строго говоря, динамический диапазон в таком случае составляет 62, то есть мы должны ставить 1000/62=16 эталонных резисторов на диапазон сопротивлений 1 к 1000. Поскольку мы имеем всего лишь 2 эталонных резистора, то посмотрим, какая точность достижима при перекрывании их диапазонов — если мы задаемся точностью 3%, то сможем измерять с такой точностью резисторы от 24Ом до 13Мом при помощи всего лишь двух эталонных резисторов, причем диапазон для одного резистора составляет 1 к 782 (достаточно близко к 680 к 470000). Возможно, такая точность и была принята в качестве требуемой разработчиком прибора. При этом за пределами данного диапазона точность падает и точность 5% достижима в диапазоне от 14Ом до 22Мом. Учитывая, что обычно измеряются резисторы с точностью 5%, можно считать результат удовлетворительным, хотя хорошим назвать его тоже трудно. С другой стороны, прибор и не позиционируется как измерительный, а как тестер, то есть при точности в 5% вполне можно оценить, исправен ли резистор.
Есть и еще 1 идея, можно расширить диапазон, подключив и второй конец к земле через эталонный резистор. В этом сопротивление эталона увеличится вдвое и верхняя граница диапазона должна тоже увеличится вдвое. Правда при этом мы должны измерять 2 значения напряжения, что ухудшает изначальную точность, надо бы посчитать, что получится, но уже поздно.
Автор: GarryC