This commit is contained in:
Robofish 2026-03-18 02:05:47 +08:00
parent d933c59ae8
commit ec3d36ff08
4 changed files with 14 additions and 11 deletions

View File

@ -158,7 +158,7 @@ int8_t CAN_TX_SuperCapData(CAN_SuperCapTXDataTypeDef * TX_Temp)
/*******balance特供*******/ /*******balance特供*******/
/** /**
* @brief power_limit * @brief power_limitout[i]
* *
* @param power_limit * @param power_limit
* @param motor_out * @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 ; float ChassisPower = CAN_SuperCapRXData.ChassisPower ;
/* 保持每个电机输出值缩小时比例不变 */ /* 保持每个电机输出值缩小时比例不变 */
if (ChassisPower > power_limit) { if (ChassisPower > power_limit - 1) {
for (uint32_t i = 0; i < len; i++) { for (uint32_t i = 0; i < len; i++) {
motor_out[i] *= power_limit / ChassisPower; 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; return 0;
} }
/** /**
* @brief power_limitout[i] * @brief power_limit
*/ */
int8_t PowerLimit_Output(float power_limit, float *motor_out, uint32_t len) int8_t PowerLimit_Output(float power_limit, float *motor_out, uint32_t len)
{ {
/* power_limit小于0时不进行限制 */ /* power_limit小于0时不进行限制 */
if (motor_out == NULL || power_limit < 0) return -1; if (motor_out == NULL || power_limit < 0) return -1;
if (power_limit < 0 ) return 0;
float ChassisPower = CAN_SuperCapRXData.ChassisPower ; float ChassisPower = CAN_SuperCapRXData.ChassisPower ;
/* 保持每个电机输出值缩小时比例不变 */ /* 保持每个电机输出值缩小时比例不变 */
if (ChassisPower > power_limit) { if (ChassisPower > power_limit - 1) {
for (uint32_t i = 0; i < len; i++) { for (uint32_t i = 0; i < len; i++) {
motor_out[i] *= power_limit / ChassisPower; motor_out[i] *= power_limit / ChassisPower;
} }

View File

@ -27,8 +27,9 @@ extern Chassis_t chassis;
void Cap_Control(CAN_SuperCapRXDataTypeDef *cap, const Referee_ForCap_t *referee) 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; else chassis.power_limit = -1;
/* /*
if (referee->ref_status != REF_STATUS_RUNNING) { if (referee->ref_status != REF_STATUS_RUNNING) {
//当裁判系统离线时,依然使用裁判系统进程传来的数据 //当裁判系统离线时,依然使用裁判系统进程传来的数据

View File

@ -641,9 +641,9 @@ int8_t CMD_Arbitrate(CMD_t *ctx) {
// if (ctx->input.rc.sw[0] == CMD_SW_DOWN) { // if (ctx->input.rc.sw[0] == CMD_SW_DOWN) {
// ctx->output.gimbal.source = CMD_SRC_NUC; // ctx->output.gimbal.source = CMD_SRC_NUC;
// ctx->output.shoot.source = CMD_SRC_NUC; // ctx->output.shoot.source = CMD_SRC_NUC;
#if CMD_ENABLE_MODULE_REFUI // #if CMD_ENABLE_MODULE_REFUI
ctx->output.refui.source = CMD_SRC_NUC; // ctx->output.refui.source = CMD_SRC_NUC;
#endif // #endif
// } // }
// } // }
// } // }

View File

@ -49,7 +49,8 @@ void Task_cap(void *argument) {
while (1) { while (1) {
tick += delay_tick; /* 计算下一个唤醒时刻 */ tick += delay_tick; /* 计算下一个唤醒时刻 */
/* USER CODE BEGIN */ /* 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(); cap_online = get_supercap_online_state();
@ -57,6 +58,7 @@ void Task_cap(void *argument) {
/* 根据裁判系统数据计算输出功率 */ /* 根据裁判系统数据计算输出功率 */
SuperCap_CanTX.Powerlimit = power_limit; SuperCap_CanTX.Powerlimit = power_limit;
Cap_Control(&CAN_SuperCapRXData, &referee_cap); Cap_Control(&CAN_SuperCapRXData, &referee_cap);
SuperCap_Update(); SuperCap_Update();
CAN_TX_SuperCapData(&SuperCap_CanTX); CAN_TX_SuperCapData(&SuperCap_CanTX);
// osKernelUnlock(); // osKernelUnlock();