Поиск

16 и 17 каналы АЦП STM32F0


Пытаюсь измерять температуру чипа и уровень напряжения Vdd (по Vrefint). Фигня какая-то получается. Судя по даташиту, температуру измерять так надо:

int32_t temperature = ((int32_t) *TEMP30_CAL_ADDR - ADC_array[6]); // 16 канал АЦП
temperature *= (int32_t)(1100 - 300); // с десятыми долями
temperature = temperature / (int32_t)(*TEMP30_CAL_ADDR - *TEMP110_CAL_ADDR);
temperature += 300;

И фигвам! Показания 16 канала скачут так сильно, что вычисленная таким образом температура то 50°C показывает, то 60! При том, что сам чип едва теплый.
Аналогично с Vdd: т.к. к 17 каналу прицеплено опорное напряжение, измеряя его, можно понять значение Vref (у меня оно совпадает с Vdd):

uint32_t vdd = ((uint32_t) *VREFINT_CAL_ADDR) * (uint32_t)33;
vdd /= ADC_array[7];

Здесь тоже скачут цифры, и мне показывает то 3.3В, то вообще 3.6В…

Тут до меня дошло: МК питается от внутреннего источника преобразователя на PL2303.
Подключил к USB, чтобы питание с набортной «кренки» шло. Стабильно 3.2..3.3В. Температура тоже нормальная: 32..34°C, без таких диких бросков.
То ли питания нормального не хватало от PL2303, то ли этот ее внутренний LDO так шумит, что АЦП офигевает! eddy_em.livejournal.com

Добавить комментарий