Стабилизация значений аналогового входа

Алексей К
Offline
Зарегистрирован: 10.12.2020

Здравствуйте! Делаю омметр на STM32 и столкнулся с проблемой шумов на аналоговых портах. АЦП в STM 12-битный, Vref 3.3 V. При подтяжке к земле проскакивают значения до 13, что равняется 0.0104 В, а при подтяжке к линии питания значения могут быть от 4065 до 4095. Для измерительной электроники, а в частности омметра, который я делаю, это крайне серьёзные помехи. Понятное дело что на земле никакого напряжения быть не может, а при подтяжке к линии питания выводиться должно 4095.

Делал такой же "Hello world" аналоговых значений с выводом в терминал и на ATMega328P с 10-битным АЦП. Так же проскакивают 1, 2, 3 на "минусе", да и на "плюсе" тоже не всегда 1023. Пытался решить проблему программно с помощью" "медианного фильтра" (суммировал 100 выборок с аналогового входа и делил на 100) - не помогает. Значения так же скачут. Делал RC фильтр на аналоговый вход из конденсатора на 0.1 мкФ и резистора на 10 кОм. Тоже не помогает. 

Вопрос: как стабилизировать значения с точностью до единицы на аналоговом входе (для 12-битного АЦП) и возможно ли это в принципе?

P.S. Возможно я не с той стороны смотрю на вопрос. Задача стоит измерить сопротивление с точностью до 0.01 Ома, до 10 кОм (то есть сопротивление больше 10 кОм измеряться не будет, но нужно сделать точность 0.01 Ома на 10 кОм).

Принимаются любые советы. Спасибо!

b707
Offline
Зарегистрирован: 26.05.2017

Алексей К пишет:

Задача стоит измерить сопротивление с точностью до 0.01 Ома, до 10 кОм

0.01 Ома на 10КОм - это точность одна миллионная. Для этого нужен АЦП с разрешением в 20-21 бит (потому что миллион - это примерно 2 ** 20)

А вы пытаетесь этого достичь на 10-12 битном АЦП? - даже не смешно...

Теоретическая точность на диапазоне 10 КОМ для АЦП Ардуины +/- 10 Ом, на СТМ - +\- 2.5 Ом. Но это в теории, на практике будет на пару разрядов (то есть в 4 раза) хуже.

Никаких 0.01 Ом на этих АЦП не пригрезится даже во сне

Алексей К
Offline
Зарегистрирован: 10.12.2020

Спасибо! Значит к единицам на аналоговом входе придираться не буду. Есть ли смысл делать такое на мосте Уитстона?

P.S. Делал на делителе напряжения - слишком сильный разброс (1-3 Ома), для меня это критично.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

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

Алексей К
Offline
Зарегистрирован: 10.12.2020

Простите за глупый вопрос, но разве миллиометр измеряет не до 500 Ом? Просто я уже гуглил данную вещь. Мне же ещё нужно не потерять точность на 10 кОм. Спасибо!

rkit
Offline
Зарегистрирован: 23.11.2016

https://www.chipdip.ru/product/3458a

Вот прибор под твои требования. Ценник оправдан - самому сделать в 10 раз дороже.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Однако..

Алексей К
Offline
Зарегистрирован: 10.12.2020

Этот Keysight измеряет с точностью до 8.5 знака. Раз уж на то пошло, Ещё есть Keithley 2000, который измеряет до 6.5 знака, но стоит в 7 раз дешевле. Мне же нужно 2 знака (даже 1.5, но верных было бы отлично) и то до 10 кОм. Неужели такой прибор будет стоить 1 млн. руб?) Сомневаюсь.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Алексей К пишет:

Этот Keysight измеряет с точностью до 8.5 знака. Раз уж на то пошло, Ещё есть Keithley 2000, который измеряет до 6.5 знака, но стоит в 7 раз дешевле. Мне же нужно 2 знака (даже 1.5, но верных было бы отлично) и то до 10 кОм. Неужели такой прибор будет стоить 1 млн. руб?) Сомневаюсь.

Два верных знака до 10 кОм - это единицы и десятки кОм. Т.е. Вам нужно измерять с погрешностью не выше 500 Ом.

Вы уж определитесь, что именно Вам нужно.

b707
Offline
Зарегистрирован: 26.05.2017

