Точный омметр для измерения термисторов
- Войдите на сайт для отправки комментариев
Втр, 09/06/2020 - 17:12
Для измерения термисторов решил сделать омметр, но не устраивает точность измерений. Измерять нужно от 1кОм до 60 кОм, одновременно от 12 до 30 термисторов . Делитель поставил на 70,9 кОм.( делитель стоит между А0-GND для 1 мультиплексора и А1-GND для 2 мультиплексора)
Для увеличения точности думаю или вводить поправочные коэффициенты, вычесленные эмперическим путем, либо попробовать собрать схему с мостом Уинстона, но с ним уменя как раз проблема - никак не могу сообразить как это сделать на основе ардуино.
#define EN 3 #define S0 4 #define S1 5 #define S2 6 #define S3 7 #define SIG1 A0 #define SIG2 A1 #define R1 70900 #define U_THERMISTOR 5000 //Напряжение подаваемое на термистор в мВольтах void setup() { Serial.begin(9600); pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); digitalWrite(S0, LOW); digitalWrite(S1, LOW); digitalWrite(S2, LOW); digitalWrite(S3, LOW); pinMode(EN, OUTPUT); digitalWrite(EN, LOW); delay(1000); //Ждем переходные процессы в схеме } int ADCMux; void loop() { //Loop through and read all 16 values //Reports back Value at channel 6 is: 346 for (int j = 0; j < 2; j ++) { Serial.print("Mux: "); Serial.print(j + 1); for (int i = 0; i < 16; i ++) { Serial.print(" ch"); Serial.print(i); Serial.print(": "); ADCMux = readMux(j + 1, i); Serial.print(" [v1: "); Serial.print(ConvertADCToVoltage(ADCMux)); //Serial.print(ADCMux); Serial.print(" r2: "); Serial.print(CalculateThermistor(ConvertADCToVoltage(ADCMux))); Serial.print("]"); } Serial.println(); } Serial.println(); delay(2000); } /** Функция выбора мультиплексора и канала в нём @param mux_n Номер мультиплексора 1-2 @param channel Канал 0-15 @return Значение АЦП, -1 - ошибка выбора мультиплексора */ int readMux(int mux_n, int channel) { int adc = 0; if ((mux_n <= 0) || (mux_n >= 3)) return -1; int controlPin[] = {S0, S1, S2, S3}; int muxChannel[16][4] = { {0, 0, 0, 0}, //channel 0 {1, 0, 0, 0}, //channel 1 {0, 1, 0, 0}, //channel 2 {1, 1, 0, 0}, //channel 3 {0, 0, 1, 0}, //channel 4 {1, 0, 1, 0}, //channel 5 {0, 1, 1, 0}, //channel 6 {1, 1, 1, 0}, //channel 7 {0, 0, 0, 1}, //channel 8 {1, 0, 0, 1}, //channel 9 {0, 1, 0, 1}, //channel 10 {1, 1, 0, 1}, //channel 11 {0, 0, 1, 1}, //channel 12 {1, 0, 1, 1}, //channel 13 {0, 1, 1, 1}, //channel 14 {1, 1, 1, 1} //channel 15 }; //loop through the 4 sig for (int i = 0; i < 4; i ++) { digitalWrite(controlPin[i], muxChannel[channel][i]); } delay(200); //return the value for (int i = 0; i < 16; i++) adc += analogRead(mux_n == 1 ? SIG1 : SIG2); return adc / 16; //return analogRead(mux_n == 1 ? SIG1 : SIG2); } /** Конвертируем показания АЦП в напряжение, в мВольтах @param adc показания АЦП @return напряжение, в мВольтах */ uint16_t ConvertADCToVoltage(uint16_t adc) { return (adc * 4.8828125); //adc * (5000mV / 1024) } /** Находим значение термистора, в Ом @param v1 напряжение на делителе @return сопротивление термистора, в Ом */ uint32_t CalculateThermistor(uint16_t v1) { return ((U_THERMISTOR * R1) / v1) - R1; }
Может быть, если тебе нужна точность, ты удосужишься определить, что за точность тебе нужна?
с погрешностью +-50 Ом
Окей, строй прецизионный источник тока для генерации смещения на резисторе, строй переключатель каналов для него, бери ацп разрешением бит 16, и делай. Вопрос в схемотехнике, а не в ардуино.
Не могли бы Вы пояснить
1. с какой целью Вы притянули входы A0 и A1 к земле, и о каком делителе Вы говорите? Делитель образуется этим резистором, которым Вы притягивали и измеряемым, правильно?
2. из Вашего поста неясно, а вопрос то к нам у Вас какой?
1.Резистивимный делитель напряжения. Поскольку резисторы соединены последовательно, то ток через них будет одинаков в соответствии с первым правилом Кирхгофа. Падение напряжения на каждом резисторе согласно закону Ома будет пропорционально сопротивлению (ток, как было установлено ранее, одинаков).
2. Сейчас все работает, но погрешность измерения сопротивления 150-300 Ом. Вопрос в том каким образом уменьшить погрешность, хотябы до 50 Ом. Потому что на термисторах которые я использую , погрешность в 300 Ом это примерно 1 градус.
2. Сейчас все работает, но погрешность измерения сопротивления 150-300 Ом. Вопрос в том каким образом уменьшить погрешность, хотябы до 50 Ом. Потому что на термисторах которые я использую , погрешность в 300 Ом это примерно 1 градус.
а вы это измеряете в термостате со стабильной температурой с точностью до 0.2 градусов? - иначе ни о какой стабильности и точности измерений термисторов смысла говорить нет
да, но нужен он для измерений в полевых условиях (в скважинах). Так же имеется старый прибор (еще советский) , но проблема в том что он уже отжил свое (постоянно вырубается, удаляет данные и другие болячки). На старом приборе погрешность 30 Ом (проверял), в обычных условиях сверялся с ним.
еще раз повторяю вопрос - старый прибор в термостате работает?
Потому что иначе все эти байки про точность 30 Ом - вранье
еще раз повторяю вопрос - старый прибор в термостате работает?
Потому что иначе все эти байки про точность 30 Ом - вранье
Проверял в установке для тарировки терморезисторов точность рабочей камеры вроде бы 0,03 градуса. Термомеристор брал ММТ-4 1,5 кОм
Проверял в установке для тарировки терморезисторов точность рабочей камеры вроде бы 0,03 градуса. Термомеристор брал ММТ-4 1,5 кОм
ну отлично. Не забудьте эту камеру приделать к своему прибору на 30 термисторов, иначе искать точность 50 Ом смысла нет
Ну или вот например простая цепь, дающая линейный выход с переменного резистора, который остается только оцифровать с желаемым разрешением
2. Сейчас все работает, но погрешность измерения сопротивления 150-300 Ом.
Для этой схемы - вполне приличный результат.
60кОм/ 50 =1200, что явно больше чем 1023, т.е. 10-ти разрядным ацп точность 50 Ом не обеспечить в принципе.
это если измерять от 0 Ом, а зачем? Он же измеряет определённый номинал, под него и затачивать прибор
это если измерять от 0 Ом, а зачем? Он же измеряет определённый номинал, под него и затачивать прибор
у него цена деления (т.е. минимальная _теоретически_ достижимая погрешность) порядка 130 ом. Реальная, естественно, больше.
Проверял в установке для тарировки терморезисторов точность рабочей камеры вроде бы 0,03 градуса. Термомеристор брал ММТ-4 1,5 кОм
ну отлично. Не забудьте эту камеру приделать к своему прибору на 30 термисторов, иначе искать точность 50 Ом смысла нет
для начала нужно омметр сочинить - а он п(р)оверяется гораздо проще, магазином.
с погрешностью +-50 Ом
возможно (но не обязательно), погрешность удастся несколько снизить при:
- уменьшить номиналы r1, r2. может быть, приколхозить какой-нибудь переключатель для разных диапазонов измерения.
- на аналоговые входы припаять керам. конденсаторы.
- перед измерением очередного резистора отработать 2-3 раз analogRead() без записи результата измерения.
это если измерять от 0 Ом, а зачем? Он же измеряет определённый номинал, под него и затачивать прибор
у него цена деления (т.е. минимальная _теоретически_ достижимая погрешность) порядка 130 ом. Реальная, естественно, больше.
ждёмс аппаратное решение как 10 битным цапом измерить максимально точно, если известен диапазон измеряемых величин
это если измерять от 0 Ом, а зачем? Он же измеряет определённый номинал, под него и затачивать прибор
у него цена деления (т.е. минимальная _теоретически_ достижимая погрешность) порядка 130 ом. Реальная, естественно, больше.
ждёмс аппаратное решение как 10 битным цапом измерить максимально точно, если известен диапазон измеряемых величин
1. что такое "максимально точно"?
"Может быть, если тебе нужна точность, ты удосужишься определить, что за точность тебе нужна?"
2. почему нужно измерять обязательно "10 битным цапом"
3. Бюджет?
акая сексуальная разница?
у него цена деления (т.е. минимальная _теоретически_ достижимая погрешность) порядка 130 ом. Реальная, естественно, больше.
Большая разница. Сдвиг уровня на операционнике и если нужно скажем измерять изменение в 1к то на 10битном ацп ардуины будем иметь точность около 3 Ом. Без сдвига уже приводили цифры.
Сдвиг уровня на операционнике и если нужно скажем измерять изменение в 1к то на 10битном ацп ардуины будем иметь точность около 3 Ом. Без сдвига уже приводили цифры.
Операционники сами не безпогрешны, а в однополярном включении в близкой к земле области и подавно.
Это будет отельная секс-песня.
зы. вроде даже недавно где-то тут ЕП сетовал, что ну не обеспечивают китайские райл-то-райл операш точности.
акая сексуальная разница?
у него цена деления (т.е. минимальная _теоретически_ достижимая погрешность) порядка 130 ом. Реальная, естественно, больше.
Большая разница. Сдвиг уровня на операционнике и если нужно скажем измерять изменение в 1к то на 10битном ацп ардуины будем иметь точность около 3 Ом. Без сдвига уже приводили цифры.
Сдвиг уровня на операционнике и если нужно скажем измерять изменение в 1к то на 10битном ацп ардуины будем иметь точность около 3 Ом. Без сдвига уже приводили цифры.
Операционники сами не безпогрешны, а в однополярном включении в близкой к земле области и подавно.
Это будет отельная секс-песня.
зы. вроде даже недавно где-то тут ЕП сетовал, что ну не обеспечивают китайские райл-то-райл операш точности.
Безгрешность операционников определяется только Вашим умением их применять. Все слова про сетования исключительно от не знания и попыток выйти за пределы определённые мануалом на операционник.
акая сексуальная разница?
у него цена деления (т.е. минимальная _теоретически_ достижимая погрешность) порядка 130 ом. Реальная, естественно, больше.
Большая разница. Сдвиг уровня на операционнике и если нужно скажем измерять изменение в 1к то на 10битном ацп ардуины будем иметь точность около 3 Ом. Без сдвига уже приводили цифры.
Точность определяется калибровкой. 3 Ом это аппаратный параметр железа, лучше которого, даже после калибровки, получить точное значение не получится. Но эта точность существенно выше необходимой ТС. Поэтому на индикаторе можно показывать любое округленное значение в большую сторону и оно будет истинным, с точностью до округления.
1 Измерение сопротивления в корне неправильно. Вы заранее вносите погрешность, приняв напряжение на делителе=5 В. На самом деле оно никогда не будет таковым. Правильнее измерять соотношение напряжений на верхнем и среднем концах делителя. Если внимательнее посмотреть на формулу расчета делителя, то напряжение в ней сокращается. Поэтому измерять нужно не в милливольтах, а в (попугаях) единицах АЦП на верхнем и среднем выводах делителя.
2. Максимального разрешения можно добиться если верхнее и нижнее плечо делителя равны, в Вашем случае в середине диапазона около 30 КОм. И то 30 Ом от 30 КОм составляет 0,1% При 60-0,05%. Но точности в 30 Ом. Даже в этом случае не получить, т.к. на один разряд АЦП приходится около 60 Ом. Если применять несколько опорных резисторов (переключать диапазоны). То в нижнем конце 1-10 КОм это получится.
Максимального разрешения можно добиться если верхнее и нижнее плечо делителя равны.
Бред.
В общем - верно, но вот как-то сам не готов излагать томик Фолкенберри на форуме, хотя мне только рукой до него дотянуться ...
Ну что вы так категоричны-то на ровном месте, поищите, где Евгений Петрович излагает этот вопрос, посмотрите даташит на то что он там применяет, может тогда и снизойдет просветление, что не все микрухи с Али соответствуют якобы родным для них мануалам. Еще будь кто-то другой, я бы может и засомневался, но в данном разе уверен, что ЕП прежде десяток раз проверил перед тем как вынес на форум этот вопрос.
Максимального разрешения можно добиться если верхнее и нижнее плечо делителя равны.
Бред.
Не бред, а математика. Если резисторы делителя равны или близки друг к другу, то при изменении одного из них процентное изменение напряжения будет максимальным. А если один из них допустим на порядок больше другого, то и изменение напряжения соответственно уменьшится. Закон Ома суров, но справедлив.
И еще одно замечание, для измерения сопротивления на делителе не нужен прецизионный источник. В вычислениях не участвует абсолютные значения напряжения, а только их соотношение.
Не бред, а математика. Если резисторы делителя равны или близки друг к другу, то при изменении одного из них процентное изменение напряжения будет максимальным. А если один из них допустим на порядок больше другого, то и изменение напряжения соответственно уменьшится. Закон Ома суров, но справедлив.
Так-то оно так, только вот с равенством там не совсем получается. Да и о каком равенстве речь, если измеряемый резистор заведомо может иметь различные сопротивления. Если выписать формулу для делителя, а потом взять максимальное и минимальное сопротивление датчика/"измеряемого резистора" (Rmax и Rmin) и решить задачу поиска максимума величины разброса напряжений в средней точке (ведь именно при максимуме точность наилучшая - больше попугаев влезет), то получается. что максимум достается, когда второй резистор делителя равен среднему геометрическому между Rmax и Rmin. И это не зависит от того, в каком плече делителя находится измеряемый резистор, а в каком рассчитываемый. Подробно все выкладки приведены здесь.
Не бред, а математика. Если резисторы делителя равны или близки друг к другу, то при изменении одного из них процентное изменение напряжения будет максимальным. А если один из них допустим на порядок больше другого, то и изменение напряжения соответственно уменьшится. Закон Ома суров, но справедлив.
Так-то оно так, только вот с равенством там не совсем получается. Да и о каком равенстве речь, если измеряемый резистор заведомо может иметь различные сопротивления. Если выписать формулу для делителя, а потом взять максимальное и минимальное сопротивление датчика/"измеряемого резистора" (Rmax и Rmin) и решить задачу поиска максимума величины разброса напряжений в средней точке (ведь именно при максимуме точность наилучшая - больше попугаев влезет), то получается. что максимум достается, когда второй резистор делителя равен среднему геометрическому между Rmax и Rmin. И это не зависит от того, в каком плече делителя находится измеряемый резистор, а в каком рассчитываемый. Подробно все выкладки приведены здесь.
Я не говорю о строгом равенстве, хотя-бы порядок. Но применение образцового резистора в 70 КОм при использовании термистора на 1,5 КОм это перебор.
Да, перебор. Пусть, кстати, ТС мои формулы почитает. Тогда он по пределам измерения легко посчитает разброс напряжений, и вопросы о теоретически достижимой точности отпадут сами собой - там всё очевидно.
Я следил за укрощением операционника Евгением. Я не имею ввиду алишные подделки. Вопрос качества купленных усилителей за рамками данного топика. На аналоговых схемах летали ракеты, где минимальные ошибки приводят к огромным интегральным накоплениям. Сделать простую схему сдвига уровня и усиления для формирования на входе АЦП сигнала точно в нужных ТС диапазоне изменения входного напряжения операционника на резистивном делителе нет никаких проблем, даже на хреновых алишных. Разрешение изменения температуры будет выше, чем необходимо ТС. Соответствие полученных значений температуры реальным, в любом случае, можно обеспечить только калибровкой.
Я не говорю о строгом равенстве
Зато ох как громко на математику ссылаешься.
Реальные способы максимизации разрешения в этой теме я уже написал. Делитель в два резистора - самый простой, но одновременно и самый плохой способ измерения сопротивления, какие бы ты замысловатые круги вокруг него не выплясывал. И это как раз математика. От человека, который ее считал, а не просто ссылается с умным видом.
Да, перебор. Пусть, кстати, ТС мои формулы почитает. Тогда он по пределам измерения легко посчитает разброс напряжений, и вопросы о теоретически достижимой точности отпадут сами собой - там всё очевидно.
Когда я делал пробник, то руководствовался этими-же соображениями. Измерение сопротивлений ардуино , с необходимой точностью, оказалось самым простым. Пробник измеряет сопротивления от 10 Ом до 2 МОм с тремя образцовыми резисторами 470Ом, 4,7 КОм и 47 КОм с достаточной точностью (1 знак после запятой), что для пробника вполне достаточно. Если необходимы более точные результаты, то можно разбить на более узкие диапазоны, подобрав соответствующие образцовые резисторы.
Я не говорю о строгом равенстве
Зато ох как громко на математику ссылаешься.
Реальные способы максимизации разрешения в этой теме я уже написал. Делитель в два резистора - самый простой, но одновременно и самый плохой способ измерения сопротивления, какие бы ты замысловатые круги вокруг него не выплясывал. И это как раз математика. От человека, который ее считал, а не просто ссылается с умным видом.
А Вы, что предлагаете, измерять без делителя и образцового резистора? Это самый простой и точный метод, если есть ардуино и образцовый резистор. Остальное все от лукавого. Ну и насчет математики погорячился. Это арифметика.
В моём PDF для решения задачи оптимизации производная используется (можно даже, с натяжкой, сказать - диф. уравнение) - галимый матан!
Да, перебор. Пусть, кстати, ТС мои формулы почитает. Тогда он по пределам измерения легко посчитает разброс напряжений, и вопросы о теоретически достижимой точности отпадут сами собой - там всё очевидно.
Когда я делал пробник, то руководствовался этими-же соображениями. Измерение сопротивлений ардуино , с необходимой точностью, оказалось самым простым. Пробник измеряет сопротивления от 10 Ом до 2 МОм с тремя образцовыми резисторами 470Ом, 4,7 КОм и 47 КОм с достаточной точностью (1 знак после запятой), что для пробника вполне достаточно. Если необходимы более точные результаты, то можно разбить на более узкие диапазоны, подобрав соответствующие образцовые резисторы.
В моём PDF для решения задачи оптимизации производная используется (можно даже, с натяжкой, сказать - диф. уравнение) - галимый матан!
Вы говорите о нахождении оптимального образцового сопротивления, а я просто предлагал сравнить прирост "попугаев" при примерно равных сопротивлениях делителя и различных (хотя-бы на порядок). А это ближе к арифметике. В математике, если честно не силен, я электронику больше задом чую.
(не обижайся, сам подставился - грех не стебануться -)
(не обижайся, сам подставился - грех не стебануться -)
У, ты какая!
Вы говорите о нахождении оптимального образцового сопротивления, а я просто предлагал сравнить прирост "попугаев" при примерно равных сопротивлениях делителя и различных (хотя-бы на порядок). А это ближе к арифметике. В математике, если честно не силен, я электронику больше задом чую.
Стебаться не буду, но замечу, что в случае сдвига уровня операционником и последующим усилением варианты с большим отношением образцового и измеряемого сопротивления более предпочтительны, т.к. при равенстве их, функция 1/R , лежащая в основе метода, имеет большую нелинейность и требует больше математики (не арифметики) для восстановления измеренного значения. Или таблицу пересчёта попугаев в сопротивление.
Ладно, спорить не будем, но мне не ясно, зачем сначала уменьшать разрешение, затем усиливать и еще математику с нелинейными функциями применять. Не проще разбить на несколько диапазонов и сравнивать "попугаев". Ведь мы измеряем сопротивление, а зачем измерять напряжения и токи с высокой точностью, если сопротивление от них не зависит (в разумных пределах).
Есть понятие метод измерения. У Вас нет возможности прямого измерения сопротивления. Только расчёт на основе закона Ома. К тому же метод с образцовым сопротивлением имеет большую нелинейность, так что даже если Вы разбили на много диапазонов то точное значение сопротивления без пересчёта получаете в одной точке. Что бы измерять сопротивление без пересчёта, нужно подавать на него калиброванный стабилизированный ток, и тогда АЦП даст измеренное напряжение, пропорциональное сопротивлению.
Разрешение не уменьшается с учётом усиления. Оно сдвигается в более линейную область, где ошибка от нелинейности метода меньше и можно использовать оцифрованное значение без пересчёта. Ваши убеждения по поводу лучшего разрешения основаны только на том, что Вы желаете использовать максимально упрощённые входные цепи и получить максимально возможную точность. На процессоре это действительно можно сделать, т.к. есть возможность считать математику и использовать много образцовых резисторов, подключая их в момент измерения с помощью конфигурирования ног процессора. Это задача измерения сопротивления любого резистора. К задаче ТС это относится слабо, т.к. у него определёно сопротивление резистора и определен диапазон изменения сопротивления, в котором надо произвести измерение. И решать надо соответственно задачу ТС. Т.к диапазон изменения сопротивления существенно меньше значения сопротивления, то никакие ухищрения с выводом рабочей точки на центр не помогут добиться необходимой ТС точности при использовании простого резистивного делителя.
Если ТС требуется точность 30 Ом или даже +/- 50 Ом, то диапазон 1,5-60 КОм легко перекроется тремя/четырьмя образцовыми резисторами. Минимум деталей, простенькая программа. Зачем огород городить? Выбор диапазона автоматом, ключами ардуино. Сопротивление открытого ключа 19-20 ом, легко учесть. Еще неизвестно, какую погрешность внесет аналоговый коммутатор.
Аналоговый коммутатор откуда взаялся? Ваши домыслы? Вы читаете, что я пишу? Сопротивление известно. Известно изменение сопротивления при изменении температуры. Зачем 3 - 4 резистора, если всё изменение сопротивления укладывается в десяток процентов от полного сопротивления. Не надо измерять любое сопротивление. Задача другая и решать её надо соответственно.
Если поставить образцовый резистор 62к (это ближайший к идеальному из Е24), то получим теоретический предел точности - 120ом/попугая.
Так что, полученная ТС погрешность
это очень хорошо! Учитывая, что абсолютная погрешность ардуиновского АЦП ±2lsb и то, что в ардуине АЦП распаян "экономно" - просто замечательный результат.
Так что действительно, либо искать другой метод измерения, либо дробить интервал.
Аналоговый коммутатор откуда взаялся? Ваши домыслы? Вы читаете, что я пишу? Сопротивление известно. Известно изменение сопротивления при изменении температуры. Зачем 3 - 4 резистора, если всё изменение сопротивления укладывается в десяток процентов от полного сопротивления. Не надо измерять любое сопротивление. Задача другая и решать её надо соответственно.
У ТС на схеме ( пост #1) стоят два аналоговых коммутатора, чтобы контролировать, как он пишет от 12 до 30 термисторов. Так кажется. Да и диапазон измерения странный. Если он пишет что используется термистор на 1,5 КОм (это по идее при +25 градусах) и изменяется до 60 КОм - это наверное уже глубокий минус. Откуда он в скважине. Хотя я характеристики термистора не смотрел, может и ошибаюсь. Извиняюсь сейчас глянул характеристики у него отрицательный ТКС. И разброс характеристик до 20%.
Учитывая,
что он не проводил измерения на всём диапазоне, а сравнил одну-две цифры с эталоном на заведомо нелинейной схеме — погрешностью эту результат называть нельзя. Это просто шум.
что он не проводил измерения на всём диапазоне, а сравнил одну-две цифры с эталоном на заведомо нелинейной схеме — погрешностью эту результат называть нельзя. Это просто шум.
да, возможно.
Хотя, он не писал как именно он проводил измерения.
-----------
Кстати, в том моём посте забыл написать, что в расчётах я исходил из необходимости измерять сопротивления в диапазоне 1,5-60 кОм