god-yuan-hero/User/device/supercap.h
2025-12-07 14:35:28 +08:00

103 lines
3.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "bsp/can.h"
#include "device/device.h"
//#include "referee.h"
#define SUPERCAP_CAN BSP_CAN_1
//#define SUPERCAP_CAN BSP_CAN_2
#define SUPERCAP_TX_ID 0x001 //C板发给超级电容的ID
#define SUPERCAP_RX_ID 0x100 //超级电容发给C板的ID
//超级电容的状态标志位,超级电容运行或者保护的具体状态反馈
typedef enum
{
DISCHARGE =0 , //放电状态
CHARGE =1, //充电状态
WAIT =2, //待机状态
SOFTSTART_PROTECTION =3,//处于软起动状态
OVER_LOAD_PROTECTION = 4, //超电过载保护状态
BAT_OVER_VOLTAGE_PROTECTION =5, //过压保护状态
BAT_UNDER_VOLTAGE_PROTECTION =6, //电池欠压保护,电池要没电了,换电池
CAP_UNDER_VOLTAGE_PROTECTION =7, //超级电容欠压保护,超级电容用完电了,要充一会才能用
OVER_TEMPERATURE_PROTECTION =8, //过温保护,太热了
BOOM = 9, //超电爆炸了
}SuperCapStateEnum;
//超级电容准备状态,用于判断超级电容是否可以使用
typedef enum
{
SUPERCAP_STATUS_OFFLINE =0 ,
SUPERCAP_STATUS_RUNNING =1,
}SuperCap_Status_t;
// 发送给超级电容的数据
typedef struct {
FunctionalState Enable ; //超级电容使能。1使能0失能
SuperCapStateEnum Charge ; //V1.1超级电容充电。1充电0放电在PLUS版本中此标志位无效超电的充放电是自动的
uint8_t Powerlimit; //裁判系统功率限制
uint8_t ChargePower; //V1.1超级电容充电功率在PLUS版本中此参数超电的充电功率随着底盘功率变化
}CAN_SuperCapTXDataTypeDef;
// 从超级电容接收到的数据
typedef struct {
uint8_t SuperCapEnergy;//超级电容可用能量0-100%
uint16_t ChassisPower; //底盘功率0-512由于传输的时候为了扩大量程右移了一位所以接收的时候需要左移还原丢精度
SuperCap_Status_t SuperCapReady;//超级电容【可用标志】1为可用0为不可用
SuperCapStateEnum SuperCapState;//超级电容【状态标志】各个状态对应的状态码查看E_SuperCapState枚举。
uint8_t BatVoltage; //通过超级电容监控电池电压*10
uint8_t BatPower;
}CAN_SuperCapRXDataTypeDef;
extern CAN_SuperCapRXDataTypeDef CAN_SuperCapRXData;
void set_supercap_power_offset(uint8_t offset);
// 以下函数是超电控制所需要调用的函数
void transfer_SuperCap_measure( uint8_t *data);
int8_t CAN_TX_SuperCapData(CAN_SuperCapTXDataTypeDef * TX_Temp);
/**
* @brief 获取超级电容在线状态1在线0离线
*/
uint8_t get_supercap_online_state(void);
/**
* @brief 获取超级电容的运行状态具体查看枚举SuperCapStateEnum
*/
SuperCapStateEnum get_supercap_state(void);
/**
* @brief 获取超级电容读到的电池电压单位伏V
*/
float get_battery_voltage_from_supercap(void);
/**
* @brief 获取超级电容可用能量范围0-100%
*/
uint8_t get_supercap_energy(void);
/**
* @brief 获取根据超级电容功率统计的底盘消耗能量单位焦耳J
*/
uint32_t get_chassis_energy_from_supercap(void);
int8_t SuperCap_Init(void);
int8_t SuperCap_Update(void);
#ifdef __cplusplus
}
#endif /*SUPERCAP_H*/