Алексей К пишет:

Мне же нужно 2 знака (даже 1.5, но верных было бы отлично) и то до 10 кОм. Неужели такой прибор будет стоить 1 млн. руб?) Сомневаюсь.

Вы в принципе не понимаете, о чем говорите. 8.5 знаков у того измерителя - это на экране :) К точности они имеют очень косвенное отношение.

И, кстати. если считать в знаках, то это считается от первой цифры до последней, а не только после запятой, как думаете вы. Так что для 10К с точностью 0.01 Ом - нужно 7 знаков, а вовсе не 2.

То что вы хотите - это точность 1 ppm (part per million)  А теперь идете по ссылке выше и смотрите даташит - у указанного прибора за лимон рублей точность 2.5 ppm.

Алексей К
Offline
Зарегистрирован: 10.12.2020

Немного не понял ход Ваших мыслей. Получается я должен сдвинуть свои 10 кОм на 2 знака влево, чтобы получилось 1000 кОм или что?

Мне нужно измерить с погрешностью не выше 0.01 Ом. Под 2 знаками, я имел в виду знаки после запятой.

b707
Offline
Зарегистрирован: 26.05.2017

Алексей К пишет:

Мне нужно измерить с погрешностью не выше 0.01 Ом. Под 2 знаками, я имел в виду знаки после запятой.

ну то есть вы думаете, что измерить 1 Ом с точностью 2 знака после запятой (погрешность 1%) и 10К с такой же точностью (погрешность 0.0001 %) - это одинаково просто? :)

Подумайте внимательнее. Вам уже несколько человек намекнули. что 0.01 на шкале в 10К - это не два знака, а семь

Алексей К
Offline
Зарегистрирован: 10.12.2020

Большое спасибо, b707! Теперь понял, что к чему. Да, сделать такую точность на STM или ATMega Мне точно не удастся. А можно ли сделать точность 5 знаков (посчитал с учётом того, что вы написали: 1 Ом при 10 кОм и 0.01 Ом при 100 Ом)?

MaksVV
Offline
Зарегистрирован: 06.08.2015

не зря же в резисторах точность указывается в процентах!!! а не в Омах. Т.е. резистор погрешностью 0,1%  для 10кОм это разброс 10 Ом. 

А у вас вообще дак требования 0,01 Ом. Это ж куда прецизионность такая? 

b707
Offline
Зарегистрирован: 26.05.2017

Алексей К пишет:

А можно ли сделать точность 5 знаков (посчитал с учётом того, что вы написали: 1 Ом при 10 кОм и 0.01 Ом при 100 Ом)?

еще раз перечитайте мое первое сообщение - и ответ будет очевиден. Конечно нет.

На Атмеге вы в лучшем случае получите 3 знака точности, на СТМ - 3.5.

Алексей К
Offline
Зарегистрирован: 10.12.2020

Да, согласен с Вами. Нужно было внимательнее изучить вопрос со знаками) Я ответил b707, что при моей задаче, точность должна быть 5 знаков или 0.01 %. Если такое нельзя реализовать на микроконтроллере, то точность максимально приближенную к ней, но не больше 0.1 %.

Алексей К
Offline
Зарегистрирован: 10.12.2020

Понятно, что при глупом чтении с пина я такого не получу. Но если использовать тот же самый мост Уитстона? Насколько я знаю, с помощью него можно довольно точно узнать неизвестное сопротивление. Так же есть идея использовать АЦП с большей битностью, как Вы писали выше (например ADC1256). Но не будет ли шуметь аналоговый вход на этом АЦП?

nik182
Offline
Зарегистрирован: 04.05.2015

Конечно будет шуметь. Для устранения используют алгоритмы сглаживания. Это когда из многих измерений вычисляют наиболее вероятное значение. Некоторые даже умудряются повысить разрядность АЦП математическими методами. При этом увеличивается время получения измеренного значения.  

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Алексей К пишет:

Понятно, что при глупом чтении с пина я такого не получу. Но если использовать тот же самый мост Уитстона? Насколько я знаю, с помощью него можно довольно точно узнать неизвестное сопротивление. Так же есть идея использовать АЦП с большей битностью, как Вы писали выше (например ADC1256). Но не будет ли шуметь аналоговый вход на этом АЦП?

Алексей, чувствуется, в этой теме Вы узнали много для себя нового.

