Arduino и аналоговый датчик

svorog
Offline
Зарегистрирован: 27.04.2017

Здравствуйте. Имеется задача подключить к ардуине аналоговый датчик с выходным сигналом 0-100мВ  может кто подсказать как проще всего измерить напряжение на выходе датчика. Функция analogRead  насколько я понимаю измеряет напряжение одном выводе относительно общей линии, а мне требуется измерить напряжение между двумя проводами. Схема датчика на картинке, измерительная диагональ BD т.е. между этими проводами мне и требуется измерить напряжение. на форуме видел темы по созданию вольтметра на базе ардуино но там используется внешний АЦП, которого у меня в наличии нет. Есть несколько платы мега и nano, хотелось бы обойтись какой то одной платой, это возможно?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Подождите грамотных электронщиков, но по моему дилетантскому мнению, Вам нужен дифференциальный усилитель с однополюсным выходом. Это устройство, которое принимает напряжение из двух точек и выдаёт разницу между ними на выход относительно земли. Заодно и усилить в Вашем случае в 50 раз. Тогда из  "0В - 0,1В"  получится "0В - 5В".

Дифференциальные усилители доступны и как отдельные микросхемы и как сборки из транзисторов или операционных усилителей, погуглите. Вот описание такой схемы в "библии".

svm
Offline
Зарегистрирован: 06.11.2016

Все зависит от того какая точность Вам нужна. Возможно достаточно подключить два аналоговых входа к точкам В и D. Измерить напряжения на них, а дальше математика. При опорном 1,1 В разрешение около 1 мВ.И есть небольшое ограничение, напряжение в этих точках не должно превышать опорное. Т.е. напряжение питания тоже должно быть около 1,1 В.

alex_r61
alex_r61 аватар
Offline
Зарегистрирован: 20.06.2012

 У меги 2560 есть дифференциальные входы с усилением в 10х и 200х. Только analogRead здесь не поможет, надо самому. Asm или C в помощь.

svorog
Offline
Зарегистрирован: 27.04.2017

Точность  около 5мВ меня вполне устроит, мне требуется только установить пороговое значение выше которого плата будет выдавить дискретный сигнал на светодиод. Датчик питается от 5В, но выходной сигнал скомпенсирован и находится в диапазоне 0-100мВ. Не совсем понимаю относительно чего будет происходить  измерение? если я буду мерить в этих точках относительно "Gnd" то я буду получать часть питающего напряжения с  потерей на резисторе. думаю рассчитать там ничего не получится. Думаю правильные показания будут только если я буду именно один провод относительно другого измерять, как тестером.

Гриша
Offline
Зарегистрирован: 27.04.2014

не, без инстроментальника тут туго будет. рекомендую из линейки INA128, INA129 приглядеть, если точность от температуры не сильно важна, то для опоры использовать простой делитель на 1% резисторах, если важно то по схеме с OPA177. 

если и без этого не скучно то, есть спец модули HX711 специально для таких случаев, хоть сам и не пользовал вроде народ не сильно их хаит... 

https://www.google.com/search?hl=ru&source=hp&ei=ho6-XbOWCo3mmwW3mI2oBA&q=hx711+arduino&oq=hx711+arduino

svorog
Offline
Зарегистрирован: 27.04.2017

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

svm
Offline
Зарегистрирован: 06.11.2016

svorog пишет:

Точность  около 5мВ меня вполне устроит, мне требуется только установить пороговое значение выше которого плата будет выдавить дискретный сигнал на светодиод. Датчик питается от 5В, но выходной сигнал скомпенсирован и находится в диапазоне 0-100мВ. Не совсем понимаю относительно чего будет происходить  измерение? если я буду мерить в этих точках относительно "Gnd" то я буду получать часть питающего напряжения с  потерей на резисторе. думаю рассчитать там ничего не получится. Думаю правильные показания будут только если я буду именно один провод относительно другого измерять, как тестером.

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

Гриша
Offline
Зарегистрирован: 27.04.2014

svorog пишет:

Точность  около 5мВ меня вполне устроит, мне требуется только установить пороговое значение выше которого плата будет выдавить дискретный сигнал на светодиод. 

svorog пишет:

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

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

Гриша
Offline
Зарегистрирован: 27.04.2014

svm пишет:

