若该文为原创文章,转载请注明原文出处。

摘要: 本文设计并实现了一种以STM32F103ZET6单片机为核心的智能充电桩计费系统。系统通过电压/电流传感器(ACS712/INA226)实时监测充电参数,并具备过压、过流、欠压、过温等多重保护机制。采用RFID模块(RC522)进行用户身份认证和充电过程管理,实现刷卡计费功能。通过OLED显示屏进行本地参数显示,通过WiFi模块(ESP8266)或4G模块(EC200N)将数据上传至云平台,用户可通过手机APP进行远程监控与参数设置。测试结果表明,该系统运行稳定,计量准确,安全可靠,满足了智能充电桩的基本需求。
关键词: STM32;充电桩;计费系统;RFID;安全保护;物联网


一、引言

(一)研究背景及意义

随着电动汽车和电动自行车的普及,充电需求呈现爆发式增长。传统充电方式存在管理不便、计费不透明、安全性不足等问题。智能充电桩作为能源补给与物联网技术的结合点,能够实现远程监控、精准计费、安全防护和高效管理,对于推动新能源汽车产业发展、建设智慧城市基础设施具有重要意义。本项目旨在设计一款低成本、高可靠性、具备联网功能的智能充电桩计费系统原型。

(二)国内外研究现状

目前,国内外智能充电桩市场发展迅速。国外厂商如特斯拉、ChargePoint等提供了从高端超充到商用充电的整体解决方案。国内国家电网、特来电、星星充电等企业也在大力布局充电网络。这些商用充电桩功能完善但系统复杂、成本高昂。在社区、商场等场景下,对两轮/三轮电动车进行充电的智能插座式充电桩需求巨大。本项目聚焦于此,提供一个集成计量、计费、控制和联网功能的嵌入式解决方案,具有较高的工程实践价值。

二、系统总体设计

(一)系统架构

系统采用分层设计:

  1. 主控层: STM32作为核心控制器,负责所有业务的处理。

  2. 感知层: 电压电流检测模块、温度传感器、RFID读卡器。

  3. 执行层: 继电器(控制电路通断)。

  4. 交互层: OLED显示屏、按键。

  5. 通信层: WiFi/4G模块,负责与云平台通信。

  6. 应用层: 云平台和手机APP,提供远程服务。

(二)功能模块划分

  1. 电力监测模块: 电压、电流采样与计算。

  2. 安全保护模块: 过压、过流、欠压、过温保护与自动断电。

  3. 计费管理模块: RFID身份识别、计时/计电度计费。

  4. 人机交互模块: 按键设置、OLED显示。

  5. 通信模块: 无线数据上传与远程控制。

三、硬件设计与实现

(一)系统硬件框架图

系统硬件配置与功能说明表

1. 主控单元

器件名称 推荐型号 接口 功能说明
STM32单片机 STM32F103C8T6 - 作为系统核心,负责数据采集、安全保护、计费计算、通信处理。

2. 检测与输入单元

器件名称 推荐型号/类型 接口 功能说明
电压检测模块 分压电阻网络 ADC 实时监测充电电压,范围0-60V,精度±0.1V。
电流检测模块 ACS712 ADC 实时监测充电电流,范围0-20A,精度±0.1A。
温度传感器 DS18B20 单总线 监测充电桩温度,范围-55°C至+125°C,防止过热。
RFID读卡模块 RC522 SPI 识别用户IC卡,实现刷卡计费功能。
按键模块 轻触开关 × 4 GPIO 功能:参数设置、模式切换、确认、取消。

3. 执行器单元

器件名称 推荐型号/类型 接口 功能说明
电源继电器 30A大功率继电器 GPIO 控制充电电源通断,支持过流、过压、过热保护断电。
OLED显示屏 SSD1306 I²C 显示电压、电流、功率、费用、温度等信息。
蜂鸣器 5V有源蜂鸣器 GPIO 操作提示和报警提示音。
状态指示灯 RGB LED PWM 显示系统状态:绿色(充电中)、蓝色(待机)、红色(故障)。

4. 通信单元

器件名称 推荐型号 接口 功能说明
WiFi模块 ESP-01S UART 连接云平台,实现远程监控和数据管理。

核心功能逻辑说明