Настоятельно рекомендую еще раз перечитать и хорошенько обдумать сообщение №5.

Алексей К
Offline
Зарегистрирован: 10.12.2020

Вот, я про это и писал, что использовал "медианный фильтр", но шума меньше не стало (даже при 100 выборках). Возможно, это потому, что сами значения слишком сильно скачут. Помню, dimax писал в одной ветке, что "это аналоговый мир, и тут одним программированием не отделаться". Конечно, сглаживать значения математикой я тоже буду, но хочется ещё как-то уменьшить разброс "физически", с помощью радиокомпонентов. Спасибо!

Алексей К
Offline
Зарегистрирован: 10.12.2020

Перечитал и обдумал, требования снизились до точности в 0.1 %) Всё же приходит с опытом.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

nik182 пишет:

Некоторые даже умудряются повысить разрядность АЦП математическими методами. При этом увеличивается время получения измеренного значения.  

Это только разрядность.

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

Если у нас, скажем, 12-разрядный АЦП, то реально на нем достоверных только 9-10 разрядов. После математической обработки мы можем получить, скажем, 16 разрядов, но достоверными из них все равно останутся 9-10.

Алексей К
Offline
Зарегистрирован: 10.12.2020

Получается, что дребезг 12-битного АЦП в 3-8 значений это нормально и от этого никуда не деться?

P.S. Значения я имею в виду от 4086 до 4095 при подтяжке к линии питания, например.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Алексей К пишет:

Перечитал и обдумал, требования снизились до точности в 0.1 %) Всё же приходит с опытом.

Тогда Вам нужно еще, минимум, пару раз перечитать и обдумать.

Алексей К
Offline
Зарегистрирован: 10.12.2020

Вы хотите сказать, что осуществить такое на микроконтроллере в принципе нельзя?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Алексей К пишет:

Получается, что дребезг 12-битного АЦП в 3-8 значений это нормально и от этого никуда не деться?

Давайте разделять шум и точность. 

У меня, например, на 10-разрядном АЦП разряд либо "стоит как вкопанный", либо "мигает" между двумя соседними значениями. Правда, это для конкретной схемы и конкретных требований. То есть, казалось бы, можно вытащить 11 разрядов ("стоит" - целое, "мигает" - полуцелое), что дает "шаг" в 0.05%, но абсолютная точность все равно в районе 8 разрядов, т.е. погрешность порядка 0.5%.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Алексей К пишет:

Вы хотите сказать, что осуществить такое на микроконтроллере в принципе нельзя?

Можно, но не на встроенном в микроконтроллер АЦП и не с Вашим опытом.

Алексей К
Offline
Зарегистрирован: 10.12.2020

1. Что касается Вашего примера с 10-разрядным АЦП. Сам омметр я делаю на STM32 c 12-разрядным АЦП, так что доставать 11 бит, там и не нужно. Проблема в другом. У меня разряд, как Вы выразились, "мигает" и далеко не между соседними значениями, разница там порядка 10. Так вот, как убрать этот разброс с помощью радиоэлектронных компонентов и можно ли это сделать вообще? Или это специфика встроенных в МК АЦП и обязательно нужен внешний АЦП типа ADS?

2. Да, опыта мало, согласен. Но, как говорится, было бы желание. А оно есть. Мне же ничто не мешает начать изучать эту обширную тему, верно? Я же на форум пришел не за готовым решением, а за советом от людей, которые в этом деле профессионалы. До этого я прочитал все статьи на форуме, связанные с измерением сопротивления с помощью МК, но их точность меня не устраивала.

Спасибо!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Алексей, уже 28-е сообщение, а до сих пор не выложены ни скетч, ни схема. Обсуждать нечего.

Далее: "убрать разброс" не может быть самоцелью. Да даже если бы и было, без схемы обсуждать нечего.

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

Отдельный вопрос - источник опорного напряжения. От него также существенно зависит результат.

Но пока нет схемы, все эти вопросы покрыты мраком.

Так что ждем схему.

Алексей К
Offline
Зарегистрирован: 10.12.2020

"Скетч", который читает значение с аналогового и пишет его в терминал, выкладывать просто глупо, ИМХО. Такие же дела обстоят и со схемой (потенциометр, одна ножка к земле, другая к 5V, средняя к A0. Ничего более).

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

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

