This commit is contained in:
2026-03-28 13:48:31 +08:00
parent ca76b115ea
commit 0e9f24d3f6
10 changed files with 329 additions and 248 deletions

View File

@@ -135,16 +135,23 @@ int main(void)
MX_TIM6_Init();
MX_CAN1_Init();
MX_UART4_Init();
MX_TIM7_Init();
/* USER CODE BEGIN 2 */
CAN_App_Init();
FourWheel_LADRC_Init();
/* 启动 10ms 硬实时控制节拍 */
/* 启动 10ms 慢速/诊断节拍 */
if (HAL_TIM_Base_Start_IT(&htim6) != HAL_OK)
{
Error_Handler();
}
/* 启动 5ms 硬实时底盘控制节拍 */
if (HAL_TIM_Base_Start_IT(&htim7) != HAL_OK)
{
Error_Handler();
}
/* USER CODE END 2 */
/* Infinite loop */
@@ -242,22 +249,29 @@ void SystemClock_Config(void)
}
/* USER CODE BEGIN 4 */
/**
* @brief 定时器周期中断回调。
* @note TIM6 是整个底盘控制的“硬实时心跳”。
* 固定顺序:
* 1) 控制命令看门狗
* 2) 差速逆解算
* 3) 四轮 LADRC 闭环
* 4) 基于最新反馈做故障诊断
*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM6)
/* ==================================================
* [快循环] TIM7: 5ms 专用于底盘高频硬实时控制
* ================================================== */
if (htim->Instance == TIM7)
{
CAN_Safety_Watchdog_Tick();
/* 1. 运动学逆解算:根据上层下发的底盘 vx,vy,w 计算四个轮子的目标 RPM */
Kinematics_Update_LADRC();
/* 2. 四轮 LADRC 闭环:获取编码器 -> 滤波 -> 运算 -> 输出 PWM */
FourWheel_LADRC_Control_Loop();
}
/* ==================================================
* [慢循环] TIM6: 10ms 专用于状态机、看门狗与故障诊断
* ================================================== */
else if (htim->Instance == TIM6)
{
/* 1. 检查上位机/遥控器指令是否超时 */
CAN_Safety_Watchdog_Tick();
/* 2. 基于快循环更新的状态(如超调、堵转、离线等)做诊断 */
Chassis_Diagnostics_10ms_Tick();
}
}