Отслеживание крайне низких уровней тока часто имеет решающее значение при разработке или тестировании маломощных устройств, особенно в области встроенных систем и электроники с батарейным питанием. В данной статье мы рассмотрим создание прецизионного цифрового микротокометра с использованием микроконтроллера STM32 и аналоговых компонентов. Он построен на базе микроконтроллера STM32 и оснащен OLED-дисплеем для отображения показаний в реальном времени.

Наш цифровой амперметр постоянного тока разработан для удобства использования на рабочем столе, с акцентом на читаемость, стабильность и портативность. OLED-дисплей обеспечивает четкое изображение, остающееся видимым в большинстве условий освещения, а микроконтроллер обрабатывает сигналы и автоматически определяет диапазон. Процедуры калибровки обеспечивают стабильность измерений при различных условиях нагрузки. Устройство не требует внешних инструментов или сложных настроек, предлагая удобство использования для инженеров, разработчиков или любителей, работающих со сверхнизкопотребляющей электроникой. Его практичная конструкция делает его полезным инструментом для всех, кто стремится анализировать потребление энергии с точностью и простотой. В отличие от стандартных цифровых амперметров постоянного тока, этот специально разработанный цифровой микроамперметр обеспечивает показания в реальном времени на OLED-дисплее с исключительной точностью в нескольких диапазонах измерений. Этот прецизионный цифровой микроамперметр обеспечивает измерения лабораторного уровня в портативном корпусе с питанием от батареи.
Посмотрите наше подробное руководство по сборке этого высокоточного цифрового микротокового измерителя:
Основные характеристики цифрового микроамперметра
Этот цифровой микроамперметр обладает профессиональными функциями, что делает его подходящим как для любительской, так и для профессиональной работы с электроникой:
- Работает на базе микроконтроллера STM32G071KBU для быстрой и точной обработки сигналов.
- OLED-дисплей с разрешением 128x64 пикселей обеспечивает четкие и легко читаемые измерения тока.
- Несколько диапазонов измерений:
- Диапазон наноампер: до 1000 нА
- Диапазон микроампер: до 1000 мкА
- Диапазон миллиампер: до 300 мА
- Обновление дисплея в режиме реального времени
- Компактный и функциональный корпус, напечатанный на 3D-принтере.
- Прошивка на базе Arduino для упрощения разработки.
- Питание от батареи со встроенным зарядным устройством.
- Плавный переключатель питания.
Основные компоненты для создания цифрового микроамперметра
Ниже приведён список компонентов, использованных для создания цифрового микроамперметра. Точные характеристики можно найти в подробной спецификации и принципиальной схеме.
- Микроконтроллер STM32G071KBU6.
- Модуль OLED-дисплея 128x64.
- MAX4239AUT — операционные усилители сверхнизкого смещения/дрейфа, с низким уровнем шума и высокой точностью.
- Микромощный измерительный усилитель INA333 с нулевым дрейфом и выходом от шины до шины.
- Низковольтный операционный усилитель LM321 с выходным напряжением от шины до шины.
- Прецизионные шунтирующие резисторы (для измерения тока в диапазонах нА, мкА и мА).
- Пассивные компоненты, такие как резисторы и конденсаторы.
- Переключатель DP3T для выбора диапазона.
- Разъемы для программирования и подключения питания.
- Тактильная кнопка для сброса или выбора режима.
- Разъем USB Type-C
- Диоды и защитные компоненты.
- Литий-полимерный аккумулятор.
- Заказная печатная плата.
- Корпус, напечатанный на 3D-принтере.
- Прочие сборочные инструменты и расходные материалы.
Схема проекта
Полная принципиальная схема прецизионного цифрового микроамперметра представлена ниже. Загружаемая PDF-версия схемы также доступна в репозитории GitHub, ссылка на который приведена в конце этой статьи. Полная схема этого цифрового микроамперметра организована в функциональные блоки для более легкого понимания.
Схема разделена на отдельные разделы в зависимости от функциональности. Такой подход упрощает детальное понимание роли каждой части схемы. В следующих разделах мы рассмотрим каждый блок по отдельности и объясним его назначение и принцип работы. Раздел питания обеспечивает универсальную работу этого прецизионного цифрового микроамперметра:

