这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » Arduino Nicla Vision 开发指南【获取外置电池电量信息】

共1条 1/1 1 跳转至

Arduino Nicla Vision 开发指南【获取外置电池电量信息】

菜鸟
2025-12-16 20:46:20     打赏

一、硬件介绍

1、产品特点

Arduino Nicla Vision 搭载STM32H747AII6 双核芯片(Cortex-M7_480MHz + Cortex-M4_240MHz),板载六轴智能运动传感器、集成麦克风和距离传感器、Wi-Fi和蓝牙模块、以及一个200万的彩色摄像头;image-20251201235158510.png


特性

image.png


系统框图


image-20251202202441525.png



功率


image-20251202204111527.png



二、电池管理芯片 (MAX17262)

MAX17262 是一款超低功耗电量计IC,采用了美信的ModelGauge m5算法,可监测单节电池组,并支持内部电流检测。该IC可自动补偿电池老化、温度和放电速率的影响,并在广泛的工作条件下,以百分比(%)形式提供准确的充电状态(SOC),以毫安时(mAh)形式提供剩余容量。该IC能准确估算电池的剩余使用时间和充满时间,并提供三种报告电池老化情况的方法:容量降低、电池内阻增加和循环里程计。 该IC可精确测量电流、电压和温度。电池组的温度可通过内部温度传感器或外部热敏电阻进行测量。


板载锂电池连接方式

image-20251203234008684.png


特性

补偿电池老化、电流和温度的影响

无需放空、充满或闲置状态

集成内部电流检测选项:7mΩ和30mΩ(典型值)

热敏电阻或 ±1°C内部温度测量

动态功率估算放电期间的功率能力

估算剩余使用时间和充满时间

恒功率或恒流预测理论负载下的剩余容量

无需校准

针对电压、SOC、温度、电流和1% SOC变化的报警指示



原理图


image-20251203233728122.png

image-20251203233744120.png



三、代码编写

安装支持库

image-20251203233805085.png


获取锂电池电量等信息

充电状态监控 (电压、电流、剩余容量、温度、电量百分比、充满 / 耗尽预估时间等);


constexpr int BATTERY_CAPACITY_MAH = 950   // 实际电池容量 mAh C

constexpr NTCResistor NTC_TYPE = NTCResistor::Resistor10K  // NTC 阻值 (10K / 100K)


#include "Arduino_PowerManagement.h"

Charger charger;
Battery battery;

constexpr int BATTERY_CAPACITY_MAH = 950;     // 电池容量 mAh
constexpr NTCResistor NTC_TYPE = NTCResistor::Resistor10K; // NTC 阻值 (10K / 100K)

void setup() {
  Serial.begin(115200);
  delay(1000);

  //  初始化
  if (!charger.begin()) {
    Serial.println(" 初始化失败 ");
    while (true);
  }

  //打印电池相关信息
  Serial.println("* 参数信息如下: ");
  Serial.println("* 充电电压: " + String(charger.getChargeVoltage()) + " V");
  Serial.println("* 充电电流: " + String(charger.getChargeCurrent()) + " mA");
  Serial.println("* 终止电流: " + String(charger.getEndOfChargeCurrent()) + " mA");
  Serial.println("* 电池容量: " + String(BATTERY_CAPACITY_MAH) + " mAh");
  Serial.println();

    // 初始化电池监测
  BatteryCharacteristics characteristics;
  characteristics.capacity = BATTERY_CAPACITY_MAH;
  characteristics.ntcResistor = NTC_TYPE;
  characteristics.endOfChargeCurrent = charger.getEndOfChargeCurrent();
  characteristics.chargeVoltage = charger.getChargeVoltage(); // 4.2V

  battery = Battery(characteristics);
  bool batteryInitialized = battery.begin(true);

  if (!batteryInitialized){
    Serial.println("电池监测初始化失败!");
    while (true);
  }
}

void loop() {
  static ChargingState lastState = ChargingState::none;
  // 打印当前充电状态
  ChargingState currentState = charger.getState();
  if (currentState != lastState) {
    lastState = currentState;
    Serial.println("当前充电状态: " + getChargerStateString());
  }

  // 仅当电池连接时读取详细信息
  if (battery.isConnected()) {
    Serial.println("电池状态:");
    Serial.println("  • 电压: " + String(battery.voltage(), 2) + " V");
    Serial.println("  • 电流: " + String(battery.current()) + " mA (" + (battery.current() > 0 ? "充电中" : "放电中") + ")");
    Serial.println("  • 电量: " + String(battery.percentage()) + "%");
    Serial.println("  • 容量: " + String(battery.remainingCapacity()) + " / " + String(battery.fullCapacity()) + " mAh");
    
    if (battery.internalTemperature()) { // 有效温度
      Serial.println("  • 温度: " + String(battery.internalTemperature()) + "°C");
    }

    // 电池正在充电
    if(battery.current()){
      printTime(battery.timeToFull(), "  • 预计充满时间");
    }else{  // 电池正在放电
      printTime(battery.timeToEmpty(), "  • 预计耗尽时间"); 
    }
    Serial.println();
  } else {
    Serial.println("电池未连接");
  }

  delay(2000); 
}

// 获取充电状态
String getChargerStateString() {
  switch (charger.getState()) {
    case ChargingState::preCharge:               return "预充电";
    case ChargingState::fastChargeConstantCurrent: return "恒流快充";
    case ChargingState::fastChargeConstantVoltage: return "恒压充电";
    case ChargingState::endOfCharge:             return "充电终止中";
    case ChargingState::done:                    return "充电完成";
    case ChargingState::timerFaultError:         return "充电超时错误";
    case ChargingState::thermistorSuspendError:  return "温度异常(暂停充电)";
    case ChargingState::batteryOvervoltageError: return "电池过压错误";
    case ChargingState::chargerDisabled:         return "充电器已禁用";
    case ChargingState::chargerBypassed:         return "USB电压供电";
    default:                                     return "未知状态";
  }
}

// 时间转换
void printTime(uint32_t seconds, const char* label) {
  uint32_t h = seconds / 3600;
  uint32_t m = (seconds % 3600) / 60;
  uint32_t s = seconds % 60;
  Serial.println(String(label) + ": " + h + "h " + m + "m " + s + "s");
}


image-20251211103449811.png

Vision_Battery.gif




关键词: Arduino Nicla Vision    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]