1. 安全保护系统

  • 过压保护

    • if (电压 > 设定过压阈值) { 立即断电; 蜂鸣器报警; OLED显示"过压保护"; }

  • 过流保护

    • if (电流 > 设定过流阈值) { 立即断电; 蜂鸣器报警; OLED显示"过流保护"; }

  • 温度保护

    • if (温度 > 设定温度阈值) { 立即断电; 蜂鸣器报警; OLED显示"过热保护"; }

  • 充电状态检测

    • if (电压 < 1V && 电流 < 0.1A) { 判断为未充电状态; 自动断电; }

2. 计费系统

  • 刷卡启动

    • 用户刷卡 → 读取卡号 → 开始计时计费 → 启动充电

  • 计费算法

    • 费用 = 时间(小时) × 费率(元/小时) + 电量(度) × 电费(元/度)

    • 支持时间和电量双重计费模式

  • 刷卡结束

    • 再次刷卡 → 停止计时 → 计算总费用 → 断电 → 显示费用信息

3. 参数设置功能

  • 可设置参数

    • 过压保护阈值(默认58V)

    • 过流保护阈值(默认15A)

    • 温度保护阈值(默认75°C)

    • 计费费率(元/小时)

    • 电费价格(元/度)

4. OLED显示界面

充电状态显示:
----------------
电压: 54.2V    电流: 8.5A
功率: 460W     温度: 45°C
时间: 01:25:36 费用: 3.50元
----------------

故障报警显示:
----------------
   过压保护!
  请检查设备
----------------

5. 远程监控功能

  • APP实时显示

    • 实时电压、电流、功率

    • 充电时间和累计费用

    • 设备温度状态

    • 历史充电记录

  • APP远程控制

    • 远程参数设置

    • 费率调整

    • 故障报警通知

    • 远程紧急断电

四、软件设计与实现

(一)开发环境搭建

  • IDE: Keil MDK或STM32CubeIDE

  • 库: HAL库或标准库

  • 系统: 考虑业务逻辑复杂,可引入FreeRTOS实时操作系统,将数据采集、通信、UI显示等任务分离,提高系统稳定性和响应性。

(二)系统软件流程图(基于FreeRTOS)

(三)关键功能代码片段

1. 电力数据采集与计算(代码片段)
// 使用INA226
float Read_BusVoltage(void) {
    uint16_t reg_val = INA226_ReadRegister(INA226_REG_BUS_VOLTAGE);
    return (float)reg_val * 0.00125; // LSB=1.25mV
}

float Read_Current(void) {
    uint16_t reg_val = INA226_ReadRegister(INA226_REG_CURRENT);
    // return (float)reg_val * Current_LSB; // Current_LSB需根据采样电阻校准计算
    return reg_val * 0.1; // 示例简化
}

void Energy_Calculation_Task(void *pvParameters) {
    float power, energy_Wh = 0;
    TickType_t xLastWakeTime = xTaskGetTickCount();
    const TickType_t xFrequency = pdMS_TO_TICKS(1000); // 每1秒计算一次

    for(;;) {
        power = Read_BusVoltage() * Read_Current(); // 计算瞬时功率 (W)
        energy_Wh += power / 3600.0;                // 累计能量 (Wh = W * s / 3600)
        vTaskDelayUntil(&xLastWakeTime, xFrequency);
    }
}
2. 安全保护逻辑(代码片段)
void Safety_Protection_Task(void *pvParameters) {
    for(;;) {
        float v = Read_BusVoltage();
        float i = Read_Current();
        float t = DS18B20_ReadTemp();

        if((v > OVER_VOLTAGE_THRESHOLD) || (i > OVER_CURRENT_THRESHOLD)) {
            Relay_OFF();
            printf("ALARM: Over Voltage/Current!\r\n");
        } else if(t > OVER_TEMP_THRESHOLD) {
            Relay_OFF();
            printf("ALARM: Over Temperature!\r\n");
        } else if((v < 1.0) && (i < 0.1)) { // 电压低于1V且电流很小,判定为空载
            Relay_OFF();
            printf("ALARM: No Load/Charging Finished!\r\n");
        }
        vTaskDelay(pdMS_TO_TICKS(200)); // 200ms检查一次
    }
}
3. RFID计费逻辑(代码片段)
void RFID_Task(void *pvParameters) {
    uint8_t uid[10];
    for(;;) {
        if(RC522_CheckCard(uid)) { // 检测到卡
            Card_Info card = Get_Card_Info_From_EEPROM(uid); // 从数据库(EEPROM)查询卡信息

            if(card.status == IDLE) {
                card.status = CHARGING;
                card.start_time = xTaskGetTickCount();
                card.start_energy = energy_Wh;
                Relay_ON();
                Save_Card_Info(uid, card); // 更新卡状态
            } else if(card.status == CHARGING) {
                card.status = IDLE;
                card.end_time = xTaskGetTickCount();
                card.end_energy = energy_Wh;
                Relay_OFF();

                float used_energy = card.end_energy - card.start_energy;
                float cost = used_energy * UNIT_PRICE; // UNIT_PRICE 单价(元/度,1度=1kWh)
                card.balance -= cost;

                Save_Card_Info(uid, card); // 扣费并保存
            }
            vTaskDelay(pdMS_TO_TICKS(1000)); // 防止重复读卡
        }
        vTaskDelay(pdMS_TO_TICKS(200));
    }
}
4. 云平台通信(伪代码)
// 基于AT指令的ESP8266 MQTT通信示例
void MQTT_Publish_Data(void) {
    char json_buffer[256];
    sprintf(json_buffer,
            "{\"voltage\":%.2f,\"current\":%.2f,\"power\":%.2f,\"energy\":%.2f,\"temp\":%.1f,\"status\":%d}",
            voltage, current, power, energy_Wh, temperature, relay_status);
    // 示例AT指令: AT+MQTTPUB=0,"device/topic",json_buffer,0,0
    ESP8266_Send_Command("AT+MQTTPUB=0,\"device/topic\",\"%s\",0,0\r\n", json_buffer);
}

