diff --git a/User/device/supercap.c b/User/device/supercap.c index 8c42299..8acc136 100644 --- a/User/device/supercap.c +++ b/User/device/supercap.c @@ -158,7 +158,7 @@ int8_t CAN_TX_SuperCapData(CAN_SuperCapTXDataTypeDef * TX_Temp) /*******balance特供*******/ /** - * @brief 限制功率不超过power_limit(超电测量功率版本) + * @brief 限制功率不超过power_limit(out[i]版本)(未完成) * * @param power_limit 最大功率 * @param motor_out 电机输出值 @@ -174,7 +174,7 @@ int8_t PowerLimit_Output_by_cap(float power_limit, float *motor_out, uint32_t le float ChassisPower = CAN_SuperCapRXData.ChassisPower ; /* 保持每个电机输出值缩小时比例不变 */ - if (ChassisPower > power_limit) { + if (ChassisPower > power_limit - 1) { for (uint32_t i = 0; i < len; i++) { motor_out[i] *= power_limit / ChassisPower; } @@ -183,17 +183,17 @@ int8_t PowerLimit_Output_by_cap(float power_limit, float *motor_out, uint32_t le return 0; } /** - * @brief 限制功率不超过power_limit(out[i]版本)(未完成) + * @brief 限制功率不超过power_limit(超电测量功率版本) */ int8_t PowerLimit_Output(float power_limit, float *motor_out, uint32_t len) { /* power_limit小于0时不进行限制 */ if (motor_out == NULL || power_limit < 0) return -1; - if (power_limit < 0 ) return 0; + float ChassisPower = CAN_SuperCapRXData.ChassisPower ; /* 保持每个电机输出值缩小时比例不变 */ - if (ChassisPower > power_limit) { + if (ChassisPower > power_limit - 1) { for (uint32_t i = 0; i < len; i++) { motor_out[i] *= power_limit / ChassisPower; } diff --git a/User/module/cap.c b/User/module/cap.c index 22f3616..b8b9516 100644 --- a/User/module/cap.c +++ b/User/module/cap.c @@ -27,9 +27,10 @@ extern Chassis_t chassis; void Cap_Control(CAN_SuperCapRXDataTypeDef *cap, const Referee_ForCap_t *referee) { - if (CAN_SuperCapRXData.SuperCapEnergy<=35)chassis.power_limit = referee->chassis_power_limit ; + if (CAN_SuperCapRXData.SuperCapEnergy<=5)chassis.power_limit = referee->chassis_power_limit ; else chassis.power_limit = -1; -/* + +/* if (referee->ref_status != REF_STATUS_RUNNING) { //当裁判系统离线时,依然使用裁判系统进程传来的数据 ChassisSetPower = referee->chassis_power_limit; diff --git a/User/module/cmd/cmd.c b/User/module/cmd/cmd.c index b699c5a..9c99b58 100644 --- a/User/module/cmd/cmd.c +++ b/User/module/cmd/cmd.c @@ -641,9 +641,9 @@ int8_t CMD_Arbitrate(CMD_t *ctx) { // if (ctx->input.rc.sw[0] == CMD_SW_DOWN) { // ctx->output.gimbal.source = CMD_SRC_NUC; // ctx->output.shoot.source = CMD_SRC_NUC; -#if CMD_ENABLE_MODULE_REFUI - ctx->output.refui.source = CMD_SRC_NUC; -#endif +// #if CMD_ENABLE_MODULE_REFUI +// ctx->output.refui.source = CMD_SRC_NUC; +// #endif // } // } // } diff --git a/User/task/cap.c b/User/task/cap.c index b77fffd..71849f6 100644 --- a/User/task/cap.c +++ b/User/task/cap.c @@ -49,7 +49,8 @@ void Task_cap(void *argument) { while (1) { tick += delay_tick; /* 计算下一个唤醒时刻 */ /* USER CODE BEGIN */ - //osMessageQueueGet(task_runtime.msgq.referee.ui.tocap, , NULL, 0); + osMessageQueueGet(task_runtime.msgq.referee.tocmd.cap, &referee_cap , NULL, 0); + power_limit = referee_cap.chassis_power_limit; cap_online = get_supercap_online_state(); @@ -57,6 +58,7 @@ void Task_cap(void *argument) { /* 根据裁判系统数据计算输出功率 */ SuperCap_CanTX.Powerlimit = power_limit; Cap_Control(&CAN_SuperCapRXData, &referee_cap); + SuperCap_Update(); CAN_TX_SuperCapData(&SuperCap_CanTX); // osKernelUnlock();