1111
This commit is contained in:
parent
0f335cbc9e
commit
7ac32f55f9
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -31,6 +31,9 @@ Note: source file '..\User\bsp\can.c' - object file renamed from 'gimbal\can.o'
|
||||
Note: source file '..\User\bsp\gpio.c' - object file renamed from 'gimbal\gpio.o' to 'gimbal\gpio_1.o'.
|
||||
Note: source file '..\User\bsp\i2c.c' - object file renamed from 'gimbal\i2c.o' to 'gimbal\i2c_1.o'.
|
||||
Note: source file '..\User\bsp\spi.c' - object file renamed from 'gimbal\spi.o' to 'gimbal\spi_1.o'.
|
||||
compiling gimbal.c...
|
||||
linking...
|
||||
Program Size: Code=84864 RO-data=996 RW-data=404 ZI-data=34268
|
||||
"gimbal\gimbal.axf" - 0 Error(s), 0 Warning(s).
|
||||
|
||||
<h2>Software Packages used:</h2>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@ -2126,7 +2126,7 @@ I (D:\Keil_v5\ARM\ARMCLANG\include\math.h)(0x6035A4A8)
|
||||
I (D:\Keil_v5\ARM\ARMCLANG\include\stdbool.h)(0x6035A4A8)
|
||||
I (D:\Keil_v5\ARM\ARMCLANG\include\stdint.h)(0x6035A4A8)
|
||||
I (D:\Keil_v5\ARM\ARMCLANG\include\stddef.h)(0x6035A4A8)
|
||||
I (..\User\module\gimbal.h)(0x691491D4)
|
||||
I (..\User\module\gimbal.h)(0x6917284C)
|
||||
I (..\User\component\ahrs.h)(0x68F3410E)
|
||||
I (..\User\component\filter.h)(0x68F22FA9)
|
||||
I (..\User\component\pid.h)(0x68F22FA9)
|
||||
@ -2264,7 +2264,7 @@ I (..\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\portmacro.h
|
||||
I (..\Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h)(0x68B055DB)
|
||||
I (..\Middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x68B055DB)
|
||||
I (..\Middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x68B055DB)
|
||||
I (..\User\module\gimbal.h)(0x691491D4)
|
||||
I (..\User\module\gimbal.h)(0x6917284C)
|
||||
I (..\User\component\ahrs.h)(0x68F3410E)
|
||||
I (..\User\component\user_math.h)(0x68F22FA9)
|
||||
I (D:\Keil_v5\ARM\ARMCLANG\include\float.h)(0x6035A4A0)
|
||||
@ -2376,7 +2376,7 @@ I (..\User\component\pid.h)(0x68F22FA9)
|
||||
I (..\User\component\filter.h)(0x68F22FA9)
|
||||
I (..\User\device\bmi088.h)(0x68F22F87)
|
||||
I (..\User\device\device.h)(0x68F22FA9)
|
||||
I (..\User\module\gimbal.h)(0x691491D4)
|
||||
I (..\User\module\gimbal.h)(0x6917284C)
|
||||
I (..\User\device\motor.h)(0x68F22F87)
|
||||
I (..\User\device\motor_dm.h)(0x68F22F87)
|
||||
I (..\User\bsp\can.h)(0x68F22FA9)
|
||||
@ -2407,7 +2407,7 @@ I (..\User\component\user_math.h)(0x68F22FA9)
|
||||
I (D:\Keil_v5\ARM\ARMCLANG\include\float.h)(0x6035A4A0)
|
||||
I (D:\Keil_v5\ARM\ARMCLANG\include\math.h)(0x6035A4A8)
|
||||
I (D:\Keil_v5\ARM\ARMCLANG\include\stdbool.h)(0x6035A4A8)
|
||||
I (..\User\module\gimbal.h)(0x691491D4)
|
||||
I (..\User\module\gimbal.h)(0x6917284C)
|
||||
I (..\User\component\ahrs.h)(0x68F3410E)
|
||||
I (..\User\component\filter.h)(0x68F22FA9)
|
||||
I (..\User\component\pid.h)(0x68F22FA9)
|
||||
@ -2481,7 +2481,7 @@ I (..\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\portmacro.h
|
||||
I (..\Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h)(0x68B055DB)
|
||||
I (..\Middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x68B055DB)
|
||||
I (..\Middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x68B055DB)
|
||||
I (..\User\module\gimbal.h)(0x691491D4)
|
||||
I (..\User\module\gimbal.h)(0x6917284C)
|
||||
I (..\User\component\ahrs.h)(0x68F3410E)
|
||||
I (..\User\component\user_math.h)(0x68F22FA9)
|
||||
I (D:\Keil_v5\ARM\ARMCLANG\include\float.h)(0x6035A4A0)
|
||||
@ -2534,8 +2534,8 @@ I (..\User\device\motor_rm.h)(0x68F22F87)
|
||||
I (..\User\module\config.h)(0x68DD3463)
|
||||
I (..\User\device\motor_lz.h)(0x68F22F87)
|
||||
I (..\User\device\motor_lk.h)(0x68F22F87)
|
||||
F (..\User\module\gimbal.c)(0x691495F0)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-gdwarf-3 -O0 -ffunction-sections -w -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../User/bsp -I ../User/component -I ../User/device -I ../Middlewares/Third_Party/FreeRTOS/Source/include -I ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F -I ../User/task -I ../User -I ../User/module
-I./RTE/_gimbal
-ID:/Keil_v5/Arm/Packs/ARM/CMSIS/5.7.0/CMSIS/Core/Include
-ID:/Keil_v5/Arm/Packs/Keil/STM32F4xx_DFP/2.17.1/Drivers/CMSIS/Device/ST/STM32F4xx/Include
-D__UVISION_VERSION="534" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx
-o gimbal/gimbal.o -MD)
|
||||
I (..\User\module\gimbal.h)(0x691491D4)
|
||||
F (..\User\module\gimbal.c)(0x69172B7F)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-gdwarf-3 -O0 -ffunction-sections -w -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../User/bsp -I ../User/component -I ../User/device -I ../Middlewares/Third_Party/FreeRTOS/Source/include -I ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F -I ../User/task -I ../User -I ../User/module
-I./RTE/_gimbal
-ID:/Keil_v5/Arm/Packs/ARM/CMSIS/5.7.0/CMSIS/Core/Include
-ID:/Keil_v5/Arm/Packs/Keil/STM32F4xx_DFP/2.17.1/Drivers/CMSIS/Device/ST/STM32F4xx/Include
-D__UVISION_VERSION="534" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx
-o gimbal/gimbal.o -MD)
|
||||
I (..\User\module\gimbal.h)(0x6917284C)
|
||||
I (..\User\component\ahrs.h)(0x68F3410E)
|
||||
I (..\User\component\user_math.h)(0x68F22FA9)
|
||||
I (D:\Keil_v5\ARM\ARMCLANG\include\float.h)(0x6035A4A0)
|
||||
@ -2598,7 +2598,7 @@ I (..\Middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x68B055DB)
|
||||
I (..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h)(0x68B055DB)
|
||||
I (..\User\device\motor_rm.h)(0x68F22F87)
|
||||
I (..\User\bsp\time.h)(0x68F22FA9)
|
||||
F (..\User\module\config.c)(0x691493B1)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-gdwarf-3 -O0 -ffunction-sections -w -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../User/bsp -I ../User/component -I ../User/device -I ../Middlewares/Third_Party/FreeRTOS/Source/include -I ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F -I ../User/task -I ../User -I ../User/module
-I./RTE/_gimbal
-ID:/Keil_v5/Arm/Packs/ARM/CMSIS/5.7.0/CMSIS/Core/Include
-ID:/Keil_v5/Arm/Packs/Keil/STM32F4xx_DFP/2.17.1/Drivers/CMSIS/Device/ST/STM32F4xx/Include
-D__UVISION_VERSION="534" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx
-o gimbal/config.o -MD)
|
||||
F (..\User\module\config.c)(0x691727B8)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-gdwarf-3 -O0 -ffunction-sections -w -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../User/bsp -I ../User/component -I ../User/device -I ../Middlewares/Third_Party/FreeRTOS/Source/include -I ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F -I ../User/task -I ../User -I ../User/module
-I./RTE/_gimbal
-ID:/Keil_v5/Arm/Packs/ARM/CMSIS/5.7.0/CMSIS/Core/Include
-ID:/Keil_v5/Arm/Packs/Keil/STM32F4xx_DFP/2.17.1/Drivers/CMSIS/Device/ST/STM32F4xx/Include
-D__UVISION_VERSION="534" -D_RTE_ -DSTM32F407xx -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F407xx
-o gimbal/config.o -MD)
|
||||
I (..\User\component\user_math.h)(0x68F22FA9)
|
||||
I (D:\Keil_v5\ARM\ARMCLANG\include\float.h)(0x6035A4A0)
|
||||
I (D:\Keil_v5\ARM\ARMCLANG\include\math.h)(0x6035A4A8)
|
||||
@ -2658,7 +2658,7 @@ I (..\Middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x68B055DB)
|
||||
I (..\Middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x68B055DB)
|
||||
I (..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h)(0x68B055DB)
|
||||
I (..\User\device\motor_lk.h)(0x68F22F87)
|
||||
I (..\User\module\gimbal.h)(0x691491D4)
|
||||
I (..\User\module\gimbal.h)(0x6917284C)
|
||||
I (..\User\component\ahrs.h)(0x68F3410E)
|
||||
I (..\User\component\filter.h)(0x68F22FA9)
|
||||
I (..\User\component\pid.h)(0x68F22FA9)
|
||||
|
||||
Binary file not shown.
@ -42,11 +42,6 @@ Config_RobotParam_t robot_config = {
|
||||
.zero={
|
||||
.pit_encoder=0,
|
||||
.yaw_encoder=0,
|
||||
/*零点行程*/
|
||||
.travel={
|
||||
.yaw=0,
|
||||
.pit=0,
|
||||
},
|
||||
},
|
||||
|
||||
.motor={
|
||||
|
||||
@ -33,6 +33,26 @@
|
||||
/* Private macro ------------------------------------------------------------ */
|
||||
/* Private variables -------------------------------------------------------- */
|
||||
/* Private function -------------------------------------------------------- */
|
||||
/**
|
||||
* \brief 计算角度偏差
|
||||
*
|
||||
* \param
|
||||
* \param
|
||||
*
|
||||
* \return 函数运行结果
|
||||
*/
|
||||
static float motor_imu_offset(float* motor, float* imu){
|
||||
|
||||
float motor_imu_offset = motor - imu;
|
||||
/* 处理跨越±π的情况 */
|
||||
if (motor_imu_offset > M_PI) motor_imu_offset -= M_2PI;
|
||||
if (motor_imu_offset < -M_PI) motor_imu_offset += M_2PI;
|
||||
|
||||
return motor_imu_offset;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* \brief 设置云台模式
|
||||
@ -61,8 +81,7 @@ static int8_t Gimbal_SetMode(Gimbal_t *g, Gimbal_Mode_t mode) {
|
||||
|
||||
g->setpoint.eulr.pit = g->feedback.imu.eulr.pit;
|
||||
g->setpoint.eulr.yaw = g->feedback.imu.eulr.yaw;
|
||||
g->setpoint.ecd.pit=g->feedback.motor.pit.rotor_abs_angle;
|
||||
g->setpoint.ecd.yaw=g->feedback.motor.yaw.rotor_abs_angle;
|
||||
|
||||
|
||||
g->mode = mode;
|
||||
return 0;
|
||||
@ -229,17 +248,14 @@ int8_t Gimbal_Control(Gimbal_t *g, Gimbal_CMD_t *g_cmd) {
|
||||
|
||||
|
||||
|
||||
// if((g->feedback.motor.yaw.rotor_abs_angle)>M_PI)g->feedback.motor.yaw.rotor_abs_angle-M_2PI;
|
||||
|
||||
float motor_imu_offset = g->feedback.motor.yaw.rotor_abs_angle - g->feedback.imu.eulr.yaw;
|
||||
/* 处理跨越±π的情况 */
|
||||
if (motor_imu_offset > M_PI) motor_imu_offset -= M_2PI;
|
||||
if (motor_imu_offset < -M_PI) motor_imu_offset += M_2PI;
|
||||
/* 计算到限位边界的距离 (这个限位给yaw)*/
|
||||
|
||||
float yaw_motor_imu_offset=motor_imu_offset(&g->feedback.motor.yaw.rotor_abs_angle,
|
||||
&g->feedback.imu.eulr.yaw);
|
||||
|
||||
float delta_max = CircleError(g->limit.yaw.max,
|
||||
(g->setpoint.eulr.yaw + motor_imu_offset + delta_yaw), M_2PI);
|
||||
(g->setpoint.eulr.yaw + yaw_motor_imu_offset + delta_yaw), M_2PI);
|
||||
float delta_min = CircleError(g->limit.yaw.min,
|
||||
(g->setpoint.eulr.yaw + motor_imu_offset + delta_yaw), M_2PI);
|
||||
(g->setpoint.eulr.yaw + yaw_motor_imu_offset + delta_yaw), M_2PI);
|
||||
|
||||
switch (g->mode) {
|
||||
case GIMBAL_MODE_RELAX:/*放松模式*/
|
||||
@ -281,14 +297,19 @@ int8_t Gimbal_Control(Gimbal_t *g, Gimbal_CMD_t *g_cmd) {
|
||||
break;
|
||||
case GIMBAL_MODE_RELATIVE:
|
||||
/*计算零点*/
|
||||
g->zero.yaw = g->param->zero.yaw_encoder - g->param->zero.travel.yaw;
|
||||
g->zero.pit = g->param->zero.pit_encoder - g->param->zero.travel.pit;
|
||||
g->zero.travel.yaw=motor_imu_offset(&g->param->zero.yaw_encoder,&g->feedback.imu.eulr.yaw);
|
||||
g->zero.travel.yaw=motor_imu_offset(&g->param->zero.pit_encoder,&g->feedback.imu.eulr.pit);
|
||||
|
||||
g->zero.yaw = g->param->zero.yaw_encoder - g->zero.travel.yaw;
|
||||
g->zero.pit = g->param->zero.pit_encoder - g->zero.travel.pit;
|
||||
/*基于零点的设定角度*/
|
||||
/*加的相对角度应该限制在3.14~-3.14*/
|
||||
CircleAdd(&(g->relative_angle.yaw),delta_yaw,M_2PI);
|
||||
if((g->relative_angle.yaw)>=M_2PI)g->relative_angle.yaw-=M_2PI;
|
||||
|
||||
/*限制pit的累加角度*/
|
||||
g->relative_angle.pit=+delta_pit;
|
||||
Clip(&(g->relative_angle.pit),(g->param->Limit_t.pit_min+g->zero.pit),
|
||||
(g->param->Limit_t.pit_max-g->zero.pit));
|
||||
|
||||
g->setpoint.eulr.yaw=g->zero.yaw + g->relative_angle.yaw;
|
||||
g->setpoint.eulr.pit=g->zero.pit + g->relative_angle.pit;
|
||||
@ -321,11 +342,12 @@ int8_t Gimbal_Control(Gimbal_t *g, Gimbal_CMD_t *g_cmd) {
|
||||
g->out.pit+=g->param->feedforward.imu.coefficient_pit*(pit_omega_set_point - g->feedback.imu.gyro.x);
|
||||
|
||||
break;
|
||||
/* 输出滤波 */
|
||||
g->out.yaw = LowPassFilter2p_Apply(&g->filter_out.yaw, g->out.yaw);
|
||||
g->out.pit = LowPassFilter2p_Apply(&g->filter_out.pit, g->out.pit);
|
||||
|
||||
|
||||
}
|
||||
/* 输出滤波 */
|
||||
g->out.yaw = LowPassFilter2p_Apply(&g->filter_out.yaw, g->out.yaw);
|
||||
g->out.pit = LowPassFilter2p_Apply(&g->filter_out.pit, g->out.pit);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -54,8 +54,7 @@ typedef struct{
|
||||
}travel;
|
||||
float pit; /*零点*/
|
||||
float yaw;
|
||||
float pit_encoder; /*零点*/
|
||||
float yaw_encoder;
|
||||
|
||||
} Gimbal_zero_t;
|
||||
|
||||
typedef struct {
|
||||
@ -75,7 +74,7 @@ typedef struct {
|
||||
typedef struct {
|
||||
|
||||
Gimbal_MOTOR_Param_t motor;
|
||||
Gimbal_zero_t zero;
|
||||
|
||||
|
||||
struct {
|
||||
KPID_Params_t yaw_omega; /* yaw轴角速度环PID参数 */
|
||||
@ -89,7 +88,12 @@ typedef struct {
|
||||
KPID_Params_t pit_ecd_angle; /* pitch轴电机位置环PID参数 */
|
||||
|
||||
} pid;
|
||||
|
||||
|
||||
struct {
|
||||
float pit_encoder; /*零点*/
|
||||
float yaw_encoder;
|
||||
|
||||
}zero;
|
||||
/* 前馈系数 */
|
||||
struct {
|
||||
struct{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user