Настал вечер и Шехрезада продолжила позволенные речи


Продолжим рассуждения на тему, как бы мы делали прибор MG328. На очереди у нас измерение конденсаторов, которое должно быть сложнее, чем измерение резисторов, но неожиданно оказывается чуть ли не проще. Но прежде, чем перейти к рассмотрению собственно конденсаторов, немного слов об измерениях в МК системах как таковых.

Поводом к последующему тексту стало прочтение описания прибора, сделанное его создателем (конечно в переводе, а не на языке оригинала, если английский технический для меня почти родной, сказать то же самое про немецкий в любом варианте я не могу). И, честно говоря, был слегка ошарашен некоторыми перлами, относящимися к точности (при всем уважении к автору). Чтение форумов по данной тематике показало, что непонимание сути процесса измерения и параметров, влияющих на точность измерения, является характерным для молодых инженеров.
Сейчас в ВУЗах не читают курса по измерениям? Или его все дружно прогуливают? Кстати, заметил у своих молодых коллег (продолжающих обучение или недавно его закончивших)), на мой взгляд, не вполне обоснованное мнение о том, что они лучше знают, какие из преподаваемых предметов им пригодятся в будущей профессиональной деятельности, чем составители программы обучения. На мой взгляд, это опасное заблуждение, и практика (которая, как известно критерий истины) на моей стороне. Конечно и мы, будучи студентами, частенько не понимали, зачем нам, будущим инженерам, читают тот или иной абсолютно ненужный (с нашей точки зрения) предмет. И если для некоторых из них(предметов) такое мнение оказалось правильным, в общем и целом с высоты своего сегодняшнего опыта должен со всей ответственностью заявить — мы были не правы. Есть замечательная поговорка «Лишнего знания не бывает», и она применима как раз к этой ситуации. На этом закончу лирическое отступление и возвращаюсь к точности измерений в МК системах при различных условиях.

Считаю своим долгом внести ясность (конечно, всего лишь толику ее) в этот вопрос.
Для начала рассмотрим предложения участников форума по повышению точности данного прибора (некоторые из них даже реализованы — правда сравнительные результаты не доступны, было бы забавно посмотреть). Поскольку применяемые МК допускают использование нескольких видов опорного напряжения для АЦП (напряжение питания, внутренний источник, внешний источник) и молодые инженеры где то слышали, что 2 последних варианта позволяют получить более точные данные, нежели первый, самое безобидное предложение — сменить тип опоры, поскольку для них очевидно, что применение питания в качестве опоры объясняется исключительно желанием сэкономить на внешних компонентах. Совершенно по ту сторону добра и зла находятся предложения поделить напряжение питания, Действительно, напряжение питания в данной схеме определяется линейным стабилизатором и не может считаться точным (смотрите характеристики стабилизатора). Но еще менее точным является внутреннее напряжение опоры (смотри характеристики МК), поэтому его использование требует процедуры калибровки при изготовлении (хотя стабильность внутреннего источника неплоха). Поэтому бОльшая часть предложений сводится к применению внешнего источника опорного напряжения на стабилитроне либо на источнике напряжения (привет, 431).
Почему же эти предложения неверны и могут только ухудшить точность измерений? Все дело в нюансах. Для начала позволю себе напомнить основную формулу работы АЦП
N=Ux/U0*Nmax (1),
где N — полученное значение, Ux — измеряемое напряжение, Uo — опорное напряжение, Nmax — максимальное значение результата (как правило 2**количество разрядов-1). Примем во внимание, что в качестве исследуемого напряжения используется часть напряжения питания (это определяется методикой), что запишем как Ux=K*Ucc, причем K<=1. Для случая с питанием в виде опоры выражение (1) примет вид
N=Ucc*K/Ucc*Nmax = K*Nmax
и (при условии, что Nmax=const) мы видим, что преобразование точное и не зависит от точности задания питания. А вот для случая с внешним либо внутренним опорным напряжением, которое слабо связано с напряжением питания (это действительно так при определенных условиях), выражение (1) принимает вид
N=Ucc*K/Uo*Nmax = K*Nmax*(Ucc/U0),
откуда нетрудно видеть, что даже если примем U0=const, то код зависит от точности задания Ucc, от которого мы и хотели избавиться (забавно, не правда ли), то есть точность измерений упала. Вот мы и пришли туда, куда приводит дорога благих намерений.
Почему так получилось? Потому что использование внешней высокостабильной опоры позволяет увеличить абсолютную точность измерения относительно некоторого внешнего эталона (который хранится в палате мер и весов), но в нашем случае это совершенно не нужно. Нас интересует отношение двух напряжений, а вот точность измерения его ухудшается. Если бы мы смогли и коммутировать на исследуемую схему опорное напряжения, то ситуация с точностью не ухудшилась бы (хотя и не улучшилась), но мы этого сделать не можем (ну, по крайней мере, я точно не смогу без внешних элементов). Вот когда мы будем измерять параметры диодов (а мы будем это делать), внешняя опора улучшит результаты (и то не для всех параметров), а для основной массы измерений только будет хуже. В общем, ситуация напоминает старый анекдот с финальной фразой «Странно, только вчера точно так же Гиви из колодца вытащили».

