В данной статье сделана попытка сравнить работу двух АЦП – cs1238 (Chipsea Tech Shenzhen) и mcp3424 (Microchip) в диапазоне входных напряжений 0-30мВ.
Диапазон напряжений выбран под требуемый рабочий диапазон температур (20 °С…760 °С) термопары хромель-алюмель.
cs1238 - прецизионный АЦП с двумя входными дифференциальным каналами и встроенным температурным датчиком. Источник опорного напряжения – внешний. Перевод даташита на английский язык младшей версии - cs1237.
mcp3424 - прецизионный АЦП с четырьмя входными дифференциальным каналами. Источник опорного напряжения – внутренний = 2.048В ± 0.05%, типовой температурный дрейф 15 ppm/°C.
Общая схема эксперимента:
Микроконтроллер esp32 через схему формирования уровней вырабатывает два тестовых напряжения AOUT+ и AOUT-, которые затем подаются на дифференциальный вход mcp3424 (задействован только первый канал) и на дифференциальные входы модуля на основе cs1238. Модуль на основе cs1238 помещен в «климатическую камеру». После формирования сигналов esp32 производит опрос показаний cs1238, mcp3424, их преобразование, сравнение и отправку результатов на компьютер.
Схема модуля на основе cs1238:
Схема «тестера»:
Вывод IO25 – выход первого канала встроенного в esp32 8-ми битного ЦАП (DAC), с выходным диапазоном напряжений от 0В (для кода DAC = 0) до 3.3В (для кода DAC = 255). Линия AOUT- смещена относительно GND на 1.25В. На линии AOUT+ формируется напряжение UAOUT+ = (UDAC*47/2247 + 2.5)/2 ≈ 0.0105* UDAC + 1.25 В. Таким образом между линиями AOUT+ и AOUT- формируется тестовый сигнал в диапазоне от 0 до 30мВ, который далее подается на mcp3424 (для оцифровки) и на испытуемый модуль cs1238.
Подключение "тестера" к модулю cs1238:
Каналы 1,2 соединены вместе, на вход второго канала подключен резистор 100К. Сигнальные провода AOUT+ и AOUT- подключены экранированной витой парой, экран соединен с GND. AOUT+ и AOUT- припаяны на вход первого канала cs1238 к выводам конденсатора C4.
Питание и линии обмена подключены проводом мгтф-0.07, без экранировки.
Длинна обоих кабелей 0.5-0.7м.
АЦП mcp3424 сконфигурирован следующим образом: коэффициент усиления PGA=8, разрядность = 18 бит (≈3.75 выборок / с). С учетом встроенного ИОН = 2.048 В, для mcp3424 получается фиксированный коэффициент для расчета напряжения: 1.953125 мкВ / код.
Частота преобразования для cs1238 задавалась равной 40 Гц. Схема опроса:
Сначала опрашиваются каналы 1, 2 с коэффициентом усиления = 2;
Затем опрашивается температурный канал 3, с коэффициентом усиления = 1.
При переключении каналов на 40 Гц опросе cs1238 выжидает три цикла преобразования, таким образом опрос каждого канала занимает ≈ 100мс. Что для трех каналов cs1238 приводит к ≈3.33 выборок / с.
Для перевода кода измерения канала в мкВ для каналов 1,2 и в градусы для канала 3 используем следующие формулы:
U1 = CODE1*K1(CODE3) + OFFSET1
U2 = CODE2*K2(CODE3) + OFFSET2
T = KT*CODE3 + T0
где:
U1, U2 – показания каналов 1,2 cs1238, в мкВ;
T – температура, в ° C;
KT, T0 - коэффициенты преобразования для расчета температуры;
CODE1, CODE2, CODE3 – коды каналов 1,2,3 cs1238;
K1(CODE3), K2(CODE3) – коэффициенты преобразования мкВ/код для каналов 1, 2, рассчитанные по показаниям температурного канала cs1238;
OFFSET1, OFFSET2 – смещение ноля первого и второго канала cs1238.
Калибровка
Для перевода полученных от cs1238 кодов с каналов 1,2,3 в физические величины (мкВ, °C) необходимо рассчитать коэффициенты преобразования. Определение коэффициентов преобразования мкВ/код, ° С/код и смещений cs1238 было сделано следующим образом:
модуль cs1238 нагревался/охлаждался до определенной температуры;
выставлялся уровень DAC = 0, после чего выдерживалась пауза 1с, и производилось 200 замеров mcp3424, с параллельным опросом трех каналов cs1238 (получалось 207-208 замеров). Полученные коды усреднялись;
выставлялся уровень DAC = 255, после чего выдерживалась пауза 1с, и производилось 200 замеров mcp3424, с параллельным опросом трех каналов cs1238. Полученные коды усреднялись;
по полученным усредненным кодам рассчитывались коэффициенты преобразования мкВ/код и смещения для каналов 1, 2.
Полученные точки температурной калибровки приведены в таблице ниже:
Код температурного канала |
Коэффициент канала 1, мкВ/код |
Смещение канала 1, мкВ |
Коэффициент канала 2, мкВ/код |
Смещение канала 2, мкВ |
T, °C |
767746.5 |
0.07433717186 |
46.86 |
0.07418846855 |
46.81 |
23.2 |
775723.0 |
0.0743242063097 |
46.54 |
0.0741755246669 |
46.56 |
26.2 |
776171.1 |
0.0743231840299 |
46.71 |
0.0741741020057 |
46.75 |
26.4 |
776476.4 |
0.0743224395224 |
46.85 |
0.0741741349055 |
46.76 |
26.6 |
776677.7 |
0.0743221557261 |
46.84 |
0.0741740211089 |
46.67 |
26.7 |
728753.4 |
0.0743869040271 |
47.25 |
0.0742382058481 |
46.87 |
9.6 |
728650.4 |
0.0743875751442 |
46.96 |
0.0742377931319 |
46.87 |
9.6 |
728536.0 |
0.0743869967431 |
47.15 |
0.0742379309724 |
46.92 |
9.5 |
728402.1 |
0.0743867854733 |
47.16 |
0.0742379722261 |
46.82 |
9.5 |
804210.3 |
0.0742753200894 |
46.77 |
0.0741265830651 |
46.77 |
36.2 |
804348.4 |
0.0742757288193 |
46.69 |
0.0741272288605 |
46.68 |
36.3 |
804590.5 |
0.0742751702964 |
46.72 |
0.0741271588491 |
46.65 |
36.3 |
804659.2 |
0.0742754539646 |
46.59 |
0.0741270329251 |
46.42 |
36.4 |
804742.1 |
0.0742753717948 |
46.63 |
0.0741264186894 |
46.59 |
36.5 |
831748.8 |
0.0742262506358 |
46.48 |
0.0740777874452 |
46.53 |
45.6 |
831893.9 |
0.0742260332585 |
46.47 |
0.0740778526887 |
46.50 |
45.7 |
832124.3 |
0.0742252961772 |
46.64 |
0.0740776555629 |
46.37 |
45.8 |
831416.9 |
0.074227186345 |
46.54 |
0.0740788405717 |
46.46 |
45.7 |
831581.0 |
0.074226823152 |
46.48 |
0.0740786235061 |
46.50 |
45.6 |
Исключая часть точек (первые замеры в группе температур слегка выбиваются из последующих, видимо это связано с тем что модуль к началу первых замеров еще не достаточно термостатировался) получаем зависимости коэффициентов от кода температурного канала.
Зависимость температуры от кода температурного канала (3-й канал cs1238) аппроксимируем линейной зависимостью:
Коэффициент мкВ/код в зависимости от кода температурного канала аппроксимируем зависимостью второго порядка, для примера приведен 1-й канал:
Смещение ноля каналов 1 и 2 примем константой, т.к. разброс не превышает 1 мкВ.
Таким образом получаем следующие коэффициенты в зависимости от кода температурного канала:
K1(CT) = -3.788712696323720E-15*CT2 + 4.347611549088180E-09*CT + 7.323084189812140E-02 мкВ / код;
K2(CT) = -3.795516417335000E-15*CT2 + 4.368142312542810E-09*CT + 7.307031291260290E-02 мкВ / код;
T(CT) = 3.502402389918730E-04*CT - 2.455608246967150E+02 ° C;
OFFSET1=46.73 мкВ;
OFFSET2=46.65 мкВ.
Ввиду того что каналы 1 и 2 подключены по разному (канал 2 подключен через делитель 100К-200 Ом) коэффициенты мкВ/код для каналов 1 и 2 отличаются. Отношение коэффициентов K1/K2 = 1.002 + 400.4/RВХ, где RВХ – входное сопротивление одного канала АЦП. Отсюда можно косвенно оценить величину входного сопротивления АЦП: RВХ = 400.4/(K1/K2-1.002) ≈ 70 М.
Шум входного сигнала
Для начала сравним уровни шума mcp3424 и cs1238. Делаем это следующим образом:
На DAC задаем уровень тестируемого сигнала;
Выдерживаем паузу 1с;
Производим 200 замеров mcp3424 и параллельно производим замеры с каналов 1,2,3 cs1238;
Пересчитываем показания cs1238 в микровольты с применением калибровочных коэффициентов;
Пересчитываем показания mcp3424 в микровольты;
Рассчитываем плотность вероятности для дискретных интервалов [U-1 мкВ, U+1 мкВ), где U – середина интервала, задается с шагом 2 мкВ.
В итоге получаем следующие распределения для разных уровней тестового сигнала:
1) для кода DAC=0 (начало интервала тестирования):
2) для кода DAC=64:
3) для кода DAC=128:
4) для кода DAC=192:
5) для кода DAC=255 (конец интервала тестирования):
Как видим распределения cs1238 и mcp3424 практически не отличаются и отдаленно напоминает нормальное распределение. Амплитуда шума тестового сигнала составляет порядка 8мкВ.
Запускаем поток измерений
Далее на вход модуля подавался ступенчатый тестовый сигнал, соответствующий линейно нарастающим от 0 до 255 кодам DAC. После подачи очередного значения на DAC выдерживалась пауза 1с, после чего считывались показания mcp3424 и трех каналов cs1238. Ниже приведены графики разницы показаний cs1238 и mcp3424. Параллельно производился нагрев/охлаждение модуля в камере.
Обозначения на графиках:
deltaC1, uV – разница между показаниями первого канала cs1238 и mcp3424, мкВ;
deltaC2, uV – разница между показаниями второго канала cs1238 и mcp3424, мкВ;
T, C – температура, рассчитанная по показаниям третьего канала cs1238, °C.
Шаг сетки по оси OX - 256 секунд, или 256 измерений.
Первый участок, от 0 до 5120с:
Второй участок, от 5120с до 10240с:
Третий участок, от 10240с до 15360с:
Четвертый участок, от 15360с до 22016с:
Разница в показаниях на интервале времени 13000с-16000с доходящая до 50мкВ вероятнее всего вызвана нагревом mcp3424. После переключения камеры на охлаждение на ~16000с с корпуса «тестера» была снята крышка для охлаждения внутренностей до комнатной температуры. После чего разница в показаниях mcp3424 и cs1238 не превышала 8мкВ, т.е. уровня шума входного сигнала.
VT100
Не совсем понятно, что использовалось как входные данные для калибровок — 8лбитный выход или данные [априорно] более точного АЦП.
FGV Автор
Выход встроенного 8-ми битного ЦАП esp32 использовался для задания входного напряжения на два АЦП: mcp3424 и cs1238. Калибровал cs1238 по показаниям mcp3424 (иначе какой смысл их показания потом сравнивать?).