VREFINT (внутреннее опорное напряжение STM32)
Если АЦП меряет относительно VDDA, а VDDA плавает вместе с батарейкой, результат плавает тоже. У STM32 есть внутренний опорный источник VREFINT на отдельном канале АЦП: по нему программа узнаёт настоящее напряжение питания.
Обновлено Редакция GAW
VREFINT (internal reference voltage) — внутренний источник опорного напряжения около 1,2 В в STM32, выведенный на отдельный канал АЦП. У STM32F1 и STM32F4 это канал ADC1_IN17; рядом, на ADCx_IN16, сидит внутренний датчик температуры. Оба канала включает один бит TSVREFE: у STM32F1 он в регистре ADC_CR2, у STM32F4 — в общем регистре ADC_CCR (RM0008, разд. 11.10; RM0090, разд. 13.3.3 и 13.10). У STM32F4 VREFINT доступно только ведущему ADC1.
Сам STM32 не даёт названия схемы источника; по величине около 1,2 В это напряжение бандгапа, но опорой АЦП оно не служит. АЦП продолжает мерить относительно VREF+, а VREFINT — просто известное напряжение, которое можно оцифровать.
Параметры у STM32F103
| Параметр | Мин. | Тип. | Макс. |
|---|---|---|---|
| VREFINT, −40…+85 °C | 1,16 В | 1,20 В | 1,24 В |
| VREFINT, −40…+105 °C | 1,16 В | 1,20 В | 1,26 В |
| Время выборки при чтении | — | 5,1 мкс | 17,1 мкс |
| Температурный коэффициент | — | — | 100 ppm/°C |
По табл. 12 даташита DS5319. Разброс между экземплярами заметно больше, чем у отдельного источника опорного напряжения: VREFINT нужен не для точности, а чтобы не зависеть от плавающего питания.
Как пересчитать VDDA
Если АЦП 12-разрядный и меряет относительно VDDA, то код VREFINT равен N = VREFINT · 4095 / VDDA. Отсюда VDDA = VREFINT · 4095 / N. Пример (наш расчёт): при N = 1489 и типовых 1,20 В получаем VDDA = 1,20 · 4095 / 1489 ≈ 3,30 В. Тот же приём поправляет любой другой канал: U = Nx · VREFINT / N, и результат больше не зависит от питания — это частный случай ратиометрического измерения.
Точность пересчёта ограничена разбросом самого VREFINT: ±0,04 В от 1,20 В — около ±3,3 %. Для индикатора разряда батареи этого хватает, для вольтметра нет — там нужен внешний ИОН на входе VREF+. Время выборки задают не меньше 17,1 мкс, иначе конденсатор выборки АЦП не успевает зарядиться через внутреннее сопротивление источника (см. время выборки АЦП). Как устроен АЦП STM32 целиком — в статье «АЦП STM32».
Частые вопросы
Можно ли использовать VREFINT как опорное напряжение АЦП?
Нет, это не опора АЦП, а обычный входной канал. АЦП по-прежнему меряет относительно VREF+ (у малых корпусов это VDDA), а VREFINT лишь известное напряжение около 1,2 В, которое можно оцифровать. Зная его код, программа пересчитывает настоящее VDDA и поправляет остальные измерения.
Насколько точно VREFINT позволяет узнать VDDA?
Не точнее разброса самого источника. У STM32F103 VREFINT лежит между 1,16 и 1,24 В при −40…+85 °C (DS5319, табл. 12), то есть около ±3,3 % от типовых 1,20 В — это наш пересчёт. Для контроля разряда батареи этого хватает, для точных измерений нет.
Почему код VREFINT скачет от измерения к измерению?
Чаще всего из-за слишком короткого времени выборки. DS5319 указывает для чтения VREFINT типовое время выборки 5,1 мкс и наибольшее 17,1 мкс, минимума нет; при 1,5 такта АЦП внутренний конденсатор выборки не успевает зарядиться. Второй момент — источник нужно включить битом TSVREFE заранее, до первого преобразования.
Источники
- STMicroelectronics. DS5319 Datasheet STM32F103x8, STM32F103xB (Rev 20, July 2025) — табл. 12 Embedded internal reference voltage: VREFINT 1,16 / 1,20 / 1,26 В (мин./тип./макс.) при −40…+105 °C и 1,16 / 1,20 / 1,24 В при −40…+85 °C; время выборки АЦП при чтении VREFINT TS_vrefint: минимум не указан, типовое 5,1 мкс, наибольшее 17,1 мкс (задано проектом, в производстве не проверяется); кратчайшее время выборки предлагается подобрать в приложении несколькими попытками; разброс по температуре до 10 мВ при VDD = 3 В ± 10 мВ; температурный коэффициент до 100 ppm/°C (по расчёту, в производстве не проверяется)
- STMicroelectronics. RM0008 Reference manual STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx (Rev 21) — разд. 11.10, рис. 39: VREFINT подключено к ADC1_IN17, датчик температуры — к ADCx_IN16; оба внутренних канала включает бит TSVREFE в ADC_CR2 (разд. 11.12.3, бит 23)
- STMicroelectronics. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437, STM32F429/439 (Rev 21) — разд. 13.3.3: у STM32F4 VREFINT подключено к ADC1_IN17; датчик температуры, VREFINT и канал VBAT есть только у ведущего ADC1; разд. 13.10: TSVREFE находится в общем регистре ADC_CCR
Нашли ошибку?
Смотрите также
- АЦП STM32Группы каналов, режимы, триггеры, DMA, калибровка, датчик температуры, точность
- Источник опорного напряженияИОН: точное напряжение для АЦП, ЦАП и стабилизаторов
- Опорное напряжение bandgapИсточник опорного напряжения на основе ширины запрещённой зоны кремния
- Внутренний датчик температуры STM32Датчик температуры кристалла на канале АЦП: V25, Avg_Slope, точность
- Логометрическое измерениеДатчик и опорное АЦП от одного питания: колебания питания сокращаются
- VREFBUF (буфер опорного напряжения)Встроенный источник опорного напряжения STM32 на вывод VREF+
- VDDA и VSSA (аналоговое питание)Отдельное питание аналоговых блоков STM32 и его земля