Стабилизация значений аналогового входа
- Войдите на сайт для отправки комментариев
Здравствуйте! Делаю омметр на 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 кОм).
Принимаются любые советы. Спасибо!
Задача стоит измерить сопротивление с точностью до 0.01 Ома, до 10 кОм
0.01 Ома на 10КОм - это точность одна миллионная. Для этого нужен АЦП с разрешением в 20-21 бит (потому что миллион - это примерно 2 ** 20)
А вы пытаетесь этого достичь на 10-12 битном АЦП? - даже не смешно...
Теоретическая точность на диапазоне 10 КОМ для АЦП Ардуины +/- 10 Ом, на СТМ - +\- 2.5 Ом. Но это в теории, на практике будет на пару разрядов (то есть в 4 раза) хуже.
Никаких 0.01 Ом на этих АЦП не пригрезится даже во сне
Спасибо! Значит к единицам на аналоговом входе придираться не буду. Есть ли смысл делать такое на мосте Уитстона?
P.S. Делал на делителе напряжения - слишком сильный разброс (1-3 Ома), для меня это критично.
Совет не колхозить не пойми чего ,а взять готовый проект от опытного разработчика. Гугль на запрос "миллиомметр схема" даст кучу вариантов на любой вкус
Простите за глупый вопрос, но разве миллиометр измеряет не до 500 Ом? Просто я уже гуглил данную вещь. Мне же ещё нужно не потерять точность на 10 кОм. Спасибо!
https://www.chipdip.ru/product/3458a
Вот прибор под твои требования. Ценник оправдан - самому сделать в 10 раз дороже.
Однако..
Этот Keysight измеряет с точностью до 8.5 знака. Раз уж на то пошло, Ещё есть Keithley 2000, который измеряет до 6.5 знака, но стоит в 7 раз дешевле. Мне же нужно 2 знака (даже 1.5, но верных было бы отлично) и то до 10 кОм. Неужели такой прибор будет стоить 1 млн. руб?) Сомневаюсь.
Этот Keysight измеряет с точностью до 8.5 знака. Раз уж на то пошло, Ещё есть Keithley 2000, который измеряет до 6.5 знака, но стоит в 7 раз дешевле. Мне же нужно 2 знака (даже 1.5, но верных было бы отлично) и то до 10 кОм. Неужели такой прибор будет стоить 1 млн. руб?) Сомневаюсь.
Вы уж определитесь, что именно Вам нужно.
Мне же нужно 2 знака (даже 1.5, но верных было бы отлично) и то до 10 кОм. Неужели такой прибор будет стоить 1 млн. руб?) Сомневаюсь.
Вы в принципе не понимаете, о чем говорите. 8.5 знаков у того измерителя - это на экране :) К точности они имеют очень косвенное отношение.
И, кстати. если считать в знаках, то это считается от первой цифры до последней, а не только после запятой, как думаете вы. Так что для 10К с точностью 0.01 Ом - нужно 7 знаков, а вовсе не 2.
То что вы хотите - это точность 1 ppm (part per million) А теперь идете по ссылке выше и смотрите даташит - у указанного прибора за лимон рублей точность 2.5 ppm.
Немного не понял ход Ваших мыслей. Получается я должен сдвинуть свои 10 кОм на 2 знака влево, чтобы получилось 1000 кОм или что?
Мне нужно измерить с погрешностью не выше 0.01 Ом. Под 2 знаками, я имел в виду знаки после запятой.
Мне нужно измерить с погрешностью не выше 0.01 Ом. Под 2 знаками, я имел в виду знаки после запятой.
ну то есть вы думаете, что измерить 1 Ом с точностью 2 знака после запятой (погрешность 1%) и 10К с такой же точностью (погрешность 0.0001 %) - это одинаково просто? :)
Подумайте внимательнее. Вам уже несколько человек намекнули. что 0.01 на шкале в 10К - это не два знака, а семь
Большое спасибо, b707! Теперь понял, что к чему. Да, сделать такую точность на STM или ATMega Мне точно не удастся. А можно ли сделать точность 5 знаков (посчитал с учётом того, что вы написали: 1 Ом при 10 кОм и 0.01 Ом при 100 Ом)?
не зря же в резисторах точность указывается в процентах!!! а не в Омах. Т.е. резистор погрешностью 0,1% для 10кОм это разброс 10 Ом.
А у вас вообще дак требования 0,01 Ом. Это ж куда прецизионность такая?
А можно ли сделать точность 5 знаков (посчитал с учётом того, что вы написали: 1 Ом при 10 кОм и 0.01 Ом при 100 Ом)?
еще раз перечитайте мое первое сообщение - и ответ будет очевиден. Конечно нет.
На Атмеге вы в лучшем случае получите 3 знака точности, на СТМ - 3.5.
Да, согласен с Вами. Нужно было внимательнее изучить вопрос со знаками) Я ответил b707, что при моей задаче, точность должна быть 5 знаков или 0.01 %. Если такое нельзя реализовать на микроконтроллере, то точность максимально приближенную к ней, но не больше 0.1 %.
Понятно, что при глупом чтении с пина я такого не получу. Но если использовать тот же самый мост Уитстона? Насколько я знаю, с помощью него можно довольно точно узнать неизвестное сопротивление. Так же есть идея использовать АЦП с большей битностью, как Вы писали выше (например ADC1256). Но не будет ли шуметь аналоговый вход на этом АЦП?
Конечно будет шуметь. Для устранения используют алгоритмы сглаживания. Это когда из многих измерений вычисляют наиболее вероятное значение. Некоторые даже умудряются повысить разрядность АЦП математическими методами. При этом увеличивается время получения измеренного значения.
Понятно, что при глупом чтении с пина я такого не получу. Но если использовать тот же самый мост Уитстона? Насколько я знаю, с помощью него можно довольно точно узнать неизвестное сопротивление. Так же есть идея использовать АЦП с большей битностью, как Вы писали выше (например ADC1256). Но не будет ли шуметь аналоговый вход на этом АЦП?
Алексей, чувствуется, в этой теме Вы узнали много для себя нового.
Настоятельно рекомендую еще раз перечитать и хорошенько обдумать сообщение №5.
Вот, я про это и писал, что использовал "медианный фильтр", но шума меньше не стало (даже при 100 выборках). Возможно, это потому, что сами значения слишком сильно скачут. Помню, dimax писал в одной ветке, что "это аналоговый мир, и тут одним программированием не отделаться". Конечно, сглаживать значения математикой я тоже буду, но хочется ещё как-то уменьшить разброс "физически", с помощью радиокомпонентов. Спасибо!
Перечитал и обдумал, требования снизились до точности в 0.1 %) Всё же приходит с опытом.
Некоторые даже умудряются повысить разрядность АЦП математическими методами. При этом увеличивается время получения измеренного значения.
Это только разрядность.
Математические методы позволяют работать только со случайной ошибкой, но в правильно спроектированном приборе она имеет один порядок величины с систематической. А систематическая математическими методами не устраняется. Другими словами, мы можем попытаться повысить разрядность, но точность от этого не увеличится.
Если у нас, скажем, 12-разрядный АЦП, то реально на нем достоверных только 9-10 разрядов. После математической обработки мы можем получить, скажем, 16 разрядов, но достоверными из них все равно останутся 9-10.
Получается, что дребезг 12-битного АЦП в 3-8 значений это нормально и от этого никуда не деться?
P.S. Значения я имею в виду от 4086 до 4095 при подтяжке к линии питания, например.
Перечитал и обдумал, требования снизились до точности в 0.1 %) Всё же приходит с опытом.
Тогда Вам нужно еще, минимум, пару раз перечитать и обдумать.
Вы хотите сказать, что осуществить такое на микроконтроллере в принципе нельзя?
Получается, что дребезг 12-битного АЦП в 3-8 значений это нормально и от этого никуда не деться?
Давайте разделять шум и точность.
У меня, например, на 10-разрядном АЦП разряд либо "стоит как вкопанный", либо "мигает" между двумя соседними значениями. Правда, это для конкретной схемы и конкретных требований. То есть, казалось бы, можно вытащить 11 разрядов ("стоит" - целое, "мигает" - полуцелое), что дает "шаг" в 0.05%, но абсолютная точность все равно в районе 8 разрядов, т.е. погрешность порядка 0.5%.
Вы хотите сказать, что осуществить такое на микроконтроллере в принципе нельзя?
Можно, но не на встроенном в микроконтроллер АЦП и не с Вашим опытом.
1. Что касается Вашего примера с 10-разрядным АЦП. Сам омметр я делаю на STM32 c 12-разрядным АЦП, так что доставать 11 бит, там и не нужно. Проблема в другом. У меня разряд, как Вы выразились, "мигает" и далеко не между соседними значениями, разница там порядка 10. Так вот, как убрать этот разброс с помощью радиоэлектронных компонентов и можно ли это сделать вообще? Или это специфика встроенных в МК АЦП и обязательно нужен внешний АЦП типа ADS?
2. Да, опыта мало, согласен. Но, как говорится, было бы желание. А оно есть. Мне же ничто не мешает начать изучать эту обширную тему, верно? Я же на форум пришел не за готовым решением, а за советом от людей, которые в этом деле профессионалы. До этого я прочитал все статьи на форуме, связанные с измерением сопротивления с помощью МК, но их точность меня не устраивала.
Спасибо!
Алексей, уже 28-е сообщение, а до сих пор не выложены ни скетч, ни схема. Обсуждать нечего.
Далее: "убрать разброс" не может быть самоцелью. Да даже если бы и было, без схемы обсуждать нечего.
Опять же, АЦП - это устройство для измерения отношения между опорным и измеряемым напряжением. Вы же пишете, что Вам нужен омметр. АЦП Омы не измеряет. Значит, должна быть какая-то измерительная цепь, преобразующая Омы в Вольты.
Отдельный вопрос - источник опорного напряжения. От него также существенно зависит результат.
Но пока нет схемы, все эти вопросы покрыты мраком.
Так что ждем схему.
"Скетч", который читает значение с аналогового и пишет его в терминал, выкладывать просто глупо, ИМХО. Такие же дела обстоят и со схемой (потенциометр, одна ножка к земле, другая к 5V, средняя к A0. Ничего более).
Если так, то допустим самоцелью является уменьшить разброс аналоговых значений. Кстати, тема ветки так и звучит. С прыгающими значениями я через делитель напряжения всё равно ничего не посчитаю. Я знаю, что аналоговый порт измеряет напряжение по отношению к опорному.
Так вопрос заключается в том, как мне стабилизировать эти значения. Абсолютно без разницы, что я буду считать, напряжение или сопротивление. Это уже математика. А моя проблема аппаратного характера.
Алексей, Вы все равно не догоняете.
Схема нужна, причем ваша реальная измерительная схема, а не "допустим я взял потенциометр..."
В схеме "измерения потенциометра" единственным реально измеряемым параметром является угол поворота ротора - и если вам нужен именно он, то проще взять энкодер :)
Если же, к примеру, вместо потенциометра у вас делитель из двух резисторов - один постоянный, а другой, скажем терморезистор - то на точность в первую очередь будет влиять класс точности резисторов и стабильность напряжения питания. а уже во второую (если не в пятую) - разброс значений АЦП.
Это просто как пример, что обсуждать "точность вообще" - без схемы и скетча - абсолютно бессмысленно.
Хорошо, я Вас понял. Завтра будет скетч и схема в полном объёме) Со схемой ещё проблема в том, что я не совсем понимаю, как лучше измерить сопротивление. На данный момент это делитель из двух резисторов, но в интернете и здесь на форуме пишут про мост Уитстона. Поэтому на данный момент приложить смогу только схему на делителе. Спасибо!
Пока будете рисовать схему, подумайте вот о чем. Если вы хотите получить стабильные показания - нужно убирать любые помехи. Скажем, 2 единицы Ацп на 12 разрядах это примерно точность 0.05%
Напряжение питания СТМ =3.3в. , 0.05% от этого - менее 0.002в
Вы уверены, что источник питания, которым вы пользуетесь - выдает 3.3 в с точностью лучше 2 мВ? Если нет - о точности можно и не мечтать
На практике, если у вас обычный БП от какой-то бытовой техники - там пульсации могут быть 20-30 мв, а если зарядник от мобильника - и все 50
Это опять лишь пример
Вообще, я запитывал от разных источников питания: брал БП на 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 В было всегда стабильно. Не думаю, что это как то скажется на замерах.
Аппаратно понизить мигание можно применив фильтр низких частот перед АЦП. И про схемотехнику правильную тоже надо не забывать. На китайских платах цепи питания разведены кое как. Если открыть мануал на процессор, то там всегда есть раздел в котором описывается как правильно составить схему питания и развести плату. Китайцы не следуют этим указаниям и, как следствие, моргают нижние разряды АЦП. В этом смысле платы Nucleo от STM отличаются в лучшую сторону.
nik182, большое спасибо за дельный совет! Я действительно как-то не обратил внимания на этот раздел в даташите, нужно будет подробнее изучить. Плата-то у меня как раз китайская...
Плата-то у меня как раз китайская...
При покупке китайской платы с STM32 на али за копейки есть близкий к 100% шанс получить вместо родного STM его китайский клон. А там возможны любые чудеса. Хотя некоторые клоны работают вполне прилично.
Да, я перед покупкой про это читал. Но чип у меня оригинальный, даже с адресацией возиться не пришлось, из их фирменной ide всё шьётся.
Да, я перед покупкой про это читал. Но чип у меня оригинальный, даже с адресацией возиться не пришлось, из их фирменной ide всё шьётся.
То что чип "шьется из их фирменной ide" вовсе не гарантирует его аутентичность.
Это я привел в пример, чип проверял по маркировке.
Это я привел в пример, чип проверял по маркировке.
Это, опять же, ничего не гарантирует. Вот два чипа. Один из них клон. Угадай какой?
0,1% на столе с китайской платой и таким же блоком питания в широком диапазоне? Да не смешите мои тапки! Вам и процент за счастье.
Вы думаете ценники на серьезные приборы от жадности производителя, а размеры от его тупости?
Почитайте про методы устранения электромагнитных помех (а у нас все вокруг фонит), а еще в сети питания творится черти что на высоких частотах.
Так что начните с разработки схемы начиная от блока питания и разработки печатной платы, а также подбора радиоэлектронных компонентов с точностью не менее измеряемой.
Хорошо, поиграю в угадайку. Предположим, клон слева (мне на это намекает надпись chn в четвёртой строке и само качество маркировки + я такие видел на али).
Да, я уже понял что начинать нужно именно со схемы питания. Как думаете, если собрать из хороших деталей с чип и дипа цепь питания микрухи по схеме из даташита и подключить к такому же крутому лабораторнику (не из китая) результат будет лучше?
У меня цель не стоит сделать слишком дёшево или купить готовый прибор для измерения сопротивления. Я это делаю на уровне технологии для дальнейшего использования в других проектах. 0.1 % это точность хорошего мультиметра за 5-7 т.р.
"Скетч", который читает значение с аналогового и пишет его в терминал, выкладывать просто глупо, ИМХО. Такие же дела обстоят и со схемой (потенциометр, одна ножка к земле, другая к 5V, средняя к A0. Ничего более).
Если Вы считаете,что обладаете достаточной квалификацией, чтобы судить, что глупо, а что нет - разбирайтесь сами. Зачем обращаться на форум. А если обращаетесь на форум, будьте любезны следовать его правилам, а не заявлять, что это глупо.
А моя проблема аппаратного характера.
Но при этом не имеет никакого отношения к схеме, поэтому схему выкладывать не нужно. Блестящая логиа!
Я имел в виду, что схема стандартная и слишком простая. Во всяком случае, я уже осознал свою ошибку, поэтому схема и скетч сегодня будут.
Вообще, я запитывал от разных источников питания: брал БП на 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 В было всегда стабильно.
?!?
Откуда стабильность?
Не думаю, что это как то скажется на замерах.
А думать от Вас и не требуется. Если обратились на форум с вопросами - делайте, что говорят. Иначе - решайте свои вопросы самостоятельно.
0.1 % это точность хорошего мультиметра за 5-7 т.р.
От 50-70 т.р., Вы хотите сказать? Или давайте пример (только не NO name, а нормального производителя, который отвечает за свои данные)
?!?
Откуда стабильность?
Стабильность на 3.3 В и 4.3 В на usb тоже были стабильно. Возможно, у меня просто такое питание выдаёт usb порт компа.
Я имел в виду, что схема стандартная и слишком простая.
Стандартных схем не бывает. Читать здесь: http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/pesochnitsa-dlya-vsekh-novichkov
Практика показывает, что новички способны накосячить и в "слишком простых" схемах. Опять же, какая из тысяч "слишком простых" схем используется? Нам самим следует гадать?
Они должны были быть в первом посте.
?!?
Откуда стабильность?
Стабильность на 3.3 В и 4.3 В на usb тоже были стабильно. Возможно, у меня просто такое питание выдаёт usb порт компа.
Повторю вопрос: откуда стабильность?
Вот Вы хотите 0.1% погрешности. Приведите точное значение опорного напряжения. Хотя бы с точностью до 1 мВ.
Каков уровень пульсации опорного напряжения? Тоже с точностью до 1 мВ.
Ну и сообщите, при помощи каких приборов получены эти цифры.