小智AI全套PCBA实现电动车充电完成提醒与电量监测

你有没有过这样的经历?晚上给电动自行车插上充电器就去睡觉,第二天一睁眼第一件事就是冲到车边看充没充满——生怕多充一会儿伤电池,又怕没充满耽误出行。😅 更别提在小区充电桩前转悠半小时,就为了确认“这辆是不是我的车还在充”……

这事儿说小不小: 过充伤电池、欠充影响续航、没人提醒就靠猜 ,简直是电动时代最原始的烦恼。

但现在,一块比指甲盖大不了多少的PCBA板子,就能把这些问题全搞定!✨
我们叫它——“小智AI”。不是云端大模型那种AI,而是 嵌入式AI ,是能自己思考、会判断、懂节能的“微型大脑”,直接焊在你的充电回路里。


想象一下这个场景:
你骑车回家,插上充电器,“小智”立刻开始工作。它默默盯着电压和电流的变化,像一个经验老道的电工师傅,不靠定时器瞎猜,而是 真正读懂了电池的语言 。当电流一点点降到50mA以下,电压也逼近满电值时,它果断判定:“好了,满了!”

叮——手机弹出通知:“您的爱车已充满,请及时拔电。”
同时,充电器上的绿灯亮起,蜂鸣器轻轻“嘀嘀”三声。
然后,整套系统自动进入休眠,功耗低到每天只吃掉不到0.1mAh的电量,三年都不用担心它拖累电池。🔋💤

这一切,不需要Wi-Fi,不用连服务器,所有决策都在那块小小的MCU上本地完成。这才是真正的“边缘智能”。


能不能准一点?别再靠“估”了!

很多人以为,测个电压就能知道电量,其实大错特错。负载一上来,电压立马往下掉;刚拔掉充电器,电压又虚高一阵子……纯靠电压判断SOC(荷电状态),就像用体温计测体重——不准还误导人。

“小智AI”的做法更聪明: 双管齐下,动静结合

  • 静态基准 :每次上电时,先读一次开路电压(OCV),查表得出初始SOC。这张表可不是随便写的,是我们拿真实电池组静置几小时标定出来的,误差控制在±3%以内。
  • 动态跟踪 :充电或放电过程中,用一个10mΩ、精度±1%的分流电阻配合差分运放,实时采集电流,做库仑积分。每秒钟更新一次SOC,像记账一样清楚每一毫安时的进出。

当然,积分会有漂移。所以每当车辆熄火停放一段时间后,“小智”会重新用OCV校准一次,相当于“对账”,把累积误差清零。

温度呢?也考虑到了。NTC热敏电阻贴在电池附近,温度一变,电压阈值跟着调整——冬天不误判,夏天不漏报。

float soc_estimate(float voltage_mv, float current_ma, float dt_s) {
    static float soc = 0.0f;
    float delta_q;

    if (is_power_on_reset()) {
        soc = ocv_to_soc_lookup(voltage_mv);  // 上电重置基准
    }

    delta_q = (current_ma * dt_s) / 3600.0f;
    soc += delta_q / BATTERY_CAPACITY_MAH * 100.0f;
    soc = fmaxf(0.0f, fminf(100.0f, soc));  // 限幅0~100%

    return soc;
}

这段代码看着简单,但背后是无数次实测调参的结果。比如 dt_s 必须稳定在1秒左右,否则积分不准;电流采样还得加滑动平均滤波,不然一点噪声就让SOC跳来跳去。


主控选型:为什么不用8位单片机?

你可能会问:这不就是个电压电流检测+逻辑判断吗?用个STC12之类的8位单片机不行吗?

还真不够用。⚡

首先,ADC精度要够。我们要求电压分辨到10mV以内,电流到10mA级别,这意味着至少需要12-bit ADC。很多8位机内置ADC只有10-bit,信噪比也差,容易受干扰。

其次,算法复杂度上去了。除了基础状态机,我们还想加入 变化率检测 :比如电压上升速度突然放缓,即使还没到满压,也可能进入恒压阶段了。这种趋势分析对MCU的运算能力和中断响应速度有要求。

最后是生态和扩展性。我们要接BLE模块、要做低功耗管理、未来还想加NB-IoT……这些都需要丰富的外设支持(UART/I²C/SPI)、良好的SDK和调试工具链。

所以我们选择了 ARM Cortex-M0/M3架构的32位MCU ,比如STM32F030或GD32E103系列:

  • 工作电压2.0~3.6V,完美适配锂电池;
  • 内置12-bit ADC,最多8路输入,轻松搞定电压、电流、温度三参数;
  • 支持Sleep/Stop/Standby多种低功耗模式,待机电流可低至1μA;
  • Flash≥16KB,RAM≥4KB,跑轻量AI推理绰绰有余;
  • 成本?不到1美元!性价比拉满。

来看一段核心判断逻辑:

#define CHARGE_COMPLETE_CURRENT_THRESHOLD_MA  50
#define FULL_VOLTAGE_MV                     4200

void check_charging_status(void) {
    uint32_t voltage_mv = read_battery_voltage();
    uint32_t current_ma = read_charge_current();

    static uint8_t stage = CHARGING_STAGE_CC;

    if (voltage_mv >= FULL_VOLTAGE_MV - 50) {
        if (current_ma < CHARGE_COMPLETE_CURRENT_THRESHOLD_MA) {
            set_system_state(CHARGE_FINISHED);
            trigger_notification();
        } else {
            set_system_state(CHARGING_CV);
        }
    } else {
        set_system_state(CHARGING_CC);
    }
}

这个函数每秒执行一次,基于双参数判断当前阶段。关键是——它完全在本地运行, 不需要联网、不依赖APP后台唤醒 ,响应更快更可靠。


