Compare commits

...

11 Commits

170 changed files with 13367 additions and 5806 deletions

View File

@@ -6,11 +6,15 @@ SR 英雄 2025 的代码,适用于 C 板开发,使用标准库
基于@Peng Ge步兵代码修改 基于@Peng Ge步兵代码修改
编译器使用Keil V5 编译器使用ARMCC V5
目前正在调试暂时关闭云台pitch轴等待后续修复代码yaw轴皮带需调整 该代码为RMUL2026 最终上场版本
该代码已过时,仅用于参考使用,不建议继续维护
//Raw Code下的代码为被注释掉的源代码通常用于关闭某些异常或不需要的功能用于调试 //Raw Code下的代码为被注释掉的源代码通常用于关闭某些异常或不需要的功能用于调试
//Testing Code下的代码为替代代码用于关闭某些异常或不需要的功能用于调试 //Testing Code下的代码为替代代码用于关闭某些异常或不需要的功能用于调试

View File

@@ -104,19 +104,18 @@
{ {
"name": "Target 1", "name": "Target 1",
"includePath": [ "includePath": [
"f:\\Mas_Infantry_Control-main\\开源代码\\V1.0\\Hero\\云台\\云台\\Start", "c:\\Users\\LSMushui\\Desktop\\RM\\Hero-C-Board-Legacy\\云台\\云台\\Start",
"f:\\Mas_Infantry_Control-main\\开源代码\\V1.0\\Hero\\云台\\云台\\Library", "c:\\Users\\LSMushui\\Desktop\\RM\\Hero-C-Board-Legacy\\云台\\云台\\Library",
"f:\\Mas_Infantry_Control-main\\开源代码\\V1.0\\Hero\\云台\\云台\\System", "c:\\Users\\LSMushui\\Desktop\\RM\\Hero-C-Board-Legacy\\云台\\云台\\System",
"f:\\Mas_Infantry_Control-main\\开源代码\\V1.0\\Hero\\云台\\云台\\Algorithm", "c:\\Users\\LSMushui\\Desktop\\RM\\Hero-C-Board-Legacy\\云台\\云台\\Algorithm",
"f:\\Mas_Infantry_Control-main\\开源代码\\V1.0\\Hero\\云台\\云台\\AHRS", "c:\\Users\\LSMushui\\Desktop\\RM\\Hero-C-Board-Legacy\\云台\\云台\\AHRS",
"f:\\Mas_Infantry_Control-main\\开源代码\\V1.0\\Hero\\云台\\云台\\Hardware", "c:\\Users\\LSMushui\\Desktop\\RM\\Hero-C-Board-Legacy\\云台\\云台\\Hardware",
"f:\\Mas_Infantry_Control-main\\开源代码\\V1.0\\Hero\\云台\\云台\\Motor", "c:\\Users\\LSMushui\\Desktop\\RM\\Hero-C-Board-Legacy\\云台\\云台\\Motor",
"f:\\Mas_Infantry_Control-main\\开源代码\\V1.0\\Hero\\云台\\云台\\Function", "c:\\Users\\LSMushui\\Desktop\\RM\\Hero-C-Board-Legacy\\云台\\云台\\Function",
"f:\\Mas_Infantry_Control-main\\开源代码\\V1.0\\Hero\\云台\\云台\\Control", "c:\\Users\\LSMushui\\Desktop\\RM\\Hero-C-Board-Legacy\\云台\\云台\\Control",
"f:\\Mas_Infantry_Control-main\\开源代码\\V1.0\\Hero\\云台\\云台\\CarBody", "c:\\Users\\LSMushui\\Desktop\\RM\\Hero-C-Board-Legacy\\云台\\云台\\CarBody",
"f:\\Mas_Infantry_Control-main\\开源代码\\V1.0\\Hero\\云台\\云台\\User", "c:\\Users\\LSMushui\\Desktop\\RM\\Hero-C-Board-Legacy\\云台\\云台\\User",
"C:\\Keil_v5\\ARM\\ARMCC\\include", "c:\\Users\\LSMushui\\Desktop\\RM\\Hero-C-Board-Legacy\\云台\\云台\\Carbody"
"f:\\Mas_Infantry_Control-main\\开源代码\\V1.0\\Hero\\云台\\云台\\Carbody"
], ],
"defines": [ "defines": [
"USE_STDPERIPH_DRIVER", "USE_STDPERIPH_DRIVER",

View File

@@ -66,3 +66,5 @@
[info] Log at : 2025/3/26|23:03:09|GMT+0800 [info] Log at : 2025/3/26|23:03:09|GMT+0800
[info] Log at : 2026/1/12|17:16:15|GMT+0800

BIN
云台/云台/AHRS/AHRS.lib Normal file

Binary file not shown.

View File

@@ -11,6 +11,7 @@
#include "RefereeSystem.h" #include "RefereeSystem.h"
#include "Visual.h" #include "Visual.h"
#include "WaveFiltering_Kalman_Filtering.h" #include "WaveFiltering_Kalman_Filtering.h"
#include "Delay.h"
KFP kfp_PITCH={0.02,0,0,0,0.01,0.543};//卡尔曼滤波器结构体 KFP kfp_PITCH={0.02,0,0,0,0.01,0.543};//卡尔曼滤波器结构体
@@ -26,12 +27,12 @@ KFP kfp_PITCH={0.02,0,0,0,0.01,0.543};//卡尔曼滤波器结构体
uint8_t Gimbal_FrictionWheelFlag;//云台小陀螺标志位,云台开摩擦轮标志位 uint8_t Gimbal_FrictionWheelFlag;//云台小陀螺标志位,云台开摩擦轮标志位
uint8_t Fire_Flag=0;//开火指示位,用于单发限位
PID_PositionInitTypedef Gimbal_YawAnglePositionPID,Gimbal_YawAngleSpeedPID;//Yaw轴GM6020电机PID PID_PositionInitTypedef Gimbal_YawAnglePositionPID,Gimbal_YawAngleSpeedPID;//Yaw轴GM6020电机PID
PID_PositionInitTypedef Gimbal_PitchAnglePositionPID,Gimbal_PitchAngleSpeedPID;//Pitch轴GM6020电机PID PID_PositionInitTypedef Gimbal_PitchAnglePositionPID,Gimbal_PitchAngleSpeedPID;//Pitch轴GM6020电机PID
PID_PositionInitTypedef Gimbal_L2_FrictionWheelPID,Gimbal_R2_FrictionWheelPID,Gimbal_L1_FrictionWheelPID,Gimbal_R1_FrictionWheelPID;//摩擦轮转速PID PID_PositionInitTypedef Gimbal_L2_FrictionWheelPID,Gimbal_R2_FrictionWheelPID,Gimbal_L1_FrictionWheelPID,Gimbal_R1_FrictionWheelPID;//摩擦轮转速PID
PID_PositionInitTypedef Gimbal_RammerSpinSpeedPID;//拨弹盘旋转PID PID_PositionInitTypedef Gimbal_RammerSpinPositionPID;//拨弹盘旋转PID
/* /*
*函数简介:云台初始化 *函数简介:云台初始化
@@ -60,51 +61,50 @@ void Gimbal_Init(void)
PID_PositionSetOUTRange(&Gimbal_PitchAngleSpeedPID,-30000,30000); PID_PositionSetOUTRange(&Gimbal_PitchAngleSpeedPID,-30000,30000);
*/ */
PID_PositionStructureInit(&Gimbal_YawAnglePositionPID,0);//Yaw轴陀螺仪闭环 PID_PositionStructureInit(&Gimbal_YawAnglePositionPID,0);//Yaw轴陀螺仪闭环
PID_PositionSetParameter(&Gimbal_YawAnglePositionPID,5,0,0.1); PID_PositionSetParameter(&Gimbal_YawAnglePositionPID,10,0,650);
PID_PositionSetEkRange(&Gimbal_YawAnglePositionPID,-1,1); PID_PositionSetEkRange(&Gimbal_YawAnglePositionPID,-1,1);
PID_PositionSetOUTRange(&Gimbal_YawAnglePositionPID,-200,200); PID_PositionSetOUTRange(&Gimbal_YawAnglePositionPID,-200,200);
PID_PositionStructureInit(&Gimbal_YawAngleSpeedPID,200); PID_PositionStructureInit(&Gimbal_YawAngleSpeedPID,200);
PID_PositionSetParameter(&Gimbal_YawAngleSpeedPID,150,0,20); PID_PositionSetParameter(&Gimbal_YawAngleSpeedPID,150,0,20);
PID_PositionSetEkRange(&Gimbal_YawAngleSpeedPID,-1,1); PID_PositionSetEkRange(&Gimbal_YawAngleSpeedPID,-1,1);
PID_PositionSetOUTRange(&Gimbal_YawAngleSpeedPID,-50000,50000); PID_PositionSetOUTRange(&Gimbal_YawAngleSpeedPID,-30000,30000);
PID_PositionStructureInit(&Gimbal_PitchAnglePositionPID,0);//Pitch轴陀螺仪闭环 PID_PositionStructureInit(&Gimbal_PitchAnglePositionPID,0);//Pitch轴陀螺仪闭环
PID_PositionSetParameter(&Gimbal_PitchAnglePositionPID,5,0,0); PID_PositionSetParameter(&Gimbal_PitchAnglePositionPID,40,0,700);
PID_PositionSetEkRange(&Gimbal_PitchAnglePositionPID,-1,1); PID_PositionSetEkRange(&Gimbal_PitchAnglePositionPID,-0.1,0.1);
PID_PositionSetOUTRange(&Gimbal_PitchAnglePositionPID,-150,150); PID_PositionSetOUTRange(&Gimbal_PitchAnglePositionPID,-200,200);
PID_PositionStructureInit(&Gimbal_PitchAngleSpeedPID,150); PID_PositionStructureInit(&Gimbal_PitchAngleSpeedPID,150);
PID_PositionSetParameter(&Gimbal_PitchAngleSpeedPID,200,0,10); PID_PositionSetParameter(&Gimbal_PitchAngleSpeedPID,150,0.001,7);
PID_PositionSetEkRange(&Gimbal_PitchAngleSpeedPID,-0,0); PID_PositionSetEkRange(&Gimbal_PitchAngleSpeedPID,-0.1,0.1);
PID_PositionSetOUTRange(&Gimbal_PitchAngleSpeedPID,-30000,30000); PID_PositionSetOUTRange(&Gimbal_PitchAngleSpeedPID,-30000,30000);
PID_PositionStructureInit(&Gimbal_L1_FrictionWheelPID,0);//左摩擦轮 PID_PositionStructureInit(&Gimbal_L1_FrictionWheelPID,0);//左摩擦轮
PID_PositionSetParameter(&Gimbal_L1_FrictionWheelPID,0.1,0,0); PID_PositionSetParameter(&Gimbal_L1_FrictionWheelPID,15,0,0);
PID_PositionSetEkRange(&Gimbal_L1_FrictionWheelPID,-5,5); PID_PositionSetEkRange(&Gimbal_L1_FrictionWheelPID,-1,1);
PID_PositionSetOUTRange(&Gimbal_L1_FrictionWheelPID,-15000,15000); PID_PositionSetOUTRange(&Gimbal_L1_FrictionWheelPID,-15000,15000);
PID_PositionStructureInit(&Gimbal_R1_FrictionWheelPID,0);//右摩擦轮 PID_PositionStructureInit(&Gimbal_R1_FrictionWheelPID,0);//右摩擦轮
PID_PositionSetParameter(&Gimbal_R1_FrictionWheelPID,0.1,0,0); PID_PositionSetParameter(&Gimbal_R1_FrictionWheelPID,15,0,0);
PID_PositionSetEkRange(&Gimbal_R1_FrictionWheelPID,-5,5); PID_PositionSetEkRange(&Gimbal_R1_FrictionWheelPID,-1,1);
PID_PositionSetOUTRange(&Gimbal_R1_FrictionWheelPID,-15000,15000); PID_PositionSetOUTRange(&Gimbal_R1_FrictionWheelPID,-15000,15000);
PID_PositionStructureInit(&Gimbal_L2_FrictionWheelPID,0);//左摩擦轮 PID_PositionStructureInit(&Gimbal_L2_FrictionWheelPID,0);//左摩擦轮
PID_PositionSetParameter(&Gimbal_L2_FrictionWheelPID,0.1,0,0); PID_PositionSetParameter(&Gimbal_L2_FrictionWheelPID,15,0,0);
PID_PositionSetEkRange(&Gimbal_L2_FrictionWheelPID,-5,5); PID_PositionSetEkRange(&Gimbal_L2_FrictionWheelPID,-1,1);
PID_PositionSetOUTRange(&Gimbal_L2_FrictionWheelPID,-15000,15000); PID_PositionSetOUTRange(&Gimbal_L2_FrictionWheelPID,-15000,15000);
PID_PositionStructureInit(&Gimbal_R2_FrictionWheelPID,0);//右摩擦轮 PID_PositionStructureInit(&Gimbal_R2_FrictionWheelPID,0);//右摩擦轮
PID_PositionSetParameter(&Gimbal_R2_FrictionWheelPID,0.1,0,0); PID_PositionSetParameter(&Gimbal_R2_FrictionWheelPID,15,0,0);
PID_PositionSetEkRange(&Gimbal_R2_FrictionWheelPID,-5,5); PID_PositionSetEkRange(&Gimbal_R2_FrictionWheelPID,-1,1);
PID_PositionSetOUTRange(&Gimbal_R2_FrictionWheelPID,-15000,15000); PID_PositionSetOUTRange(&Gimbal_R2_FrictionWheelPID,-15000,15000);
PID_PositionStructureInit(&Gimbal_RammerSpinSpeedPID,Gimbal_RammerSpeed);//拨弹盘 PID_PositionStructureInit(&Gimbal_RammerSpinPositionPID,Gimbal_RammerSpeed);//拨弹盘
PID_PositionSetParameter(&Gimbal_RammerSpinSpeedPID,50,0,0); PID_PositionSetParameter(&Gimbal_RammerSpinPositionPID,20,0,0);
PID_PositionSetEkRange(&Gimbal_RammerSpinSpeedPID,-20,20); PID_PositionSetEkRange(&Gimbal_RammerSpinPositionPID,-20,20);
PID_PositionSetOUTRange(&Gimbal_RammerSpinSpeedPID,-2000,2000); PID_PositionSetOUTRange(&Gimbal_RammerSpinPositionPID,-20000,20000);
Laser_Init(); Laser_Init();
} }
@@ -124,7 +124,7 @@ void Gimbal_CleanPID(void)
PID_PositionClean(&Gimbal_R1_FrictionWheelPID); PID_PositionClean(&Gimbal_R1_FrictionWheelPID);
PID_PositionClean(&Gimbal_L2_FrictionWheelPID); PID_PositionClean(&Gimbal_L2_FrictionWheelPID);
PID_PositionClean(&Gimbal_R2_FrictionWheelPID); PID_PositionClean(&Gimbal_R2_FrictionWheelPID);
PID_PositionClean(&Gimbal_RammerSpinSpeedPID); PID_PositionClean(&Gimbal_RammerSpinPositionPID);
} }
@@ -140,12 +140,12 @@ void Gimbal_CleanPID(void)
void Gimbal_PitchControl(void) void Gimbal_PitchControl(void)
{ {
if(Remote_StartFlag==2)Gimbal_PitchAnglePositionPID.Need_Value=0;//遥控器刚建立连接时,复位Pitch轴角度 if(Remote_StartFlag==2)Gimbal_PitchAnglePositionPID.Need_Value=0;//遥控器刚建立连接时,复位Pitch轴角度
if(((Remote_RxData.Remote_L_UD>1050 && RefereeSystem_Status==0) || (1024+Remote_RxData.Remote_Mouse_DU*3)<1000) && AttitudeAlgorithms_DegRoll>Pitch_GM6020AngleUpperLinit) if(((Remote_RxData.Remote_L_UD>1050 && RefereeSystem_Status==0) || (1024+Remote_RxData.Remote_Mouse_DU*3)>1030) && AttitudeAlgorithms_DegRoll>Pitch_GM6020AngleUpperLinit)
Gimbal_PitchAnglePositionPID.Need_Value-=Gimbal_LeverSpeedMapRate/8192.0f*360.0f;//通过遥控器或者鼠标获取俯仰情况 Gimbal_PitchAnglePositionPID.Need_Value-=Gimbal_LeverSpeedMapRate/8192.0f*360.0f;//通过遥控器或者鼠标获取俯仰情况
else if(((Remote_RxData.Remote_L_UD<1000 && RefereeSystem_Status==0) || (1024+Remote_RxData.Remote_Mouse_DU*3)>1050) && AttitudeAlgorithms_DegRoll<Pitch_GM6020AngleLowerLinit) else if(((Remote_RxData.Remote_L_UD<1000 && RefereeSystem_Status==0) || (1024+Remote_RxData.Remote_Mouse_DU*3)<1020) && AttitudeAlgorithms_DegRoll<Pitch_GM6020AngleLowerLinit)
Gimbal_PitchAnglePositionPID.Need_Value+=Gimbal_LeverSpeedMapRate/8192.0f*360.0f; Gimbal_PitchAnglePositionPID.Need_Value+=Gimbal_LeverSpeedMapRate/8192.0f*360.0f;
if(Remote_RxData.Remote_LS==2 && Visual_ReceiveFlag==1 || Remote_RxData.Remote_Mouse_KeyR==1 && Visual_ReceiveFlag==1 )//自瞄,补偿角度 if((Remote_RxData.Remote_LS==2 && Visual_ReceiveFlag==1 ) || (Remote_RxData.Remote_Mouse_KeyR==1 && Visual_ReceiveFlag==1) )//自瞄,补偿角度
{ {
Visual_ReceiveFlag=0; Visual_ReceiveFlag=0;
@@ -160,10 +160,10 @@ void Gimbal_PitchControl(void)
//串级PID闭环Pitch角 //串级PID闭环Pitch角
PID_PositionCalc(&Gimbal_PitchAnglePositionPID,AttitudeAlgorithms_DegRoll); PID_PositionCalc(&Gimbal_PitchAnglePositionPID,AttitudeAlgorithms_DegRoll);
Gimbal_PitchAnglePositionPID.OUT=kalmanFilter(&kfp_PITCH,Gimbal_PitchAnglePositionPID.OUT); //Gimbal_PitchAnglePositionPID.OUT=kalmanFilter(&kfp_PITCH,Gimbal_PitchAnglePositionPID.OUT);
Gimbal_PitchAngleSpeedPID.Need_Value=-Gimbal_PitchAnglePositionPID.OUT; Gimbal_PitchAngleSpeedPID.Need_Value=-Gimbal_PitchAnglePositionPID.OUT;
PID_PositionCalc(&Gimbal_PitchAngleSpeedPID,GM6020_MotorStatus[Gimbal_PitchMotor-0x205].Speed); PID_PositionCalc(&Gimbal_PitchAngleSpeedPID,GM6020_MotorStatus[Gimbal_PitchMotor-0x205].Speed);
//GM6020_CAN1SetLIDVoltage(0,Gimbal_YawAngleSpeedPID.OUT,0,0);
} }
void Debug(void) void Debug(void)
@@ -186,14 +186,14 @@ void Gimbal_YawControl(void)
{ {
if(Remote_StartFlag==2) if(Remote_StartFlag==2)
Gimbal_YawAnglePositionPID.Need_Value=AttitudeAlgorithms_DegYaw;//遥控器刚建立连接时,复位Yaw轴角度 Gimbal_YawAnglePositionPID.Need_Value=AttitudeAlgorithms_DegYaw;//遥控器刚建立连接时,复位Yaw轴角度
if((Remote_RxData.Remote_L_RL>1050 && RefereeSystem_Status==0) || 1024+PC_Spin*PC_Mouse_RLSensitivity>1050)//根据摇杆改变偏航 if((Remote_RxData.Remote_L_RL>1050 && RefereeSystem_Status==0) || 1024+PC_Spin*PC_Mouse_RLSensitivity>1028)//根据摇杆改变偏航
{ {
if(PC_Spin==0) if(PC_Spin==0)
Gimbal_YawAnglePositionPID.Need_Value-=Gimbal_LeverSpeedMapRate*Gimbal_YawPitchSpeedRate*Gimbal_YawPitchSpeedRate*0.0439453125f*((Remote_RxData.Remote_L_RL-1024)/660.0f); Gimbal_YawAnglePositionPID.Need_Value-=Gimbal_LeverSpeedMapRate*Gimbal_YawPitchSpeedRate*Gimbal_YawPitchSpeedRate*0.0439453125f*((Remote_RxData.Remote_L_RL-1024)/660.0f);
else else
Gimbal_YawAnglePositionPID.Need_Value-=Gimbal_LeverSpeedMapRate*Gimbal_YawPitchSpeedRate*Gimbal_YawPitchSpeedRate*0.0439453125f*(PC_Spin*PC_Mouse_RLSensitivity/660.0f*2); Gimbal_YawAnglePositionPID.Need_Value-=Gimbal_LeverSpeedMapRate*Gimbal_YawPitchSpeedRate*Gimbal_YawPitchSpeedRate*0.0439453125f*(PC_Spin*PC_Mouse_RLSensitivity/660.0f*2);
} }
else if((Remote_RxData.Remote_L_RL<1000 && RefereeSystem_Status==0) || 1024+PC_Spin*PC_Mouse_RLSensitivity<1000) else if((Remote_RxData.Remote_L_RL<1000 && RefereeSystem_Status==0) || 1024+PC_Spin*PC_Mouse_RLSensitivity<1022)
{ {
if(PC_Spin==0) if(PC_Spin==0)
Gimbal_YawAnglePositionPID.Need_Value+=Gimbal_LeverSpeedMapRate*Gimbal_YawPitchSpeedRate*Gimbal_YawPitchSpeedRate*0.0439453125f*((1024-Remote_RxData.Remote_L_RL)/660.0f); Gimbal_YawAnglePositionPID.Need_Value+=Gimbal_LeverSpeedMapRate*Gimbal_YawPitchSpeedRate*Gimbal_YawPitchSpeedRate*0.0439453125f*((1024-Remote_RxData.Remote_L_RL)/660.0f);
@@ -205,8 +205,9 @@ void Gimbal_YawControl(void)
PID_PositionCalc(&Gimbal_YawAnglePositionPID,AttitudeAlgorithms_DegYaw); PID_PositionCalc(&Gimbal_YawAnglePositionPID,AttitudeAlgorithms_DegYaw);
Gimbal_YawAngleSpeedPID.Need_Value=Gimbal_YawAnglePositionPID.OUT; Gimbal_YawAngleSpeedPID.Need_Value=Gimbal_YawAnglePositionPID.OUT;
PID_PositionCalc(&Gimbal_YawAngleSpeedPID,GM6020_MotorStatus[0].Speed); PID_PositionCalc(&Gimbal_YawAngleSpeedPID,GM6020_MotorStatus[0].Speed);
GM6020_CAN2SetLIDVoltage(Gimbal_YawAngleSpeedPID.OUT,0,0,0); GM6020_CAN2SetLIDVoltage(Gimbal_YawAngleSpeedPID.OUT,0,0,0);
//UART2_Printf("%lld\n",GM6020_MotorStatus[Gimbal_YawMotor-0x205].Position);
} }
/* /*
@@ -220,7 +221,7 @@ void Gimbal_FiringMechanismControl(void)
if(((Remote_RxData.Remote_LS==1 && RefereeSystem_Status==0) || PC_FrictionWheel==1) && RefereeSystem_ShooterStatus==1)//摩擦轮开 if(((Remote_RxData.Remote_LS==1 && RefereeSystem_Status==0) || PC_FrictionWheel==1) && RefereeSystem_ShooterStatus==1)//摩擦轮开
{ {
Gimbal_L1_FrictionWheelPID.Need_Value=-Gimbal_FrictionWheelSpeed;Gimbal_R1_FrictionWheelPID.Need_Value=Gimbal_FrictionWheelSpeed; Gimbal_L1_FrictionWheelPID.Need_Value=-Gimbal_FrictionWheelSpeed;Gimbal_R1_FrictionWheelPID.Need_Value=Gimbal_FrictionWheelSpeed;
Gimbal_L2_FrictionWheelPID.Need_Value=Gimbal_FrictionWheelSpeed;Gimbal_R2_FrictionWheelPID.Need_Value=- Gimbal_FrictionWheelSpeed; Gimbal_L2_FrictionWheelPID.Need_Value=Gimbal_FrictionWheelSpeed;Gimbal_R2_FrictionWheelPID.Need_Value=-Gimbal_FrictionWheelSpeed;
Laser_ON();//开激光 Laser_ON();//开激光
Gimbal_FrictionWheelFlag=1; Gimbal_FrictionWheelFlag=1;
} }
@@ -250,24 +251,57 @@ void Gimbal_Rammer(void)
if(Gimbal_FrictionWheelFlag==1) if(Gimbal_FrictionWheelFlag==1)
{ {
if((Remote_RxData.Remote_ThumbWheel<1000 && RefereeSystem_Status==0) || PC_Fire==1) if((Remote_RxData.Remote_ThumbWheel<1000 && RefereeSystem_Status==0) || PC_Fire==1)
Gimbal_RammerSpinSpeedPID.Need_Value=-Gimbal_RammerSpeed; Gimbal_RammerSpinPositionPID.Need_Value=-Gimbal_RammerSpeed;
else if((Remote_RxData.Remote_ThumbWheel>1050 && RefereeSystem_Status==0) || PC_Ejection==1) else if((Remote_RxData.Remote_ThumbWheel>1050 && RefereeSystem_Status==0) || PC_Ejection==1)
Gimbal_RammerSpinSpeedPID.Need_Value=Gimbal_RammerSpeed; Gimbal_RammerSpinPositionPID.Need_Value=Gimbal_RammerSpeed;
else else
Gimbal_RammerSpinSpeedPID.Need_Value=0; Gimbal_RammerSpinPositionPID.Need_Value=0;
} }
else Gimbal_RammerSpinSpeedPID.Need_Value=0; else Gimbal_RammerSpinPositionPID.Need_Value=0;
PID_PositionCalc(&Gimbal_RammerSpinSpeedPID,M3508_MotorStatus[Gimbal_RammerSpinMotor-0x201].RotorSpeed); PID_PositionCalc(&Gimbal_RammerSpinPositionPID,M3508_MotorStatus[Gimbal_RammerSpinMotor-0x201].RotorSpeed);
M2006_CANSetHIDCurrent(0,Gimbal_PitchAngleSpeedPID.OUT,Gimbal_RammerSpinSpeedPID.OUT,0); M3508_CANSetHIDCurrent(0,Gimbal_PitchAngleSpeedPID.OUT,Gimbal_RammerSpinPositionPID.OUT,0);
Delay_us(1500);
//M3508_CANSetLIDCurrent(0,0,Gimbal_RammerSpinSpeedPID.OUT,0); //M3508_CANSetHIDCurrent(0,0,Gimbal_RammerSpinPositionPID.OUT,0);
//M3508_CANSetHIDCurrent(0,0,Gimbal_RammerSpinSpeedPID.OUT,0);
} }
/*
*函数简介:拨弹盘单发
*参数说明:无
*返回类型:无
*备注:俯仰轴GM6020报文标识符和M2006高位ID一致,故均在拨弹盘控制函数中统一发送控制报文
*/
void Gimbal_Rammer_Single_fire(void)
{
if(Gimbal_FrictionWheelFlag==1)
{
if((Remote_RxData.Remote_ThumbWheel<1000 && RefereeSystem_Status==0) || PC_Fire==1)
{ if(Fire_Flag == 0)
{
Gimbal_RammerSpinPositionPID.Need_Value=Gimbal_RammerSpinPositionPID.Need_Value-Gimbal_RammerSingleAmmo;//3,2,1 Fire!!!
Fire_Flag=1;
}
else
Gimbal_RammerSpinPositionPID.Need_Value=0;
//单次开火标志置1
}
else if((Remote_RxData.Remote_ThumbWheel>1050 && RefereeSystem_Status==0) || PC_Ejection==1)
{
Gimbal_RammerSpinPositionPID.Need_Value=Gimbal_RammerSpinPositionPID.Need_Value+Gimbal_RammerSingleAmmo;//退弹
Fire_Flag=0;//退弹就不用一发一发退了
}
else
Gimbal_RammerSpinPositionPID.Need_Value=0;//停止开火!
Fire_Flag=0;
}
else
Gimbal_RammerSpinPositionPID.Need_Value=0;//防止意外走火?
Fire_Flag=0;
PID_PositionCalc(&Gimbal_RammerSpinPositionPID,M3508_MotorStatus[Gimbal_RammerSpinMotor-0x201].RotorSpeed);
//M3508_CANSetHIDCurrent(0,Gimbal_PitchAngleSpeedPID.OUT,Gimbal_RammerSpinPositionPID.OUT,0);
}
/* /*
*函数简介:云台运动控制 *函数简介:云台运动控制
@@ -277,10 +311,11 @@ void Gimbal_Rammer(void)
*/ */
void Gimbal_MoveControl(void) void Gimbal_MoveControl(void)
{ {
//Gimbal_PitchControl();//云台Pitch轴控制 Gimbal_PitchControl();//云台Pitch轴控制
Gimbal_YawControl();//云台Yaw轴控制 Gimbal_YawControl();//云台Yaw轴控制
Gimbal_FiringMechanismControl();//摩擦轮控制 Gimbal_FiringMechanismControl();//摩擦轮控制
Gimbal_Rammer();//拨弹盘控制 Gimbal_Rammer();//拨弹盘控制
//Gimbal_Rammer_Single_fire();
//UART2_Printf("%f,%f,%f,%f\n",Gimbal_PitchAngleSpeedPID.Need_Value,Gimbal_PitchAngleSpeedPID.Now_Value,Gimbal_PitchAnglePositionPID.Now_Value,Gimbal_PitchAnglePositionPID.Need_Value); //UART2_Printf("%f,%f,%f,%f\n",Gimbal_PitchAngleSpeedPID.Need_Value,Gimbal_PitchAngleSpeedPID.Now_Value,Gimbal_PitchAnglePositionPID.Now_Value,Gimbal_PitchAnglePositionPID.Need_Value);
} }

View File

@@ -61,7 +61,7 @@ void Visual_SendData(void)
UART2_SendByte((uint8_t)1); UART2_SendByte((uint8_t)1);
UART2_SendByte((uint8_t)1); UART2_SendByte((uint8_t)1);
*/ */
UART2_Printf("%f %d",AttitudeAlgorithms_DegRoll,GM6020_MotorStatus[0].Position); //UART2_Printf("%f %d",AttitudeAlgorithms_DegRoll,GM6020_MotorStatus[0].Position);
//UART2_SendByte((uint8_t)'\n'); //UART2_SendByte((uint8_t)'\n');
/*if(Visual_ReceiveFlag == 1) /*if(Visual_ReceiveFlag == 1)

View File

@@ -12,6 +12,32 @@ KFP kfp={0.02,0,0,0,0.01,0.543};//卡尔曼滤波器结构体
float AttitudeAlgorithms_q[4];//姿态解算四元数 float AttitudeAlgorithms_q[4];//姿态解算四元数
float AttitudeAlgorithms_RadYaw,AttitudeAlgorithms_RadPitch,AttitudeAlgorithms_RadRoll;//弧度制角度 float AttitudeAlgorithms_RadYaw,AttitudeAlgorithms_RadPitch,AttitudeAlgorithms_RadRoll;//弧度制角度
float AttitudeAlgorithms_DegYaw,AttitudeAlgorithms_DegPitch,AttitudeAlgorithms_DegRoll;//角度制角度 float AttitudeAlgorithms_DegYaw,AttitudeAlgorithms_DegPitch,AttitudeAlgorithms_DegRoll;//角度制角度
float BMI088_GyroZeroOffset[3];//陀螺仪初始零偏
float BMI088_GyroWithoutOffset[3];//消除零偏后的陀螺仪数据
/*
*函数简介:BMI088清除零偏
*参数说明:无
*返回类型:无
*备注:采集前100次数据取平均值消除零偏
*/
void ZeroOffset_Calibration(void)
{
uint16_t BMI088_CountFlag;
for (BMI088_CountFlag=0; BMI088_CountFlag < 1000; BMI088_CountFlag++)
{
BMI088_GyroZeroOffset[0]=BMI088_GyroZeroOffset[0]+BMI088_Gyro[0];
}
BMI088_GyroZeroOffset[0]=BMI088_GyroZeroOffset[0]/1000;
for (BMI088_CountFlag=0; BMI088_CountFlag < 1000; BMI088_CountFlag++)
{
BMI088_GyroZeroOffset[1]=BMI088_GyroZeroOffset[1]+BMI088_Gyro[1];
}
BMI088_GyroZeroOffset[1]=BMI088_GyroZeroOffset[1]/1000;
}
/* /*
*函数简介:姿态解算初始化 *函数简介:姿态解算初始化

Binary file not shown.

View File

@@ -22,61 +22,62 @@ Dialog DLL: TCM.DLL V1.56.6.0
<h2>Project:</h2> <h2>Project:</h2>
C:\Users\LSMushui\Desktop\RM\Hero-C-Board-Legacy\<5C><>̨\<5C><>̨\Project.uvprojx C:\Users\LSMushui\Desktop\RM\Hero-C-Board-Legacy\<5C><>̨\<5C><>̨\Project.uvprojx
Project File Date: 11/02/2025 Project File Date: 03/24/2026
<h2>Output:</h2> <h2>Output:</h2>
*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'C:\Users\LSMushui\AppData\Local\Keil_v5\ARM\ARMCC\Bin' *** Using Compiler 'V5.06 update 7 (build 960)', folder: 'C:\Users\LSMushui\AppData\Local\Keil_v5\ARM\ARMCC\Bin'
Rebuild target 'Target 1' Rebuild target 'Target 1'
assembling startup_stm32f40_41xxx.s... assembling startup_stm32f40_41xxx.s...
compiling misc.c...
compiling system_stm32f4xx.c... compiling system_stm32f4xx.c...
compiling stm32f4xx_dcmi.c... compiling misc.c...
compiling stm32f4xx_adc.c...
compiling stm32f4xx_fsmc.c...
compiling stm32f4xx_cryp_tdes.c...
compiling stm32f4xx_dsi.c...
compiling stm32f4xx_cec.c...
compiling stm32f4xx_cryp_des.c...
compiling stm32f4xx_dac.c...
compiling stm32f4xx_dbgmcu.c...
compiling stm32f4xx_dfsdm.c...
compiling stm32f4xx_fmpi2c.c...
compiling stm32f4xx_flash_ramfunc.c...
compiling stm32f4xx_crc.c... compiling stm32f4xx_crc.c...
compiling stm32f4xx_gpio.c... compiling stm32f4xx_dfsdm.c...
compiling stm32f4xx_exti.c...
compiling stm32f4xx_cryp.c... compiling stm32f4xx_cryp.c...
compiling stm32f4xx_dma2d.c... compiling stm32f4xx_cryp_des.c...
compiling stm32f4xx_dma.c... compiling stm32f4xx_cec.c...
compiling stm32f4xx_flash.c... compiling stm32f4xx_cryp_tdes.c...
compiling stm32f4xx_can.c... compiling stm32f4xx_can.c...
compiling stm32f4xx_adc.c...
compiling stm32f4xx_dac.c...
compiling stm32f4xx_dsi.c...
compiling stm32f4xx_dbgmcu.c...
compiling stm32f4xx_dma.c...
compiling stm32f4xx_flash_ramfunc.c...
compiling stm32f4xx_fmpi2c.c...
compiling stm32f4xx_exti.c...
compiling stm32f4xx_dcmi.c...
compiling stm32f4xx_flash.c...
compiling stm32f4xx_gpio.c...
compiling stm32f4xx_dma2d.c...
compiling stm32f4xx_fsmc.c...
compiling stm32f4xx_cryp_aes.c... compiling stm32f4xx_cryp_aes.c...
compiling stm32f4xx_hash.c... compiling stm32f4xx_hash.c...
compiling stm32f4xx_hash_md5.c... compiling stm32f4xx_hash_md5.c...
compiling stm32f4xx_hash_sha1.c... compiling stm32f4xx_hash_sha1.c...
compiling stm32f4xx_iwdg.c...
compiling stm32f4xx_i2c.c... compiling stm32f4xx_i2c.c...
compiling stm32f4xx_iwdg.c...
compiling stm32f4xx_lptim.c... compiling stm32f4xx_lptim.c...
compiling stm32f4xx_pwr.c... compiling stm32f4xx_pwr.c...
compiling stm32f4xx_ltdc.c...
compiling stm32f4xx_qspi.c... compiling stm32f4xx_qspi.c...
compiling stm32f4xx_rng.c...
compiling stm32f4xx_spdifrx.c... compiling stm32f4xx_spdifrx.c...
compiling stm32f4xx_rng.c...
compiling TIM.c...
compiling stm32f4xx_wwdg.c...
compiling stm32f4xx_ltdc.c...
compiling stm32f4xx_syscfg.c... compiling stm32f4xx_syscfg.c...
compiling stm32f4xx_sai.c... compiling stm32f4xx_sai.c...
compiling stm32f4xx_rcc.c...
compiling stm32f4xx_sdio.c...
compiling stm32f4xx_spi.c...
compiling TIM.c...
compiling Delay.c... compiling Delay.c...
compiling stm32f4xx_usart.c... compiling stm32f4xx_rcc.c...
compiling stm32f4xx_spi.c...
compiling AHRS_middleware.c... compiling AHRS_middleware.c...
compiling stm32f4xx_wwdg.c... compiling stm32f4xx_sdio.c...
compiling stm32f4xx_rtc.c... compiling stm32f4xx_usart.c...
compiling UART.c... compiling UART.c...
compiling user_lib.c... compiling stm32f4xx_rtc.c...
compiling stm32f4xx_tim.c... compiling stm32f4xx_tim.c...
compiling user_lib.c...
compiling MyI2C.c... compiling MyI2C.c...
compiling CAN.c...
compiling WaveFiltering_Kalman_Filtering.c... compiling WaveFiltering_Kalman_Filtering.c...
Control\WaveFiltering_Kalman_Filtering.c(13): warning: #177-D: variable "pDst" was declared but never referenced Control\WaveFiltering_Kalman_Filtering.c(13): warning: #177-D: variable "pDst" was declared but never referenced
float pDst,pDst1=1.0f; float pDst,pDst1=1.0f;
@@ -85,36 +86,35 @@ Control\WaveFiltering_Kalman_Filtering.c(13): warning: #177-D: variable "pDst1"
Control\WaveFiltering_Kalman_Filtering.c(32): warning: #1-D: last line of file ends without a newline Control\WaveFiltering_Kalman_Filtering.c(32): warning: #1-D: last line of file ends without a newline
Control\WaveFiltering_Kalman_Filtering.c: 3 warnings, 0 errors Control\WaveFiltering_Kalman_Filtering.c: 3 warnings, 0 errors
compiling CAN.c...
compiling LED.c... compiling LED.c...
compiling Buzzer.c... compiling Buzzer.c...
compiling IST8310.c...
compiling Remote.c... compiling Remote.c...
compiling BMI088.c... compiling BMI088.c...
compiling IST8310.c...
compiling Laser.c... compiling Laser.c...
compiling GM6020.c...
compiling M3508.c... compiling M3508.c...
compiling LinkCheck.c... compiling LinkCheck.c...
compiling M2006.c... compiling M2006.c...
compiling Warming.c... compiling GM6020.c...
compiling CToC.c... compiling CToC.c...
compiling AttitudeAlgorithms.c... compiling Warming.c...
compiling CloseLoopControl.c... compiling CloseLoopControl.c...
compiling IMUTemperatureControl.c... compiling AttitudeAlgorithms.c...
compiling PID.c... compiling PID.c...
compiling Gimbal.c... compiling IMUTemperatureControl.c...
compiling RefereeSystem.c...
compiling Visual.c... compiling Visual.c...
CarBody\Visual.c(68): warning: #9-D: nested comment is not allowed CarBody\Visual.c(68): warning: #9-D: nested comment is not allowed
UART2_Printf("%f %f %f %f \n",Visual_Yaw,Visual_Pitch,Visual_GetRoll,Visual_GetDelay);//*0.0030518509475997f*/ UART2_Printf("%f %f %f %f \n",Visual_Yaw,Visual_Pitch,Visual_GetRoll,Visual_GetDelay);//*0.0030518509475997f*/
CarBody\Visual.c(165): warning: #1-D: last line of file ends without a newline CarBody\Visual.c(165): warning: #1-D: last line of file ends without a newline
} }
CarBody\Visual.c: 2 warnings, 0 errors CarBody\Visual.c: 2 warnings, 0 errors
compiling RefereeSystem.c...
compiling Gimbal.c...
compiling Keyboard.c... compiling Keyboard.c...
compiling main.c...
compiling stm32f4xx_it.c... compiling stm32f4xx_it.c...
compiling main.c...
linking... linking...
Program Size: Code=31032 RO-data=1236 RW-data=552 ZI-data=3520 Program Size: Code=31688 RO-data=1236 RW-data=552 ZI-data=3544
".\Objects\Project.axf" - 0 Error(s), 5 Warning(s). ".\Objects\Project.axf" - 0 Error(s), 5 Warning(s).
<h2>Software Packages used:</h2> <h2>Software Packages used:</h2>
@@ -127,7 +127,7 @@ Package Vendor: Keil
<h2>Collection of Component include folders:</h2> <h2>Collection of Component include folders:</h2>
<h2>Collection of Component Files used:</h2> <h2>Collection of Component Files used:</h2>
Build Time Elapsed: 00:00:05 Build Time Elapsed: 00:00:04
</pre> </pre>
</body> </body>
</html> </html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,16 @@
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00100000 { ; load region size_region
ER_IROM1 0x08000000 0x00100000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM1 0x20000000 0x00020000 { ; RW data
.ANY (+RW +ZI)
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -120,7 +120,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>CMSIS_AGDI</Key> <Key>CMSIS_AGDI</Key>
<Name>-X"CMSIS-DAP_LU" -ULU_2022_8888 -O206 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407IGHx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name> <Name>-X"CMSIS-DAP_LU" -ULU_2022_8888 -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)</Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
@@ -145,7 +145,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key> <Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U-O206 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407IGHx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name> <Name>-U040C0D038416303030303032 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("") -D00(00000000) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407IGHx$CMSIS\Flash\STM32F4xx_1024.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2 -WK0-R0</Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
@@ -1442,7 +1442,7 @@
<Group> <Group>
<GroupName>System</GroupName> <GroupName>System</GroupName>
<tvExp>1</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
@@ -1578,7 +1578,7 @@
<Group> <Group>
<GroupName>AHRS</GroupName> <GroupName>AHRS</GroupName>
<tvExp>1</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
@@ -1658,7 +1658,7 @@
<Group> <Group>
<GroupName>Hardware</GroupName> <GroupName>Hardware</GroupName>
<tvExp>1</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>

View File

@@ -12,7 +12,7 @@
uint8_t CAN_CAN1DeviceNumber=6;//CAN1总线上设备数量 uint8_t CAN_CAN1DeviceNumber=6;//CAN1总线上设备数量
uint8_t CAN_CAN2DeviceNumber=2;//CAN2总线上设备数量 uint8_t CAN_CAN2DeviceNumber=2;//CAN2总线上设备数量
uint8_t CAN_DeviceNumber=8;//CAN总线上设备数量 uint8_t CAN_DeviceNumber=8;//CAN总线上设备数量
uint32_t CAN_CAN1IDList[10][2]={{CAN_GM6020,GM6020_2},{CAN_M3508,M3508_1},{CAN_M3508,M3508_2},{CAN_M3508,M3508_3},{CAN_M3508,M3508_4},{CAN_M3508,M3508_7},0};//CAN1总线上设备ID列表 uint32_t CAN_CAN1IDList[10][2]={{CAN_GM6020,GM6020_2},{CAN_M3508,M3508_7},{CAN_M3508,M3508_1},{CAN_M3508,M3508_2},{CAN_M3508,M3508_3},{CAN_M3508,M3508_4},0};//CAN1总线上设备ID列表
uint32_t CAN_CAN2IDList[10][2]={{CAN_GM6020,GM6020_1},{CAN_RoboMasterC,CToC_MasterID1},0};//CAN2总线上设备ID列表 uint32_t CAN_CAN2IDList[10][2]={{CAN_GM6020,GM6020_1},{CAN_RoboMasterC,CToC_MasterID1},0};//CAN2总线上设备ID列表
int8_t CAN_IDSelect=0;//CAN总线上ID列表选择位 int8_t CAN_IDSelect=0;//CAN总线上ID列表选择位
@@ -222,8 +222,8 @@ void CAN1_RX0_IRQHandler(void)
{ {
RefereeSystem_ShooterOpenCounter=0; RefereeSystem_ShooterOpenCounter=0;
RefereeSystem_ShooterOpenFlag=0;//发射机构离开上电期间 RefereeSystem_ShooterOpenFlag=0;//发射机构离开上电期间
CAN_CAN1DeviceNumber=5;//添加CAN设备 CAN_CAN1DeviceNumber=6;//添加CAN设备
CAN_DeviceNumber=6; CAN_DeviceNumber=8;
} }
} }
@@ -269,8 +269,8 @@ void CAN2_RX1_IRQHandler(void)
{ {
RefereeSystem_ShooterOpenCounter=0; RefereeSystem_ShooterOpenCounter=0;
RefereeSystem_ShooterOpenFlag=0;//发射机构离开上电期间 RefereeSystem_ShooterOpenFlag=0;//发射机构离开上电期间
CAN_CAN1DeviceNumber=4;//添加CAN设备 CAN_CAN1DeviceNumber=6;//添加CAN设备
CAN_DeviceNumber=6; CAN_DeviceNumber=8;
} }
} }