Ну а вторая часть теоретических рассуждения связана с пассажем из описания прибора (придется привести большую цитату)
Размерность в mV можно получить, если суммировать результаты 22 показаний, сумму умножить на 2 и разделить на
9. Таким методом максимальное значение получится 1023·22·2/9 = 5001, что идеально соответствует нужной размерности измеренных значений напряжения в mV.. Кроме того дополнительно была надежда, что увеличение, от передискретизации, разрешения АЦП может способствовать улучшению считанного с АЦП напряжения, как описано в AVR121 [5]. В оригинальной версии функция ReadADC накапливается результат 20 измерений АЦП и делится потом на 20, так что результат равен оригинальному разрешению АЦП. Т.е., по этому пути повышение разрешения АЦП невозможно.

Как говорится, читал и плакал, и ведь автор прибора совсем не дурак, откуда такие предположения? Для начала потрясает своей логикой предположение о том, что если взять сумму 20 измерений и поделить на 20, то точность остается неизменной, а вот если взять сумму 22 измерений и поделить на 9 то она да, таки может возрасти. Может, конечно, но не более, чем если взять 20 значений и поделить на 10 (но ведь это почему то не сделано в оригинале?), да и то при строго определенных условиях, о чем в AVR121 и говорится и нет никакой уверенности, что эти условия у нас соблюдаются. Но ладно это заблуждение безвредное, причем он в нем не был до конца уверен. Но в любом случае — зачем нам милливольты? Во всех расчетных соотношения используется отношение напряжений, которое нам дает чистое значение с АЦП (где то в цепочке расчетов надо будет учесть 1000/1024 и все). Но предложение взять 22 вместо 20 заслуживает отдельного рассмотрения. Я пока не смотрел код, но если предположить, что измерение занимает 1 мсек (или осуществляется с таким интервалом), то 20 измерений несомненно предпочтительнее для усреднения, чем 22, поскольку позволяют ослабить влияние помехи частотой 1/(20*1мс)=50 Гц, которая является определяющей в окружающем нас мире. Я бы еще понял 16, если вокруг вас 60 Гц (вроде так в США), к тому же делить на 16 легко, но 22(!), просто чтобы удобнее было пересчитывать в милливольты, которые нам совершенно не нужны — это за пределами моего понимания. Конечно, это все придирки и, скорее всего, влиянием сетевой помехи можно пренебречь и 20 измерений взяты из других соображений, но вот так с бухты-барахты и что менять — сильно.

