|
|
|
@@ -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); /* 按模式预填时间参数 */ |
|
|
|
} |
|
|
|
|
|
|
|
|