新增了电流环控制功能,包括通过三相电流计算 Iq 的 `cal_Iq_Id` 方法,并在 `current_control` 中实现了基于 PID 的电流控制逻辑。同时对电压设置、占空比计算等部分进行了调整与优化。 refactor(filter): 移除冗余的电流卡尔曼滤波器实现 删除了 `Filter.cpp` 和 `Filter.h` 中关于 `CurrentKalman` 类的冗余代码,统一外部定义,简化结构。 refactor(health): 改进热量控制器算法和数据类型 将热累积计算改为更精确的分段处理方式,并引入 Q16.16 定点数提升运算精度与性能;增加对异常温度值的判断修正。 fix(CAN): 调整电流发送顺序及标志位设置位置 修改 CAN 发送中 V 相与 W 相电流打包顺序,确保通信正确性;调整发送标志设置逻辑至主循环任务内触发。 chore(headers): 清理无用头文件引用和结构调整 移除了多个源文件中不必要的头文件包含(如 `<cstdio>`、`<array>`),并对部分全局变量声明做了 extern 处理以避免重复定义问题。
40 lines
1.0 KiB
C++
40 lines
1.0 KiB
C++
#ifndef _HEALTH_H
|
|
#define _HEALTH_H
|
|
|
|
#include "stdint.h"
|
|
typedef int32_t q16_16_t; // Q16.16格式
|
|
// 定点数运算宏
|
|
#define Q16_16_ONE 65536 // 1.0 in Q16.16
|
|
#define FLOAT_TO_Q16_16(x) ((q16_16_t)((x) * Q16_16_ONE))
|
|
#define Q16_16_TO_FLOAT(x) ((float)(x) / Q16_16_ONE)
|
|
#define Q16_16_MUL(a, b) ((q16_16_t)(((int64_t)(a) * (b)) >> 16))
|
|
#define Q16_16_SQUARE(x) Q16_16_MUL((x), (x))
|
|
|
|
class ThermalController {
|
|
private:
|
|
u8 temperature;
|
|
u16 current_max;
|
|
|
|
q16_16_t thermalRate; // 热耗散系数(每单位时间散热比例)
|
|
q16_16_t recoveryRate; // 自然恢复率(散热到多少以下开始工作)
|
|
|
|
u32 thermal_value = 0;
|
|
u32 thermal_capacity = 3600000; // 热容量
|
|
|
|
u16 gapTimeMs = 10; // 单次计算间隔ms
|
|
u16 remainingTime10Ms = 0; // 过热冷却剩余ms
|
|
public:
|
|
ThermalController()
|
|
: thermalRate(FLOAT_TO_Q16_16(0.995f)),
|
|
recoveryRate(FLOAT_TO_Q16_16(0.33f)) {}
|
|
u32 update();
|
|
void reset() {
|
|
thermal_value = 0;
|
|
remainingTime10Ms = 0;
|
|
}
|
|
};
|
|
|
|
void angsens_MG_check(void);
|
|
|
|
#endif
|