16 и 17 каналы АЦП STM32F0
Dec. 6th, 2017 09:47 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Пытаюсь измерять температуру чипа и уровень напряжения Vdd (по Vrefint). Фигня какая-то получается. Судя по даташиту, температуру измерять так надо:
И фигвам! Показания 16 канала скачут так сильно, что вычисленная таким образом температура то 50°C показывает, то 60! При том, что сам чип едва теплый.
Аналогично с Vdd: т.к. к 17 каналу прицеплено опорное напряжение, измеряя его, можно понять значение Vref (у меня оно совпадает с Vdd):
Здесь тоже скачут цифры, и мне показывает то 3.3В, то вообще 3.6В…
Тут до меня дошло: МК питается от внутреннего источника преобразователя на PL2303.
Подключил к USB, чтобы питание с набортной "кренки" шло. Стабильно 3.2..3.3В. Температура тоже нормальная: 32..34°C, без таких диких бросков.
То ли питания нормального не хватало от PL2303, то ли этот ее внутренний LDO так шумит, что АЦП офигевает!
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 так шумит, что АЦП офигевает!