Ви не увійшли.
То в вас індуктивність проводів теж трохи грає.
На те воно й перехідний процес. Але ж кажу, в моєму експерименті цей фактор виявився ніхтовно малий.
Нормально буде порахувати окремо ємність провода і окремо провода з конденсатором. І порахувати різницю.
Це й називається "калібровка". Там навіть API є
Тільки просто "порахувати різницю" буде недостатньо. Намалюйте еквівалентну схему: до схеми у статті вище домалюйте ємності між пінами, а також між кожним піном і землею, і проаналізуйте, як при цьому змінюється напруга на вимірюваному піні (A0 в статті, A2 в бібліотеці).
То в вас індуктивність проводів теж трохи грає.
Нормально буде порахувати окремо ємність провода і окремо провода з конденсатором. І порахувати різницю.
Доречі, як писав Honey вище, періхідний процес там також присутній. Але у мене з провідником 30 см і конденсатором 100 пФ там буквально три коливання на частоті ≈60 МГц, чим у порівнянні з часом sample-and-hold АЦП можна знехтувати.
Не зовсім це розумію, чому ця паразитна ємкість не додається до наяної, а взагалі усе перекриває?
Вона додається, тільки не лише до ємності вимірюваного конденсатора, але й до паразитної ємності між піном та землею. Її вплив на значення фактичної паразитної ємності виявляється більшим, ніж на ємність вимірюваного конденсатора.
а Я питаю!!! - чому вказаний код у такому випадку ЗМЕНШУЄ показники???
Тому що значення ємності обчислюється як
capacitance = (long)val * _inCapToGnd / (max(_maxAdcValue - val, 1));Де val - напруга на піні A2 відносно землі, а _inCapToGnd - очікувана ємність між цим піном та землею. Для Atmega328P дефолтове значення - 26.3 пФ.
Підключений провідник збільшує цю ємність фактично, а в програмі значення залишається тим же дефолтовим. Напруга обернено пропорційна ємності, тому фактичне прочитане значення val стає менше. Але множиться на ту ж саму константу, отриману для підключення без провідників.
Вимірюваний конденсатор (разом з провідниками) та паразитна ємність піна A2 (також разом з провідниками) утворюють дільник заряду (аналогічно як дільник напруги на резисторах). Тому фактична на напруга на A2 залежить як від ємності між пінами (вимірюваний конденсатор + провідники), так і від паразитної ємності між піном A2 і землею (Cstray + провідники).
Цей "метод" (припускаю, бо в код не вникав) вимірює відношення ємності між пінами до паразитної ємності пінів (щось біля 7 пФ для AVR). При підключенні провідників ця паразитна ємність значно зростає. .
Не зовсім це розумію, чому ця паразитна ємкість не додається до наяної, а взагалі усе перекриває?
Виходячи з ідеї, яка тут використовується, додавання довгих провідників (опорів, індуктивностей) не вплине на результат
Чому ж не вплине, коли там припускається, що ємність піна A2 відносно шин живлення - 7 26.3 пФ. А з довгими провідниками вона більша. Так, взаємна ємність між пінами збільшуєтсья на взаємну ємність провідників, але й заряд розподіляється на більшу ємність (Cstray + ємність провідника на A2 відносно землі), тому напруга на A2 стає менша. Не здивуюсь, якщо впливає саме провідник на A2.
dimich, навіщо писати відповідь, якщо ви нічого не зрозуміли у запитанні!???
З чого ви зробили такий висновок, що я нібито чогось не зрозумів у запитанні? Ви спитали, чому результати вимірювання ненадійні, я відповів - тому що метод вимірювання ненадійний.
А які саме фактори там впливають - то вже інше питання. Ви б хоч вказали, яку ємність вимірювали і який результат отримали при якій довжині провідників. Чи змінюється результат, коли провідники розведені в різні сторони, і коли скручені між собою.
Взагалі АЦП у AVR призначений для вимірювання напруги від джерела з відносно невеликим вихідним опором. З довгими провідниками, окрім ємності та індуктивності, ще й 50 Гц від мережі можуть впливати.
Так я і не пропоную купляти. До нього є програма, можна вивчати. В мануалі розписані всі формули. Просто якщо люди провели роботу, і навіть задокументували - навіщо проходити по тим же граблям самостійно?
Виходячи з ідеї, яка тут використовується, додавання довгих провідників (опорів, індуктивностей) не вплине на результат, але мають закінчитись перехідні процеси. Додайте в коді безпосередньо перед analogRead() невеликий delay().
dimich, навіщо писати відповідь, якщо ви нічого не зрозуміли у запитанні!???
Є так званий тестер Маркуса. Буває і на Алі в готовому вигляді, і в вигляді набору для пайки.
Вивачте, є потреба використання багато-адресних звернень до МК, ваша пропозиція не є конструктивною у площіні програмного рішення задачі.
Є так званий тестер Маркуса. Буває і на Алі в готовому вигляді, і в вигляді набору для пайки.
Але, якщо, у системі з'єднань з'являються провідники - усе летить шкереберть...
Провідники теж мають свою ємність.
Хоча, стандартний тестер, з функцією вимірювання ємкості, при додаванні до конденсатора, паралельно-прокладених провідників - видає у результаті зростання ємкості.
Тестер вимірює саме ємність між входами. Ємність між провідниками просто додається до ємності конденсатора.
Цей "метод" (припускаю, бо в код не вникав) вимірює відношення ємності між пінами до паразитної ємності пінів (щось біля 7 пФ для AVR). При підключенні провідників ця паразитна ємність значно зростає.
як його можна вирішити на програмному рівні, без застосування апаратних рішень?
Хіба що калібрувати кожен раз для конкретних провідників з їх розташуванням у просторі та іншими зовнішніми факторами. Або використовувати класичні методи вимірювання ємності. Було би все так просто - цей "метод" давно б використовували у вимірювальних приладах.
Є ще один цікавий варіант - але в мене він працує лише між аналоговими контактами...