Меню

Stm32 измерение напряжения аккумулятора



Stm32 измерение напряжения аккумулятора

Простой DC PowerMetr на STM32F030 и OLED дисплее 128×32

Автор: pap.cot
Опубликовано 06.10.2020
Создано при помощи КотоРед.
Участник Конкурса «Поздравь Кота по-человечески 2020!»

Сердечно поздравляю radiokot.ru с 15-ти летием!

DC PowerMetr – это цифровой вольтметр 0-200 В, амперметр постоянного тока 0-5 А, измеритель напряжения, тока, мощности, энергии (далее — прибор)

Пришлось мне тестировать светодиодный драйвер с выходным напряжением до 200 Вольт (измерять ток, напряжение, мощность, КПД, переходные характеристики БП) – приходилось подключать вольтметр, амперметр, высчитывать потребляемую мощность. Так же для оценки износа аккумуляторов нужен был измеритель энергии при заряде/разряде. Так появилось желание разработать из дешевых компонентов простой измеритель мощности на STM32F030К6, OLED дисплее 128×32 и одном Rail-to-Rail 2-х канальном операционном усилителе (ОУ) с однополярным питанием.

Возможности и краткие характеристики измерителя мощности постоянного напряжения:

  • измерение входного напряжения в двух диапазонах: от 0 до 18В (шаг 1.1 мВ) и от 18 до 200В (шаг 12.2 мВ);
  • измерение входного тока в двух диапазонах: от 0 до 0.6А (шаг 37 мкА) и от 0.6 до 5А (шаг 306 мкА);
  • погрешность измерения напряжения и тока: 0.7 В;
  • ток потребления прибора – не более 12 мА.

Структурная схема прибора

Микроконтроллер при помощи 12-ти битного АЦП одновременно измеряет 2 канала: ток и напряжение.

Канал тока: для измерения тока используется токовый шунт с малым сопротивлением (около 45 мОм), с которого сигнал усиливается операционным усилителем U2.2 (усилитель тока). Два диапазона усиления изменяются замыканием или размыканием полевого транзистора Q1 сигналом «I H/L». При малом токе индикация на дисплее «L», большом «Н».

Канал напряжения: для измерения напряжения больше питания контроллера (>3.3 В), на входе ОУ U2.1 применен делитель напряжения. Сигналом «U H/L» контроллер переключает усиление ОУ при помощи полевого транзистора Q2 меняя диапазон измеряемого напряжения. При низком напряжении индикация на дисплее «L», большом «Н».

Для оцифровки данных с АЦП используется DMA и кольцевой буфер. При заполнении половины буфера происходит прерывание в котором суммируются его данные и заносятся в буфер фильтра. В основном цикле из буфера фильтра производится расчет тока и напряжения в формате float и показания выводятся на OLED дисплей. За счет оверсемплинга повышается разрядность (точность) измерения.

Для модуляции сопротивления используется полевой транзистор параллельно которому подключен модулирующий резистор. Его сигнал «U модулятора» также подключен к разъему коммутации.

Кнопка «Выбор» переключает индикацию с разным шрифтом измеряемых параметров по кругу:
• U,V=; I,A=; P,W= (x2 шрифт);
• P,W=; U,V=; I,A= (x2 шрифт);
• I,A=; P,W=; U,V=(x2 шрифт);
• U,V=; I,A=; R,Om= (x2 шрифт);
• U,V=; I,A=; C,mAh=; E, Wh=;

Кнопка «Режим» переключает модуляцию сопротивления:
• отключена (на дисплее «F0»)
• 1 Гц/20% скважность (на дисплее «F1»)
• 100 Гц/50% скважность (на дисплее «FН»)
• ручное переключение кнопкой «Выбор» (на дисплее «FМ»)


Показания C,mAh и E, Wh при включении прибора обнуляются).
Разряд АБ контролируется проверкой сигнала ошибки LP2951ACM-3.3 — если напряжение АБ

Источник

Мониторинг напряжения аккумулятора на микроконтроллере STM32.

Приветствую всех на нашем сайте! Сегодня, в продолжение предыдущей статьи, мы реализуем еще один похожий проект. А именно решим задачу измерения напряжения аккумулятора, питающего всю схему, на микроконтроллере STM32.