Силовая часть схемы предназначена для обеспечения работы цифрового микроамперметра, что гарантирует эффективную и надежную работу, а также поддержку входа USB Type-C и зарядки аккумулятора. В качестве основного входа питания используется разъем USB Type-C, а к линиям CC1 и CC2 добавлены подтягивающие резисторы для соответствия спецификации USB Type-C, обеспечивающие совместимость со стандартными источниками питания USB 5 В. Для управления батареей используется микросхема LTC4054ES5 в качестве компактного линейного зарядного устройства, способного безопасно и эффективно заряжать одноэлементный литий-ионный аккумулятор. Для обеспечения стабилизированного напряжения для остальной части схемы используется стабилизатор напряжения ADP44002 с низким падением напряжения (LDO), генерирующий стабильное напряжение 2,5 В, подходящее для питания как микроконтроллера STM32G071, так и аналоговых компонентов. Ключевой особенностью этой части является программно-защелкивающийся силовой переключатель, реализованный с использованием MOSFET-транзисторов AO3401 и AO3400. При нажатии тактильной кнопки затвор P-канального AO3401 переходит в низкое состояние, включая его и подавая питание на остальную часть платы. После включения питания STM32 настраивает свой вывод GPIO PA4 как вход с подтягивающим резистором, который поддерживает затвор N-канального AO3400 в высоком состоянии, фиксируя AO3401 во включенном состоянии даже после отпускания кнопки. Тот же вывод GPIO (PA4) также отслеживает состояние кнопки. При обнаружении длительного нажатия микроконтроллер может перенастроить PA4 как цифровой выход и установить его в низкое состояние. Это действие понижает затвор AO3401 через AO3400, выключая его и отключая питание платы. Для изоляции управляющего и фиксирующего путей используются два диода, что позволяет реализовать эту двойную функциональность на одной линии GPIO.
Интерфейс микроконтроллера STM32

Сердцем схемы является микроконтроллер STM32G071KBU, который управляет всеми основными функциями, включая сбор данных, управление отображением и управление питанием. Несколько аналоговых выводов GPIO настроены для взаимодействия с аналоговым входом и мониторинга системных напряжений. В частности, PA0 используется в качестве основного входа АЦП для измерения выходного напряжения аналогового входа, соответствующего измеряемому току. PA1 контролирует виртуальную землю (около 1,25 В), используемую внутри аналоговой секции для поддержания симметричного диапазона сигнала. PA2 опционально подключается к прецизионному источнику опорного напряжения (REF3012AIDBZR) для обеспечения точного расчета и калибровки VDDA. Кроме того, PA3 используется для измерения напряжения батареи через резисторный делитель, что позволяет осуществлять мониторинг батареи в реальном времени и индикацию уровня заряда. STM32G071KBU служит «мозгом» этого цифрового микроамперметра, управляя сбором данных, управлением отображением и питанием системы.
Интерфейсы отображения и программирования

Для связи с дисплеем микроконтроллер использует контакты I2C PA9 (SCL) и PA10 (SDA) для взаимодействия с OLED-дисплеем 128x64. Такая конфигурация обеспечивает компактный и эффективный способ представления результатов измерений пользователю. Для поддержки разработки и тестирования встроенного ПО линии SWD (Serial Wire Debug) и UART выведены на разъемы на печатной плате, что позволяет осуществлять внутрисистемное программирование и последовательную отладку. Такое расположение гарантирует простоту программирования, обновления или диагностики микроконтроллера во время разработки или эксплуатации. В целом, секция микроконтроллера тщательно организована для обеспечения баланса между аналоговой точностью, цифровой связью и управлением системой.
Проектирование аналогового входного каскада (на основе архитектуры µCurrent)