b707
Offline
Зарегистрирован: 26.05.2017

Алексей, Вы все равно не догоняете.

Схема нужна, причем ваша реальная измерительная схема, а не "допустим я взял потенциометр..."

В схеме "измерения потенциометра" единственным реально измеряемым параметром является угол поворота ротора - и если вам нужен именно он, то проще взять энкодер :)

Если же, к примеру, вместо потенциометра у вас делитель из двух резисторов - один постоянный, а другой, скажем терморезистор - то на точность в первую очередь будет влиять класс точности резисторов и стабильность напряжения питания. а уже во второую (если не в пятую) - разброс значений АЦП.

Это просто как пример, что обсуждать "точность вообще" - без схемы и скетча - абсолютно бессмысленно.

 

Алексей К
Offline
Зарегистрирован: 10.12.2020

Хорошо, я Вас понял. Завтра будет скетч и схема в полном объёме) Со схемой ещё проблема в том, что я не совсем понимаю, как лучше измерить сопротивление. На данный момент это делитель из двух резисторов, но в интернете и здесь на форуме пишут про мост Уитстона. Поэтому на данный момент приложить смогу только схему на делителе. Спасибо!

b707
Offline
Зарегистрирован: 26.05.2017

Пока будете рисовать схему, подумайте вот о чем. Если вы хотите получить стабильные показания - нужно убирать любые помехи. Скажем, 2 единицы Ацп на 12 разрядах это примерно точность 0.05%
Напряжение питания СТМ =3.3в. , 0.05% от этого - менее 0.002в
Вы уверены, что источник питания, которым вы пользуетесь - выдает 3.3 в с точностью лучше 2 мВ? Если нет - о точности можно и не мечтать
На практике, если у вас обычный БП от какой-то бытовой техники - там пульсации могут быть 20-30 мв, а если зарядник от мобильника - и все 50

Это опять лишь пример

Алексей К
Offline
Зарегистрирован: 10.12.2020

Вообще, я запитывал от разных источников питания: брал БП на 5 вольт, стабилизировал до 3.3 и подавал на STM; запитывал по usb и стабилизатором на usb-uart адаптере гасил до 3.3; так же питал от программатора ST-Link (там тоже 5v гасятся до 3.3). Ну, и наконец я запитывал от повербанка через usb на отладочной плате, где мои 5v стабилизировались до 3.3V. Во всех случаях значения с аналогового входа были нестабильны.

P.S. На usb у меня было 4.3 В, но 3.3 В было всегда стабильно. Не думаю, что это как то скажется на замерах.

nik182
Offline
Зарегистрирован: 04.05.2015

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

Алексей К
Offline
Зарегистрирован: 10.12.2020

nik182, большое спасибо за дельный совет! Я действительно как-то не обратил внимания на этот раздел в даташите, нужно будет подробнее изучить. Плата-то у меня как раз китайская...

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Алексей К пишет:

Плата-то у меня как раз китайская...

При покупке китайской платы с STM32 на али за копейки есть близкий к 100% шанс получить вместо родного STM его китайский клон. А там возможны любые чудеса. Хотя некоторые клоны работают вполне прилично.

Алексей К
Offline
Зарегистрирован: 10.12.2020

Да, я перед покупкой про это читал. Но чип у меня оригинальный, даже с адресацией возиться не пришлось, из их фирменной ide всё шьётся.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Алексей К пишет:

Да, я перед покупкой про это читал. Но чип у меня оригинальный, даже с адресацией возиться не пришлось, из их фирменной ide всё шьётся.

То что чип "шьется из их фирменной ide" вовсе не гарантирует его аутентичность.

Алексей К
Offline
Зарегистрирован: 10.12.2020

Это я привел в пример, чип проверял по маркировке.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Алексей К пишет:

Это я привел в пример, чип проверял по маркировке.

Это, опять же, ничего не гарантирует. Вот два чипа. Один из них клон. Угадай какой?

Bad fake

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

0,1% на столе с китайской платой и таким же блоком питания в широком диапазоне? Да не смешите мои тапки! Вам и процент за счастье.

Вы думаете ценники на серьезные приборы от жадности производителя, а размеры от его тупости?

Почитайте про методы устранения электромагнитных помех (а у нас все вокруг фонит), а еще в сети питания творится черти что на высоких частотах.

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

