В данной статье сделана попытка сравнить работу двух АЦП – 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. Сначала опрашиваются каналы 1, 2 с коэффициентом усиления = 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 было сделано следующим образом:

  1. модуль cs1238 нагревался/охлаждался до определенной температуры;

  2. выставлялся уровень DAC = 0, после чего выдерживалась пауза 1с, и производилось 200 замеров mcp3424, с параллельным опросом трех каналов cs1238 (получалось 207-208 замеров). Полученные коды усреднялись;

  3. выставлялся уровень DAC = 255, после чего выдерживалась пауза 1с, и производилось 200 замеров mcp3424, с параллельным опросом трех каналов cs1238. Полученные коды усреднялись;

  4. по полученным усредненным кодам рассчитывались коэффициенты преобразования мкВ/код и смещения для каналов 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. Делаем это следующим образом:

  1. На DAC задаем уровень тестируемого сигнала;

  2. Выдерживаем паузу 1с;

  3. Производим 200 замеров mcp3424 и параллельно производим замеры с каналов 1,2,3 cs1238;

  4. Пересчитываем показания cs1238 в микровольты с применением калибровочных коэффициентов;

  5. Пересчитываем показания mcp3424 в микровольты;

  6. Рассчитываем плотность вероятности для дискретных интервалов [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мкВ, т.е. уровня шума входного сигнала.

Комментарии (2)


  1. VT100
    21.11.2022 20:14

    Не совсем понятно, что использовалось как входные данные для калибровок — 8лбитный выход или данные [априорно] более точного АЦП.


    1. FGV Автор
      21.11.2022 23:14

      Выход встроенного 8-ми битного ЦАП esp32 использовался для задания входного напряжения на два АЦП: mcp3424 и cs1238. Калибровал cs1238 по показаниям mcp3424 (иначе какой смысл их показания потом сравнивать?).