Аналоговый вход этого проекта цифрового микроамперметра основан на хорошо известной конструкции µCurrent от Дейва Джонса из EEVblog, которая широко известна своим низким нагрузочным напряжением и высокой точностью измерений. В основе системы лежит прецизионный преобразователь тока в напряжение, использующий набор высокоточных шунтирующих резисторов и усилителей со сверхнизким смещением. Эти шунтирующие резисторы сконфигурированы в многодиапазонной конфигурации для охвата уровней тока в нА, мкА и мА, причем каждый из них тщательно подобран для того, чтобы нагрузочное напряжение оставалось пренебрежимо малым. Точность достигается путем пропускания тока через один из этих резисторов и усиления результирующего падения напряжения с помощью операционного усилителя с автоматической нулевой коррекцией или «чоппера». Такая архитектура позволяет системе поддерживать практически нулевое смещение выходного сигнала и практически полное отсутствие шума 1/f — две особенности, которые имеют решающее значение для надежного обнаружения чрезвычайно малых токов. Ключевым компонентом, обеспечивающим такую точность, является Maxim MAX4239, усилитель с автоматической коррекцией нуля, обладающий впечатляюще низким напряжением смещения — всего 0,1 мкВ. Усилители с автоматической коррекцией нуля работают за счет непрерывной выборки и компенсации внутреннего смещения посредством двухфазного процесса, управляемого внутренним тактовым генератором. Это приводит к динамически корректируемому выходному сигналу, который компенсирует как постоянное смещение, так и низкочастотный шум, обеспечивая чистый сигнал даже в сложных условиях низкого тока. Хотя внутренняя работа таких устройств, как MAX4239, является коммерческой тайной, преимущество очевидно: чрезвычайно стабильное и точное усиление без дрейфа, позволяющее аналоговому входному каскаду выдавать истинно нулевой выходной сигнал при отсутствии тока.
В нашей реализации между аналоговым входным каскадом и АЦП микроконтроллера STM32 добавлен дополнительный каскад: прецизионный инструментальный усилитель INA333AIDGKR. Это важное улучшение, обусловленное использованием виртуальной земли (приблизительно 1,25 В) в аналоговой сигнальной цепи. Виртуальная земля позволяет аналоговому входному каскаду обрабатывать биполярные сигналы, центрированные вокруг среднего напряжения питания, но это также означает, что результирующий выходной сигнал не может быть напрямую подан на однополярный АЦП, такой как у STM32. INA333 решает эту проблему, усиливая дифференциальный сигнал с высоким подавлением синфазного сигнала, при этом выравнивая его выходной сигнал по той же виртуальной земле. Это обеспечивает совместимость с АЦП микроконтроллера и сохраняет целостность измерений во всех диапазонах. Коэффициент усиления на выходе аналогового входного каскада определяется тщательно подобранными прецизионными резисторами для обеспечения стабильности и температурной стабильности. Для установки коэффициента усиления, обычно 100×, используются резисторы с низким допуском (ppm) и точностью 0,1%, что гарантирует, что даже токи на уровне наноампер создают измеримое и усиленное напряжение. Архитектура с автоматической нулевой ориентацией обеспечивает минимальный вклад ошибок от самих усилителей, а использование инструментального усилителя, такого как INA333, повышает надежность всего сигнального тракта, особенно при взаимодействии с АЦП микроконтроллеров, работающих в однополярном режиме питания.
Разработка печатной платы для цифрового микроамперметра
Для этого проекта цифрового амперметра постоянного тока была разработана специальная печатная плата, обеспечивающая компактные размеры и надежную работу. Чтобы устройство оставалось компактным и практичным для повседневного использования, мы разработали специальную печатную плату именно для этого проекта. Разводка платы была выполнена с помощью KiCad, и все файлы проекта, включая схемы и файлы Gerber, доступны в репозитории GitHub, ссылка на который приведена в конце этой статьи. Размеры печатной платы составляют приблизительно 45 мм x 65 мм, что делает её подходящей как для настольных установок, так и для портативных приложений.
Ниже представлены изображения, демонстрирующие верхний и нижний слои печатной платы:

После проверки и доработки проекта мы отправили файлы на изготовление. После изготовления мы получили вот такую печатную плату.