И для начала рассмотрим типичную схему организации питания:

Здесь напряжение с аккумулятора приходит на вход преобразователя, который обеспечивает на выходе 3.3 В для питания нашего микроконтроллера. С аккумулятора, если мы говорим о наиболее часто использующихся литий-полимерных (Li-Pol), будет приходить 2.8 – 3.7 В в зависимости от уровня заряда. Нижний порог будет зависеть от использующейся схемы защиты аккумулятора от глубокого разряда, обычно эта схема отключает батарею при напряжениях 2.8 – 3 В.

В целом, мы получаем следующее – нам необходимо обеспечить измерение напряжений от 2.8 до 3.7 В. Поскольку питание микроконтроллера – 3.3 В, то мы не можем подать на вход АЦП 3.7 В напрямую. Что же, используем простейший делитель:

Казалось бы, на этом и все, но нужно учесть еще один нюанс. При использовании самого обычного LDO-преобразователя (в данном случае MIC5504) на его выходе будет напряжение:

Здесь V_ – это напряжение, падающее непосредственно на самом преобразователе. Для нашей микросхемы:

То есть если на входе у нас достаточный уровень сигнала (V_ \medspace – \medspace V_ \geqslant 3.3 \medspace В) , то микросхема обеспечит нам железные 3.3 В на выходе, что нас полностью устраивает.

Но по мере разряда аккумулятора напряжение будет естественным образом падать, что приведет к тому, что на выходе MIC5504 уже не будет этих 3.3 В. Уровень будет ниже. И это, как мы обсуждали в предыдущей статье, приведет к тому, что измеренное напряжение (после делителя) уже не будет верным.

Вот по этой причине нам и нужно предпринять дополнительные действия, чтобы обеспечить корректность измерений. А действия эти заключаются в том, что мы снова используем внутренний источник опорного напряжения STM32, который аппаратно заведен на 17-й канал ADC1!

Алгоритм действий будет таким:

  • Определяем реальный уровень напряжения питания микроконтроллера по формуле:
  • И, следующим шагом, зная точное значение V_ <пит>, ничего нам не мешает рассчитать верное значение напряжения аккумулятора:

Здесь мы умножаем на 2 потому что на вход АЦП сигнал подается через делитель 1:2.

Итак, разобрали теорию и план действий, переходим к практической реализации! Подключим напряжение с делителя на 1-й канал ADC1 (PA1).

Переходим в STM32CubeMx и настраиваем нужные каналы ADC, а также активируем DMA. АЦП будет постоянно автоматически опрашивать входные каналы, а результат будет сохраняться в буфер при помощи ДМА:

После всех настроек генерируем и открываем проект. Объявляем все, что нам понадобится:

После инициализации всей периферии запускаем АЦП:

После чего в цикле while(1) нам остается только производить расчеты:

Теперь в переменных mcuVoltage и batteryVoltage у нас будут соответственно значения напряжений питания и аккумулятора. Наша цель достигнута, и на этом на сегодня все, спасибо за внимание и до скорых встреч!

Источник

Измерение напряжения питания микроконтроллера STM32.

При работе с микроконтроллером порой возникает ситуация, когда необходимо измерить напряжение питания. Например, это может понадобиться при анализе процессов заряда и разряда аккумулятора, который питает всю схему. Либо если мы хотим скорректировать наши измерения АЦП, то тут не обойтись без знания точного значения питающего напряжения.

И, казалось бы, что может быть проще – берем один канал АЦП и спокойно замеряем. Но нельзя упускать из виду один ключевой момент. И заключается он в том, что в качестве опорного используется чаще всего именно напряжение питания. Конечно, можно использовать выводы V_ и V_ для того, чтобы подавать опорное напряжение на микроконтроллер отдельно. Но эти выводы есть далеко не у всех контроллеров, тем более если говорить о экземплярах в корпусах с небольшим количеством выводов.

А к чему это все приведет при измерении напряжения питания? А к тому, что на выходе АЦП мы всегда будем иметь одно и то же значение, равное 0xFFF (максимальное значение для 12-ти битного аналого-цифрового преобразователя), поскольку сигнал на входе АЦП будет равен опорному напряжению.

К счастью, эта ситуация далеко не безвыходная!

