diff --git a/云台/云台/CarBody/Gimbal.c b/云台/云台/CarBody/Gimbal.c index ed267d1..ff03815 100644 --- a/云台/云台/CarBody/Gimbal.c +++ b/云台/云台/CarBody/Gimbal.c @@ -11,6 +11,7 @@ #include "RefereeSystem.h" #include "Visual.h" #include "WaveFiltering_Kalman_Filtering.h" +#include "Delay.h" KFP kfp_PITCH={0.02,0,0,0,0.01,0.543};//卡尔曼滤波器结构体 @@ -26,7 +27,7 @@ KFP kfp_PITCH={0.02,0,0,0,0.01,0.543};//卡尔曼滤波器结构体 uint8_t Gimbal_FrictionWheelFlag;//云台小陀螺标志位,云台开摩擦轮标志位 -bool Fire_Flag=0;//开火指示位,用于单发限位 +uint8_t Fire_Flag=0;//开火指示位,用于单发限位 PID_PositionInitTypedef Gimbal_YawAnglePositionPID,Gimbal_YawAngleSpeedPID;//Yaw轴GM6020电机PID PID_PositionInitTypedef Gimbal_PitchAnglePositionPID,Gimbal_PitchAngleSpeedPID;//Pitch轴GM6020电机PID @@ -98,9 +99,9 @@ void Gimbal_Init(void) PID_PositionSetOUTRange(&Gimbal_R2_FrictionWheelPID,-15000,15000); PID_PositionStructureInit(&Gimbal_RammerSpinPositionPID,Gimbal_RammerSpeed);//拨弹盘 - PID_PositionSetParameter(&Gimbal_RammerSpinPositionPID,50,50,0); + PID_PositionSetParameter(&Gimbal_RammerSpinPositionPID,20,0,0); PID_PositionSetEkRange(&Gimbal_RammerSpinPositionPID,-20,20); - PID_PositionSetOUTRange(&Gimbal_RammerSpinPositionPID,-2000,2000); + PID_PositionSetOUTRange(&Gimbal_RammerSpinPositionPID,-20000,20000); @@ -139,12 +140,12 @@ void Gimbal_CleanPID(void) void Gimbal_PitchControl(void) { 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)<1020) && AttitudeAlgorithms_DegRoll>Pitch_GM6020AngleUpperLinit) 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_DegRoll1030) && AttitudeAlgorithms_DegRoll1050 && 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>1030)//根据摇杆改变偏航 { if(PC_Spin==0) Gimbal_YawAnglePositionPID.Need_Value-=Gimbal_LeverSpeedMapRate*Gimbal_YawPitchSpeedRate*Gimbal_YawPitchSpeedRate*0.0439453125f*((Remote_RxData.Remote_L_RL-1024)/660.0f); else 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<1020) { if(PC_Spin==0) Gimbal_YawAnglePositionPID.Need_Value+=Gimbal_LeverSpeedMapRate*Gimbal_YawPitchSpeedRate*Gimbal_YawPitchSpeedRate*0.0439453125f*((1024-Remote_RxData.Remote_L_RL)/660.0f); @@ -204,8 +205,9 @@ void Gimbal_YawControl(void) PID_PositionCalc(&Gimbal_YawAnglePositionPID,AttitudeAlgorithms_DegYaw); Gimbal_YawAngleSpeedPID.Need_Value=Gimbal_YawAnglePositionPID.OUT; PID_PositionCalc(&Gimbal_YawAngleSpeedPID,GM6020_MotorStatus[0].Speed); + GM6020_CAN2SetLIDVoltage(Gimbal_YawAngleSpeedPID.OUT,0,0,0); - + //UART2_Printf("%lld\n",GM6020_MotorStatus[Gimbal_YawMotor-0x205].Position); } /* @@ -219,7 +221,7 @@ void Gimbal_FiringMechanismControl(void) 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_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();//开激光 Gimbal_FrictionWheelFlag=1; } @@ -258,9 +260,8 @@ void Gimbal_Rammer(void) else Gimbal_RammerSpinPositionPID.Need_Value=0; PID_PositionCalc(&Gimbal_RammerSpinPositionPID,M3508_MotorStatus[Gimbal_RammerSpinMotor-0x201].RotorSpeed); - //M2006_CANSetHIDCurrent(0,Gimbal_PitchAngleSpeedPID.OUT,Gimbal_RammerSpinPositionPID.OUT,0); - //PID_PositionCalc(&Gimbal_PitchAngleSpeedPID,GM6020_MotorStatus[Gimbal_PitchMotor-0x205].Speed); - //M3508_CANSetLIDCurrent(0,0,Gimbal_RammerSpinPositionPID.OUT,0); + M3508_CANSetHIDCurrent(0,Gimbal_PitchAngleSpeedPID.OUT,Gimbal_RammerSpinPositionPID.OUT,0); + Delay_ms(1); //M3508_CANSetHIDCurrent(0,0,Gimbal_RammerSpinPositionPID.OUT,0); } @@ -274,31 +275,34 @@ void Gimbal_Rammer_Single_fire(void) { if(Gimbal_FrictionWheelFlag==1) { - if(((Remote_RxData.Remote_ThumbWheel<1000 && RefereeSystem_Status==0) || PC_Fire==1) && Fire_Flag != 1;) - { - Gimbal_RammerSpinPositionPID.Need_Value=Gimbal_RammerSpinPositionPID.Need_Value-Gimbal_RammerSingleAmmo;//3,2,1 Fire!!! - Fire_Flag=1;//单次开火标志置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_RammerSpeed;//退弹 + 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;//防止意外走火? + 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); - //M2006_CANSetHIDCurrent(0,Gimbal_PitchAngleSpeedPID.OUT,Gimbal_RammerSpinPositionPID.OUT,0); - - //M3508_CANSetLIDCurrent(0,0,Gimbal_RammerSpinPositionPID.OUT,0); - //M3508_CANSetHIDCurrent(0,0,Gimbal_RammerSpinPositionPID.OUT,0); } - - /* *函数简介:云台运动控制 *参数说明:无 @@ -312,5 +316,6 @@ void Gimbal_MoveControl(void) Gimbal_FiringMechanismControl();//摩擦轮控制 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); } diff --git a/云台/云台/Objects/Project.axf b/云台/云台/Objects/Project.axf index df72f58..c2824b5 100644 Binary files a/云台/云台/Objects/Project.axf and b/云台/云台/Objects/Project.axf differ diff --git a/云台/云台/Objects/Project.build_log.htm b/云台/云台/Objects/Project.build_log.htm index d397896..44e1c32 100644 --- a/云台/云台/Objects/Project.build_log.htm +++ b/云台/云台/Objects/Project.build_log.htm @@ -22,15 +22,100 @@ Dialog DLL: TCM.DLL V1.56.6.0