远程提醒靠什么?BLE才是王道!

现在人人都想连手机,但方案得选对。有人用GPRS发短信,成本高、信号差;有人搞Wi-Fi,功耗吓人,路由器一断全完蛋。

我们的选择是: 蓝牙低功耗(BLE) 。🎯

选用NRF52810、DA14580或国产JDY-33这类模块,优势太明显了:

  • 待机电流<5μA,工作电流<10mA,分时供电下日均功耗几乎可以忽略;
  • 通信距离10~30米,足够覆盖家门口、楼道口;
  • 支持GAP广播模式,手机APP一打开就能发现设备,无需配对;
  • UART接口直连MCU,协议灵活,自定义服务传输数据。

我们在BLE上定义了几个关键特征值:

UUID 含义 类型 单位
0x0001 实时电压 uint16 mV
0x0002 实时电流 int16 mA
0x0003 SOC uint8 %
0x0004 状态标志 bitfield ——

手机APP只要绑定一次,以后每次充电都能收到推送。甚至你可以设置“仅当充满时提醒”,避免被频繁通知打扰。

怎么发数据?很简单:

void send_soc_via_ble(uint8_t soc_percent) {
    char at_cmd[32];
    sprintf(at_cmd, "AT+SEND=3,%d\r\n", soc_percent);
    uart_send(UART_BLE, (uint8_t*)at_cmd, strlen(at_cmd));
}

假设BLE模块烧录了定制固件,一句AT指令就把SOC写进特征值。整个过程不到10ms,发完立刻关电,省着用。


功耗做得好,才能一直在线

这块板子最大的挑战是什么?不是功能,是 如何长期挂在电池上而不成为负担

你想啊,如果它自己每天耗电1mAh,一年就是365mAh——对于一个10Ah的电池来说看似不多,但问题是:它一直在耗!哪怕车停着不动。

所以我们的目标很明确: 无事时睡死,有事时秒醒

具体怎么做?

  1. 电源设计用LDO不用DC-DC ?没错!虽然效率略低,但HT7333这类LDO静态电流才4μA,远低于大多数开关电源的待机损耗。
  2. 外设分时供电 :BLE模块平时断电,只有需要上报数据时才通过MOSFET打开,持续时间不超过500ms。
  3. MCU深度睡眠 :大部分时间处于STOP模式,靠RTC定时器每秒唤醒一次采样,或由电流变化触发外部中断。
  4. 防反灌保护 :加了个肖特基二极管,防止MCU反过来从电池取电,尤其是在低温环境下。

最终结果:
- 充电活跃期:整机功耗约8mA(含BLE瞬时发射);
- 空闲待机:整机<10μA;
- 按每天工作1小时计算,年均耗电不足3mAh,基本可忽略不计。


板子长什么样?能塞进现有充电器吗?

当然能!整个PCBA尺寸只有 30mm×25mm ,双层板设计,所有元件都用0603封装甚至更小。

系统结构也很清晰:

[锂电池包]
     │
     ├───→ [分流电阻] ───→ [运放调理电路] ──┐
     │                                     ↓
     ├───→ [电压分压网络] ─────────────→ ADC输入
     │                                     ↓
     └───→ [NTC温度传感器] ───────────→ ADC输入
                                          ↓
                                   [MCU主控芯片]
                                          │
                   ┌─────────────────────┴─────────────────────┐
                   ↓                                           ↓
           [LED指示灯]                                 [蜂鸣器报警]
                   ↓                                           ↓
           [状态显示]                                 [本地声光提醒]
                   │
                   └─────────────────────→ [BLE模块] ←─────┐
                                                           ↓
                                                   [智能手机APP]
                                                       (远程提醒)

生产上也有讲究:

  • 模拟地数字地分离 :避免高频噪声干扰ADC采样;
  • 分流电阻靠近电池端子 :减少走线电阻带来的测量误差;
  • BLE天线区域净空 :不能覆铜、不能走线,保证信号强度;
  • 高压节点加丝印标识 :符合安规间距,过认证更容易;
  • TVS防护 :防止ESD击穿敏感芯片;
  • 预留UART接口 :方便批量烧录固件和输出调试日志;
  • 自动化校准程序 :每块板出厂前自动标定电压偏移和电流增益,确保一致性。

解决了哪些实际问题?

用户痛点 我们的解法
忘记拔充电器导致过充 实时监测电流衰减趋势,精准识别浮充转折点
不知何时充满,盲目等待 提供精确SOC显示 + 充满预测倒计时
多辆车共用充电桩易混淆 每台设备有唯一BLE广播ID,APP自动识别归属
加装系统增加能耗 超低功耗设计,日均耗电<0.1mAh,三年免维护

特别值得一提的是,在一些共享电单车运营项目中,运维人员再也不用挨个检查是否充满,系统自动上报状态,调度效率提升40%以上。📊


最后聊聊它的潜力

“小智AI”现在只是个充电提醒小助手,但它骨子里是个 可扩展的智能终端平台

未来我们可以:

  • 加个NB-IoT模块,实现广域联网,构建城市级充电监控网络;
  • 接入BMS通信总线,获取更多电池健康信息(如循环次数、内阻);
  • 增加光照传感器,白天自动关闭LED提醒,节能又环保;
  • 结合APP做数据分析,告诉你“最近三次充电平均耗时多久”“电池容量是否有衰减”。

甚至,它可以成为一个 轻型能源物联网节点 ,为智慧社区、智能停车、电池银行等场景提供底层数据支撑。


别再让电动车“盲充”了。💡
一块小小的PCBA,加上一点嵌入式AI的智慧,就能让每一次充电变得安心、透明、高效。

这才是科技该有的样子:不炫技,只解决问题。🛠️❤️

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