View File

@@ -2,7 +2,7 @@
#define __PARAMETER_H #define __PARAMETER_H
/*=============================================结构参数=============================================*/ /*=============================================结构参数=============================================*/
#define Yaw_GM6020PositionValue 6200////Yaw轴回正时编码器值 #define Yaw_GM6020PositionValue 5733////Yaw轴回正时编码器值
#define Pitch_GM6020PositionValue 3245//Pitch轴编码器值 #define Pitch_GM6020PositionValue 3245//Pitch轴编码器值
#define Pitch_GM6020PositionLowerLinit 7363//Pitch轴编码器值下限7363 #define Pitch_GM6020PositionLowerLinit 7363//Pitch轴编码器值下限7363
#define Pitch_GM6020PositionUpperLinit 8625//Pitch轴编码器值上限433 8625 #define Pitch_GM6020PositionUpperLinit 8625//Pitch轴编码器值上限433 8625
@@ -10,8 +10,9 @@
#define Pitch_GM6020AngleUpperLinit -20.0f//Pitch轴编码器值上限 #define Pitch_GM6020AngleUpperLinit -20.0f//Pitch轴编码器值上限
/*=============================================云台参数=============================================*/ /*=============================================云台参数=============================================*/
#define Gimbal_FrictionWheelSpeed -10000//摩擦轮转速,弹速限制30m/s #define Gimbal_FrictionWheelSpeed -3000//摩擦轮转速 对应大弹丸11.7M/s
#define Gimbal_RammerSpeed -50//拨弹盘转速,射频为7时大概冷却和热量相抵,5400是射频20的最低下限 #define Gimbal_RammerSpeed -2500//拨弹盘转速,射频为7时大概冷却和热量相抵,5400是射频20的最低下限
#define Gimbal_RammerSingleAmmo -200//拨弹盘3508单发旋转编码值
#define Gimbal_LeverSpeedMapRate 1.0f//云台俯仰拨杆速度映射比例 #define Gimbal_LeverSpeedMapRate 1.0f//云台俯仰拨杆速度映射比例
#define Gimbal_YawPitchSpeedRate 2.0f//云台偏航俯仰速度比 #define Gimbal_YawPitchSpeedRate 2.0f//云台偏航俯仰速度比
@@ -24,7 +25,7 @@
#define PC_Spin (Remote_RxData.Remote_Mouse_RL)//视角水平移动 #define PC_Spin (Remote_RxData.Remote_Mouse_RL)//视角水平移动
#define PC_Pitch (Remote_RxData.Remote_Mouse_DU)//视角垂直移动 #define PC_Pitch (Remote_RxData.Remote_Mouse_DU)//视角垂直移动
#define PC_Mouse_RLSensitivity 3.0f//鼠标左右灵敏度 #define PC_Mouse_RLSensitivity 4.0f//鼠标左右灵敏度
#define PC_Mouse_DUSensitivity 8.0f//鼠标上下灵敏度 #define PC_Mouse_DUSensitivity 8.0f//鼠标上下灵敏度
#define PC_FrictionWheel (Remote_RxData.Remote_KeyPush_Q)//摩擦轮 #define PC_FrictionWheel (Remote_RxData.Remote_KeyPush_Q)//摩擦轮