Project:

C:\Users\LSMushui\Desktop\RM\Hero-C-Board-Legacy\̨\̨\Project.uvprojx -Project File Date: 03/23/2026 +Project File Date: 03/24/2026

Output:

*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'C:\Users\LSMushui\AppData\Local\Keil_v5\ARM\ARMCC\Bin' -Build target 'Target 1' +Rebuild target 'Target 1' +assembling startup_stm32f40_41xxx.s... +compiling misc.c... +compiling stm32f4xx_cec.c... +compiling system_stm32f4xx.c... +compiling stm32f4xx_crc.c... +compiling stm32f4xx_cryp.c... +compiling stm32f4xx_cryp_tdes.c... +compiling stm32f4xx_flash.c... +compiling stm32f4xx_dma2d.c... +compiling stm32f4xx_can.c... +compiling stm32f4xx_dac.c... +compiling stm32f4xx_fsmc.c... +compiling stm32f4xx_dsi.c... +compiling stm32f4xx_adc.c... +compiling stm32f4xx_exti.c... +compiling stm32f4xx_gpio.c... +compiling stm32f4xx_fmpi2c.c... +compiling stm32f4xx_flash_ramfunc.c... +compiling stm32f4xx_dbgmcu.c... +compiling stm32f4xx_dcmi.c... +compiling stm32f4xx_dfsdm.c... +compiling stm32f4xx_cryp_des.c... +compiling stm32f4xx_dma.c... +compiling stm32f4xx_cryp_aes.c... +compiling stm32f4xx_hash_md5.c... +compiling stm32f4xx_hash.c... +compiling stm32f4xx_lptim.c... +compiling stm32f4xx_hash_sha1.c... +compiling stm32f4xx_iwdg.c... +compiling stm32f4xx_i2c.c... +compiling stm32f4xx_qspi.c... +compiling stm32f4xx_pwr.c... +compiling stm32f4xx_rng.c... +compiling stm32f4xx_ltdc.c... +compiling stm32f4xx_rcc.c... +compiling stm32f4xx_sai.c... +compiling stm32f4xx_spdifrx.c... +compiling stm32f4xx_rtc.c... +compiling stm32f4xx_sdio.c... +compiling stm32f4xx_syscfg.c... +compiling Delay.c... +compiling stm32f4xx_spi.c... +compiling stm32f4xx_wwdg.c... +compiling TIM.c... +compiling AHRS_middleware.c... +compiling stm32f4xx_usart.c... +compiling UART.c... +compiling user_lib.c... +compiling stm32f4xx_tim.c... +compiling WaveFiltering_Kalman_Filtering.c... +Control\WaveFiltering_Kalman_Filtering.c(13): warning: #177-D: variable "pDst" was declared but never referenced + float pDst,pDst1=1.0f; +Control\WaveFiltering_Kalman_Filtering.c(13): warning: #177-D: variable "pDst1" was declared but never referenced + float pDst,pDst1=1.0f; +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 +compiling CAN.c... +compiling MyI2C.c... +compiling LED.c... +compiling Buzzer.c... +compiling Remote.c... +compiling IST8310.c... +compiling Laser.c... +compiling BMI088.c... +compiling M3508.c... +compiling GM6020.c... +compiling LinkCheck.c... +compiling M2006.c... +compiling Warming.c... +compiling CToC.c... +compiling CloseLoopControl.c... +compiling IMUTemperatureControl.c... +compiling AttitudeAlgorithms.c... +compiling PID.c... +compiling Visual.c... +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*/ +CarBody\Visual.c(165): warning: #1-D: last line of file ends without a newline + } +CarBody\Visual.c: 2 warnings, 0 errors compiling Gimbal.c... +compiling RefereeSystem.c... +compiling Keyboard.c... +compiling main.c... +compiling stm32f4xx_it.c... linking... -Program Size: Code=31572 RO-data=1236 RW-data=552 ZI-data=3544 -".\Objects\Project.axf" - 0 Error(s), 0 Warning(s). +Program Size: Code=31688 RO-data=1236 RW-data=552 ZI-data=3544 +".\Objects\Project.axf" - 0 Error(s), 5 Warning(s).

Software Packages used:

@@ -42,7 +127,7 @@ Package Vendor: Keil

Collection of Component include folders:

Collection of Component Files used:

-Build Time Elapsed: 00:00:01 +Build Time Elapsed: 00:00:05 diff --git a/云台/云台/Objects/Project.htm b/云台/云台/Objects/Project.htm index 358fc9c..c7d7071 100644 --- a/云台/云台/Objects/Project.htm +++ b/云台/云台/Objects/Project.htm @@ -3,7 +3,7 @@ Static Call Graph - [.\Objects\Project.axf]

Static Call Graph for image .\Objects\Project.axf


-

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Mon Mar 23 23:03:43 2026 +

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Fri Mar 27 09:17:46 2026

Maximum Stack Usage = 280 bytes + Unknown(Cycles, Untraceable Function Pointers)

Call chain for Maximum Stack Depth:

@@ -121,7 +121,7 @@ Global Symbols

__main (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
[Address Reference Count : 1]

-

_main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001)) +

_main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))

_main_scatterload (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))

[Calls]

GPIO_ReadInputDataBit (Thumb, 18 bytes, Stack size 0 bytes, stm32f4xx_gpio.o(i.GPIO_ReadInputDataBit))

[Called By]

-

GPIO_ResetBits (Thumb, 6 bytes, Stack size 0 bytes, stm32f4xx_gpio.o(i.GPIO_ResetBits)) +

GPIO_ResetBits (Thumb, 6 bytes, Stack size 0 bytes, stm32f4xx_gpio.o(i.GPIO_ResetBits))

[Called By]

-

GPIO_SetBits (Thumb, 4 bytes, Stack size 0 bytes, stm32f4xx_gpio.o(i.GPIO_SetBits)) +

GPIO_SetBits (Thumb, 4 bytes, Stack size 0 bytes, stm32f4xx_gpio.o(i.GPIO_SetBits))

[Called By]

GPIO_WriteBit (Thumb, 12 bytes, Stack size 0 bytes, stm32f4xx_gpio.o(i.GPIO_WriteBit)) -

[Called By]