В микроконтроллерах от ST есть свой собственный внутренний источник опорного напряжения. Его величина составляет примерно 1.2 В. К примеру, для микроконтроллера STM32F103C8T6:

Кроме того, для некоторых контроллеров это значения измерено на заводе и сохранено в специальный регистр, из которого его можно прочитать. Возьмем, к примеру, STM32F030x4/x6/x8/xC. Для них это калибровочное значение находится в регистре VREFINT_CAL:

Аналогично, для STM32F303:

Наш же сегодняшний герой – STM32F103C8, как и, в целом, контроллеры семейства STM32F10x, этих данных не хранит. Поэтому мы будем использовать стандартное значение, указанное в даташите и равное 1.2 В. Также и контроллеры STM32F4x этой опции не имеют, в отличие от F0 и F3. В общем, при использовании конкретного микроконтроллера информацию об этом регистре можно найти в документации. Только не в reference manual на семейство, а именно в даташите на выбранный контроллер.

Итак, с этим все понятно. Давайте разберемся, как нам поможет это внутреннее напряжение в решении нашей задачи. Идея заключается в следующем…

Напряжение V_ с этого источника опорного напряжения заведено аппаратно на один из каналов АЦП, а именно на 17-й канал ADC1. То есть мы можем в любой момент его измерить. И по полученному значению определить, чему равно в данным момент напряжение питания. Зависимость будет выглядеть следующим образом:

Здесь 4095 – это максимальное значение АЦП. Эта формула вытекает из пропорции:

Конечно же, нельзя обойтись без реального практического примера, чем и займемся 🙂 Будем опрашивать этот канал АЦП (ADC1_IN17) и анализировать измеренное значение. Для этого включаем модуль ADC1 и нужный нам канал:

Кроме того, сделаем этот процесс максимально автономным. И тут, естественно, нам поможет DMA, настраиваем АЦП и ДМА на постоянный опрос:

В программе нам нужно будет один раз запустить измерение и в дальнейшем DMA автоматически будет обновлять значение в переменной без участия процессора.

Генерируем проект и переходим к редактированию кода. Первым делом, добавим пару переменных и дефайнов:

В adcData будем сохранять результат аналого-цифрового преобразования, а в переменной mcuVoltage уже значение напряжения питания в Вольтах. Запускаем АЦП, добавив вызов функции калибровки:

А в main() в цикле while(1) рассчитываем требуемое значение:

Вот и все! Запускаем отладчик и проверяем полученное значение:

Все соответствует действительности!

Вот так довольно просто и изящно можно получить точное значение напряжения питания, которое позволит скорректировать любые преобразования с других каналов АЦП. В следующей статье, пока свежи воспоминания, разберем еще один практический пример как раз с измерением напряжения аккумулятора 🙂

Источник

STM32 Как измерить напряжение на борту?

Планирую питать кухню от батареи и собсно нужно будет знать когда пора заряжаться без мультиметра.
Из АЦП есть только 12 бит. Пробовал подключить пин между 2мя резисторами по 10кОм, а резисторы на питание.
Далее полученное значение делю на 0xFFF и умножаю на 3.3. На экране показывает 3.255 что практический соответствует действительности. Отключаю от ST-Link’a и вешаю разряженную батарею 3.15В, Включается, а на экране те же цифры.
Что-то меняется только если менять номинал резистора между землей и АЦП. Если резистор от + убрать, то ничего не поменяется. Если конечно он не был меньшего номинала.

Не понятно меряет он напряжение или нет..

Добавлено через 4 часа 17 минут
Измерительная система оказалось рабочей, но беда в том что опорное напряжение мне нужно знать заранее, а в случае батареи оно постоянно падает, думаю ставить DC-DC на повышение.. Интересно как сие делают в тех же смартфонах

Как измерить в Proteus переменное напряжение?
Схема есть но она меряет постоянное напряжение. Доказательство Осцилограмма,аналоговый анализатор.

Опорное напряжение АЦП STM32
Джентльмены, прошу ткнуть носом где написано какое напряжение у встроенного ИОНа в STM32F100RBT6B.

STM32 VSSA опорное напряжение
Добрый день, в STM32f103RB нет пина для установки опорника АЦП. По умолчанию на отладочных он.

