eddy_em: (Default)
eddy_em ([personal profile] eddy_em) wrote2017-12-06 09:47 pm

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 так шумит, что АЦП офигевает!

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org