Входное сопротивление АЦП, практически бесконечность, поэтому безразлично как Вы будете измерять, между точками или относительно земли.

я бы не стал превращать хороший мост в полумост с жестким требованием к питанию. И использовать раздельное питание АЦП и моста тоже не рекомендуется.

раз с руками проблема проще HX711 купить - если с программированием нет проблем :))))))))

   

svm
Offline
Зарегистрирован: 06.11.2016

Гриша пишет:

я бы не стал превращать хороший мост в полумост с жестким требованием к питанию. И использовать раздельное питание АЦП и моста тоже не рекомендуется.

раз с руками проблема проще HX711 купить - если с программированием нет проблем :))))))))

 

Для моста не требуются жесткие требования к питанию. В диагоналях измеряется не абсолютное значение напряжения, а разница. А ограничение питания значением 1,1 В, только из-за максимального напряжения на входе АЦП при разбалансе. Если ТС приведет конкретные значения резисторов моста, то возможно и этого ограничения не будет. А насчет HX711 - лучше с ней не связываться. Микросхема достаточно специфичная и тормозная, заточенная под весы.

Гриша
Offline
Зарегистрирован: 27.04.2014

svm пишет:

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

svm пишет:

Для моста не требуются жесткие требования к питанию. В диагоналях измеряется не абсолютное значение напряжения, а разница. А ограничение питания значением 1,1 В, только из-за максимального напряжения на входе АЦП при разбалансе.

 я не могу понять предложенной схемы, если не сложно нарисуйте - просто не воспринимаю словами. А то мы так друг-друга только запутаем.

HX711 не использовал, да и требования к оперативности ТС не озвучил - хотя она недорогая и специально заточена под такие задачи. инструментальник я предложил выше и компаратор тоже...

svorog
Offline
Зарегистрирован: 27.04.2017

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

... пардон, не заметил что вопрос не ко мне

svm
Offline
Зарегистрирован: 06.11.2016

svorog пишет:

 что бы было понятно что измерять плечи моста по отдельности не имеет смысла схема работает только тогда когда измеряешь напряжение в двух противоположных точках. Углубиться в схемотехнику не могу, так как честно говоря давно уже с этими мостами не работал, но как априори меня учили что на 2 противоположных контакта подаешь питание и с двух других снимаешь выходной сигнал. Вот у меня и задача как ардуиной померить напряжение между двумя проводами а не между каким то общим проводником...

Вся суть "моста" - независимость условий балансировки от напряжения питания и температуры. Если схему моста немного перерисовать, то по сути - это два делителя напряжения. Измерительный прибор в диагонали служит лишь для того, чтобы зафиксировать равенство напряжений между средними точками делителей. Если разницы нет, то мост сбалансирован. Раньше для этих целей применялись чувствительные аналоговые микроамперметры с "0" в середине шкалы.Если напряжение больше справа-стрелка вправо, если слева- влево, если равны -"0". Сейчас это можно решить намного дешевле, ведь даже АЦП ардуино  имеет разрешение около милливольта на единицу младшего разряда. Поэтому достаточно сравнивать напряжение в точках B и D относительно С в значениях выдаваемых двумя АЦП, и при их равенстве выдавать сигнал, что мост сбалансирован. Ну а вариант с раздельным питанием моста и ардуино, рассматривать смысла нет. Вариант рабочий, но весьма неудачный.

nik182
Онлайн
Зарегистрирован: 04.05.2015

Жаль что наны. Про мегу ничего не скажу, а леонардо и тиньки 25 - 85 имеют честный дифференциальный вход с усилителями 20х , 200х. Для такой задачи самое оно.  

svorog
Offline
Зарегистрирован: 27.04.2017

Наверное все таки мы о разном говорим. Балансировка моста меня тут не сильно интересует, у меня заводской сбалансированный датчик, по дисбалансу моста определяется усилие воздействия на датчик. мне необходимо считать это значение что бы ограничить это воздействие при пороговом значении.

АЦП ардуины будет измерять точки В и D относительно земли? измерения тестером показали что между В и землей  2,5 В, между D и землей 2,79 В. При этом сигнал не изменяется при воздействии на датчик. Измерение между точками В и D показывают значение 5 мВ и резко увеличиваются при  нажатии на датчик.

svm
Offline
Зарегистрирован: 06.11.2016

nik182 пишет:

