Я измеряю выходное напряжение устройства с выходным сопротивлением 10 кОм с аналоговым входным контактом Arduino. Я вижу то, что ожидал бы от мультиметра, но с Arduino я получаю либо мусор, либо, в лучшем случае, колеблющиеся измерения, которые в среднем примерно соответствуют моим ожиданиям.
Я знаю, что импеданс аналоговых контактов составляет 100 МОм, тогда как на цифровом мультиметре он будет около 10 МОм, поэтому я не ожидал, что Arduino будет бесполезен, пока цифровой мультиметр работает нормально.
Наконец я обнаружил, что закорачивание выходов конденсатором дает мне то, что я ожидаю, но не совсем понимаю, почему. Резисторы помогли, но я все еще видел колебания, и я предположил, что проблема, по-видимому, связана с импедансом, что виновником было несоответствие сопротивлений.
Микроконтроллер в 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 мкФ.
брахи
глупыйGaN