1.0
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user