Вот собрал такое (пока на макете) - работает (четыре канала), подключал DS18B20, Pt100, TMP36, HIH3610, ТСМ-50. Используется трехпроводная схема. ШИМ с PD4 задает ток для резистивных датчиков. U8A - повторитель после фильтра, U8B - генератор тока. AO0-AO3 - выходы тока, AI0-AI3 - входы напряжения. PA4 - используется для работы с цифровыми датчиками (для
K_AV - им нужен подтягивающий резистор - ток 0,5 - 2 мА - вот по каналу генератора тока он и генерируется, работает прекрасно). После RC фильтра аналоговый сигнал поступает на PA3. Если нужно, АЦП используется в диф. режиме (по входу PA2 ШИМом с PD5 задается уровень на втором диф. входе, то есть неиспользуемый диапазон резистивных датчиков отрезается). Для датчиков с большим сигналом (TMP36, HIH3610) используется обычный, не диф. вход. Для 100 и 50 омных включается внутр. усилитель 10х.
В программе создан массив параметров для типов датчиков (задан ток, который нужен данному датчику, режим АЦП (диф/обычный, Ку), нужен ли цифровой обмен).
Алгоритм приблизительно такой :
1.Конфигурируем АЦП в соответствующий выбранному каналу (подключенному датчику) режим (обычный/диф., Ку)
2.В регистр ШИМа тока пишем значение, соответствующее току для данного типа датчика, в регистр ШИМа диф. сигнала - соответствующее значение.
3.пауза для установления параметров
4.меряем АЦП или обмениваемся с DSxxx
5.пишем считанное значение в массив измеренных значений
6.выключаем ток
7.пауза
8.переключаемся на следующий канал
9.перейти на п.1
Точности пока хватает (в +-3 градуса укладывается). Смещения компенсируются калибровкой по двум точкам (у LM358 они большие, но компенсируются нормально, пробовал MCP617 - значительно лучше, OPA2335 должно быть еще лучше).
Если применить вместо встроенного внешний АЦП (например ADS1110) c программируемым усилением, должно быть вообще прекрасно.
Эскизы прикрепленных изображений