eddy_em: (Default)
[personal profile] eddy_em
Пытаюсь измерять температуру чипа и уровень напряжения 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 так шумит, что АЦП офигевает!

April 2025

S M T W T F S
  1 23 45
67 89101112
13141516171819
20212223242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2025 08:33 pm
Powered by Dreamwidth Studios