diff --git a/app/app_brake.c b/app/app_brake.c index f9379fc..f26d135 100644 --- a/app/app_brake.c +++ b/app/app_brake.c @@ -47,36 +47,25 @@ static void brakeOutput(void *signal_id) { case 1: // 电机前进状态 un_h_bridge_output.bit_data.channel_01 = setBrakeOn(); - un_h_bridge_output.bit_data.channel_04 = setBrakeOn(); un_h_bridge_output.bit_data.channel_02 = setBrakeOff(); - un_h_bridge_output.bit_data.channel_03 = setBrakeOff(); - un_h_bridge_output.bit_data.sleep_01 = setBrakeOn(); - un_h_bridge_output.bit_data.sleep_02 = setBrakeOn(); // 正转 - un_inf_can_kgf_output1.bit_data.KGF13 = setBrakeOff(); // 抱闸继电器 - un_inf_can_kgf_output1.bit_data.KGF14 = setBrakeOff(); // 抱闸继电器 + un_h_bridge_output1.bit_data.channel_01 = setBrakeOn(); + un_h_bridge_output1.bit_data.channel_02 = setBrakeOff(); printf("Brake: Motor forward\n"); break; case 2: // 电机后退状态 un_h_bridge_output.bit_data.channel_01 = setBrakeOff(); - un_h_bridge_output.bit_data.channel_04 = setBrakeOff(); - un_h_bridge_output.bit_data.channel_02 = setBrakeOn(); - un_h_bridge_output.bit_data.channel_03 = setBrakeOn(); - un_h_bridge_output.bit_data.sleep_01 = setBrakeOn(); - un_h_bridge_output.bit_data.sleep_02 = setBrakeOn(); // 反转 - un_inf_can_kgf_output1.bit_data.KGF13 = setBrakeOn(); // 抱闸继电器 - un_inf_can_kgf_output1.bit_data.KGF14 = setBrakeOn(); // 抱闸继电器 - + un_h_bridge_output.bit_data.channel_02 = setBrakeOn(); + un_h_bridge_output1.bit_data.channel_01 = setBrakeOff(); + un_h_bridge_output1.bit_data.channel_02 = setBrakeOn(); printf("Brake: Motor reverse\n"); break; default: un_h_bridge_output.bit_data.channel_01 = setBrakeOff(); - un_h_bridge_output.bit_data.channel_04 = setBrakeOff(); un_h_bridge_output.bit_data.channel_02 = setBrakeOff(); - un_h_bridge_output.bit_data.channel_03 = setBrakeOff(); - un_h_bridge_output.bit_data.sleep_01 = setBrakeOff(); - un_h_bridge_output.bit_data.sleep_02 = setBrakeOff(); // 关闭 + un_h_bridge_output1.bit_data.channel_01 = setBrakeOff(); + un_h_bridge_output1.bit_data.channel_02 = setBrakeOff(); printf("Brake: Motor off\n"); break; } @@ -100,6 +89,14 @@ static void brakeTimerProcess(void *signal_id) { brake_data.state = BRAKE_STATE_APPLYING_BRAKE; brake_data.brake_motor_state = 1; + if( 0 == brake_data.brake_direction) + { + brake_data.brake_motor_state = 1; + } + else + { + brake_data.brake_motor_state = 2; + } brakeOutput(NULL); timerStart(&brake_data.brake_apply_timer, (uint32_t)(getParam("brk_on")), 0); } @@ -111,6 +108,14 @@ static void brakeTimerProcess(void *signal_id) brake_data.state = BRAKE_STATE_RELEASING_BRAKE; brake_data.brake_motor_state = 2; brakeOutput(NULL); + if( 0 == brake_data.brake_direction) + { + brake_data.brake_motor_state = 2; + } + else + { + brake_data.brake_motor_state = 1; + } timerStart(&brake_data.brake_release_timer, (uint32_t)(getParam("brk_off")), 0); } break; @@ -182,6 +187,14 @@ static void brakeInput(void *signal_id) } +void paramUpdate(void *signal_id) +{ + brake_data.brake_direction = (uint8_t)getParam("brk_rev"); + timerStart(&brake_data.brake_param_timer, 1000, 1); +} + + + // 修改APP模块的初始化函数 void brakeAppInit(void) { @@ -205,6 +218,7 @@ void brakeAppInit(void) timerInit(&brake_data.brake_timer); timerInit(&brake_data.brake_apply_timer); timerInit(&brake_data.brake_release_timer); + timerInit(&brake_data.brake_param_timer); // 订阅输入信号,处理刹车逻辑 subscribe(&un_sw_sample, brakeInput); @@ -212,13 +226,16 @@ void brakeAppInit(void) subscribe(&can_fault_info, brakeInput); subscribe(ðernet_fault_Info, brakeInput); + // 订阅定时器信号,用于状态机的定时处理 subscribe(&brake_data.brake_timer, brakeTimerProcess); subscribe(&brake_data.brake_apply_timer, brakeTimerProcess); subscribe(&brake_data.brake_release_timer, brakeTimerProcess); + subscribe(&brake_data.brake_param_timer, paramUpdate); // 启动定时器,定期调用 brakeTimerProcess timerStart(&brake_data.brake_timer, 500, 1); - + timerStart(&brake_data.brake_param_timer, 1000, 1); + printf("app_brake: initial OK \n"); } diff --git a/app/app_brake.h b/app/app_brake.h index 2146c11..4b3adcb 100644 --- a/app/app_brake.h +++ b/app/app_brake.h @@ -29,7 +29,8 @@ typedef struct BrakeSystem uint8_t brake_command; // 刹车命令变量:1表示刹车,2表示释放 uint8_t brake_motor_state; // 刹车电机状态变量:0停止,1前进,2后退 uint8_t brake_command_in_progress; // 刹车命令执行状态:0表示空闲,1表示正在执行 - + uint8_t brake_direction; + uint8_t emergency_stop_switch; // 急停开关 uint8_t remote_emergency_stop; // 遥控器急停开关 uint8_t remote_fault; // 遥控器故障 @@ -41,6 +42,7 @@ typedef struct BrakeSystem uint8_t old_brake_position; // 旧的刹车位置 Timer brake_apply_timer; // 刹车定时器 Timer brake_release_timer; // 释放刹车定时器 + Timer brake_param_timer; //参数更新时间 } BrakeSystem; diff --git a/app/app_param_manage.h b/app/app_param_manage.h index c397a39..b4ccc48 100644 --- a/app/app_param_manage.h +++ b/app/app_param_manage.h @@ -52,6 +52,7 @@ extern "C" X(Ocrv_il) \ X(Ocrv_ol) \ X(minTorq) \ + X(brk_rev) \ X(test) // 定义一个包含所有参数名称的结构体 diff --git a/interface.c b/interface.c index f27e8b5..1e21e95 100644 --- a/interface.c +++ b/interface.c @@ -31,6 +31,8 @@ UnWheelSpeedOutput un_wheel_wpeed_output ;//轮速输出 UnRemoteControlInput un_remote_control_input ;//遥控器输入 UnHBridgeOutput un_h_bridge_output ;//H桥输出 +UnHBridgeOutput un_h_bridge_output1 ;//H桥输出 + UnGatherOutput un_gather_output ;//采集模块输出 diff --git a/interface.h b/interface.h index 15efdb0..c206716 100644 --- a/interface.h +++ b/interface.h @@ -942,6 +942,7 @@ extern UnMotorTempInput un_motor_temp4; //电机控 extern UnInfCanKGFOutput un_inf_can_kgf_output1; extern UnInfCanKGFOutput un_inf_can_kgf_output2; extern UnHBridgeOutput un_h_bridge_output; +extern UnHBridgeOutput un_h_bridge_output1;//H桥输出 extern UnWheelSpeedOutput un_wheel_wpeed_output; extern UnGatherOutput un_gather_output;//采集模块输出 diff --git a/interface_can.c b/interface_can.c index bb0fff1..4c23167 100644 --- a/interface_can.c +++ b/interface_can.c @@ -1162,7 +1162,8 @@ static void processWheelSpeedOutput(void *signal_id) static void processHBridgeOutput(void *signal_id) { (void)signal_id; // DZΪʹã - CAN_Send_Msg(&can_handle_0, 0x7F2, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_h_bridge_output, 8, 17);//H + CAN_Send_Msg(&can_handle_5, 0x7F2, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_h_bridge_output, 8, 17);//H + CAN_Send_Msg(&can_handle_5, 0x722, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_h_bridge_output1, 8, 19);//H } static void processUnGatherOutput(void *signal_id) diff --git a/interface_can.h b/interface_can.h index 7d388d9..fe46636 100644 --- a/interface_can.h +++ b/interface_can.h @@ -38,16 +38,16 @@ #define LEFT_FRONT_MOTOR_OUTPUT1 0x201 -#define LEFT_FRONT_MOTOR_OUTPUT2 0x103 +#define LEFT_FRONT_MOTOR_OUTPUT2 0x401 -#define LEFT_REAR_MOTOR_OUTPUT1 0x202 -#define LEFT_REAR_MOTOR_OUTPUT2 0x104 +#define LEFT_REAR_MOTOR_OUTPUT1 0x202 +#define LEFT_REAR_MOTOR_OUTPUT2 0x402 #define RIGHT_FRONT_MOTOR_OUTPUT1 0x201 -#define RIGHT_FRONT_MOTOR_OUTPUT2 0x103 +#define RIGHT_FRONT_MOTOR_OUTPUT2 0x401 #define RIGHT_REAR_MOTOR_OUTPUT1 0x202 -#define RIGHT_REAR_MOTOR_OUTPUT2 0x104 +#define RIGHT_REAR_MOTOR_OUTPUT2 0x402