Вот основная идея:
V1 - это фильтрованный выход ШИМ, а R2 - ваш датчик. U1 - преобразователь напряжения в ток, при этом ток через нагрузку R1 равен I = V1 / R2. Это означает, что напряжение на R1 зависит от обоих входов. U2 и U3 - инструментальный усилитель с коэффициентом усиления 10, который усиливает напряжение на R1.
При R1 = 100 Ом и V1 = 0..5V схема работает для R2 = 50..5000, например, на два порядка, чего, как вы говорите, должно быть достаточно.
Что вы делаете, вынимает и сравнить его с опорным напряжением (4V можно было бы использовать здесь для максимального диапазона динамического) и использовать последовательное приближение на V1 , чтобы выйти как можно ближе к опорному напряжению. Из V1 и известного падения напряжения на R1 (например , опорное напряжение) вы можете Вычислит значение R2, сенсор. Это, конечно, даст вам результат только в пределах разрешения ШИМ, но вы можете использовать второй инструментальный усилитель, чтобы усилить ошибку (разницу между выходным и опорным напряжением), чтобы получить ее в диапазоне АЦП вашего микроконтроллера, и это даст вам дополнительные биты разрешения.
Вам нужны два операционных усилителя (U1 и компаратор) и два инструментальных усилителя. Используйте настоящие, вместо того, чтобы делать их из операционных усилителей, потому что неточности резисторов и операционных усилителей приведут к ошибке.
Если двух порядков недостаточно, вы можете заменить R1 цифровым потенциометром, чтобы получить еще одну степень свободы. Я никогда не работал с ним, поэтому я не знаю, насколько они точны и нужно ли такое решение для калибровки или нет.
Кроме того, я должен отметить, что именно jpc пришел с идеей.
ОБНОВИТЬ:
Хорошо, я должен согласиться с OP, что это не совсем ответ на его вопрос (хотя это решает проблему технически). Я позволил себе увлечь себя «адаптивным усилителем» в названии в качестве предлога для создания некоторого аналогового дизайна. Забудьте все написанное выше, если вы не хотите узнать немного (немного) об операционных усилителях. Вот, я надеюсь, лучший ответ и гораздо более простое решение:
Используйте резистивный делитель, работающий от регулятора напряжения (чтобы отделить его от помех других схем), с верхним резистором, настроенным примерно на максимальное сопротивление, которое могут иметь ваши датчики (Rmax), и с нижним резистором, являющимся датчиком.
Установите опорное напряжение для вашего АЦП наполовину выходе регулятора напряжения.
Затем вы измеряете напряжение на датчике с помощью АЦП. Таким образом, вам нужен только один несимметричный канал на датчик. Я сделал рекомендацию ADC в другом посте.
Если вы используете 10-битный АЦП, который интегрирован в упомянутые вами микроконтроллеры, вы не получите большой динамический диапазон. Расширение диапазона с использованием аналоговых схем, таких как тот, который я первоначально опубликовал, добавило бы слишком много дополнительных деталей, поэтому я бы порекомендовал просто использовать какой-нибудь 24-битный АЦП, как ADS1256, который я рекомендовал в другом посте, потому что он даст вам низкий уровень шума и высокий динамический диапазон в одной микросхеме (плюс крошечный эталонный эталон и регулятор крошечного напряжения, который также может быть крошечным). Вы также можете попробовать отключить регулятор и включить резистивный делитель непосредственно из эталонного сигнала - это отнимет у вас 1 бит разрешения, но их все равно будет много). Вам нужно будет выполнить некоторые вычисления («Автоматическая калибровка путем нахождения минимальных и максимальных значений в данном окне анализа» - хорошая идея),
Я надеюсь, что это немного более полезно.
ОБНОВЛЕНИЕ 2:
Это последнее: я изучал микроконтроллеры MSP430 от TI и обнаружил, что некоторые из них имеют 16-битный сигма-дельта АЦП с внутренней ссылкой. А именно MSP430F2003 и MSP430F20013 . Это будет ваше решение с одним чипом, если вы готовы отказаться от Atmels. Очень низкая мощность тоже. И у них в очереди микроконтроллеры с 24 АЦП, но они еще не в производстве. Кроме микроконтроллеров PSoC от Cypress, которые имеют 20-битные сигма-дельта АЦП ( серии PSoC 3 и PSoC 5 ), также со ссылкой. Это было бы еще лучше.