Просмотр исходного кода

清理旧查表残留

Signed-off-by: hanyongwei <2043702190@qq.com>
dev2
hanyongwei 2 недель назад
Родитель
Сommit
dd37a5345c
3 измененных файлов: 5 добавлений и 36 удалений
  1. +2
    -24
      plsr/accel_curve/plsr_accel_curve.c
  2. +1
    -7
      plsr/accel_curve/plsr_accel_curve.h
  3. +2
    -5
      plsr/run_control/plsr_run_control.c

+ 2
- 24
plsr/accel_curve/plsr_accel_curve.c Просмотреть файл

@@ -9,7 +9,7 @@ PlsrAccelPlan_t g_plsr_accel_plan; /* 当前段三相规划结果 */ /*
PlsrAccelRuntime_t g_plsr_accel_runtime; /* 当前相 ISR 逐拍状态 */ /* 当前相运行态全局一份 */

/*
* 形状表(Q24,1.0 = 1<<24):ISR 按 t/T 查表再线性插值,不再预建 4096 点频率表
* 形状表(Q24,1.0 = 1<<24):ISR 按 t/T 查表再线性插值。
* 257 点 → 256 段;末点固定 PLSR_Q24_ONE。
*/
#define PLSR_Q24_ONE (1UL << 24) /* Q24 单位 1.0 */
@@ -501,15 +501,6 @@ uint32_t PlsrAccelCurveFreqAtPulse(const PlsrAccelPlan_t *plan,
return PlsrAccelCurveClampFreqHz(freq_hz);
}

/**
* 兼容旧调用:S/正弦不再预建 4096 点频率表。
* ISR 内时间累计 + 257 点 Q24 形状表插值取频。
*/
void PlsrAccelPrebuildFreqTables(const PlsrAccelPlan_t *plan)
{
(void)plan; /* 保留 API,PlanSeg 仍可调用;无事可做 */
}

/** @brief 进入加速相 */
void PlsrAccelBeginAccel(PlsrAccelRuntime_t *runtime,
const PlsrAccelPlan_t *plan)
@@ -525,10 +516,6 @@ void PlsrAccelBeginAccel(PlsrAccelRuntime_t *runtime,
plan->accel_rate_hz_per_s, /* 加速斜率 */
plan->decel_rate_hz_per_s, /* 减速斜率 */
plan->curve_mode); /* 曲线模式 */
/* S/正弦:ISR 走时间累计+形状表,不绑预建频表 */
runtime->freq_table_id = 0U;
runtime->table_length = 0U;
runtime->table_stride = 1U;
}

/** @brief 进入减速相 */
@@ -546,9 +533,6 @@ void PlsrAccelBeginDecel(PlsrAccelRuntime_t *runtime,
plan->accel_rate_hz_per_s, /* 斜率 */
plan->decel_rate_hz_per_s, /* 斜率 */
plan->curve_mode); /* 模式 */
runtime->freq_table_id = 0U;
runtime->table_length = 0U;
runtime->table_stride = 1U;
}

