fix:修复任务调度不准确的问题,

feat:优化电流采样速率
feat:优化PIDramp效率
feat:优化角度采样效率
fix:回滚CAN打包逻辑
feat:去除timer3
feat(FOC): 优化帕克逆变换与克拉克逆变换计算方式
将原有的三角函数计算替换为查表法,提高运算效率。同时添加了 sqrt(3)/2 的预计算常量,并优化了电压限制部分的计算逻辑,减少重复运算。
This commit is contained in:
cbb
2025-11-23 18:31:47 +08:00
parent 59f161bd73
commit 871e33e10f
14 changed files with 503 additions and 189 deletions
+6 -8
View File
@@ -2,6 +2,7 @@
#define _constrain(amt, low, high) \
((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt)))
#include "Can.h"
#include "math.h"
extern CAN_transmiter CAN0_transmiter;
constexpr float TIME_SLICE = 1e-4;
@@ -31,14 +32,11 @@ float PIDController::operator()(float error) {
output = _constrain(output, -limit, limit);
// 输出斜坡限制
if (output_ramp > 0) {
// 对PID的变化速率进行限制
float output_rate = (output - output_prev) / TIME_SLICE;
if (output_rate > output_ramp)
output = output_prev + output_ramp * TIME_SLICE;
else if (output_rate < -output_ramp)
output = output_prev - output_ramp * TIME_SLICE;
}
// 简化的斜坡限制(单行逻辑)
if (output_ramp > 0) {
float max_delta = output_ramp * TIME_SLICE;
output = output_prev + fmaxf(-max_delta, fminf(max_delta, output - output_prev));
}
// 保存值(为了下一次循环)
integral_prev = integral;
output_prev = output;