Алексей К
Offline
Зарегистрирован: 10.12.2020

Хорошо, поиграю в угадайку. Предположим, клон слева (мне на это намекает надпись chn в четвёртой строке и само качество маркировки + я такие видел на али).

Алексей К
Offline
Зарегистрирован: 10.12.2020

Да, я уже понял что начинать нужно именно со схемы питания. Как думаете, если собрать из хороших деталей с чип и дипа цепь питания микрухи по схеме из даташита и подключить к такому же крутому лабораторнику (не из китая) результат будет лучше?

У меня цель не стоит сделать слишком дёшево или купить готовый прибор для измерения сопротивления. Я это делаю на уровне технологии для дальнейшего использования в других проектах. 0.1 % это точность хорошего мультиметра за 5-7 т.р.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Алексей К пишет:

"Скетч", который читает значение с аналогового и пишет его в терминал, выкладывать просто глупо, ИМХО. Такие же дела обстоят и со схемой (потенциометр, одна ножка к земле, другая к 5V, средняя к A0. Ничего более).

Если Вы считаете,что обладаете достаточной квалификацией, чтобы судить, что глупо, а что нет - разбирайтесь сами. Зачем обращаться на форум. А если обращаетесь на форум, будьте любезны следовать его правилам, а не заявлять, что это глупо.

Цитата:

А моя проблема аппаратного характера.

Но при этом не имеет никакого отношения к схеме, поэтому схему выкладывать не нужно. Блестящая логиа!

Алексей К
Offline
Зарегистрирован: 10.12.2020

Я имел в виду, что схема стандартная и слишком простая. Во всяком случае, я уже осознал свою ошибку, поэтому схема и скетч сегодня будут.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Алексей К пишет:

Вообще, я запитывал от разных источников питания: брал БП на 5 вольт, стабилизировал до 3.3 и подавал на STM; запитывал по usb и стабилизатором на usb-uart адаптере гасил до 3.3; так же питал от программатора ST-Link (там тоже 5v гасятся до 3.3). Ну, и наконец я запитывал от повербанка через usb на отладочной плате, где мои 5v стабилизировались до 3.3V. Во всех случаях значения с аналогового входа были нестабильны.

И во всех случаях ваши "3.3V" близко не напоминали прецизионный источник опорного напряжения. Поэтому говорить о какой-либо стабильности бессмысленно.

Цитата:

P.S. На usb у меня было 4.3 В, но 3.3 В было всегда стабильно.

?!?

Откуда стабильность?

Цитата:

Не думаю, что это как то скажется на замерах.

А думать от Вас и не требуется. Если обратились на форум с вопросами - делайте, что говорят. Иначе - решайте свои вопросы самостоятельно.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Алексей К пишет:

 0.1 % это точность хорошего мультиметра за 5-7 т.р.

От 50-70 т.р., Вы хотите сказать? Или давайте пример (только не NO name, а нормального производителя, который отвечает за свои данные)

Алексей К
Offline
Зарегистрирован: 10.12.2020

Цитата:

?!?

Откуда стабильность?

Стабильность на 3.3 В и 4.3 В на usb тоже были стабильно. Возможно, у меня просто такое питание выдаёт usb порт компа.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Алексей К пишет:

Я имел в виду, что схема стандартная и слишком простая.

Стандартных схем не бывает. Читать здесь: http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/pesochnitsa-dlya-vsekh-novichkov

Практика показывает, что новички способны накосячить и в "слишком простых" схемах. Опять же, какая из тысяч "слишком простых" схем используется? Нам самим следует гадать?

Цитата:

Во всяком случае, я уже осознал свою ошибку, поэтому схема и скетч сегодня будут.

Они должны были быть в первом посте.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Алексей К пишет:

Цитата:

?!?

Откуда стабильность?

Стабильность на 3.3 В и 4.3 В на usb тоже были стабильно. Возможно, у меня просто такое питание выдаёт usb порт компа.

Повторю вопрос: откуда стабильность?

Вот Вы хотите 0.1% погрешности. Приведите точное значение опорного напряжения. Хотя бы с точностью до 1 мВ.

Каков уровень пульсации опорного напряжения? Тоже с точностью до 1 мВ.

Ну и сообщите, при помощи каких приборов получены эти цифры.