Сборка проекта прецизионного цифрового микротокового измерителя
Сборка этого цифрового микроамперметра требует предельной внимательности, особенно при работе с чувствительными аналоговыми компонентами. Сборка началась с сортировки всех компонентов, перечисленных в спецификации. Мы вручную разместили и припаяли каждую деталь к печатной плате. Для более быстрых и стабильных результатов можно использовать трафарет для SMD-компонентов, нанося паяльную пасту, после чего производится установка компонентов и оплавление с помощью паяльной станции с горячим воздухом или печи для оплавления. Ниже приведено изображение полностью собранной печатной платы со всеми установленными компонентами:

Вы можете заметить некоторые некачественные соединения рядом с входами, это связано с отсутствием одного из соединений в первой версии печатной платы. Но не беспокойтесь, мы уже исправили это в предоставленных файлах печатной платы. Готовая сборка, включая модуль OLED-дисплея, показана здесь:

Конструкция корпуса проекта, напечатанная на 3D-принтере
Для аккуратного размещения схемы и удобства использования устройства мы разработали корпус, напечатанный на 3D-принтере. Это гарантирует, что конечный продукт будет одновременно надежным и удобным в использовании. STL-файлы корпуса можно найти в том же репозитории GitHub, что и код и файлы печатной платы. Если вы новичок в 3D-печати, то советуем прочитать эту статью.

Вот детали, напечатанные на 3D-принтере и использованные для изготовления корпуса:

Полная сборка цифрового микроамперметра
Как только все детали будут готовы, можно приступать к сборке прецизионного микроамперметра. Для сборки прецизионного микроамперметра сначала вставьте колпачок тактильной кнопки в напечатанный на 3D-принтере корпус, а затем полностью собранную печатную плату. Используйте винты M2 диаметром 4 мм, чтобы закрепить печатную плату на передней раме. Затем подключите батарею и закройте заднюю панель. Задняя панель защелкнется в корпусе. После этого можно закрепить колпачок ползункового переключателя на селекторном переключателе с передней стороны. Вот печатная плата, закрепленная на напечатанном на 3D-принтере корпусе.
После подготовки всех компонентов окончательная сборка этого высокоточного цифрового микротокового измерителя осуществляется по простой схеме:

А вот и лицевая сторона с закрепленной платой OCB и установленными колпачками переключателей.

А вот и полностью собранный прецизионный цифровой микроамперметр.

