VREFINT_CAL и иже с ним

Решил я воспользоваться встроенной опорой в STM32 и вроде бы ничего не предвещало борьбы с необъяснимой фигней… Нашел формулу Vdda=3300*VREFINT_CAL/VREFINT приделал ее в STM32F1 -там опора не имеет фабричной калибровки и ее надо самому калибровать посмотрел примерное значение что то типа 1479 (при моем значении питания получалось 1205mV) сделал калибровку +/-127 и в принципе все нормально — грел феном, помещал в морозилку все достаточно пристойно. Есть только один арифметический нюанс, что при изменении опоры на 1 единицу АЦП, напряжение изменяется аж на 2mV!, но опять же это все это в пределах ожидаемой погрешности измерения. Реально при охлаждении в холодильнике референсное напряжение 5000mV (при комнатной температуре) измерялось от 4999 до 5005mV при что то типа -15С.
Но есть еще железяки на STM32F042 И у них должен быть записан фабричный VREFINT_CAL по адресу 0x1FFFF7BA! Казалось бы бинго! При производстве можно не тыкать тестером и не калибровать текущее напряжение питания, но не тут-то было. Я взял две платы и на них вычисляемое значение было аж на 30mV выше чем измеряемое!, решил не поверить AN8008 взял APPA30R — все правильно измеряется. На одном экземпляре при измерении вычислялось 3330mV при питании 3300mV, а на другом 3365mV при питании 3329mV.


Ну все думаю под вечер чета моя кукуха тово, не может же STM так нагло врать, хотя конtчно они указыват допуск калибровки +/-10mV, но у меня то аж 30mV!? Наверное мои кривые косые платы, перекосы земли, фазы Луны и Марса! Взял китайскую платку на STM32F030 там вычислялось 3295mV при питании 3286mV, что почти в допуске.

Взял свои платы на STM32F303 на одной вычислялось 3300mV питание было 3301mV почти бинго, на другой тоже вычислялось 3300mV но измерялось 3295-3297mV, но на ней был грязный DC/DC и она не предназначалась для аналоговых сигналов.


И что это было? Если взять STM32F042 и самому откалибровать значение опоры то она будет показывать все нормально, но почему такое странное фабричное значение?
Частота АЦП — шина деленная на 4 или асинхронный HSI — пофиг не влияют, время семплирования самое большое на 030/042 — 239_5, на 303 — 601_5, я менял и его на поменьше не особо влияет.
Из всех моих действий вытекает то ли там, что-то с калибровкой, то ли конкретно у меня что то не так с 042.
Проект для Cube IDE в приложении
Я нашел несколько ссылок в сети где у людей тоже врала опора, но им там говорили что у них что то то не так и на этом все заканчивалось.
Какой был ваш опыт?
  • 0
  • 08 октября 2019, 10:14
  • GYUR22
  • 1
Файлы в топике: test.zip

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

RSS свернуть / развернуть
А может тебе отбраковка попалась?
0
не уверен, компел вроде поставлял
0
Проверьте в мануале, на 030 или 070 — не помню уже, сталкивался с тем, что для датчика температуры куб берет данные из двух точек, а по мануалу и реально корректно записана одна. В итоге врал, прописал вручную, стал нормально выдавать.
Ну и еще схема, как запитан VDDA.
0
  • avatar
  • AVF
  • 08 октября 2019, 18:49
есть камни с одной температурой есть с двумя 30С и 110С, 030 с одной TS_CAL1, но это другая опера — температуру практически невозможно проверить да и +-5С реально пофиг.
0
да и естественно каждый должен написать про стабильность VDDA :) — без фильтра все колбасится на 1 разряд, если бы были пульсации то там другая картина была — случайная
0
У F303 в еррате по этому поводу есть забавный пункт:
2.2.8 Imprecise VREFINT calibration values
Description:
The STM32F303xx devices not having “K” at the end of the marking may have imprecise VREFINT calibration values.
Workaround:
None. The parts marked with “K” such as STM32F303xxTxK do not have the limitation.
Пришлось забить на константу калибровки и взять напряжение опоры из даташита — получилось точнее.
0
  • avatar
  • Resp
  • 08 октября 2019, 19:22
Посмотрел ерату на 042 — не нашел ничего про опору
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.