diff --git a/MDK-ARM/.vscode/keil-assistant.log b/MDK-ARM/.vscode/keil-assistant.log
index 80658bb..4d6a436 100644
--- a/MDK-ARM/.vscode/keil-assistant.log
+++ b/MDK-ARM/.vscode/keil-assistant.log
@@ -485,3 +485,5 @@
[info] Log at : 2025/7/1|14:01:22|GMT+0800
+[info] Log at : 2025/7/7|02:36:22|GMT+0800
+
diff --git a/MDK-ARM/R2.uvoptx b/MDK-ARM/R2.uvoptx
index 63ca8c3..ffaf9a7 100644
--- a/MDK-ARM/R2.uvoptx
+++ b/MDK-ARM/R2.uvoptx
@@ -134,13 +134,13 @@
0
- DLGUARM
-
+ CMSIS_AGDI
+ -X"" -O206 -S8 -C0 -P00000000 -N00("") -D00(00000000) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407IGHx$CMSIS\Flash\STM32F4xx_1024.FLM)
0
- CMSIS_AGDI
- -X"Any" -UAny -O206 -S8 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407IGHx$CMSIS\Flash\STM32F4xx_1024.FLM)
+ DLGUARM
+
0
@@ -198,42 +198,7 @@
9
1
- NUC_send
-
-
- 10
- 1
- nuc_raw,0x0A
-
-
- 11
- 1
- ang_58
-
-
- 12
- 1
- ang_66
-
-
- 13
- 1
- cmd_fromnuc,0x0A
-
-
- 14
- 1
- Nuc,0x0A
-
-
- 15
- 1
- rec_flag
-
-
- 16
- 1
- ctrl
+ \\R2\../User/task/up_task.c\UP.MID360Context.IsLaunch
@@ -242,7 +207,7 @@
0
1
- 1
+ 0
0
0
0
@@ -938,7 +903,7 @@
User/bsp
- 0
+ 1
0
0
0
@@ -1218,7 +1183,7 @@
User/Algorithm
- 0
+ 1
0
0
0
@@ -1390,7 +1355,7 @@
Application/User/USB_DEVICE/App
- 0
+ 1
0
0
0
@@ -1434,7 +1399,7 @@
Application/User/USB_DEVICE/Target
- 0
+ 1
0
0
0
diff --git a/MDK-ARM/R2/R2.axf b/MDK-ARM/R2/R2.axf
index 824d23e..178b9e3 100644
Binary files a/MDK-ARM/R2/R2.axf and b/MDK-ARM/R2/R2.axf differ
diff --git a/README.md b/README.md
index e69de29..304e4f3 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+4.16 把整车用一个c板控制,添加主要代码,后续增加上层
\ No newline at end of file
diff --git a/User/Module/Chassis.c b/User/Module/Chassis.c
index a354b11..b0a0331 100644
--- a/User/Module/Chassis.c
+++ b/User/Module/Chassis.c
@@ -35,10 +35,6 @@ int8_t Chassis_UpdateFeedback(Chassis_t *c, const CAN_t *can) {
c->sick_cali.sick_dis[1]=(fp32)(can->sickfed.raw_dis[1]+30) ; //有点误差,手动补偿
c->sick_cali.sick_dis[2]=(fp32)(can->sickfed.raw_dis[2] );
- c->vofa_send[7] =c->sick_cali.sick_dis[1]-c->sick_cali.sick_dis[2];
- c->vofa_send[6] = c->sick_cali.sick_dis[0];
- c->vofa_send[5] =c->sick_cali.sick_dis[1];
- c->vofa_send[4] =c->sick_cali.sick_dis[2];
return CHASSIS_OK;
}
@@ -58,6 +54,12 @@ int8_t Chassis_init(Chassis_t *c, const Chassis_Param_t *param, float target_fre
PID_init(&(c->pid.SickCaliVxOutPID), PID_POSITION, &(c->param->SickCali_XOutparam));
PID_init(&(c->pid.SickCaliVyInPID), PID_POSITION, &(c->param->SickCali_YInparam));
PID_init(&(c->pid.SickCaliVyOutPID), PID_POSITION, &(c->param->SickCali_YOutparam));
+
+ PID_init(&(c->pid.Mid360AngleInPID), PID_POSITION, &(c->param->Mid360AngleInPID_param));
+ PID_init(&(c->pid.Mid360AngleOutPID), PID_POSITION, &(c->param->Mid360AngleOutPID_param));
+
+
+
/*修正 */
PID_init(&(c->pid.Chassis_AngleAdjust), PID_POSITION, &(c->param->Chassis_AngleAdjust_param));
@@ -98,16 +100,14 @@ int8_t Chassis_Control(Chassis_t *c, CMD_t *ctrl, CAN_Output_t *out) {
c->pos088.bmi088.filtered_gyro.z = LowPassFilter2p_Apply(&(c->filled[0]), c->pos088.bmi088.gyro.z);
/*初始数据*/
- c->move_vec.Vx = 0;
- c->move_vec.Vy = 0;
- c->move_vec.Vw = 0;
+
c->to_nuc.send = 0;
c->sick_cali.is_reach = 0;
-
- c->vofa_send[0]= KalmanFilter(&c->extKalman[0] , c->sick_cali.sick_dis[0]);
- c->vofa_send[1]= KalmanFilter(&c->extKalman[1] , c->sick_cali.sick_dis[1]);
- c->vofa_send[2]= KalmanFilter(&c->extKalman[2] , c->sick_cali.sick_dis[2]);
+ c->move_vec.Vw=0;
+ c->move_vec.Vx = 0;
+ c->move_vec.Vy = 0;
+
@@ -131,9 +131,9 @@ int8_t Chassis_Control(Chassis_t *c, CMD_t *ctrl, CAN_Output_t *out) {
break;
case Chassis_Adjust_Sick:
-// sick_calibration(c, ctrl, out);
+ sick_calibration(c, ctrl, out);
// c->to_nuc.send = (c->sick_cali.is_reach == 1) ? 1 : 0;
- break;
+ break;
}
break;
@@ -141,22 +141,13 @@ int8_t Chassis_Control(Chassis_t *c, CMD_t *ctrl, CAN_Output_t *out) {
case AUTO:
switch (c->chassis_ctrl.mode) {
case AUTO_MID360:
-// c->move_vec.Vw = -ctrl->cmd_MID360.posw * 1000;
-// c->move_vec.Vy = ctrl->cmd_MID360.posy * 1000;
-// c->move_vec.Vx = -ctrl->cmd_MID360.posx * 1000;
- c->move_vec.Vw =-ctrl->cmd_MID360.posw * 3000;
-
- abs_limit_fp(&c->move_vec.Vx, 5000.0f);
- abs_limit_fp(&c->move_vec.Vy, 5000.0f);
- abs_limit_fp(&c->move_vec.Vw, 5000.0f);
+
+ c->move_vec.Vw = -ctrl->cmd_MID360.angle * 3000;
+ abs_limit_fp(&c->move_vec.Vw, 5000.0f);
break;
case AUTO_MID360_Pitch:
-// c->move_vec.Vw = -ctrl->cmd_MID360.posw * 1000;
-// c->move_vec.Vy = ctrl->cmd_MID360.posy * 1000;
-// c->move_vec.Vx = -ctrl->cmd_MID360.posx * 1000;
- abs_limit_fp(&c->move_vec.Vx, 5000.0f);
- abs_limit_fp(&c->move_vec.Vy, 5000.0f);
+ c->move_vec.Vw = -ctrl->cmd_MID360.angle * 3000;
abs_limit_fp(&c->move_vec.Vw, 5000.0f);
break;
case REPOSITION:
@@ -178,9 +169,7 @@ int8_t Chassis_Control(Chassis_t *c, CMD_t *ctrl, CAN_Output_t *out) {
break ;
case PB_MID:
case PB_DOWN:
- c->move_vec.Vw = -ctrl->cmd_MID360.posw * 1000;
- c->move_vec.Vy = ctrl->cmd_MID360.posy * 1000;
- c->move_vec.Vx = -ctrl->cmd_MID360.posx * 1000;
+ c->move_vec.Vw = -ctrl->cmd_MID360.angle * 1000;
abs_limit_fp(&c->move_vec.Vx, 5000.0f);
abs_limit_fp(&c->move_vec.Vy, 5000.0f);
abs_limit_fp(&c->move_vec.Vw, 5000.0f);
@@ -314,3 +303,4 @@ int8_t Chassis_AngleCompensate(Chassis_t *c)
}
+
diff --git a/User/Module/Chassis.h b/User/Module/Chassis.h
index a5e410b..30e89b1 100644
--- a/User/Module/Chassis.h
+++ b/User/Module/Chassis.h
@@ -90,6 +90,12 @@ typedef struct
pid_param_t Chassis_AngleAdjust_param;
+
+ pid_param_t Mid360AngleInPID_param;
+ pid_param_t Mid360AngleOutPID_param;
+
+
+
sickparam_t sickparam;
}Chassis_Param_t;
@@ -163,6 +169,10 @@ typedef struct{
pid_type_def SickCaliVyInPID;
pid_type_def SickCaliVyOutPID;
+ pid_type_def Mid360AngleInPID;
+ pid_type_def Mid360AngleOutPID;
+
+
}pid;
diff --git a/User/Module/config.c b/User/Module/config.c
index 24a3a08..e1e4a53 100644
--- a/User/Module/config.c
+++ b/User/Module/config.c
@@ -235,6 +235,27 @@ static const ConfigParam_t param ={
.out_limit =1000.0f,
},
+
+ .Mid360AngleInPID_param={
+ .p = 0.0f,
+ .i = 0.0f,
+ .d = 0.0f,
+ .i_limit = 0.0f,
+ .out_limit =1000.0f,
+
+ },
+ .Mid360AngleOutPID_param={
+ .p = 10.0f,
+ .i = 0.0f,
+ .d = 0.0f,
+ .i_limit = 0.0f,
+ .out_limit =1000.0f,
+
+ },
+
+
+
+
.sickparam={
.w_error=2,
.xy_error=3,
diff --git a/User/Module/up.c b/User/Module/up.c
index 4f048a1..bf8da88 100644
--- a/User/Module/up.c
+++ b/User/Module/up.c
@@ -181,10 +181,7 @@ int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c)
/*部分数据更新*/
static int is_pitch=1;
- posss=CurveChange(LowPassFilter2p_Apply(&u->filled[0],c->pos),3.4,4.2,&u->MID360Context.Curve);
- u->vofa_send[0] = u->MID360Context.MID360Cfg.go_release_pos;
- u->vofa_send[1] = u->motorfeedback.go_data.Pos;
- u->vofa_send[2] = c->pos;
+ posss=CurveChange(LowPassFilter2p_Apply(&u->filled[0],c->cmd_MID360.dis),3.4,4.2,&u->MID360Context.Curve);
switch (c->CMD_CtrlType )
{
@@ -364,7 +361,7 @@ int8_t Pass_Process(UP_t *u,CAN_Output_t *out,CMD_t *c)
PassCfg ->go_release_pos =
- CurveChange(LowPassFilter2p_Apply(&u->filled[0],c->pos),3,4,&u->PassContext.Curve);
+ CurveChange(LowPassFilter2p_Apply(&u->filled[0],c->cmd_MID360.dis),3,4,&u->PassContext.Curve);
switch (*state) { //遥控器按键进行状态切换
case PASS_STOP:
@@ -403,14 +400,7 @@ int8_t UP_AUTO_Control(UP_t *u,CAN_Output_t *out,CMD_t *c){
LaunchContext_t *LaunchContext = &u->LaunchContext;
MID360Context_t *MID360Context=&u->MID360Context;
MID360Cfg_t *MID360Cfg = &u->MID360Context.MID360Cfg;
- if(u->MID360Context.Curve==CURVE_58){
- MID360Cfg->go_release_pos=CurveChange(LowPassFilter2p_Apply(&u->filled[0],c->pos)-0.25,3.2,4.3,&u->MID360Context.Curve);
- }
- else {
- MID360Cfg->go_release_pos=CurveChange(LowPassFilter2p_Apply(&u->filled[0],c->pos)-0.05,3.2,4.3,&u->MID360Context.Curve);
-
- }
-
+ MID360Cfg->go_release_pos=CurveChange(LowPassFilter2p_Apply(&u->filled[0],c->cmd_MID360.dis),3.2,4.3,&u->MID360Context.Curve);
if (u->MID360Context.Curve == CURVE_58) {
target->Pitch_angle = 58;
} else {
diff --git a/User/Module/up_utils.c b/User/Module/up_utils.c
index 212d1cc..ea889d5 100644
--- a/User/Module/up_utils.c
+++ b/User/Module/up_utils.c
@@ -65,7 +65,7 @@ int8_t GO_SendData( GO_MotorData_t *go_data,GO_MotorCmd_t *go_cmd,float pos, flo
}
-// 计算66度曲线(偏上)
+
// 计算66度曲线(偏上)
static float curve_66(float d) {
return 3.7028f * d * d + 11.2126f * d -142.9446f;
@@ -81,16 +81,12 @@ static float curve_58(float d) {
迟滞区x-y
曲线x重合区,根据当前函数和变化方向切换
*/
-int abdddd=0;
-fp32 ang_58;
-fp32 ang_66;
-
float CurveChange(float d, float x, float y, CurveType *cs)
{
- if (d<3.2) abdddd++;
if (*cs == CURVE_66) {
if (d > y) {
- *cs = CURVE_58;
+
+ *cs = CURVE_58;
}
} else { // CURVE_58
if (d < x) {
@@ -100,10 +96,8 @@ float CurveChange(float d, float x, float y, CurveType *cs)
// 根据当前曲线返回结果
if (*cs == CURVE_58) {
- ang_58=d;
return curve_58(d);
} else {
- ang_66=d;
return curve_66(d);
}
}
diff --git a/User/bsp/protocol.h b/User/bsp/protocol.h
index 41bd713..501bb77 100644
--- a/User/bsp/protocol.h
+++ b/User/bsp/protocol.h
@@ -37,19 +37,11 @@ typedef struct __attribute__((packed)) {
typedef struct __attribute__((packed)) {
Protocol_ID_t recv_id;//作为帧头使用确认通信ID正确
- uint8_t status; /* 控制命令 */
struct __attribute__((packed)) {
- float posy; /*pitch轴*/
- float posx; /*yaw轴*/
- char cmd;
- float dis; /*距离*/
- }pick;
- struct __attribute__((packed)) {
- float vx; /* x轴移动速度 */
- float vy; /* y轴移动速度 */
float wz; /* z轴转动速度 */
+ float dis;
}navi;
} Protocol_DownDataChassis_t;
@@ -83,17 +75,17 @@ typedef struct __attribute__((packed)) {
typedef struct __attribute__((packed))
{
- fp32 status;
+ uint8_t status;
+
+
} Protocol_UpDataCMD_t;
/* 视觉 -> 电控 上层机构数据结构体*/
typedef struct __attribute__((packed)) {
-
- uint8_t status; /* 控制命令 */
-
+ float angle; // 角度信息
+ float dis; // 位移信息
} Protocol_DownDataUpper_t;
-
typedef struct __attribute__((packed)) {
Protocol_UpDataMCU_t data;
} Protocol_UpPackageMCU_t;
@@ -106,6 +98,7 @@ typedef struct __attribute__((packed)) {
typedef struct __attribute__((packed)) {
Protocol_DownDataUpper_t data;
} Protocol_DownPackageUpper_t;
+
#ifdef __cplusplus
}
#endif
diff --git a/User/device/cmd.c b/User/device/cmd.c
index 73bd548..28ba857 100644
--- a/User/device/cmd.c
+++ b/User/device/cmd.c
@@ -87,44 +87,25 @@ return 0;
int8_t CMD_ParseNuc(CMD_t *cmd,CMD_NUC_t *n){
if(cmd == NULL) return -1;
- if(n == NULL) return -1;
+ if(n == NULL) return -1;
- cmd->cmd_status = n->status_fromnuc;
- cmd->raw_status = n->ctrl_status;
for (int i = 0; i < 7; ++i)
{ // 从最低位到最高位遍历
cmd->status[i] = ((cmd->raw_status) & (1 << i)) ? 1 : 0;
}
- switch(cmd->cmd_status){
+
- case MID:
- cmd->cmd_MID360.posx = n->MID360.vx;
- cmd->cmd_MID360.posy = n->MID360.vy;
- cmd->cmd_MID360.posw = n->MID360.wz;
- cmd->pos =n->MID360 .pos ;
- break;
-
- case VISION :
- cmd ->cmd_pick .posx =n->camera.data1 ;
- cmd ->cmd_pick .posy =n->camera.data2 ;
- cmd ->cmd_pick .posw =n->camera.data3 ;
+ cmd->cmd_MID360.angle = n->MID360.angle;
+ cmd->cmd_MID360.dis = n->MID360.dis;
- break;
- default:
- cmd->cmd_MID360.posx = 0;
- cmd->cmd_MID360.posy = 0;
- cmd->cmd_MID360.posw = 0;
+
- cmd->pos =0 ;
-
-
- break ;
- }
+
return 0;
}
diff --git a/User/device/cmd.h b/User/device/cmd.h
index de48449..fa9f532 100644
--- a/User/device/cmd.h
+++ b/User/device/cmd.h
@@ -42,19 +42,12 @@ typedef enum{
Dribbl_transfer
}CMD_mode_t;
typedef struct {
- uint8_t status_fromnuc;
- uint8_t ctrl_status;
-
+
struct
{
- fp32 vx;
- fp32 vy;
- fp32 wz;
-
- fp32 pos;
+
fp32 angle;
-
- char flag;
+ fp32 dis;
}MID360;
struct
@@ -149,9 +142,9 @@ typedef struct {
}cmd_pick;
struct
{
- fp32 posx;
- fp32 posy;
- fp32 posw;
+ fp32 angle;
+ fp32 dis;
+
}cmd_MID360;
diff --git a/User/device/nuc.c b/User/device/nuc.c
index da602d9..ef6ef4c 100644
--- a/User/device/nuc.c
+++ b/User/device/nuc.c
@@ -6,7 +6,7 @@ volatile uint32_t drop_message = 0;
static osThreadId_t thread_alert;
-uint8_t nucbuf[25];
+uint8_t nucbuf[10];
char SendBuffer[7];
static void NUC_CBLTCallback(void)
@@ -58,86 +58,29 @@ int8_t NUC_RawParse(CMD_NUC_t *n, NUC_t *nuc)
return DEVICE_ERR_NULL;
union
{
- float x[5];
- char data[20];
+ float x[2];
+ char data[8];
} instance;
if (nucbuf[0] != HEAD)
goto error; // 发送ID不是底盘
else
{
- n->status_fromnuc = nucbuf[1];
- n->ctrl_status = nucbuf[2];
- switch (n->status_fromnuc)
- {
- case VISION: // 控制帧0x02
- /* 协议格式
- 0xFF HEAD
- 0x02 控制帧
- 0x01 相机帧
- vx fp32
- vy fp32
- wz fp32
- 0xFE TAIL
- */
-
- instance.data[3] = nucbuf[3];
- instance.data[2] = nucbuf[4];
- instance.data[1] = nucbuf[5];
- instance.data[0] = nucbuf[6];
- n->camera.data1 = instance.x[0]; //
- instance.data[7] = nucbuf[7];
- instance.data[6] = nucbuf[8];
- instance.data[5] = nucbuf[9];
- instance.data[4] = nucbuf[10];
- n->camera.data2 = instance.x[1]; //
- instance.data[11] = nucbuf[11];
- instance.data[10] = nucbuf[12];
- instance.data[9] = nucbuf[13];
- instance.data[8] = nucbuf[14];
- n->camera.data3 = instance.x[2]; //
- break;
- case MID: // 控制帧0x08
- /* 协议格式
- 0xFF HEAD
- 0x09 控制帧
- 0x01 相机帧
- vx fp32
- vy fp32
- wz fp32
- 0xFE TAIL
- */
- if (nucbuf[24] != TAIL)
+ if (nucbuf[9] != TAIL)
goto error;
- instance.data[3] = nucbuf[6];
- instance.data[2] = nucbuf[5];
- instance.data[1] = nucbuf[4];
- instance.data[0] = nucbuf[3];
- n->MID360.vx = instance.x[0]; //
- instance.data[7] = nucbuf[10];
- instance.data[6] = nucbuf[9];
- instance.data[5] = nucbuf[8];
- instance.data[4] = nucbuf[7];
- n->MID360.vy = instance.x[1]; //
- instance.data[11] = nucbuf[14];
- instance.data[10] = nucbuf[13];
- instance.data[9] = nucbuf[12];
- instance.data[8] = nucbuf[11];
- n->MID360.wz = instance.x[2]; //
- instance.data[15] = nucbuf[18];
- instance.data[14] = nucbuf[17];
- instance.data[13] = nucbuf[16];
- instance.data[12] = nucbuf[15];
- n->MID360.pos = instance.x[3]; //
- instance.data[19] = nucbuf[22];
- instance.data[18] = nucbuf[21];
- instance.data[17] = nucbuf[20];
- instance.data[16] = nucbuf[19];
- n->MID360.angle = instance.x[4]; //
+
+
+ instance.data[3] = nucbuf[4];
+ instance.data[2] = nucbuf[3];
+ instance.data[1] = nucbuf[2];
+ instance.data[0] = nucbuf[1];
+ n->MID360.angle = instance.x[0]; //
+ instance.data[7] = nucbuf[8];
+ instance.data[6] = nucbuf[7];
+ instance.data[5] = nucbuf[6];
+ instance.data[4] = nucbuf[5];
+ n->MID360.dis = instance.x[1]; //
- n->MID360.flag = nucbuf[23]; //
- break;
- }
nuc->unc_online = true; // 设置为在线状态
return DEVICE_OK;
}
diff --git a/User/task/cmd_task.c b/User/task/cmd_task.c
index ad1c765..8bf0203 100644
--- a/User/task/cmd_task.c
+++ b/User/task/cmd_task.c
@@ -16,7 +16,7 @@ static CMD_NUC_t Nuc;
#endif
-int rec_flag=0;
+
void Task_cmd(void *argument){
(void)argument; /*未使用传递参数 消除警告*/
@@ -38,16 +38,14 @@ void Task_cmd(void *argument){
osKernelLock(); /*锁住RTOS内核调度*/
/*将各任务接收到的原始数据解析为通用的控制命令*/
-
- if((osMessageQueueGet(task_runtime.msgq.cmd.raw.nuc, &Nuc,0 ,0) ==osOK)){ //nuc
- }
- else
- {
- memset(&Nuc, 0, sizeof(CMD_NUC_t));
- }
- CMD_ParseNuc(&cmd,&Nuc);
-
+
+ /*注意,不能将nuc和码盘导航一块使用*/
+
+ if(osMessageQueueGet(task_runtime.msgq.cmd.raw.nuc, &Nuc,0 ,0) ==osOK) //nuc
+ CMD_ParseNuc(&cmd,&Nuc);
+
+
if(osMessageQueueGet(task_runtime.msgq.cmd.raw.rc, &rc_ctrl, 0, 0) == osOK)//遥控器
CMD_ParseRc(&cmd, &rc_ctrl);
diff --git a/User/task/nuc_task.c b/User/task/nuc_task.c
index e0ad619..5be2f44 100644
--- a/User/task/nuc_task.c
+++ b/User/task/nuc_task.c
@@ -40,7 +40,6 @@ void Task_nuc(void *argument){
#ifdef DEBUG
task_runtime.stack_water_mark.nuc= osThreadGetStackSpace(osThreadGetId());
#endif
- a++;
NUC_StartReceiving();
if (NUC_WaitDmaCplt()){
NUC_RawParse(&cmd_fromnuc, &nuc_raw);
diff --git a/User/task/user_task.h b/User/task/user_task.h
index cf5f0d0..5587be0 100644
--- a/User/task/user_task.h
+++ b/User/task/user_task.h
@@ -17,10 +17,10 @@
#define TASK_FREQ_CHASSIS (900u)
#define TASK_FREQ_UP (900u)
-#define TASK_FREQ_CTRL_CMD (100u)
+#define TASK_FREQ_CTRL_CMD (500u)
#define TASK_FREQ_NUC (100u)
#define TASK_FREQ_CAN (1000u)
-#define TASK_FREQ_RC (1000u)
+#define TASK_FREQ_RC (100u)
#define TASK_FREQ_ERROR_DTC (3u)