Аналоговое входное значение Arduino колеблется, почему цифровой мультиметр работает, а Arduino не очень

Я измеряю выходное напряжение устройства с выходным сопротивлением 10 кОм с аналоговым входным контактом Arduino. Я вижу то, что ожидал бы от мультиметра, но с Arduino я получаю либо мусор, либо, в лучшем случае, колеблющиеся измерения, которые в среднем примерно соответствуют моим ожиданиям.

Я знаю, что импеданс аналоговых контактов составляет 100 МОм, тогда как на цифровом мультиметре он будет около 10 МОм, поэтому я не ожидал, что Arduino будет бесполезен, пока цифровой мультиметр работает нормально.

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

«сопротивление аналоговых выводов должно быть 100 МОм» более чем маловероятно, особенно когда происходит преобразование. Где вы взяли эту идею?
Это просто то, что я помню из предварительного гугления: здесь

Ответы (3)

Микроконтроллер в Arduino имеет АЦП последовательного приближения.

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

При высоком импедансе источника конденсатор выборки/хранения может не успеть полностью зарядиться, и, таким образом, выборка напряжения не похожа на фактическое напряжение.

Таким образом, импеданс аналогового входного вывода не равен 100 МОм, так как он моментально заряжает конденсатор емкостью 14 пФ с последовательным сопротивлением 1 кОм, и ток может быть на входе или выходе из контакта.

Поэтому импеданс источника должен быть достаточно низким, чтобы зарядить конденсатор выборки/хранения с точностью до 0,5 отсчета АЦП в течение времени выборки.

Предполагая, что MCU на вашем Arduino является AVR, спецификации АЦП говорят, что он лучше всего работает, когда импеданс источника составляет 10 кОм или меньше. Кажется, что ваш датчик имеет высокое выходное сопротивление.

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

То же самое в основном, когда у вас есть фильтрующий конденсатор на входе AVR, чтобы иметь достаточно низкое кратковременное сопротивление переменному току, поэтому вы можете провести одно измерение, не сильно влияя на значение. Но если крышка фильтра заряжается резистором 1 МОм, она по-прежнему будет иметь высокое долговременное сопротивление постоянному току, поэтому потребуется много времени, чтобы зарядить конденсатор до исходного значения, поэтому слишком частые измерения будут медленно разряжать конденсатор фильтра.

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

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

Счетчик будет иметь либо реальный конденсатор, либо его внутреннюю программную симуляцию.

Если бы это было не так, вы бы никогда не получили стабильное число для отображения, и его было бы невозможно прочитать.

Вы можете быть уверены, что это не имеет ничего общего с каким-либо «несоответствием сопротивлений».

Маленькая история....

Когда я учился в колледже, я посещал занятия по КМОП — мы проектировали интегральные схемы и заказывали их изготовление. Моя команда решила сделать «вольтметр на микросхеме» — у него были аналоговые входы, а вывод выводился непосредственно на обычный 7-сегментный светодиодный цифровой дисплей. Когда мы включили его, он прочитал «888». Конечно, мы были очень расстроены, пока кто-то не предложил добавить к входу маленькую заглавную букву. Внезапно это сработало. Происходило следующее: числа подпрыгивали так быстро, все сегменты светодиодов загорались так быстро, что казалось, что они горят постоянно.

Если бы вы каким-то образом могли управлять своим Arduino в среде с нулевым электромагнитным шумом, вы бы получили совершенно стабильные показания без колпачка. Но такой среды не существует. ВСЕГДА будет что-то в какой-то степени возмущать провода. Так что Arduino вам не лжет. Он сообщает о том, что видит на контактах. Просто так получилось, что значение на контактах колеблется. Размещение крышки там сглаживает напряжение, поэтому оно становится достаточно стабильным, чтобы можно было считывать показания.

Тем не менее, вам нужно помочь Arduino, сделав напряжение максимально стабильным. Например, использование туго скрученного провода вместо двух отдельных проводов почти всегда дает улучшение. Шумоподавление и надлежащие методы заземления — это не то, что я мог бы описать в коротком посте, этим можно заполнить учебники. Но если вы просто не можете добиться желаемой стабильности, разместив несколько фотографий вашей установки, вы можете получить полезные отзывы здесь.

Следуя ответу Кайла Б., если вы не используете НАЗЕМНУЮ ПЛОСКОСТЬ, сделайте это.

Я помогаю парню в восприятии/оцифровке переходных процессов музыкальных инструментов.

За последний год он/мы научились снижать порог погрешности с 90 мВ до примерно 0,3 мВ.

  • Иметь конденсатор 0,01 мкФ на входе АЦП.

  • Имейте буфер unity_gain до этого колпачка 0,1 мкФ.

  • Не используйте источники питания Switch_Regulator.

  • Если вы должны использовать SwitchRegs, то платите за лучшую оценку.

  • Используйте наземную плоскость.

  • Вам могут понадобиться дроссели common_mode на проводке VDD/GROUND к SwitchRegs.

  • В VDD к любому буферу ОУ, иметь 10 Ом последовательно и шунтировать 100 мкФ.

Ограничение, которое я использовал, должно было быть выше. Хотя я не уверен, что это такое, он у меня валялся, но я думаю, что это 10-100 мкФ. Крышка 10 нФ ничего не делала. Если бы я знал, сколько разочарований возникнет из-за того, что я не EE, я бы просто стал EE> :( Использование наземной плоскости является проблемой, потому что я точно не знаю, как устроена Arduino.
Я думаю, что однажды сделал некоторые расчеты, что значение конденсатора фильтра должно быть около 33 нФ на входе АЦП AVR, чтобы обеспечить одно стабильное показание в наихудших условиях. И тогда время между показаниями зависит от фактического импеданса источника. Непрерывное считывание по-прежнему будет разряжать конденсатор, если импеданс источника датчика чрезвычайно высок. Таким образом, 10 нФ должны были помочь, если импеданс источника может заряжать его между показаниями.