diff --git a/云台/云台/CarBody/Gimbal.c b/云台/云台/CarBody/Gimbal.c index 9f6dec6..2d25f39 100644 --- a/云台/云台/CarBody/Gimbal.c +++ b/云台/云台/CarBody/Gimbal.c @@ -26,7 +26,7 @@ KFP kfp_PITCH={0.02,0,0,0,0.01,0.543};//卡尔曼滤波器结构体 uint8_t Gimbal_FrictionWheelFlag;//云台小陀螺标志位,云台开摩擦轮标志位 - +uint8_t Fire_Flag=0;//开火指示位,用于单发限位 PID_PositionInitTypedef Gimbal_YawAnglePositionPID,Gimbal_YawAngleSpeedPID;//Yaw轴GM6020电机PID PID_PositionInitTypedef Gimbal_PitchAnglePositionPID,Gimbal_PitchAngleSpeedPID;//Pitch轴GM6020电机PID @@ -98,13 +98,12 @@ void Gimbal_Init(void) PID_PositionSetOUTRange(&Gimbal_R2_FrictionWheelPID,-15000,15000); PID_PositionStructureInit(&Gimbal_RammerSpinSpeedPID,Gimbal_RammerSpeed);//拨弹盘 - PID_PositionSetParameter(&Gimbal_RammerSpinSpeedPID,50,0,0); - PID_PositionSetEkRange(&Gimbal_RammerSpinSpeedPID,-20,20); + PID_PositionSetParameter(&Gimbal_RammerSpinSpeedPID,50,1,0); + PID_PositionSetEkRange(&Gimbal_RammerSpinSpeedPID,-1,1); PID_PositionSetOUTRange(&Gimbal_RammerSpinSpeedPID,-2000,2000); - Laser_Init(); } @@ -160,7 +159,7 @@ void Gimbal_PitchControl(void) //串级PID闭环Pitch角 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; PID_PositionCalc(&Gimbal_PitchAngleSpeedPID,GM6020_MotorStatus[Gimbal_PitchMotor-0x205].Speed); @@ -250,9 +249,9 @@ void Gimbal_Rammer(void) if(Gimbal_FrictionWheelFlag==1) { if((Remote_RxData.Remote_ThumbWheel<1000 && RefereeSystem_Status==0) || PC_Fire==1) - Gimbal_RammerSpinSpeedPID.Need_Value=-Gimbal_RammerSpeed; + Gimbal_RammerSpinSpeedPID.Need_Value+=-Gimbal_RammerSpeed; else if((Remote_RxData.Remote_ThumbWheel>1050 && RefereeSystem_Status==0) || PC_Ejection==1) - Gimbal_RammerSpinSpeedPID.Need_Value=Gimbal_RammerSpeed; + Gimbal_RammerSpinSpeedPID.Need_Value+=Gimbal_RammerSpeed; else Gimbal_RammerSpinSpeedPID.Need_Value=0; } @@ -260,12 +259,47 @@ void Gimbal_Rammer(void) PID_PositionCalc(&Gimbal_RammerSpinSpeedPID,M3508_MotorStatus[Gimbal_RammerSpinMotor-0x201].RotorSpeed); M2006_CANSetHIDCurrent(0,Gimbal_PitchAngleSpeedPID.OUT,Gimbal_RammerSpinSpeedPID.OUT,0); - + //PID_PositionCalc(&Gimbal_PitchAngleSpeedPID,GM6020_MotorStatus[Gimbal_PitchMotor-0x205].Speed); //M3508_CANSetLIDCurrent(0,0,Gimbal_RammerSpinSpeedPID.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) && Fire_Flag == 0) + { + Gimbal_RammerSpinSpeedPID.Need_Value+=-Gimbal_RammerSpeed;//3,2,1 Fire!!! + Fire_Flag=1;//单次开火标志置1 + } + else if(((Remote_RxData.Remote_ThumbWheel>1050 && RefereeSystem_Status==0) || PC_Ejection==1) && Fire_Flag == 1) + { + Gimbal_RammerSpinSpeedPID.Need_Value+=Gimbal_RammerSpeed;//退弹 + Fire_Flag=0;//退弹就不用一发一发退了 + } + else if(((Remote_RxData.Remote_ThumbWheel>1000 && Remote_RxData.Remote_ThumbWheel<1050) ) && Fire_Flag == 1) + { + //Gimbal_RammerSpinSpeedPID.Need_Value=0;//停止开火! + Fire_Flag=0; + } + } + //else + //Gimbal_RammerSpinSpeedPID.Need_Value=0;//防止意外走火? + + PID_PositionCalc(&Gimbal_RammerSpinSpeedPID,M3508_MotorStatus[Gimbal_RammerSpinMotor-0x201].RotorPosition); + //M2006_CANSetHIDCurrent(0,Gimbal_PitchAngleSpeedPID.OUT,Gimbal_RammerSpinSpeedPID.OUT,0); + + //M3508_CANSetLIDCurrent(0,0,Gimbal_RammerSpinSpeedPID.OUT,0); + //M3508_CANSetHIDCurrent(0,0,Gimbal_RammerSpinSpeedPID.OUT,0); +} diff --git a/云台/云台/CarBody/Visual.c b/云台/云台/CarBody/Visual.c index f73030d..caf77a1 100644 --- a/云台/云台/CarBody/Visual.c +++ b/云台/云台/CarBody/Visual.c @@ -61,7 +61,7 @@ void Visual_SendData(void) 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'); /*if(Visual_ReceiveFlag == 1) diff --git a/云台/云台/Listings/startup_stm32f40_41xxx.lst b/云台/云台/Listings/startup_stm32f40_41xxx.lst index 2e9f5ae..0bf05f7 100644 --- a/云台/云台/Listings/startup_stm32f40_41xxx.lst +++ b/云台/云台/Listings/startup_stm32f40_41xxx.lst @@ -842,16 +842,16 @@ ARM Macro Assembler Page 13 00000000 Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M4.fp.sp --apcs= interwork --depend=.\objects\startup_stm32f40_41xxx.d -o.\objects\startup_stm32 -f40_41xxx.o -ID:\useless\ARM\PACK\Keil\STM32F4xx_DFP\3.0.0\Drivers\CMSIS\Device +f40_41xxx.o -IC:\Users\LSMushui\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\3.1. ARM Macro Assembler Page 14 -\ST\STM32F4xx\Include --predefine="__MICROLIB SETA 1" --predefine="__UVISION_VE -RSION SETA 539" --predefine="STM32F407xx SETA 1" --list=.\listings\startup_stm3 -2f40_41xxx.lst Start\startup_stm32f40_41xxx.s +1\Drivers\CMSIS\Device\ST\STM32F4xx\Include --predefine="__MICROLIB SETA 1" --p +redefine="__UVISION_VERSION SETA 543" --predefine="STM32F407xx SETA 1" --list=. +\listings\startup_stm32f40_41xxx.lst Start\startup_stm32f40_41xxx.s diff --git a/云台/云台/Objects/Project.axf b/云台/云台/Objects/Project.axf index 1152fcb..df72f58 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 218a244..d397896 100644 --- a/云台/云台/Objects/Project.build_log.htm +++ b/云台/云台/Objects/Project.build_log.htm @@ -3,43 +3,46 @@
 