View File

@@ -41,7 +41,7 @@ int main(void)
CToC_MasterSendData();//CToC发送遥控器摇杆数据 CToC_MasterSendData();//CToC发送遥控器摇杆数据
//Visual_SendData(); Visual_SendData();
if(Delay_Count) //每次大循环只执行一次 if(Delay_Count) //每次大循环只执行一次

View File

@@ -56,9 +56,9 @@ void Mecanum_Init(void)
PID_PositionStructureInit(&Mecanum_TrackPID,Yaw_GM6020PositionValue);//底盘跟随 PID_PositionStructureInit(&Mecanum_TrackPID,Yaw_GM6020PositionValue);//底盘跟随
//Raw Code// //Raw Code//
//PID_PositionSetParameter(&Mecanum_TrackPID,0.007,0,0.8); PID_PositionSetParameter(&Mecanum_TrackPID,0.02,0,5);//随便写的PID值勉强可以用
//Testing Code// //Testing Code//
PID_PositionSetParameter(&Mecanum_TrackPID,0.01,0,01);//随便写的PID值勉强可以用 //PID_PositionSetParameter(&Mecanum_TrackPID,0,0,0);
PID_PositionSetEkRange(&Mecanum_TrackPID,-1,1); PID_PositionSetEkRange(&Mecanum_TrackPID,-1,1);
PID_PositionSetOUTRange(&Mecanum_TrackPID,-4,4); PID_PositionSetOUTRange(&Mecanum_TrackPID,-4,4);
@@ -184,16 +184,16 @@ void Mecanum_PowerMoveControl(void)
vx=vx_*cosf(Mecanum_YawTheta)-vy_*sinf(Mecanum_YawTheta); vx=vx_*cosf(Mecanum_YawTheta)-vy_*sinf(Mecanum_YawTheta);
vy=vx_*sinf(Mecanum_YawTheta)+vy_*cosf(Mecanum_YawTheta);//根据底盘云台相对角度修正xy轴速度 vy=vx_*sinf(Mecanum_YawTheta)+vy_*cosf(Mecanum_YawTheta);//根据底盘云台相对角度修正xy轴速度
/*==========小陀螺处理==========*/ /*==========小陀螺处理==========*/
if(Yaw_GM6020PositionValue<4096)//正向小陀螺为逆时针 if(Yaw_GM6020PositionValue<4096)//正向小陀螺为逆时针
{ {
if((Remote_RxData.Remote_RS==2 || Remote_RxData.Remote_KeyPush_Ctrl==1) || (Mecanum_GyroScopeFlag==1 && Mecanum_GyroScopeCloseFlag==1 && GM6020_MotorStatus[0].Position<Yaw_GM6020PositionValue+500))//小陀螺模式 if((Remote_RxData.Remote_RS==2 || Remote_RxData.Remote_KeyPush_Ctrl==1) || (Mecanum_GyroScopeFlag==1 && Mecanum_GyroScopeCloseFlag==1 && GM6020_MotorStatus[0].Position<Yaw_GM6020PositionValue+500))//小陀螺模式
{ {
w=Mecanum_GyroScopeAngularVelocity; w=-Mecanum_GyroScopeAngularVelocity;
Mecanum_GyroScopeFlag=1;//处于小陀螺状态 Mecanum_GyroScopeFlag=1;//处于小陀螺状态
Mecanum_GyroScopeCloseFlag=1;//小陀螺处于待关闭状态 Mecanum_GyroScopeCloseFlag=1;//小陀螺处于待关闭状态
} }
else if(Mecanum_GyroScopeFlag==1 && ((GM6020_MotorStatus[0].Angle>Yaw_GM6020PositionValue+100 || GM6020_MotorStatus[0].Angle<Yaw_GM6020PositionValue-100) || (GM6020_MotorStatus[0].Speed>2||GM6020_MotorStatus[0].Speed<-2)))//小陀螺关闭状态 else if(Mecanum_GyroScopeFlag==1 && ((GM6020_MotorStatus[0].Angle>Yaw_GM6020PositionValue+200 || GM6020_MotorStatus[0].Angle<Yaw_GM6020PositionValue-200) || (GM6020_MotorStatus[0].Speed>3||GM6020_MotorStatus[0].Speed<-3)))//小陀螺关闭状态
{ {
PID_PositionSetOUTRange(&Mecanum_TrackPID,-2,2); PID_PositionSetOUTRange(&Mecanum_TrackPID,-2,2);
PID_PositionCalc(&Mecanum_TrackPID,GM6020_MotorStatus[0].Position);//底盘跟云台 PID_PositionCalc(&Mecanum_TrackPID,GM6020_MotorStatus[0].Position);//底盘跟云台
@@ -201,7 +201,7 @@ void Mecanum_PowerMoveControl(void)
Mecanum_GyroScopeCloseFlag=0;//小陀螺未处于待关闭状态 Mecanum_GyroScopeCloseFlag=0;//小陀螺未处于待关闭状态
} }
else if(Remote_RxData.Remote_RS==1)//反向小陀螺模式(仅检录使用) else if(Remote_RxData.Remote_RS==1)//反向小陀螺模式(仅检录使用)
w=-Mecanum_GyroScopeAngularVelocity; w=Mecanum_GyroScopeAngularVelocity;
else else
{ {
PID_PositionSetOUTRange(&Mecanum_TrackPID,-5,5); PID_PositionSetOUTRange(&Mecanum_TrackPID,-5,5);
@@ -214,11 +214,11 @@ void Mecanum_PowerMoveControl(void)
{ {
if((Remote_RxData.Remote_RS==2 || Remote_RxData.Remote_KeyPush_Ctrl==1) || (Mecanum_GyroScopeFlag==1 && Mecanum_GyroScopeCloseFlag==1 && GM6020_MotorStatus[0].Position>Yaw_GM6020PositionValue-500))//小陀螺模式 if((Remote_RxData.Remote_RS==2 || Remote_RxData.Remote_KeyPush_Ctrl==1) || (Mecanum_GyroScopeFlag==1 && Mecanum_GyroScopeCloseFlag==1 && GM6020_MotorStatus[0].Position>Yaw_GM6020PositionValue-500))//小陀螺模式
{ {
w=-Mecanum_GyroScopeAngularVelocity; w=Mecanum_GyroScopeAngularVelocity;
Mecanum_GyroScopeFlag=1;//处于小陀螺状态 Mecanum_GyroScopeFlag=1;//处于小陀螺状态
Mecanum_GyroScopeCloseFlag=1;//小陀螺处于待关闭状态 Mecanum_GyroScopeCloseFlag=1;//小陀螺处于待关闭状态
} }
else if(Mecanum_GyroScopeFlag==1 && ((GM6020_MotorStatus[0].Angle>Yaw_GM6020PositionValue+5 || GM6020_MotorStatus[0].Angle<Yaw_GM6020PositionValue-5) || (GM6020_MotorStatus[0].Speed>1||GM6020_MotorStatus[0].Speed<-1)))//小陀螺关闭状态 else if(Mecanum_GyroScopeFlag==1 && ((GM6020_MotorStatus[0].Angle>Yaw_GM6020PositionValue+200 || GM6020_MotorStatus[0].Angle<Yaw_GM6020PositionValue-200) || (GM6020_MotorStatus[0].Speed>3||GM6020_MotorStatus[0].Speed<-3)))//小陀螺关闭状态
{ {
PID_PositionSetOUTRange(&Mecanum_TrackPID,-2,2); PID_PositionSetOUTRange(&Mecanum_TrackPID,-2,2);
PID_PositionCalc(&Mecanum_TrackPID,GM6020_MotorStatus[0].Position);//底盘跟云台 PID_PositionCalc(&Mecanum_TrackPID,GM6020_MotorStatus[0].Position);//底盘跟云台
@@ -226,7 +226,7 @@ void Mecanum_PowerMoveControl(void)
Mecanum_GyroScopeCloseFlag=0;//小陀螺未处于待关闭状态 Mecanum_GyroScopeCloseFlag=0;//小陀螺未处于待关闭状态
} }
else if(Remote_RxData.Remote_RS==1)//反向小陀螺模式(仅检录使用) else if(Remote_RxData.Remote_RS==1)//反向小陀螺模式(仅检录使用)
w=Mecanum_GyroScopeAngularVelocity; w=-Mecanum_GyroScopeAngularVelocity;
else else
{ {
PID_PositionSetOUTRange(&Mecanum_TrackPID,-5,5); PID_PositionSetOUTRange(&Mecanum_TrackPID,-5,5);
@@ -235,7 +235,6 @@ void Mecanum_PowerMoveControl(void)
w=-Mecanum_TrackPID.OUT; w=-Mecanum_TrackPID.OUT;
} }
} }
/*==========功率上限处理==========*/ /*==========功率上限处理==========*/
/*由缓冲能量得到功率控制功率上限*/ /*由缓冲能量得到功率控制功率上限*/
float Mecanum_PowerRef=1.0f/(60.0f-Mecanum_PowerControl_UseBuffer)*RefereeSystem_Buffer;//功率增益 float Mecanum_PowerRef=1.0f/(60.0f-Mecanum_PowerControl_UseBuffer)*RefereeSystem_Buffer;//功率增益

View File

@@ -101,7 +101,7 @@ uint32_t RefereeSystem_VerifyCRC16CheckSum(uint8_t *Data, uint32_t Length)
void RefereeSystem_Init(void) void RefereeSystem_Init(void)
{ {
UART1_Init(); UART1_Init();
//while(RefereeSystem_RobotID==0); while(RefereeSystem_RobotID==0);
} }
/* /*

View File

@@ -0,0 +1,2 @@
[EXTDLL]
Count=0

Binary file not shown.

View File

@@ -22,80 +22,80 @@ Dialog DLL: TCM.DLL V1.56.6.0
<h2>Project:</h2> <h2>Project:</h2>
C:\Users\LSMushui\Desktop\RM\Hero-C-Board-Legacy\<5C><><EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD>\Project.uvprojx C:\Users\LSMushui\Desktop\RM\Hero-C-Board-Legacy\<5C><><EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD>\Project.uvprojx
Project File Date: 11/02/2025 Project File Date: 03/26/2026
<h2>Output:</h2> <h2>Output:</h2>
*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'C:\Users\LSMushui\AppData\Local\Keil_v5\ARM\ARMCC\Bin' *** Using Compiler 'V5.06 update 7 (build 960)', folder: 'C:\Users\LSMushui\AppData\Local\Keil_v5\ARM\ARMCC\Bin'
Rebuild target 'Target 1' Rebuild target 'Target 1'
assembling startup_stm32f40_41xxx.s... assembling startup_stm32f40_41xxx.s...
compiling system_stm32f4xx.c... compiling system_stm32f4xx.c...
compiling stm32f4xx_adc.c...
compiling stm32f4xx_dbgmcu.c...
compiling stm32f4xx_dac.c...
compiling stm32f4xx_fmpi2c.c...
compiling stm32f4xx_dma2d.c...
compiling stm32f4xx_cec.c... compiling stm32f4xx_cec.c...
compiling stm32f4xx_can.c...
compiling stm32f4xx_dfsdm.c...
compiling stm32f4xx_cryp.c...
compiling stm32f4xx_crc.c... compiling stm32f4xx_crc.c...
compiling stm32f4xx_flash_ramfunc.c...
compiling stm32f4xx_dsi.c...
compiling stm32f4xx_exti.c...
compiling stm32f4xx_dcmi.c...
compiling misc.c... compiling misc.c...
compiling stm32f4xx_gpio.c... compiling stm32f4xx_cryp.c...
compiling stm32f4xx_cryp_tdes.c...
compiling stm32f4xx_cryp_des.c... compiling stm32f4xx_cryp_des.c...
compiling stm32f4xx_fsmc.c... compiling stm32f4xx_flash_ramfunc.c...
compiling stm32f4xx_dma.c... compiling stm32f4xx_can.c...
compiling stm32f4xx_adc.c...
compiling stm32f4xx_flash.c... compiling stm32f4xx_flash.c...
compiling stm32f4xx_fsmc.c...
compiling stm32f4xx_dac.c...
compiling stm32f4xx_exti.c...
compiling stm32f4xx_dfsdm.c...
compiling stm32f4xx_fmpi2c.c...
compiling stm32f4xx_cryp_tdes.c...
compiling stm32f4xx_dbgmcu.c...
compiling stm32f4xx_dsi.c...
compiling stm32f4xx_gpio.c...
compiling stm32f4xx_dma2d.c...
compiling stm32f4xx_dcmi.c...
compiling stm32f4xx_dma.c...
compiling stm32f4xx_cryp_aes.c... compiling stm32f4xx_cryp_aes.c...
compiling stm32f4xx_hash.c... compiling stm32f4xx_hash.c...
compiling stm32f4xx_hash_md5.c... compiling stm32f4xx_hash_md5.c...
compiling stm32f4xx_hash_sha1.c... compiling stm32f4xx_hash_sha1.c...
compiling stm32f4xx_lptim.c...
compiling stm32f4xx_iwdg.c...
compiling stm32f4xx_i2c.c... compiling stm32f4xx_i2c.c...
compiling stm32f4xx_iwdg.c...
compiling stm32f4xx_lptim.c...
compiling stm32f4xx_qspi.c... compiling stm32f4xx_qspi.c...
compiling stm32f4xx_pwr.c... compiling stm32f4xx_pwr.c...
compiling stm32f4xx_rng.c...
compiling stm32f4xx_ltdc.c... compiling stm32f4xx_ltdc.c...
compiling stm32f4xx_spdifrx.c... compiling stm32f4xx_rng.c...
compiling stm32f4xx_sai.c... compiling stm32f4xx_sai.c...
compiling stm32f4xx_spdifrx.c...
compiling TIM.c...
compiling stm32f4xx_syscfg.c...
compiling Delay.c...
compiling stm32f4xx_rcc.c... compiling stm32f4xx_rcc.c...
compiling stm32f4xx_wwdg.c...
compiling stm32f4xx_sdio.c... compiling stm32f4xx_sdio.c...
compiling stm32f4xx_spi.c... compiling stm32f4xx_spi.c...
compiling stm32f4xx_syscfg.c...
compiling stm32f4xx_rtc.c...
compiling stm32f4xx_wwdg.c...
compiling stm32f4xx_usart.c... compiling stm32f4xx_usart.c...
compiling TIM.c...
compiling Delay.c...
compiling CAN.c...
compiling UART.c... compiling UART.c...
compiling stm32f4xx_rtc.c...
compiling stm32f4xx_tim.c... compiling stm32f4xx_tim.c...
compiling CAN.c...
compiling LED.c... compiling LED.c...
compiling Buzzer.c... compiling Buzzer.c...
compiling GM6020.c...
compiling M3508.c...
compiling Remote.c... compiling Remote.c...
compiling LinkCheck.c... compiling LinkCheck.c...
compiling M3508.c...
compiling GM6020.c...
compiling CToC.c...
compiling Warming.c... compiling Warming.c...
compiling PID.c... compiling CToC.c...
compiling CloseLoopControl.c... compiling CloseLoopControl.c...
compiling RefereeSystem_CRCTable.c... compiling PID.c...
compiling RefereeSystem.c... compiling RefereeSystem.c...
compiling Ultra_CAP.c...
compiling UI.c...
compiling Mecanum.c... compiling Mecanum.c...
compiling RefereeSystem_CRCTable.c...
compiling UI.c...
compiling UI_Base.c... compiling UI_Base.c...
compiling UI_Library.c... compiling Ultra_CAP.c...
compiling stm32f4xx_it.c... compiling stm32f4xx_it.c...
compiling main.c... compiling main.c...
compiling UI_Library.c...
linking... linking...
Program Size: Code=18636 RO-data=1224 RW-data=408 ZI-data=2496 Program Size: Code=18652 RO-data=1224 RW-data=408 ZI-data=2496
".\Objects\Project.axf" - 0 Error(s), 0 Warning(s). ".\Objects\Project.axf" - 0 Error(s), 0 Warning(s).
<h2>Software Packages used:</h2> <h2>Software Packages used:</h2>
@@ -108,7 +108,7 @@ Package Vendor: Keil
<h2>Collection of Component include folders:</h2> <h2>Collection of Component include folders:</h2>
<h2>Collection of Component Files used:</h2> <h2>Collection of Component Files used:</h2>
Build Time Elapsed: 00:00:05 Build Time Elapsed: 00:00:04
</pre> </pre>
</body> </body>
</html> </html>

View File

@@ -3,7 +3,7 @@
<title>Static Call Graph - [.\Objects\Project.axf]</title></head> <title>Static Call Graph - [.\Objects\Project.axf]</title></head>
<body><HR> <body><HR>
<H1>Static Call Graph for image .\Objects\Project.axf</H1><HR> <H1>Static Call Graph for image .\Objects\Project.axf</H1><HR>
<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060960: Last Updated: Mon Nov 03 12:34:21 2025 <BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060960: Last Updated: Sat Mar 28 08:58:46 2026
<BR><P> <BR><P>
<H3>Maximum Stack Usage = 232 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3> <H3>Maximum Stack Usage = 232 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
Call chain for Maximum Stack Depth:</H3> Call chain for Maximum Stack Depth:</H3>
@@ -1036,7 +1036,7 @@ Global Symbols
<LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RefereeSystem_VerifyCRC8CheckSum <LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RefereeSystem_VerifyCRC8CheckSum
</UL> </UL>
<P><STRONG><a name="[b5]"></a>RefereeSystem_Init</STRONG> (Thumb, 8 bytes, Stack size 8 bytes, refereesystem.o(i.RefereeSystem_Init)) <P><STRONG><a name="[b5]"></a>RefereeSystem_Init</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, refereesystem.o(i.RefereeSystem_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 108<LI>Call Chain = RefereeSystem_Init &rArr; UART1_Init &rArr; USART_Init &rArr; RCC_GetClocksFreq <BR><BR>[Stack]<UL><LI>Max Depth = 108<LI>Call Chain = RefereeSystem_Init &rArr; UART1_Init &rArr; USART_Init &rArr; RCC_GetClocksFreq
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART1_Init <BR>[Calls]<UL><LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART1_Init

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,16 @@
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00100000 { ; load region size_region
ER_IROM1 0x08000000 0x00100000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM1 0x20000000 0x00020000 { ; RW data
.ANY (+RW +ZI)
}
}

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More