mirror of
https://gitee.com/dlmu-cone/tronone-h7-scaffold
synced 2026-07-24 03:27:45 +08:00
5.6 KiB
5.6 KiB
创一工作室 自研芯衡功率计 数据解算及TOHS实现 (未完成)
Bidirectional Energy Monitor
项目名称: 芯衡 (Bidirectional Energy Monitor)
文档版本: 2025.11.24 v1.0
作者: TuxMonkey
目录
1. 项目概述
芯衡 (BEM) 是一款专为机器人竞赛设计的实时功率监控与预警系统。
在比赛中,官方的电源管理模块对功率输出有严格限制,超功率会导致整车强制断电,从而直接导致比赛失败。本项目的核心目标,正是通过* 高精度、实时监测机器人的总功耗,为控制系统提供毫秒级的功率数据和超功率预警*,使机器人在发挥最大性能的同时,绝对避免因超功率而被罚下。
1.1 核心功能
- 实时双向监测:精确测量XT30接口的电压、电流,并计算瞬时功率。
- 累计能耗统计:记录单场比赛或单次运行的总耗电量。
- 功率超限预警:当功率接近官方限制阈值时,发出软件或硬件警告。
- 实时功率反馈:通过串口或CAN总线,将实时功率数据发送给主控,为功率控制算法提供数据基础。
1.2 硬件平台
- 主控制器:STM32F105,负责数据计算、逻辑判断与通信。
- 功率监测芯片:INA226,专用于双向电流/功率监测的高精度芯片,通过I2C通信。
- 显示单元:OLED显示屏,用于本地实时数据显示。
- 通信接口:串口 (UART) 或 CAN总线,用于与机器人主控交互。
2. 系统架构
+-------------------+ I2C +-------------------+ UART/CAN +-------------------+
| INA226 |<-------------->| STM32F105 |<----------------->| 机器人主控 |
| (功率测量) | | (数据处理与控制) | | (决策与执行) |
+-------------------+ +-------------------+ +-------------------+
^ |
| | OLED
+------------------------------------+
(测量XT30电源输入)
3. 程序接口实现
3.1 INA226 驱动层
主控已经做好了 了解更多请参照硬件文档
3.2 数据处理与通信层
/**
* @brief 功率计主任务 (应在FreeRTOS或主循环中调用)
* @note 负责周期性读取数据、检查预警、发送数据包
*/
void BEM_MainTask(void);
/**
* @brief 获取当前功率数据包
* @param *data: 指向数据包结构体的指针
*/
void BEM_GetDataPacket(bem_data_packet_t *data);
/**
* @brief 通过串口发送数据包 (用于调试或上位机)
*/
void BEM_UART_SendData(void);
/**
* @brief 通过CAN总线发送数据包 (用于与主控通信)
*/
void BEM_CAN_SendData(void);
3.3 数据结构定义
typedef struct {
float bus_voltage_v; // 总线电压 (V)
float current_a; // 电流 (A)
float power_w; // 瞬时功率 (W)
float energy_wh; // 累计能耗 (Wh)
uint8_t alert_flag; // 预警标志位
uint32_t timestamp_ms; // 时间戳
} bem_data_packet_t;
4. 用法
(此处描述如何使用这个功率计,从硬件连接到软件操作)
4.1 硬件连接
- 将功率计的XT30输入接口连接至机器人电池。
- 将功率计的XT30输出接口连接至机器人电源分配板。
- 连接STM32的串口或CAN接口至机器人主控。
- (可选) 连接OLED显示屏以进行本地监控。
4.2 软件初始化
在主程序初始化阶段调用以下函数:
// 设置功率预警阈值为官方限值的90%,例如180W
BEM_SetPowerAlertThreshold(180.0f);
4.3 主循环集成
在主循环或独立任务中运行:
while (1) {
BEM_MainTask(); // 执行数据读取、检查和发送
osDelay(10); // 根据需求调整周期,例如10ms
}
5. 功率控制策略
(此处是文档的核心,详细说明如何利用BEM的数据避免超功率)
5.1 预警级别设置
我们设置两级预警:
- 软预警 (~80%-90% 限功率):当功率达到此阈值,
BEM_CheckAlertFlag()返回true。主控程序应收到信号,并开始采取* 温和的降功率措施*,如:- 限制非核心机构的功率输出。
- 降低移动底盘的最大速度。
- 暂停某些预加载动作。
- 硬预警 (~95% 限功率):触发硬件报警,主控必须采取强制措施,如:
- 立即停止所有非必要动作。
- 进入“安全模式”,仅维持最基本功能。
5.2 主控端决策逻辑示例
// 机器人主控程序中的逻辑
bem_data_packet_t power_data;
BEM_GetDataPacket(&power_data);
if (power_data.alert_flag) {
// 触发预警,执行降功率策略
Robot_EnterPowerSavingMode();
}
if (power_data.power_w > HARD_LIMIT_W) {
// 紧急情况!立即停止所有电机
Robot_EmergencyStop();
}
6. 故障诊断
- 问题:读取到的数据始终为0。
- 检查:I2C线路连接是否正确,INA226地址配置是否正确。
- 问题:功率计算值明显不准。
- 检查:分流电阻值在程序中配置是否正确,INA226的校准寄存器配置。
- 问题:无法接收到CAN总线数据。
- 检查:CAN终端电阻是否连接,波特率设置是否匹配。