/** @brief 进入匀速相 */
@@ -568,9 +552,6 @@ void PlsrAccelBeginConstSpeed(PlsrAccelRuntime_t *runtime,
runtime->freq_rising = 1U; /* 方向随便填,反正不爬 */
runtime->curve_mode = plan->curve_mode; /* 模式照抄 */
runtime->is_active = 0U; /* 匀速:ISR 不改频 */
runtime->freq_table_id = 0U; /* 不用频率表 */
runtime->table_length = 0U; /* 表长0 */
runtime->table_stride = 1U; /* 步长无关 */
runtime->elapsed_time_us = 0U; /* 时间清零 */
runtime->jerk_time_us = 0U; /* 加加速度阶段时间清零 */
runtime->const_accel_time_us = 0U; /* 恒加速时间清零 */
@@ -579,7 +560,7 @@ void PlsrAccelBeginConstSpeed(PlsrAccelRuntime_t *runtime,

/**
* @brief ISR 里走:本相再往前一拍,返回下一拍该写成多大频率
* 直线:现场 v^2 逼近;S/正弦:时间累计 + 257 点 Q24 形状表线性插值(不查 4096 预建频表)
* 直线:现场 v^2 逼近;S/正弦:时间累计 + 257 点 Q24 形状表线性插值。
*/
uint32_t PlsrAccelNextFreq(PlsrAccelRuntime_t *runtime)
{
@@ -1540,9 +1521,6 @@ static void PlsrAccelRuntimeBeginRamp(PlsrAccelRuntime_t *runtime,
/* 有脉冲且起止不同才激活 */
runtime->is_active = ((total_pulses > 0U) &&
(start_freq_hz != end_freq_hz)) ? 1U : 0U; /* 有拍且起止不同才算活跃 */
runtime->freq_table_id = 0U; /* 不用预建频表 */
runtime->table_length = 0U; /* 表长清 */
runtime->table_stride = 1U; /* 保留字段 */
PlsrAccelRuntimeCalcTimes(runtime); /* 按模式预填时间参数 */
}



+ 1
- 7
plsr/accel_curve/plsr_accel_curve.h Просмотреть файл

@@ -62,7 +62,7 @@ uint32_t PlsrAccelCurveFreqAtPulse(const PlsrAccelPlan_t *plan,
/**
* 单相逐脉冲运行态(ISR 热路径,每来一个 UPDATE 调 Step 一次)
* 直线:每次按目标平方值逐步逼近下一频率
* S/正弦:时间累计 + 257 点 Q24 形状表线性插值(不再查预建频率表)
* S/正弦:时间累计 + 257 点 Q24 形状表线性插值
*/
typedef struct {
uint32_t cur_freq_hz; /* 当前输出频率 */
@@ -75,11 +75,8 @@ typedef struct {
uint32_t jerk_time_us; /* S 曲线单个 jerk 阶段时间 */
uint32_t const_accel_time_us; /* S 曲线恒加速阶段时间 */
uint32_t ramp_time_us; /* 整个斜坡时间 */
uint32_t table_stride; /* 保留字段(不再用于预建频表) */
uint32_t table_length; /* 保留字段(不再用于预建频表) */
uint8_t freq_rising; /* 1=频率升高,0=降低 */
uint8_t is_active; /* 1=当前相仍在运行 */
uint8_t freq_table_id; /* 保留:恒为 0(不用预建频表) */
PlsrAccelMode_e curve_mode; /* 直线 / S / 正弦 */
} PlsrAccelRuntime_t;

@@ -87,9 +84,6 @@ typedef struct {
extern PlsrAccelPlan_t g_plsr_accel_plan; /* 本段三相规划结果 */
extern PlsrAccelRuntime_t g_plsr_accel_runtime; /* 当前相 ISR 逐拍状态 */

/** 兼容旧调用:S/正弦不再预建频率表(空操作) */
void PlsrAccelPrebuildFreqTables(const PlsrAccelPlan_t *plan);

/** 进入加速相:起→峰;S/正弦在 ISR 内形状表取频 */
void PlsrAccelBeginAccel(PlsrAccelRuntime_t *runtime,
const PlsrAccelPlan_t *plan);


+ 2
- 5
plsr/run_control/plsr_run_control.c Просмотреть файл

@@ -1637,7 +1637,7 @@ static uint8_t PlsrRunControlResolveSegPlanEndpoints(uint16_t seg_idx, uint32_t
/**
* @brief 规划本段并锁 PSC / 进初始相
*
* 包装 accel_curve Plan + Prebuild,并据结果选 PH_APPROACH/CONST/DECEL。
* 包装 accel_curve Plan,并据结果选 PH_APPROACH/CONST/DECEL。
* 0x02:规划峰值达不到段表 f_tgt 时置故障(三角波),仍按压低后的峰运行。
*/
static void PlsrRunControlPlanSeg(uint32_t total, uint32_t f_from,
@@ -1671,13 +1671,10 @@ static void PlsrRunControlPlanSeg(uint32_t total, uint32_t f_from,

g_plsr_accel_runtime.total_pulses = 0U; /* 开跑前清当前相步进计数 */

/* S/正弦:在任务上下文预建频率表,ISR 只查表 */
PlsrAccelPrebuildFreqTables(&g_plsr_accel_plan); /* 兼容空操作:S/正弦 ISR 内形状表取频 */

/* 运行层使用规划后的实际起始频率 */
f_start = g_plsr_accel_plan.start_freq_hz; /* 规划后的实际入口 */

/* 脉冲域:ISR 用 PlsrAccelNextFreq(直线现场算 / S·正弦查预建表)*/
/* 脉冲域:ISR 用 PlsrAccelNextFreq(直线现场算 / S·正弦形状表插值)*/
/* 本段频率范围锁 PSC,升降只改 ARR;跨度过大则 LockPscRange 自动不锁 */
/* 本段可能出现的最低/最高频率,取 入口、目标、出口 三者的 min/max */
f_min = g_plsr_accel_plan.target_freq_hz; /* 先用目标频当上下限种子 */


Загрузка…
Отмена
Сохранить