Жаль что наны. Про мегу ничего не скажу, а леонардо и тиньки 25 - 85 имеют честный дифференциальный вход с усилителями 20х , 200х. Для такой задачи самое оно.  

В данном случае АЦП может и совсем не нужен. Задача - не измерять, а сравнивать. Можно использовать входы встроенного компаратора Ардуино. 6 и 7 нога 328.

svorog
Offline
Зарегистрирован: 27.04.2017

Leonardo могу выдернуть из другой схемы.

Вариант с дифференциальным входом подразумевает программирование на Си ? или есть стандартные библиотеки?

svm
Offline
Зарегистрирован: 06.11.2016

svorog пишет:

Наверное все таки мы о разном говорим. Балансировка моста меня тут не сильно интересует, у меня заводской сбалансированный датчик, по дисбалансу моста определяется усилие воздействия на датчик. мне необходимо считать это значение что бы ограничить это воздействие при пороговом значении.

АЦП ардуины будем измерять точки В и D относительно земли? измерения тестером показали что между В и землей  2,5 В, между D и землей 2,79 В. При этом сигнал не изменяется при воздействии на датчик. Измерение вежду точками В и D показывают значение 5 мВ и резко увеличиваются при  нажатии на датчик.

Так не бывает. 2,79-2,5=0,29. Или как вариант, у вас слишком высокоомные резисторы делителя или низкоомный тестер который вносит искажения при измерении. Чудес не бывает. Если вы видите 5 мВ между B и D, то и разница между землей и ними во время измерений тоже должна быть 5 мВ. Закон Ома суров, но справедлив. Если нужно измерять, то вариант с компаратором не подойдет. Да и 5 мВ на фоне 2,5 В АЦП ардуино сложно отследить.

svorog
Offline
Зарегистрирован: 27.04.2017

2,79-2,5=0,29. Или как вариант, у вас слишком высокоомные резисторы делителя или низкоомный тестер который вносит искажения при измерении. Чудес не бывает.

[/quote]

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

Ну тогда все получается проще, я по большому счету могу мерить напряжение в точке В с помощью analogread и если не хватит точности то параллельно мерить в точке D и сравнивать эти значения?

nik182
Онлайн
Зарегистрирован: 04.05.2015

Да подразумевает программирование на си. Но я Вас уверяю, что проблем совершенно нет. Достаточно взять стандартную функцию analogRead из ядра ардуино и изменить в ней одну строчку. Поменять название на analogReadD и спокойно пользоваться. Если до этого дойдёт, то подключать мост нужно к А0 и А5. Усиление можно выставить либо 10х либо 40х. Справиться с программой поможем.

svm
Offline
Зарегистрирован: 06.11.2016

svorog пишет:

2,79-2,5=0,29. Или как вариант, у вас слишком высокоомные резисторы делителя или низкоомный тестер который вносит искажения при измерении. Чудес не бывает.

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

Ну тогда все получается проще, я по большому счету могу мерить напряжение в точке В с помощью analogread и если не хватит точности то параллельно мерить в точке D и сравнивать эти значения?

[/quote]

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

В Вашем случае вылезает еще один нюанс-невозможность использовать опорное АЦП 1,1 В при котором можно получить максимальное разрешение 1 мВ на разряд. При опорном 5 в разрешение АЦП будет уже 4,9 мВ. Как вариант можно использовать внешний ИОН где-то на 3 вольта, или 3,3 со стабилизатора Ардуино. Или если есть возможность уменьшить напряжение питания моста.

svorog
Offline
Зарегистрирован: 27.04.2017

[/quote]

..В Вашем случае вылезает еще один нюанс-невозможность использовать опорное АЦП 1,1 В при котором можно получить максимальное разрешение 1 мВ на разряд. При опорном 5 в разрешение АЦП будет уже 4,9 мВ. Как вариант можно использовать внешний ИОН где-то на 3 вольта, или 3,3 со стабилизатора Ардуино. Или если есть возможность уменьшить напряжение питания моста.

[/quote]

а если использовать функцию analogReference() то на Меге ведь можно будет использовать INTERNAL2V56: встроенное опорное напряжение 2.56.  и тогда разрешение будет около 2 ,5 мВ?

svm
Offline
Зарегистрирован: 06.11.2016

svorog пишет:

..В Вашем случае вылезает еще один нюанс-невозможность использовать опорное АЦП 1,1 В при котором можно получить максимальное разрешение 1 мВ на разряд. При опорном 5 в разрешение АЦП будет уже 4,9 мВ. Как вариант можно использовать внешний ИОН где-то на 3 вольта, или 3,3 со стабилизатора Ардуино. Или если есть возможность уменьшить напряжение питания моста.

[/quote]

а если использовать функцию analogReference() то на Меге ведь можно будет использовать INTERNAL2V56: встроенное опорное напряжение 2.56.  и тогда разрешение будет около 2 ,5 мВ?

[/quote]

Логично, но 2,56 находится  на границе, и все что превысит его, будет отображаться одинаково -1023. Нужен хотя-бы небольшой запас. Здесь особая стабильность не нужна. Главное, чтобы опорное не изменилось за время измерения, а это практически нереально.

SLKH
Offline
Зарегистрирован: 17.08.2015

nik182 пишет:

Да подразумевает программирование на си. Но я Вас уверяю, что проблем совершенно нет. Достаточно взять стандартную функцию analogRead из ядра ардуино и изменить в ней одну строчку. Поменять название на analogReadD и спокойно пользоваться. Если до этого дойдёт, то подключать мост нужно к А0 и А5. Усиление можно выставить либо 10х либо 40х. Справиться с программой поможем.

Речь идет о 328 (uno/nano/mini)? Или?

Гриша
Offline
Зарегистрирован: 27.04.2014

AD620ANZ, Инструментальный усилитель Ind [DIP-8]... + несколько сопротивлений , одно из которых подобрать под требуемое усиление, а из других собрать делитель опорного напряжения. Если использовать в помещении проблем с точностью не будет.

конечно INA128 несколько лучше в этом плане.

когда надоест экспериментировать, не пожалейте денег - если дело того стоит...

svorog
Offline
Зарегистрирован: 27.04.2017

svm пишет:

Логично, но 2,56 находится  на границе, и все что превысит его, будет отображаться одинаково -1023. Нужен хотя-бы небольшой запас. ...

А если повесить на эти выводы по 3 керамических диода, они посадят выходной сигнал примерно на 2В, тогда можно будет использовать опорное 1,1В или точность таким образом повысить не получится?

Гриша
Offline
Зарегистрирован: 27.04.2014

svorog пишет:

А если повесить на эти выводы по 3 керамических диода, они посадят выходной сигнал примерно на 2В, тогда можно будет использовать опорное 1,1В или точность таким образом повысить не получится?

диод очень нелинейный прибор и сильно зависит от температуры - даже не думайте в эту сторону

svm
Offline
Зарегистрирован: 06.11.2016

svorog пишет:

svm пишет:

Логично, но 2,56 находится  на границе, и все что превысит его, будет отображаться одинаково -1023. Нужен хотя-бы небольшой запас. ...

А если повесить на эти выводы по 3 керамических диода, они посадят выходной сигнал примерно на 2В, тогда можно будет использовать опорное 1,1В или точность таким образом повысить не получится?

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

Гриша
Offline
Зарегистрирован: 27.04.2014

svm пишет:

svorog пишет:

А если повесить на эти выводы по 3 керамических диода, они посадят выходной сигнал примерно на 2В, тогда можно будет использовать опорное 1,1В или точность таким образом повысить не получится?

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

ГЫ. кода речь идет о милливольтах... помните мультик 38 попугаев?  так вот мерить попугаев слонами не айс.

svm
Offline
Зарегистрирован: 06.11.2016

Гриша пишет:

диод очень нелинейный прибор и сильно зависит от температуры - даже не думайте в эту сторону

Все правильно, но есть нюанс. Измерять нужно не абсолютные значения, а разницу. И здесь при одинаковом изменении параметров диодов, результат останется неизменным. Так-же как и в ОУ, стабильность параметров достигается за счет симметрии плеч. Конечно это больше теория, и её истинность покажет только экспиримент. Но чтобы его провести, больших затрат не нужно. А при опорном 1.1 В попугай =1 мВ.

nik182
Онлайн
Зарегистрирован: 04.05.2015

Немножко погуглить и библиотека для дифференциального режима леонардо и меги https://www.davidpilling.com/wiki/index.php/DiffADC Можно мегу к мосту подключать и иметь хорошую точность при использовании внутреннего операционного усилителя. Для меги усиление 1, 10 , 200. Для леонардо 1, 10 , 40 , 200.

