Отже, у вас є:
R_x R_fixed
Vcc -----^v^v^----+----^v^v^------- Gnd
|
|
+--- V_sensed --- ADC input
Rx - якийсь невідомий опір (можливо, датчик якоїсь форми). А ви зараз використовуєте R_fixed на 0,1% для ефективного розрахунку R_x, але ви хочете використовувати більш дешевий фіксований резистор з меншим допуском, можливо, на 1%. При цьому ви хочете виконати якусь градуювання під час виробництва, щоб виправити підвищену помилку, чи правильно це?
Як ви це робите, це введення байта в EEPROM (або якусь іншу енергонезалежну пам'ять), яка діє як «компенсація» у вашому обчисленні, і це абсолютно бездоганно робити. Річ у тім, що це обійдеться вам у певний час під час виробництва, щоб зробити калібрування. Для того щоб здійснити калібрування, вам знадобиться один з цих 0,1% резисторів (називайте його R_cal) номінально порівнянного значення з вашим 1% резистором, щоб замінити в ланцюг R_x. Вимірюючи V_sensed, ви можете більш точно визначити значення R_fixed (тобто приблизно на 0,2%).
Якщо R_cal і R_fixed номінально однакові, ви очікуєте, що V_sensed дорівнює Vcc / 2. Ви будете зберігати виміряне відхилення від Vcc / 2 як байт зміщення калібрування і завжди додавати його до V_sensed, як сприймається вашим АЦП.
Як я бачу, підводний камінь полягає в тому, що в процесі вимірювання, а згодом і в зберіганні значення, є робота. Ще одна річ, яку слід враховувати як підводний камінь, полягає в тому, що температура може зіграти роль у спричиненні відхилення опору від номінального значення, тому вам потрібно буде досить добре регульоване середовище калібрування, що контролюється температурою. Нарешті, не забудьте скористатися каліброваним вимірювальним обладнанням, оскільки це ще одне потенційне джерело помилок присадки. Остання помилка, яку я можу придумати, - байт калібрування повинен зберігатися в одиницях lsb вашого АЦП (тому якщо у вас є 12-бітний АЦП, одиниці байта зміщення калібрування повинні бути "Vcc / 2 ^ 12 Вольт") .
Редагувати
Якщо ви використовуєте два нерухомих резистора, щоб розділити велику напругу на нижню шкалу наступним чином:
R1_fixed R2_fixed
V_in -----^v^v^----+----^v^v^------- Gnd
|
|
+--- V_sensed --- ADC input
Перероблений розділ
Отже, тепер ви хочете використовувати точну опорну напругу (називати її V_cal) для стимулювання V_in під час етапу калібрування у виробництві. Те, що у вас є, є теоретично:
V_sensed = V_predicted = V_cal * R2_fixed / (R1_fixed + R2_fixed) = V_cal * slope_fixed
Але те, що у вас є насправді:
V_sensed = V_measured = V_cal * R2_actual / (R1_actual + R2_actual) = V_cal * slope_actual
Насправді ви маєте інший нахил функції передачі в реальності, ніж те, що ви могли б передбачити за значеннями резистора. Відхилення від передбачуваної функції передачі дільника буде лінійним щодо вхідної напруги, і ви можете з упевненістю припустити, що 0 В в дасть вам 0 В, тому здійснення одного точного вимірювання опорної напруги повинно дати вам достатньо інформації для характеристики цього коефіцієнта лінійної шкали . А саме:
V_measured / V_predicted = slope_fixed / slope_actual
slope_actual = slope_fixed * V_measured / V_predicted
І ви будете використовувати slope_actual як ваше каліброване значення, щоб визначити напругу як функцію вимірюваної напруги.
нижче люб’язно надано @markrages
Для отримання фактичної чутливості нахилу до значень резистора необхідна часткова диференціація: