supercap&PowerCtrl

This commit is contained in:
2026-04-15 16:10:26 +08:00
parent dd12078f44
commit f2813bc1a5
3 changed files with 137 additions and 13 deletions

View File

@@ -5,6 +5,7 @@
#include "super_cap.h"
#include "memory.h"
#include "stdlib.h"
#include "bsp_dwt.h" // 【新增】引入获取时间的头文件,或者是 "main.h" 用 HAL_GetTick()
static SuperCapInstance *super_cap_instance = NULL;
@@ -15,6 +16,9 @@ static void SuperCapRxCallback(CANInstance *_instance)
rxbuff = _instance->rx_buff;
Msg = &super_cap_instance->cap_msg;
// 【新增】更新最后一次收到消息的时间戳
super_cap_instance->last_update_tick = DWT_GetTimeline_ms(); // 如果没有DWT,用 HAL_GetTick() 替换
// 按照新协议解析接收数据
Msg->ready = (SuperCapReadyEnum)rxbuff[0];
Msg->state = (SuperCapStateEnum)rxbuff[1];
@@ -24,6 +28,18 @@ static void SuperCapRxCallback(CANInstance *_instance)
Msg->bat_power = rxbuff[5];
}
// 【新增】在线判断函数
uint8_t SuperCapIsOnline(SuperCapInstance *instance)
{
if (instance == NULL) return 0;
// 如果当前时间减去上次接收时间超过 1000ms (1秒),则认为离线
if (DWT_GetTimeline_ms() - instance->last_update_tick > 2000) {
return 0; // 离线
}
return 1; // 在线
}
SuperCapInstance *SuperCapInit(SuperCap_Init_Config_s *supercap_config)
{
super_cap_instance = (SuperCapInstance *)malloc(sizeof(SuperCapInstance));
@@ -40,9 +56,9 @@ void SuperCapSend(SuperCapInstance *instance, SuperCap_TxMsg_s *tx_data)
// 按照新协议装载发送数据
txbuff[0] = tx_data->Enable;
txbuff[1] = tx_data->Charge;
txbuff[1] = tx_data->Reserved1;
txbuff[2] = tx_data->Powerlimit - instance->power_offset; // 计算功率补偿
txbuff[3] = tx_data->ChargePower;
txbuff[3] = tx_data->Reserved2;
CANTransmit(instance->can_ins, 1);
}

View File

@@ -44,9 +44,9 @@ typedef struct
/* 需要发送给超级电容的控制信息结构体 */
typedef struct {
uint8_t Enable; // 超级电容使能。1使能,0失能
uint8_t Charge; // 超级电容充电。1充电,0放电
uint8_t Reserved1; // Reserved 超级电容充电。1充电,0放电
uint8_t Powerlimit; // 裁判系统功率限制
uint8_t ChargePower; // 超级电容充电功率
uint8_t Reserved2; // Reserved 超级电容充电功率
} SuperCap_TxMsg_s;
#pragma pack()
@@ -56,6 +56,7 @@ typedef struct
CANInstance *can_ins; // CAN实例
SuperCap_Msg_s cap_msg; // 超级电容接收信息
uint8_t power_offset; // 功率补偿值
uint32_t last_update_tick; // 【新增】上次收到数据的时间戳
} SuperCapInstance;
/* 超级电容初始化配置 */
@@ -69,6 +70,9 @@ typedef struct
*/
SuperCapInstance *SuperCapInit(SuperCap_Init_Config_s *supercap_config);
// 【新增】函数声明
uint8_t SuperCapIsOnline(SuperCapInstance *instance);
/**
* @brief 发送超级电容控制信息
*/