Гриша
Offline
Зарегистрирован: 27.04.2014

svm пишет:

Гриша пишет:

диод очень нелинейный прибор и сильно зависит от температуры - даже не думайте в эту сторону

 но есть нюанс. Измерять нужно не абсолютные значения, а разницу. И здесь при одинаковом изменении параметров диодов, результат останется неизменным.

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

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

Я бы взял модуль на ADS1015 (например - https://ru.aliexpress.com/item/32687421169.html) У него есть режим дифференциального измерения (получается 2 канала вместо 4-х обычных) и встроенный програмируеммый услилитель.

svorog
Offline
Зарегистрирован: 27.04.2017

Занижать сигнал не стал, так так собранная на столе схема показала хороший результат:

набросал простой код с выводом разницы показаний в сериалпорт

int inpin1 = A0;
int inpin2 = A2;
int val1 = 0;
int val2 = 0;
int val3 = 0;
void setup() {
  analogReference(DEFAULT );
  Serial.begin(9600);
}
 
void loop() {
  val1 = analogRead(inpin1);  // считывание значений с контакта 0
  val2 = analogRead(inpin2); 
  val3 = val2-val1;
  Serial.println(val3);      // отправка значений через последовательный порт
}

и при питании платы Мега и датчика от ноутбука показания считывались достаточно точно, не стабильность сигнала была не более 2 дискрет, и меня это устраивало, однако когда запитал эту схему от импульсного блока питания ситуация резко ухудшилась: нулевой сигнал начал плавать +- 50 дискрет, и это естественно никуда не годиться. Думал проблема в нестабильном питании, но при том же питании, подключил датчик  к промышленному измерительному модулю сигнал оказался стабильным +- 0.5мВ. вот и не пойму, стоит ли дальше мучится и пытаться использовать стабильный источник питания для датчика и в качестве опорного для платы или в принципе точные измерения в моем случае возможны только дифференциальным методом? (не учитывая конечно варианта со сборкой схемы с инструментальным усилителем или чем то подобным)

svm
Offline
Зарегистрирован: 06.11.2016

svorog пишет:

Занижать сигнал не стал, так так собранная на столе схема показала хороший результат:

набросал простой код с выводом разницы показаний в сериалпорт

int inpin1 = A0;
int inpin2 = A2;
int val1 = 0;
int val2 = 0;
int val3 = 0;
void setup() {
  analogReference(DEFAULT );
  Serial.begin(9600);
}
 
void loop() {
  val1 = analogRead(inpin1);  // считывание значений с контакта 0
  val2 = analogRead(inpin2); 
  val3 = val2-val1;
  Serial.println(val3);      // отправка значений через последовательный порт
}

и при питании платы Мега и датчика от ноутбука показания считывались достаточно точно, не стабильность сигнала была не более 2 дискрет, и меня это устраивало, однако когда запитал эту схему от импульсного блока питания ситуация резко ухудшилась: нулевой сигнал начал плавать +- 50 дискрет, и это естественно никуда не годиться. Думал проблема в нестабильном питании, но при том же питании, подключил датчик  к промышленному измерительному модулю сигнал оказался стабильным +- 0.5мВ. вот и не пойму, стоит ли дальше мучится и пытаться использовать стабильный источник питания для датчика и в качестве опорного для платы или в принципе точные измерения в моем случае возможны только дифференциальным методом? (не учитывая конечно варианта со сборкой схемы с инструментальным усилителем или чем то подобным)

У ноутбука, тоже импульсный блок питания, просто более качественный. Если стабильность и чувствительность от БП ноутбука достаточны, то есть смысл немного поработать с программной и аппаратной частью. Во первых поставить RC фильтра на аналоговые входы и желательно по питанию. Ну и усреднить показания (считывать не один раз, а несколько и показания усреднять). Поищите, где-то была тема про оверсемплинг. В промышленном модуле скорее всего есть дополнительные фильтра или стабилизаторы. И данные усредняются т.к. скорость изменения входных сигналов незначительная. Еще один источник нестабильности - банальные наводки. Схемотехника импульсных БП в целях электробезопасности предполагает связь с питающей сетью. Откуда по "земляным" проводам двух устройств, питающихся от разных БП могут гулять непредсказуемые токи. Можно попробовать запитать ноутбук от аккумулятора и посмотреть на изменения.

SLKH
Offline
Зарегистрирован: 17.08.2015

svorog пишет:

Точность  около 5мВ меня вполне устроит, мне требуется только установить пороговое значение выше которого плата будет выдавить дискретный сигнал на светодиод. Датчик питается от 5В, но выходной сигнал скомпенсирован и находится в диапазоне 0-100мВ.

Выходной сигнал - это что? Между какими точками на картинках?

 

Цитата:
Не совсем понимаю относительно чего будет происходить  измерение? если я буду мерить в этих точках относительно "Gnd" то я буду получать часть питающего напряжения с  потерей на резисторе. думаю рассчитать там ничего не получится. Думаю правильные показания будут только если я буду именно один провод относительно другого измерять, как тестером.

естественно, выход мостовой схемы - точки D и B.

Про дифференциальный каскад написано сразу в #1. Нужен 1 операционник.

SLKH
Offline
Зарегистрирован: 17.08.2015

svorog пишет:

АЦП ардуины будет измерять точки В и D относительно земли? измерения тестером показали что между В и землей  2,5 В, между D и землей 2,79 В. При этом сигнал не изменяется при воздействии на датчик. Измерение между точками В и D показывают значение 5 мВ и резко увеличиваются при  нажатии на датчик.

Не кажется, что в этом описании есть противоречия? 

B - C  2.5

D - C  2.79

D - B  0.29 было бы правдоподобнее.

Или есть какая-то ещё неизвестная земля, не соединенная с C?

 

svorog
Offline
Зарегистрирован: 27.04.2017

SLKH пишет:

Не кажется, что в этом описании есть противоречия? 

B - C  2.5

D - C  2.79

D - B  0.29 было бы правдоподобнее.

Или есть какая-то ещё неизвестная земля, не соединенная с C?

 

[/quote]

я поправился в сообщении ниже, в обеих точках 2,5 В с разницей в 5 мВ которые простым тестером я не увидел

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

Ардуиновский АЦП - кака Вот на ночь запустил измерение опорного напряжения встроенным в Атмегоу 328 АЦП и внешним АЦП на ADS1015 

svorog
Offline
Зарегистрирован: 27.04.2017

asam пишет:

Ардуиновский АЦП - кака Вот на ночь запустил измерение опорного напряжения встроенным в Атмегоу 328 АЦП и внешним АЦП на ADS1015 

спасибо за визуализацию, т.е. разброс примерно 15мВ при реальных 2мВ, и если ещё поместить все это в неблагоприятные условия, но ситуация наверное ещё больше усугубиться... Значит буду думать о внешнем АЦП.

Гриша
Offline
Зарегистрирован: 27.04.2014

svorog пишет:

 и если ещё поместить все это в неблагоприятные условия, но ситуация наверное ещё больше усугубиться... Значит буду думать о внешнем АЦП.

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

svorog
Offline
Зарегистрирован: 27.04.2017

Предполагается что работать будет в комнатных условиях, электроника размещается в системном блоке вместе с драйверами шаговых двигателей, блоками питания и т.п. думаю рабочая температура будет не более 60 градусов.

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

svorog пишет:

спасибо за визуализацию, т.е. разброс примерно 15мВ при реальных 2мВ, и если ещё поместить все это в неблагоприятные условия, но ситуация наверное ещё больше усугубиться... Значит буду думать о внешнем АЦП.

Побробую сегодня на ночь поставить аналогичный эксперимент но с noise reduction у ардуины. Может получше будет. В планах еще исследовать поведение АЦП в зависимости от темературы. Пока все было в районе 16С-18С

svm
Offline
Зарегистрирован: 06.11.2016

Не все так однозначно.  Спорить, что АЦП 328 хуже ADS 1015 никто не собирается. Но в случае измерения разницы, а не абсолютного значения двух напряжений, его преимущества только в большей разрядности. Если она нужна, то никуда не денешься. А если можно  обойтись без внешнего АЦП, то лучше не городить огород. Усложняется само устройство и добавление каждого элемента в схему снижает её надежность.

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

svm пишет:

Не все так однозначно.  Спорить, что АЦП 328 хуже ADS 1015 никто не собирается. Но в случае измерения разницы, а не абсолютного значения двух напряжений, его преимущества только в большей разрядности. Если она нужна, то никуда не денешься. А если можно  обойтись без внешнего АЦП, то лучше не городить огород. Усложняется само устройство и добавление каждого элемента в схему снижает её надежность.

Так при измерении разницы у ADS1015 преимуществ еще больше! Он может работать в диффернциальном режиме и измерять разнуцу сразу за одно преобразование. А встроенный должен делать 2 измерения причем с большей чем обычно задержкой из-за переключения каналов. То есть мы будем иметь погрешность 2-х измерений, что приводит к увеличени. общей погрешности 1.4 раза, плюс возможное изменение полезного сигнала за время измерения.

svorog
Offline
Зарегистрирован: 27.04.2017

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

svm
Offline
Зарегистрирован: 06.11.2016

svorog пишет:

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

Судя по Вашим мыслям, Вы далеко не гуманитарий. Выигрыш будет, но здесь следует учесть, что АЦП сможет измерять только если на входе напряжение меньше опорного. Т.е. или придется выбирать что будет опорным или ставить хотя-бы небольшой делитель, который неизбежно уменьшит разрешение. Все зависит от конкретных условий - возможного диапазона изменения контроллируемого напряжения.

Гриша
Offline
Зарегистрирован: 27.04.2014

UPD

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

Как обойти «подводные камни» при конструировании мостовых датчиков  - прочитайте для начала.

Обратите внимание на Рисунок 5, как устроено опорное напряжение REF не просто с делителя, а через операционник, при этом опора моста, АЦП и смещение усилителя питаются от одного источника. 

в тут нашел схему, по поводу номиналов есть вопросы, но идейно схема рабочая. 

nik182
Онлайн
Зарегистрирован: 04.05.2015

Написал маленький тест на дифф режим леонардо с помощью приведённой выше библиотеки. Вывод в кодах АЦП. Подключил к мосту и посмотрел как работает внутренний дифф усилитель с АЦП. К сожалению питание грязное, но общая картина понятна. Отлично работает. Милливольты измеряет.

#include "DifferentialADC.c"

void setup() {
  Serial.begin(9600);
  while (!Serial) ; // Needed for Leonardo only
}

void loop() {
  int code;
  int val;
  val = analogVoltageSetup();

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  code = analogGetCode(A1, A0, 200);
#elif defined(__AVR_ATmega32U4__)
  code = analogGetCode(A5, A0, 40);
#elif defined(__AVR_ATmega1284__)
  code = analogGetCode(A1, A0, 200);
#else
#error "undefined processor"
#endif
  val = analogReadDiffCode(code);
  Serial.print("A0= ");
  analogRead(A0);
  delay(1);
  Serial.print(analogRead(A0));
  Serial.print("   A5= ");
  analogRead(A5);
  delay(1);
  Serial.print(analogRead(A5));
  Serial.print("   Diffx40= ");
  Serial.println(analogSignedValue(val));
  delay(500);
}

Вывод при вращении резистора моста - 10 разрядов разницы (50 мВ) между входами А0 и А5 дают 400 разрядов в дифф режиме, что соответствует чувствительности около 0.1 мВ на разряд АЦП. К тому же показывает положительное или отрицательное напряжение на мосте. На меге будет похожий результат. Она у ТС есть и никаких дополнительных АЦП и усилителей ненужно. 

A0= 790   A5= 810   Diffx40= 511
A0= 792   A5= 804   Diffx40= 362
A0= 781   A5= 806   Diffx40= 479
A0= 789   A5= 805   Diffx40= 368
A0= 781   A5= 792   Diffx40= 292
A0= 788   A5= 776   Diffx40= -242
A0= 791   A5= 767   Diffx40= -412
A0= 791   A5= 767   Diffx40= -463
A0= 789   A5= 765   Diffx40= -400
A0= 788   A5= 765   Diffx40= -328
A0= 787   A5= 752   Diffx40= -500

  

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

nik182 пишет:
дополнительных АЦП и усилителей ненужно.
Ну, понятно, если усилитель уже есть на борту. Я вот про мегу знал, что там есть, а про тиньку как-то просмотрел, хотя даташит читал когда-то полностью. Видать, забыл. Теперь буду помнить, спасибо.