Ну да ладно, проехали. Теперь можно перейти собственно к теме обсуждения — измерению конденсаторов. У конденсатора есть определяющий параметр — емкость, вот с нее и начнем. Есть еще множество прочих параметров, среди которых ESR и тангенс потерь, которые этим прибором вроде меряются, но на эту тему порассуждаем после (я специально не читаю описание в тех местах, которые сам пока не придумал). Итак, мы начинаем измерять емкость. Основная идея проста — начинаем заряжать конденсатор известным напряжением в течении определенного времени, затем смотрим напряжение на нем и путем несложных (но трудоемких для МК) преобразований получаем величину емкости. Основная формула процесса зарядки описывается выражением (при условии начального напряжения равным нулю)
Ux(t)=Uo*(1-exp(-t/RoCx)),
где Uo — напряжение заряда, Ro — сопротивление, через которое заряд осуществляется, Cx — исследуемое напряжение, а t — (внезапно)время. Тогда в некоторый момент времени tx мы получаем
Ux=Uo*(1-exp(-tx/RoCx), откуда
Сx=tx/(Ro*ln(-U0/(Ux-U0))) (что то не могу я из Latex извлечь красивую формулу, подскажите в личку как, плиз).
Оставим пока за скобками сам процесс вычислений и проанализируем формулу с точки зрения точности, для чего насколько ее перепишем
Сx=tx/(Ro*ln(-1/(K-1))), где K = Ux/Uo
Считая Ro абсолютно точным, вы видим, что точность определяется точностью измерения временем с коэффициентом 1, а вот с точностью измерения отношений напряжений дело посложнее. Чувствительность по параметру K представляет собой выражение
1/(ln(1-x)**2*x-ln(1-x)**2), которое не очень приятно в аналитике. Тем не менее при помощи Latex строим график этого выражения и видим, что значения K больше 0.97 совершенно неприемлемы (кто бы сомневался), но и значения ниже 0.35 тоже не радуют в плане точности (вот тут как то не очень понятно, надо подумать). Более того, и в этом диапазоне чувствительность составляет от 5 до 2, то есть точность мы по отношению к точности АЦП неизбежно теряем.
Сам способ измерения предполагает два метода — либо мы заряжаем конденсатор до достижения определенного значения и измеряем время, за которое это осуществлено, либо заряжаем конденсатор определенное время и измеряем достигнутое значение напряжения.
Первый способ требует наличия компаратора, зато позволяет существенно упростить вычисления, если мы примем уровень сравнения в Ux=Uo*(1-1/e), тогда Cx=tx/Ro — несложно рассчитать. Рассмотрим диапазон измеряемых емкостей при таком варианте. При заданном Ro ограничения сверху на первый взгляд нет — любой конденсатор рано или поздно зарядится (если забыть про токи утечки), но существует желание получать результаты в приемлемое время. Если мы зададимся максимальным временем измерения в tmax, то Cx<=tmax/Ro, что для принятых в приборе значений сопротивлений составит
Cx<=1/680=1.5*10**-3(F/сек), то есть для 2 секунд — 3000мкф и т.д. Если измеряемые значения выходят за данный предел, то можно применить второй способ, то есть если за отведенное время конденсатор не зарядился до требуемого значения, мы можем измерить полученное значение (поскольку конденсатор явно большой, за время измерения напряжение на нем не должно упасть существенно) и определить емкость по формуле
Сx=to/(Ro*ln(-1/(K-1))), где K = Ux/Uo.
Маловероятно, чтобы мы смогли реализовать на 8 разрядном МК с небольшой памятью программ прямой расчет по этой формуле (кстати еще аргумент в пользу MSP430), поэтому применим для расчетов кусочно-линейную аппроксимацию. Учитывая, что нам нежелательно выходить за пределы значения K в 0.3, получим верхнее значение для емкости 20000 мкф.

А вот минимальное значение измеряемой емкости определяется желаемой точностью измерения, которая в данном случае определяется точностью измерения времени. Приняв, что абсолютная погрешность измерения времени равна частоте тактового генератора МК, и задавшись требуемой точностью, можно получить нижнюю границу измеряемых значений
Cx>=tt*(1-q)/Ro,
где tt — период тактовой частоты МК, q — требуемая точность. Для достижения точности 1% при частоте 1МГц и принятых резисторах получим Cx>=1e-6*(1-0.01)/470e3=212 пФ. Если же принять частоту 8 МГц и включить 2 резистора последовательно, то получим Cx>=0.125e-6(1-0/01)/470e3/2 = 13пФ. Для точности 5% минимальное значение уменьшится до2,5 пФ, что вполне приемлемо в практическом смысле. Обратим внимание на включение двух резисторов последовательно. В этом случае мы выигрываем в точности определения времени в 2 раза, но надо понимать, что мы проигрываем в точности определения К в 2 раза, тем не менее выигрыш будет, поскольку погрешности не перемножаются, а складываются. Для конденсаторов меньшей емкости можно придумать более сложные алгоритмы с использованием ШИМ модуляции, но нам это совершенно не надо, все равно при таких малых номиналах ошибка будет превосходить любые приемлемые цифры.

Кстати, следует обратить внимание еще на один момент, а именно погрешность тактовой частоты. Судя по схеме, используется встроенный тактовый генератор, который отличается большим разбросом значений (десятки процентов без калибровки, единицы с ней) и никакой стабильностью как по напряжению, так и по температуре. Поэтому использование внешнего кварцевого резонатора является, на мой взгляд, насущной необходимостью с точки зрения обеспечения точности измерений.
Итак общий вывод — данная схема прибора с предложенным алгоритмом позволит определять емкость в диапазоне от 2,5пФ до 20 мФ с точностью 5%. Исходя из того, что обычно конденсаторы имеют разброс в 20%, задачу следует считать решенной.
Уровень изложения материала — руководство для автора

Проголосовало 29 человек. Воздержалось 19 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

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


  1. Rumlin
    11.09.2015 15:07
    +4

    Уровень изложения материала — руководство для автора

    Минус — отсутствие форматирования.
    Формулы точно нужно вынести за абзац и лучше картинкой из редактора формул.


    1. KvanTTT
      11.09.2015 16:01
      +1

      А это все потому что хабр не поддерживает вставку формул…


      1. Rumlin
        11.09.2015 17:38

        Может не просят.


        1. KvanTTT
          11.09.2015 17:49

          Ага, не просят. Вы поверхностно читаете хабр, если не замечали такого пожелания. Только я уже несколько раз просил, не говоря уже об остальных.


          1. Rumlin
            11.09.2015 18:03

            Я заметил в статьях формулы только в картинках. Комментариев не видел к администрации.
            Попробовал сейчас MathML — у меня отобразилось некорректно, отсутствует дробь. тоже самое пример wikiprdia


  1. Meklon
    11.09.2015 21:43

    Вопрос для меня актуальный. Если мы делаем много измерений напряжения через АЦП, при этом процесс за время измерения условно одинаков. Даст ли нам усреднение приближение к истинному значению? Ведь по идее наши показания колеблются вокруг некой величины.


    1. Alexeyslav
      11.09.2015 23:42

      Все равно ограничены разрешающей способностью АЦП. Усреднение позволяет избавится от шума… повышать разрядность таким способом не выйдет.
      Вот представь себе что измеряемая величина где-то между значениями младшего разряда АЦП, переключаться на соседнее значение будет только под воздействием шума. Но мы не может отделить шум АЦП от шума в сигнале или наводок на измерительные цепи. т.е. даже просуммировав 1000 значений мы не может с уверенностью сказать где пролегает истинное значение измеряемой величины между разрядами. может помеха была не белым шумом…

      Но если у вас есть контрольный прибор с требуемым уровнем точности чтобы проверить работу этого алгоритма… то почему бы и не попробовать? В специфических условиях может прокатить.

      Я так понимаю, 24-битных АЦП с весов не хватает разрядности?


      1. Meklon
        12.09.2015 00:31

        АЦП хороший для моих целей. ADS1115 16-bit. Сигнал шумит немного. Хотел уточнить именно про него.


    1. GarryC
      14.09.2015 13:37

      При определенных условиях даст. Как раз в AVR121 об увеличении точности при передискретизации неплохо сказано.