Vision Build Log

Tool Versions:

-IDE-Version: Vision V5.39.0.0 -Copyright (C) 2023 ARM Ltd and ARM Germany GmbH. All rights reserved. -License Information: sun JXF, sun, LIC=HN0AE-5SW5I-PCIJ8-3MDKX-KLD28-41CF7 +IDE-Version: Vision V5.43.1.0 +Copyright (C) 2025 ARM Ltd and ARM Germany GmbH. All rights reserved. +License Information: LS Mushui, 1, LIC=NQQMA-1N3GT-30GNC-71PK8-06QJT-WGQ3X Tool Versions: -Toolchain: MDK-ARM Plus Version: 5.39.0.0 -Toolchain Path: D:\useless\ARM\ARM_Compiler_5.06u7\Bin +Toolchain: MDK-ARM Plus Version: 5.43.0.0 +Toolchain Path: C:\Users\LSMushui\AppData\Local\Keil_v5\ARM\ARMCC\Bin C Compiler: Armcc.exe V5.06 update 7 (build 960) Assembler: Armasm.exe V5.06 update 7 (build 960) Linker/Locator: ArmLink.exe V5.06 update 7 (build 960) Library Manager: ArmAr.exe V5.06 update 7 (build 960) Hex Converter: FromElf.exe V5.06 update 7 (build 960) -CPU DLL: SARMCM3.DLL V5.39.0.0 +CPU DLL: SARMCM3.DLL V5.43.0.0 Dialog DLL: DCM.DLL V1.17.5.0 -Target DLL: CMSIS_AGDI.dll V1.33.16.0 -Dialog DLL: TCM.DLL V1.56.4.0 +Target DLL: CMSIS_AGDI.dll V1.33.24.0 +Dialog DLL: TCM.DLL V1.56.6.0

Project:

-D:\robomaster\Hero-C-Board-Legacy-main\hero-c-board-legacy\̨\̨\Project.uvprojx -Project File Date: 03/14/2026 +C:\Users\LSMushui\Desktop\RM\Hero-C-Board-Legacy\̨\̨\Project.uvprojx +Project File Date: 03/23/2026

Output:

-*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'D:\useless\ARM\ARM_Compiler_5.06u7\Bin' +*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'C:\Users\LSMushui\AppData\Local\Keil_v5\ARM\ARMCC\Bin' Build target 'Target 1' +compiling Gimbal.c... +linking... +Program Size: Code=31572 RO-data=1236 RW-data=552 ZI-data=3544 ".\Objects\Project.axf" - 0 Error(s), 0 Warning(s).

Software Packages used:

Package Vendor: Keil - https://www.keil.com/pack/Keil.STM32F4xx_DFP.3.0.0.pack - Keil::STM32F4xx_DFP@3.0.0 + https://www.keil.com/pack/Keil.STM32F4xx_DFP.3.1.1.pack + Keil::STM32F4xx_DFP@3.1.1 STMicroelectronics STM32F4 Series Device Support

Collection of Component include folders:

Collection of Component Files used:

-Build Time Elapsed: 00:00:00 +Build Time Elapsed: 00:00:01
diff --git a/云台/云台/Objects/Project.htm b/云台/云台/Objects/Project.htm index afe5912..358fc9c 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: Sat Mar 21 13:37:53 2026 +

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Mon Mar 23 23:03:43 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]