Как вернуть динамический диск с Win 7 на борту в состояние основного?
Ноутбук HP Pavilion dv6-6b54er, был на нем основной диск с 4 разделами: MDR (199 МБ), системный.

есть такая штука, стабилитрон поставь на вход опорного, вольта так на 2, надеюсь батарея не упадет до 2х вольт

Добавлено через 2 минуты
у АЦП есть режим ватчдога, выставляешь напряжение нижнего и верхнего уровня, и как только измеряемое напряжение будет не в диапазоне, выдается прерывание
Может тебе его использовать?

Все очень просто, на вход АЦП подаете стабилизированное напряжение ниже нижнего порога питания.
Теперь можно измерять с помощью АЦП напряжение питания мк.

Мк измеряет напряжение относительно своего питания, следовательно при изменении напряжения питания будет изменяться опорное напряжение, а напряжении на входе АЦП будет константой.
Следовательно при равенстве опорного напряжения (питания мк) напряжению на входе АЦП получим результат преобразования 0xFFF, в остальных случаях будем иметь Res = 0xFFF * Vацп/Vоп

Например
на входе АЦП 0,65 В, питание 3,3 Res = 0xFFF * 0.65 / 3.3 = 806
на входе АЦП 0,65 В, питание 2,75 Res = 0xFFF * 0.65 / 2.75 = 968

Вышепредложенные способы — не правильный подход.
В STM32 в ADC модуле есть возможность измерить напряжение внутреннего опорного источника напряжения (Internal voltage reference (Vrefint)). Обычно он подключен к входу ADC_IN17.
На момент создания микросхемы она запитывается от известного стабилизированного напряжения (например для STM32F042x Vdda = 3.3v). Далее измеряется напряжение на выходе этого опорного источника и записывается в память контроллера (например для STM32F042x это два байта VREFINT_CAL по адресу 0x1FFFF7BA — 0x1FFFF7BB). Хранится в виде значения регистра ADC после измерения.
Далее для измерения напряжения питания мк нужно выполнить следующие действия:
1. VREFINT_DATA = Измеряем напряжение на ADC_IN17 (опорник)
2. Рассчитываем входное напряжение Vin = Vdda (3.3 для 042x) * VREFINT_CAL / VREFINT_DATA;

Какое-то значение, не равное 0xFFF, если вы об этом.
Опорник не на максимум

Добавлено через 6 минут
Проверил:
У меня в 042 зашито число 1535, что при 3,3В даст напряжение 1,24В.

Добавлено через 1 минуту
Минимальное напряжение питания 2,0в. Значит при работающем мк мы сможем рассчитать входное напряжение

Источник

Stm32 измерение напряжения аккумулятора

