Parcourir la source

解决临时修改频率PWM不启动的问题

2
JIU JIALIN il y a 1 mois
Parent
révision
6abe5ed92f
4 fichiers modifiés avec 470 ajouts et 481 suppressions
  1. +10
    -21
      PLSR/PLSR/Core/Src/tim.c
  2. +2
    -2
      PLSR/PLSR/EWARM/settings/test.1.dnx
  3. +458
    -458
      PLSR/PLSR/EWARM/test.1.dep
  4. BIN
      PLSR/PLSR/EWARM/test.1/Exe/test.1.sim

+ 10
- 21
PLSR/PLSR/Core/Src/tim.c Voir le fichier

@@ -1311,14 +1311,19 @@ void Calculate_PluseNum(PLSR_RouteConfig_t *route)
if (calculated_total > total_pulses)
{
// 脉冲数超出限制,按比例缩减
if (part1_pulse_num > 0 && part3_pulse_num > 0) {
if (part1_pulse_num > 0 && part3_pulse_num > 0)
{
// 两个阶段都有脉冲,按比例分配
part1_pulse_num = (part1_pulse_num * total_pulses) / calculated_total;
part3_pulse_num = total_pulses - part1_pulse_num;
} else if (part1_pulse_num > 0) {
}
else if (part1_pulse_num > 0)
{
// 只有第一阶段有脉冲
part1_pulse_num = total_pulses;
} else if (part3_pulse_num > 0) {
}
else if (part3_pulse_num > 0)
{
// 只有第三阶段有脉冲
part3_pulse_num = total_pulses;
}
@@ -1331,27 +1336,10 @@ void Calculate_PluseNum(PLSR_RouteConfig_t *route)
// 将剩余脉冲分配给第二阶段(匀速阶段)
// 这样既不影响加减速的数学精确性,又能充分利用所有脉冲
part2_pulse_num = remaining_pulses;
// 计算匀速阶段的时间
if (vt > 0 && part2_pulse_num > 0) {
part2_time = (part2_pulse_num * 1000) / vt;
}

// 更新第二阶段状态为匀速
part2_state = PLSR_STATE_CONST;
}
// 最终验证:确保总数完全匹配
int32_t final_total = part1_pulse_num + part3_pulse_num;
if (final_total != total_pulses) {
// 如果还有差异,调整第一阶段
int32_t adjustment = total_pulses - final_total;
part1_pulse_num += adjustment;
if (part1_pulse_num < 0) {
part3_pulse_num += part1_pulse_num; // 将负数转移给第三阶段
part1_pulse_num = 0;
}
}
}
}
else
@@ -1691,6 +1679,7 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
PLSR_PWM_Stop();
AllPluse += current_tim2_count; // 累加当前段已发送的脉冲数
PLSR_Section_StartNewSection(&g_plsr_route); ///<重新启动当前段
PLSR_PWM_Start();
}
// 处理加减速过程中的频率更新(使用新的直线加减速算法)


+ 2
- 2
PLSR/PLSR/EWARM/settings/test.1.dnx Voir le fichier

@@ -12,12 +12,12 @@
<ByteLimit>50</ByteLimit>
</Stack>
<StLinkDriver>
<stlinkserialNo>46232557</stlinkserialNo>
<stlinkfoundProbes />
<CStepIntDis>_ 0</CStepIntDis>
<LeaveTargetRunning>_ 0</LeaveTargetRunning>
<stlinkResetStyle>0</stlinkResetStyle>
<stlinkResetStrategy>2</stlinkResetStrategy>
<stlinkserialNo>46232557</stlinkserialNo>
<stlinkfoundProbes />
</StLinkDriver>
<DebugChecksum>
<Checksum>1150792608</Checksum>


+ 458
- 458
PLSR/PLSR/EWARM/test.1.dep
Fichier diff supprimé car celui-ci est trop grand
Voir le fichier


BIN
PLSR/PLSR/EWARM/test.1/Exe/test.1.sim Voir le fichier


Chargement…
Annuler
Enregistrer