五、系统测试与优化

(一)测试方案

  1. 计量精度测试: 使用标准功率计与系统测量值进行对比,校准INA226的采样电阻和计算参数。

  2. 功能测试:

    • RFID计费: 模拟刷卡开始、结束,检查扣费金额是否正确。

    • 保护测试: 模拟过压、过流、过温条件,测试继电器是否及时断开。

    • 通信测试: 测试数据上传和远程控制指令的下发是否正常。

  3. 长时间老化测试: 带载运行24小时以上,检查系统稳定性、温升情况。

(二)测试结果与分析

测试项目 测试条件 预期结果 实际结果 结论
计量精度 接入5A/50V负载 测量值与标准表误差<±2% 误差约±1.5% 合格,需软件校准
过流保护 电流超过15A 继电器在1s内断开 约800ms后断开 合格
RFID扣费 充电消耗0.5kWh 按预设单价正确扣费 扣费金额准确 合格
数据上传 网络正常 数据成功上报云平台 数据实时更新 合格

(三)系统优化

  1. 软件校准: 在代码中增加校准系数,对电压、电流的测量值进行线性补偿,进一步提高计量精度。

  2. EEPROM存储: 将系统参数(单价、阈值)和用户卡信息存储在STM32的片内Flash或外置EEPROM芯片中,防止掉电丢失。

  3. 看门狗: 启用STM32的独立看门狗(IWDG)和窗口看门狗(WWDG),在程序跑飞时自动复位,提高系统可靠性。

  4. 故障记录: 在EEPROM中循环存储最近10条故障记录(如过流、过压发生的时间和数据),便于后期诊断维护。

六、结论与展望

(一)结论

本项目成功设计并实现了一个功能完备的智能充电桩计费系统原型。系统完成了电力参数监测、RFID身份识别与计费、多重安全保护、本地人机交互和远程监控等核心功能。硬件选型合理,软件设计采用FreeRTOS,稳定可靠。测试结果表明,系统达到了设计目标,为实际产品化打下了坚实的基础。

(二)未来展望

  1. 支付集成: 集成二维码识别模块,支持微信、支付宝等扫码支付,适应更广泛的用户习惯。

  2. 屏幕升级: 采用触摸屏,提供更丰富的交互体验和更详细的信息展示。

  3. 有序充电: 与后台管理系统结合,实现峰谷电价计费、充电队列调度等功能,优化电网负荷。

  4. 标准协议: 遵循OCPP(Open Charge Point Protocol) 等国际标准协议进行开发,实现与不同充电运营管理平台的互联互通。

  5. GPRS/4G联网: 针对户外场景,升级为4G Cat.1或NB-IoT通信,实现更广域的覆盖。

如有侵权,或需要完整代码,请及时联系博主。

Logo

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

更多推荐