Источники питания электронной аппаратуры, импульсные и линейные регуляторы. Топологии AC-DC, DC-DC преобразователей (Forward, Flyback, Buck, Boost, Push-Pull, SEPIC, Cuk, Full-Bridge, Half-Bridge). Драйвера ключевых элементов, динамика, алгоритмы управления, защита. Синхронное выпрямление, коррекция коэффициента мощности (PFC)

  • 6 часов назад
  • Тема:Fanaout 160x надо ли повторять?
  • От:iiv
  • Обратная Связь, Стабилизация, Регулирование, Компенсация

    Организация обратных связей в цепях регулирования, выбор топологии, обеспечение стабильности, схемотехника, расчёт

    • 1 марта
    • Тема:Токовая ОС
    • От:Cyrus Smith
  • Первичные и Вторичные Химические Источники Питания

    Li-ion, Li-pol, литиевые, Ni-MH, Ni-Cd, свинцово-кислотные аккумуляторы. Солевые, щелочные (алкалиновые), литиевые первичные элементы. Применение, зарядные устройства, методы и алгоритмы заряда, условия эксплуатации. Системы бесперебойного и резервного питания

    • Вчера в 18:41
    • Тема:BQ25887 не заряжает
    • От:x893
  • Высоковольтные Устройства — High-Voltage

    Высоковольтные выпрямители, умножители напряжения, делители напряжения, высоковольтная развязка, изоляция, электрическая прочность. Высоковольтная наносекундная импульсная техника

    • 3 марта
    • Тема:Улучшить параметры ВВ БП
    • От:Neuromantix
  • Электрические машины, Электропривод и Управление

    Электропривод постоянного тока, асинхронный электропривод, шаговый электропривод, сервопривод. Синхронные, асинхронные, вентильные электродвигатели, генераторы

    • В понедельник в 06:07
    • Тема:Точное управление моментом на валу двигателя.
    • От:copov
  • Индукционный Нагрев — Induction Heating

    Технологии, теория и практика индукционного нагрева

    • 2 января
    • Тема:Индукционный нагреватель на 100 кВт своими рукам…
    • От:dericc
  • Системы Охлаждения, Тепловой Расчет – Cooling Systems

    Охлаждение компонентов, систем, корпусов, расчёт параметров охладителей

    • 17 марта
    • Тема:теплопроводность защитной маски
    • От:korotaev
  • Моделирование и Анализ Силовых Устройств – Power Supply Simulation

    Моделирование силовых устройств в популярных САПР, самостоятельных симуляторах и специализированных программах. Анализ устойчивости источников питания, непрерывные модели устройств, модели компонентов

    • 7 часов назад
    • Тема:Как симулировать кабель с затуханием?
    • От:wim
  • Компоненты Силовой Электроники — Parts for Power Supply Design

    Силовые полупроводниковые приборы (MOSFET, BJT, IGBT, SCR, GTO, диоды). Силовые трансформаторы, дроссели, фильтры (проектирование, экранирование, изготовление), конденсаторы, разъемы, электромеханические изделия, датчики, микросхемы для ИП. Электротехнические и изоляционные материалы.

    • Вчера в 12:08
    • Тема:Объясните картину с параметрами токов дросселя
    • От:ViKo
  • Интерфейсы

    Форумы по интерфейсам

    все интерфейсы здесь

    • 3 часа назад
    • Тема:посоветуйте преобразователь USB — I2C
    • От:Gradient
  • Поставщики компонентов для электроники

    Поставщики всего остального

    от транзисторов до проводов

    • Во вторник в 17:07
    • Тема:Импортозамещение
    • От:V_G
  • Компоненты

    Закачка тех. документации, обмен опытом, прочие вопросы.

    • 3 часа назад
    • Тема:Оценить доступность компонента к закупке в Росси…
    • От:Pyku_He_oTTyda
  • Майнеры криптовалют и их разработка, BitCoin, LightCoin, Dash, Zcash, Эфир

    Обсуждение Майнеров, их поставки и производства

    наблюдается очень большой спрос на данные устройства.

    • 23 февраля
    • Тема:Зачем нужны дорогие майнеры
    • От:krux
  • Дополнительные разделы — Additional sections

    Встречи и поздравления

    Предложения встретиться, поздравления участников форума и обсуждение мест и поводов для встреч.

    • 8 марта
    • Тема:С 8 Марта!
    • От:Vasily_
  • Ищу работу

    ищу работу, выполню заказ, нужны клиенты — все это сюда

    • Вчера в 14:52
    • Тема:Разработка компактных печатных антенн диапазонов…
    • От:IGOR_
  • Предлагаю работу

    нужен постоянный работник, разовое предложение, совместные проекты, кто возьмется за работу, нужно сделать.

    • 3 часа назад
    • Тема:Stm32 adc
    • От:C2000
  • Куплю

    микросхему; устройство; то, что предложишь ты 🙂

    • В среду в 15:14
    • Тема:Куплю STM32F103RFT6
    • От:grebenkoff
  • Продам

    есть что продать за деньги, пиво, даром ?
    Реклама товаров и сайтов также здесь.

    • Вчера в 06:34
    • Тема:Шлюз LORAWAN — The Things Indoor Gateway EU868
    • От:victoruni
  • Объявления пользователей

    Тренинги, семинары, анонсы и прочие события

    • 9 часов назад
    • Тема:Суперконденсаторы VINATech для резервного питани…
    • От:КОМПЭЛ
  • Общение заказчиков и потребителей электронных разработок

    Обсуждение проектов, исполнителей и конкурсов

    Источник

    Читайте также:  Прибор для измерения радиационного контроля

    Сравнить или измерить © 2021
    Внимание! Информация, опубликованная на сайте, носит исключительно ознакомительный характер и не является рекомендацией к применению.