Бывают EC-щупы со встроенным термистором (вверху).
Бывают EC-щупы без встроенных термисторов (в середине).
В таком случае термистор нужен отдельный. Они бывают двух типов на 10kΩ или 100kΩ
С помощью жёлтой изоленты совмещаем ЕС и термистор и купорим в баночку вместе с калибровочным раствором 1EC.
Вокруг щупа нужно обязательно очертить пространство где может распространяться электрический ток с помощью напечатанной на 3Д принтере юбочки. Если это не сделать - то прибор будет очень хорошо определять расстояние от электродов до стенки.
Бывают EC-щупы без встроенных термисторов (в середине).
В таком случае термистор нужен отдельный. Они бывают двух типов на 10kΩ или 100kΩ
С помощью жёлтой изоленты совмещаем ЕС и термистор и купорим в баночку вместе с калибровочным раствором 1EC.
Вокруг щупа нужно обязательно очертить пространство где может распространяться электрический ток с помощью напечатанной на 3Д принтере юбочки. Если это не сделать - то прибор будет очень хорошо определять расстояние от электродов до стенки.
This media is not supported in your browser
VIEW IN TELEGRAM
Длительное тестирование началось 26 окт.
Запомним эти цифры:
1616mV - напряжение на делителе
2517mV - опорное напряжение.
Китайский мультиметр при этом считает что 2507mV, так что есть вероятность что АЦП у esp32 плохо калиброван и привирает.
Запомним эти цифры:
1616mV - напряжение на делителе
2517mV - опорное напряжение.
Китайский мультиметр при этом считает что 2507mV, так что есть вероятность что АЦП у esp32 плохо калиброван и привирает.
Есть пара моментов которые смущают во всей этой затее.
На всех графиках выше видно что есть некие u+,u-,u.
Это как раз положительное измерение, отрицальеное и среднее.
Расшифровка:
Положительное = Uацп
Отрицательное = Вычитаем Uацп из опорного напряжения 2500mV
Среднее = среднеарифметическое между верхними двумя
Дельта (Δ) = разница менду положительным и отрицательным.
Первое что может пойти не так - это положительное != отрицательному всегда.
Чтобы всё это выглядело сильно красивее на тестовой платке одно из начений смещено на -35 mV.
В таком случае значения пляшут около нуля.
Но на графиках выше мы получаем расхождение окло 15mV и пока не могу определиться с тем какой решение правильнее: смещать или не смещать =)
Скорее всего часть неопределённости сюда вносит неоткалиброванный АЦП. У нас источник опорного 2500 mV и китайский мультиметр считает что там 2497mV). Поэтому показания АЦП 2516mV кажутся немного странными.
Хотя я тут торгуюсь вокруг пары десятков милливольт, которые скорее сильно нише возмо
На всех графиках выше видно что есть некие u+,u-,u.
Это как раз положительное измерение, отрицальеное и среднее.
Расшифровка:
Положительное = Uацп
Отрицательное = Вычитаем Uацп из опорного напряжения 2500mV
Среднее = среднеарифметическое между верхними двумя
Дельта (Δ) = разница менду положительным и отрицательным.
Первое что может пойти не так - это положительное != отрицательному всегда.
Чтобы всё это выглядело сильно красивее на тестовой платке одно из начений смещено на -35 mV.
В таком случае значения пляшут около нуля.
Но на графиках выше мы получаем расхождение окло 15mV и пока не могу определиться с тем какой решение правильнее: смещать или не смещать =)
Скорее всего часть неопределённости сюда вносит неоткалиброванный АЦП. У нас источник опорного 2500 mV и китайский мультиметр считает что там 2497mV). Поэтому показания АЦП 2516mV кажутся немного странными.
Хотя я тут торгуюсь вокруг пары десятков милливольт, которые скорее сильно нише возмо
А ещё у ESP-IDF какие-то проблемы либо с документацией либо с фриртосом. https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/freertos.html
Решил я архитектуру немного попеределать, и оказалось так что мне нужно посылать Notify в таску из двух разны задач. После недолгого гугленья понял что это делается с помощью xTaskNotifyIndexed(). В доке ESP-IDF даже про это написано, но вот в коде её нет и VsCode её не видит.
В итоге пришлось нашлёпать костылей с велосипедами. Во время Notify мы должны передать
Для того чтобы передать -23.88°C сделаем следующую логику, которая будет всем понятна, но за которую люди в свитерах и с красными глазами готовы убивать:
1) умножим на 1000 чтобы получить 23880 мллицельсий.
2) добавим 100*1000 чтобы значение точно было больше 0
3) добавим биты с инфой:
7) вычитаем 100 и делим на 1000 если бит гооврит о том что к нам прилетела температура
на графике сверху как раз таска жёлтым цветом отчитывается о том что получила нотифаи о температуре из ntcTask и о померяном напряжении из ecTask.
Решил я архитектуру немного попеределать, и оказалось так что мне нужно посылать Notify в таску из двух разны задач. После недолгого гугленья понял что это делается с помощью xTaskNotifyIndexed(). В доке ESP-IDF даже про это написано, но вот в коде её нет и VsCode её не видит.
В итоге пришлось нашлёпать костылей с велосипедами. Во время Notify мы должны передать
uint32_t
, а это 4 раза по 8 бит. Поэтому в первом бите будем передавать тип, а в остальных 3х значение (до 16 миллионов).Для того чтобы передать -23.88°C сделаем следующую логику, которая будет всем понятна, но за которую люди в свитерах и с красными глазами готовы убивать:
1) умножим на 1000 чтобы получить 23880 мллицельсий.
2) добавим 100*1000 чтобы значение точно было больше 0
3) добавим биты с инфой:
0b00000001 << 24
4) передаём получившееся uint32_t x
5) получаем биты с инфой x >> 24
6) поучаем значение наложив маску7) вычитаем 100 и делим на 1000 если бит гооврит о том что к нам прилетела температура
на графике сверху как раз таска жёлтым цветом отчитывается о том что получила нотифаи о температуре из ntcTask и о померяном напряжении из ecTask.
This media is not supported in your browser
VIEW IN TELEGRAM
Морс! Клюква!
Весь вечер делаю дооолгие замеры, чтобы процесс устоялся и при повторном измерении получалась та-же цифра что и первоначально.
Стабильность показаний и их повторяемость при перемещении между баночками в случайном порядке радуют - (2-3mV).
Если присмотреться - то видно что рядом с синим штекером EC щупа появился синий (СТИЛЬ!!!) джампер который воткнут в дальнюю от нас позицию. Это говорит о том что теперь на делителе напряжения сопротивление 500Ω вместо неправильных 4700Ω
Весь вечер делаю дооолгие замеры, чтобы процесс устоялся и при повторном измерении получалась та-же цифра что и первоначально.
Стабильность показаний и их повторяемость при перемещении между баночками в случайном порядке радуют - (2-3mV).
Если присмотреться - то видно что рядом с синим штекером EC щупа появился синий (СТИЛЬ!!!) джампер который воткнут в дальнюю от нас позицию. Это говорит о том что теперь на делителе напряжения сопротивление 500Ω вместо неправильных 4700Ω
График тоже получается красивый.
Когда я делал похожие измерения раньше - у меня всегда начинали уплывать показатели на значениях 5-6 EC. А тут даже в этих цифрах всё сходится.
Калибровочные коэффициенты, правда подобрал вручную: решение калибровочных уравнений осталось только в коде на C++, а на компе это запускать лень.
Когда я делал похожие измерения раньше - у меня всегда начинали уплывать показатели на значениях 5-6 EC. А тут даже в этих цифрах всё сходится.
Калибровочные коэффициенты, правда подобрал вручную: решение калибровочных уравнений осталось только в коде на C++, а на компе это запускать лень.
А вот так получается если коэффициенты подобрать решением математических уравнений.
Оказывается можно ничего не устанавливать, а пользоваться программой в которой я всё считал онлайн:
https://sagecell.sagemath.org/
Система уравнений на первый взгляд кажется очень простой:
Почему уравнения такие? ну хз так показалось 😂
Оказывается можно ничего не устанавливать, а пользоваться программой в которой я всё считал онлайн:
https://sagecell.sagemath.org/
Система уравнений на первый взгляд кажется очень простой:
a/(R1-b)-c==EC1Зная сопротивления (R) и электропроводимость (EC) нужно посчитать систему из 3х уравнений =)
a/(R2-b)-c==EC2
a/(R3-b)-c==EC3
Почему уравнения такие? ну хз так показалось 😂