Прошивка Arduino для амперметра на базе STM32
Программное обеспечение, управляющее этим цифровым микроамперметром, написано на C++, совместимом с Arduino, и запрограммировано на микроконтроллер STM32G071KBU с использованием среды разработки Arduino IDE с поддержкой плат STM32. Теперь, когда оборудование готово, давайте рассмотрим программное обеспечение, управляющее микроамперметром. В этом проекте используется микроконтроллер STM32G071KBU, запрограммированный через Arduino IDE, а также OLED-дисплей 128x64, использующий библиотеку U8g2 для отображения текста и графики. Код обрабатывает выборку АЦП, вычисления напряжения, обновление дисплея и функцию мягкого выключения питания, запускаемую кнопкой. Все работает в рамках Arduino, что упрощает модификацию или расширение функциональности.
Основной скетч содержит всю необходимую логику. Он начинается с настройки АЦП для считывания напряжений из ключевых точек аналогового входного каскада и преобразования их в измерения тока. Он также измеряет напряжение батареи и отображает текущее значение и уровень заряда батареи в реальном времени на OLED-дисплее. Для управления питанием используется схема с мягкой защелкой. При удержании и отпускании кнопки устройство выключается путем перевода вывода защелки в низкое состояние. Дисплей обновляется каждые 500 мс, отражая последние значения, и для повышения разрешения используется избыточная выборка показаний АЦП.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <Wire.h> #include <HardwareSerial.h> #include <U8g2lib.h> // Define our custom HardwareSerial HardwareSerial MySerial(PB6, PB7); // TX, RX U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE); #define LATCH_PIN PA4 #define NUM_SAMPLES 2 #define SAMPLE_DELAY 10 #define REF_VOLTAGE 1249.3f // float for precision #define EMA_ALPHA 0.2f // Change this to adjust smoothing strength (e.g., 0.1 to 0.3) volatile bool buttonPressed = false; volatile bool buttonReleased = false; volatile unsigned long lastInterruptTime = 0; unsigned long releaseTime = 0; const unsigned long debounceDelay = 50; const unsigned long shutdownDelay = 1000; unsigned long lastBatteryUpdate = 0; float batteryVoltage = 0; int AmpV = 0; float AmpVF = 0; int batteryPercent = 0; |
Код начинается с подключения необходимых библиотек для связи по I2C, последовательного логирования и рендеринга OLED-дисплея. Инициализируется пользовательский аппаратный последовательный порт на контактах PB6 (TX) и PB7 (RX), а OLED-дисплей настраивается с использованием библиотеки U8g2 в полнобуферном режиме по I2C. Определены несколько глобальных констант, таких как аналоговое опорное напряжение (REF_VOLTAGE), контакт защелки и параметры для передискретизации. Объявлены несколько глобальных переменных для хранения состояний кнопок, уровня заряда батареи и вычисленных показаний тока. Они будут периодически обновляться и отображаться на экране.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void buttonISR() { unsigned long now = millis(); if (now lastInterruptTime < debounceDelay) return; if (digitalRead(LATCH_PIN) == LOW) { buttonPressed = true; buttonReleased = false; } else { if (buttonPressed) { buttonReleased = true; releaseTime = now; delay(500); pinMode(LATCH_PIN, OUTPUT); digitalWrite(LATCH_PIN, LOW); while (1) ; } buttonPressed = false; } lastInterruptTime = now; |
Обработчик прерывания buttonISR() реализует механизм мягкого отключения питания для этого цифрового амперметра постоянного тока. Он срабатывает при любом изменении состояния вывода защелки. Если кнопка нажата (обнаруживается как НИЗКИЙ уровень), устанавливается флаг buttonPressed. Когда кнопка отпущена (обнаруживается как ВЫСОКИЙ уровень), и флаг нажатия был установлен ранее, подтверждается отпускание и начинается процесс выключения. Вставлена задержка для подавления дребезга контактов и предоставления пользователю возможности отпустить кнопку. Затем вывод защелки переключается в режим выхода и устанавливается в низкое состояние для отключения питания, фактически выключая систему.
|
1 2 3 4 5 6 7 8 |
void setup() { pinMode(LATCH_PIN, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(LATCH_PIN), buttonISR, CHANGE); MySerial.begin(115200); MySerial.println("STM32G071 ADC with External Reference (PA2)"); analogReadResolution(12); u8g2.begin(); } |
Внутри функции setup() вывод защелки настраивается как вход с внутренним подтягивающим резистором, и к нему подключается прерывание. Функция setup() выполняет необходимую инициализацию для этого цифрового микроамперметра. Последовательный выход инициализируется со скоростью 115200 бод для отладки. Разрешение АЦП устанавливается на 12 бит, что соответствует собственному разрешению АЦП STM32. Наконец, OLED-дисплей инициализируется с помощью u8g2.begin().
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
void loop() { unsigned long now = millis(); if (now lastBatteryUpdate > 500) { float vdda = measureVDDA(); batteryVoltage = measureInputVoltage(PA3, vdda) * 2.0f; float Vref = measureInputVoltage(PA1, vdda); float ampVoltage = measureInputVoltage(PA0, vdda); //AmpV = ((int)((ampVoltage Vref) / 2.0f)) 3; //float error_percent = 4.77f; //AmpV = (int)(((ampVoltage Vref) / 2.0f) * (1.0f error_percent / 100.0f)) 3; float raw = ((ampVoltage Vref) / 1.0f); float offset = 6.0f; float error_percent = 0.0f; //AmpV = (int)((raw offset) * (1.0f error_percent / 100.0f)); AmpVF = (raw * (1.0f error_percent / 100.0f) offset); AmpV = (int)AmpVF; batteryPercent = batteryLevelPercent((int)batteryVoltage); MySerial.print("VDDA: "); MySerial.print(vdda); MySerial.print(" mV, Vref: "); MySerial.print(Vref); MySerial.print(" mV, PA2: "); MySerial.print(measureInputVoltage(PA2, vdda)); MySerial.print(" mV, Amp: "); MySerial.println(AmpV); lastBatteryUpdate = now; u8g2.clearBuffer(); u8g2.setFont(u8g2_font_5x8_tr); int iconX = 96, iconY = 0, iconW = 28, iconH = 12; char batteryPercentStr[6]; itoa(batteryPercent, batteryPercentStr, 10); strcat(batteryPercentStr, "%"); u8g2.drawStr(iconX 20, iconY + 10, batteryPercentStr); drawBatteryIconWithBars(iconX, iconY, iconW, iconH, batteryPercent); char AmpStr[7]; if (AmpV < 0) { sprintf(AmpStr, " %04d", abs(AmpV)); } else { sprintf(AmpStr, " %04d", AmpV); } u8g2.setFont(u8g2_font_inb33_mn); u8g2.drawStr( 10, 62, AmpStr); u8g2.sendBuffer(); } } |
Функция loop() проверяет, прошло ли 500 мс с момента последнего обновления, используя функцию millis(). Если да, то начинается новый набор измерений. Сначала вызывается функция measureVDDA() для определения фактического VDDA на основе известного опорного значения. Затем функция measureInputVoltage(PA3, vdda) используется для измерения напряжения батареи, которое масштабируется в 2 раза из-за резистивного делителя напряжения. Опорное значение текущего сигнала считывается с PA1, а измеренный сигнал — с PA0. Полученная разница масштабируется и корректируется со смещением для компенсации дрейфа базовой линии или ошибки входного каскада. Процент заряда батареи рассчитывается с помощью функции batteryLevelPercent(). Затем дисплей очищается и обновляется текущим показанием, а также состоянием батареи.
|
1 2 3 4 5 6 7 8 9 10 |
float measureVDDA() { uint32_t sum = 0; for (int i = 0; i < NUM_SAMPLES; i++) { sum += oversampledADC(PA1); delayMicroseconds(SAMPLE_DELAY); } float adcAvg = (float)sum / NUM_SAMPLES; float vdda = (REF_VOLTAGE * 65535.0f) / adcAvg; return vdda; } |
Функция measureVDDA() считывает значение АЦП с внешнего эталонного источника, подключенного к PA1. Она усредняет NUM_SAMPLES передискретизированных показаний и вычисляет фактическое значение VDDA, используя известное значение эталонного источника (1,2493 В). Такой подход повышает точность за счет коррекции колебаний напряжения питания, которые напрямую влияют на показания АЦП.
|
1 2 3 4 5 6 7 8 9 10 |
float measureInputVoltage(uint32_t pin, float vdda) { uint32_t sum = 0; for (int i = 0; i < NUM_SAMPLES; i++) { sum += oversampledADC(pin); delayMicroseconds(SAMPLE_DELAY); } float adcAvg = (float)sum / NUM_SAMPLES; float voltage = (adcAvg * vdda) / 65535.0f; return voltage; } |
Функция measureInputVoltage() принимает любой аналоговый входной контакт и текущее значение VDDA, выполняет NUM_SAMPLES передискретизированных считываний АЦП и возвращает фактическое напряжение на контакте. Эта функция используется для измерения входного напряжения батареи, внутреннего опорного напряжения и сигнала от аналогового входного каскада. Она использует функцию oversampledADC() для получения результата с высоким разрешением.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
uint32_t oversampledADC(uint32_t pin) { uint32_t sum = 0; const int oversample_count = 256; // 2^(2 × (16 12)) = 256 for (int i = 0; i < oversample_count; i++) { sum += analogRead(pin); // 12 bit reading delayMicroseconds(SAMPLE_DELAY); // optional: allow settling } // Average and scale to 16 bit range uint32_t avg = sum / oversample_count; uint32_t adc16 = avg << 4; // 12 bit to 16 bit shift (multiply by 16) // Ignore 3 LSBs const int ignore_lsb = 4; adc16 = (adc16 >> ignore_lsb) << ignore_lsb; return adc16; } |
Функция oversampledADC() реализует 256-кратную передискретизацию для расширения собственного 12-битного разрешения АЦП STM32 примерно до 16 бит. Она суммирует 256 показаний, усредняет их и сдвигает влево на 4 бита для масштабирования до 16-битного диапазона. Затем она отбрасывает 3 младших бита для уменьшения шума. Этот метод обеспечивает более стабильные показания, что особенно важно для измерений малых сигналов, таких как наноамперные токи. Функция oversampledADC() имеет решающее значение для достижения высокого разрешения измерений в этом прецизионном цифровом микротоковом измерителе.
|
1 2 3 4 5 6 |
int batteryLevelPercent(int v_bat) { int percent = (v_bat 3000) * 100 / (4200 3000); if (percent > 100) percent = 100; if (percent < 0) percent = 0; return percent; } |
Функция batteryLevelPercent() преобразует напряжение в милливольтах в проценты от 0 до 100. Входное значение линейно изменяется в диапазоне от 3000 мВ (0%) до 4200 мВ (100%). Любое значение ниже или выше этих пределов ограничивается. Эта функция помогает пользователю интуитивно понимать состояние батареи.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
void drawBatteryIconWithBars(int x, int y, int w, int h, int percent) { u8g2.drawFrame(x, y, w, h); u8g2.drawBox(x + w, y + h / 3, 2, h / 3); int numBars = 4; int barSpacing = 2; int barWidth = (w 6 (numBars 1) * barSpacing) / numBars; int barHeight = h 4; int barsToDraw = (percent + 24) / 25; for (int i = 0; i < barsToDraw; i++) { int bx = x + 2 + i * (barWidth + barSpacing); u8g2.drawBox(bx, y + 2, barWidth, barHeight); } } |
Функция drawBatteryIconWithBars() рисует прямоугольный значок батареи в правом верхнем углу OLED-дисплея. Справа добавляется небольшой индикатор заряда, и заполняется до четырех полосок в зависимости от процента заряда батареи. Количество полосок рассчитывается путем округления каждые 25%. Это визуальное представление дополняет числовое значение и позволяет пользователю быстро оценить состояние батареи. Графическое представление дополняет числовое значение в процентах, обеспечивая пользователям этого цифрового микроамперметра мгновенный обзор состояния батареи.
Руководство по устранению неполадок проекта
Если у вас возникли проблемы с цифровым амперметром постоянного тока, обратитесь к этим распространенным проблемам и способам их решения:
Области применения цифрового микроамперметра
Этот высокоточный цифровой микротокометр находит широкое применение в разработке и тестировании электроники:
- В контексте разработки IoT-устройств основное внимание будет уделено характеристикам различных режимов работы, включая, помимо прочего, токи в спящем режиме, токи в активном режиме и импульсные передачи беспроводных сенсорных узлов, а также других проектов на базе ESP32/ESP8266 и устройств LoRa.
- Для оценки срока службы батареи необходимо собрать и проанализировать профили потребления тока, чтобы оценить ожидаемый срок службы батареи портативных устройств.
- Для оптимизации энергопотребления потребуется оценить код, потребляющий наибольшее количество энергии, и оптимизировать микропрограммное обеспечение для увеличения времени работы от батареи во встроенных системах.
- Анализ спящего режима микроконтроллера подтвердит способность микроконтроллера корректно переходить в режимы низкого энергопотребления, а также позволит измерить ток удержания в различных спящих состояниях.
- Оценка микроустройств для сбора энергии, обеспечивающих достаточный ток для непрерывной работы.
- Диагностика неисправностей в цепи позволит выявить аномальное увеличение тока, которое может указывать на сбой в работе цепи, например, обрыв или короткое замыкание.
- Образовательные проекты продемонстрируют, как понимать и рассчитывать потребляемый ток, оптимизировать энергопотребление и создавать энергосберегающие изделия.
- Устройства BLE (Bluetooth Low Energy), беспроводные модули и другие беспроводные устройства потребляют электроэнергию, выделяемую при передаче данных, подключении и в режиме сна.
Часто задаваемые вопросы о цифровых микроамперметрах
⇥ Для чего используется прецизионный цифровой микротоковой измеритель?
Это прецизионный цифровой микротоковой измеритель, который измеряет очень низкие токи от наноампер до миллиампер. Этот измеритель будет незаменим при тестировании устройств IoT с батарейным питанием, измерении тока в спящем режиме в микроконтроллерах, характеризации маломощных датчиков, оптимизации энергоэффективных схем и отладке проблем, связанных с энергопотреблением во встроенных системах. Эти измерители обеспечивают показания тока в реальном времени с высокой точностью в нескольких диапазонах.
⇥ Насколько точны цифровые микроамперметры?
Этот цифровой микроамперметр обеспечивает точность ±0,1% благодаря использованию усилителей с автоматической нулевой ориентацией, таких как MAX4239 (смещение 0,1 мкВ), и прецизионных инструментальных усилителей. Эффективное 16-битное разрешение, достигаемое за счет передискретизации показаний АЦП, позволяет проводить надежные измерения до 1 наноампера. Для повышения точности устройство обязательно должно быть откалибровано в соответствии с необходимыми параметрами, интенсивность и точность входного сигнала датчика должны быть на оптимальном уровне, должен быть обеспечен стабильный источник питания, а окружающая среда должна быть максимально тихой
⇥ Возможно ли создать цифровой микроамперметр для использования в домашних условиях?
В этой статье объясняется, как изготовить высококачественный цифровой микроамперметр в домашних условиях, используя базовые знания электроники. Для проекта необходимы знания пайки SMD-компонентов, а также все компоненты, необходимые для завершения сборки в соответствии со спецификацией материалов (BOM). Кроме того, вам потребуется разработать собственную печатную плату, а также найти и распечатать корпус на 3D-принтере. В репозитории GitHub содержатся файлы проекта, прошивка и руководство по сборке для этого проекта.
⇥ Как откалибровать цифровой микроамперметр?
Калибровка состоит из измерения известных источников тока и корректировки смещения в программном обеспечении. Для каждого диапазона требуются прецизионные источники тока или стабильные комбинации резистор-напряжение. Измеряется отображаемое значение, вычисляется погрешность, и соответствующим образом обновляется смещение в программном обеспечении. Опорное напряжение REF3012 позволяет рассчитать VDDA, необходимое для АЦП-преобразования. Регулярная калибровка с использованием сертифицированных стандартов гарантирует точность измерения в течение длительного периода времени.
⇥ Каков срок службы батареи портативного амперметра?
В конечном итоге, продолжительность работы прибора зависит от характера использования и емкости батареи. При использовании стандартной литий-полимерной батареи емкостью 400 мАч прибор может работать довольно долго. Плавный выключатель питания поможет продлить срок службы батареи, позволяя полностью отключать питание прибора, когда он не используется. Эффективная работа преобразователя батареи обеспечивается LDO-регулятором, выдающим 2,5 В. Микросхема LTC4054 позволяет заряжать батарею с использованием технологии CVS. Для более длительной работы в полевых условиях можно использовать батарею большей емкости/мАч.
Репозиторий GitHub
Посетите репозиторий GitHub, чтобы загрузить исходный код, внести изменения и без проблем развернуть проект.
Заключение
В этой статье рассмотрено как собрать прецизионный цифровой микроамперметр. Лабораторный цифровой микроамперметр был создан с использованием недорогих компонентов и инструментов. Этот прибор сочетает в себе мощность и универсальность процессора STM32 с усилителем с автоматической нулевой отметкой и прецизионными измерительными приборами, создавая версию цифрового микроамперметра (мкА), способную конкурировать со многими коммерчески доступными продуктами, которые стоят значительно дороже. Этот цифровой микроамперметр имеет три диапазона измерения: наноамперы (нА), микроамперы (мкА), миллиамперы (мА). Он очень универсален в различных областях применения, от измерения токов в спящем режиме устройств IoT до понимания характеристик энергопотребления датчиков. Это устройство полезно для инженеров-электронщиков, чтобы максимально увеличить срок службы батарей своих разработок; для разработчиков, создающих прототипы устройств с низким уровнем безопасности; и для студентов, изучающих основные концепции технологии прецизионных измерений. Этот проект по созданию цифрового микроамперметра не только даст вам ценный опыт в области передового аналогового проектирования, программирования микроконтроллеров (STM32) и профессионального производства печатных плат, но и поможет укрепить вашу уверенность и улучшить понимание технологии.
17 просмотров






