Итак, вы получили:
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
Для получения фактической чувствительности наклона к значениям резистора требуется частичное дифференцирование: