From 24eb09e2f719e64ba7f8939f935036a69ed77a25 Mon Sep 17 00:00:00 2001 From: ws <1621320660@qq.com> Date: Wed, 26 Mar 2025 20:15:44 +0800 Subject: [PATCH] test --- MDK-ARM/.vscode/keil-assistant.log | 6 ++++ MDK-ARM/.vscode/uv4.log | 4 +-- MDK-ARM/.vscode/uv4.log.lock | 2 +- MDK-ARM/mycode1.uvoptx | 9 +++-- README.md | 2 +- User/device/djiMotor.c | 58 ++++++++++++++++++++++-------- User/device/djiMotor.h | 2 ++ User/module/shoot.c | 58 ++++++++++++++++++++++++++++++ User/module/shoot.h | 2 +- User/task/dji_task.c | 17 +++------ User/task/shoot_task.c | 17 ++++----- 11 files changed, 134 insertions(+), 43 deletions(-) diff --git a/MDK-ARM/.vscode/keil-assistant.log b/MDK-ARM/.vscode/keil-assistant.log index dfc0fa4..9f6866d 100644 --- a/MDK-ARM/.vscode/keil-assistant.log +++ b/MDK-ARM/.vscode/keil-assistant.log @@ -62,3 +62,9 @@ [info] Log at : 2025/3/19|14:10:22|GMT+0800 +[info] Log at : 2025/3/26|14:58:18|GMT+0800 + +[info] Log at : 2025/3/26|15:24:15|GMT+0800 + +[info] Log at : 2025/3/26|17:13:53|GMT+0800 + diff --git a/MDK-ARM/.vscode/uv4.log b/MDK-ARM/.vscode/uv4.log index 23cb5d5..b23d7bb 100644 --- a/MDK-ARM/.vscode/uv4.log +++ b/MDK-ARM/.vscode/uv4.log @@ -1,8 +1,8 @@ *** Using Compiler 'V5.06 update 7 (build 960)', folder: 'D:\keil\ARM\ARMCC\Bin' Build target 'mycode1' -compiling shoot_task.c... +compiling shoot.c... linking... -Program Size: Code=26332 RO-data=1904 RW-data=280 ZI-data=22472 +Program Size: Code=25844 RO-data=1904 RW-data=248 ZI-data=22512 FromELF: creating hex file... "mycode1\mycode1.axf" - 0 Error(s), 0 Warning(s). Build Time Elapsed: 00:00:03 diff --git a/MDK-ARM/.vscode/uv4.log.lock b/MDK-ARM/.vscode/uv4.log.lock index 262c60b..56f105d 100644 --- a/MDK-ARM/.vscode/uv4.log.lock +++ b/MDK-ARM/.vscode/uv4.log.lock @@ -1 +1 @@ -2025/3/19 14:04:20 \ No newline at end of file +2025/3/26 20:14:55 \ No newline at end of file diff --git a/MDK-ARM/mycode1.uvoptx b/MDK-ARM/mycode1.uvoptx index 4d9f5d9..6c99ba1 100644 --- a/MDK-ARM/mycode1.uvoptx +++ b/MDK-ARM/mycode1.uvoptx @@ -230,6 +230,11 @@ 1 trigger_angle_o + + 16 + 1 + speed_6384,0x0A + @@ -868,7 +873,7 @@ User/device - 1 + 0 0 0 0 @@ -1004,7 +1009,7 @@ User/module - 1 + 0 0 0 0 diff --git a/README.md b/README.md index 2c04db8..cc0b9df 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## r1上层 -1. **odrive**推射 **can1** **id 010** **spi2**读取as5047p +1. **vesc** **can1 id:77** **spi2**读取as5047p 2. go1 RS485模块 01翻转 02云台 3. 爪子 左三PC6 4. 接球 左一左2 PI7 PI6 \ No newline at end of file diff --git a/User/device/djiMotor.c b/User/device/djiMotor.c index fc4db36..8a32e26 100644 --- a/User/device/djiMotor.c +++ b/User/device/djiMotor.c @@ -303,28 +303,36 @@ void CAN_cmd_2FF(int16_t motor1, int16_t motor2, int16_t motor3, CAN_HandleTypeD HAL_CAN_AddTxMessage(hcan, &tx_meessage_2ff, can_send_data_2ff, &send_mail_box); } -/************************************** - * 限幅函数 - **************************************/ +/** + * @brief 返回电机数据指针 + * @param[in] i: 电机编号 + * @retval 电机数据指针 + */ + motor_measure_t *get_motor_point(uint8_t i) + { + return &motor_chassis[i]; + } + + +/** + * @brief 限制vesc电机转速 + * @param[in/out] rpm: vesce电机转速 + * @retval none + * + * 如果rpm的绝对值大于wtrcfg_VESC_COMMAND_ERPM_MAX, + * 则将rpm的值设置为wtrcfg_VESC_COMMAND_ERPM_MAX或-wtrcfg_VESC_COMMAND_ERPM_MAX + */ void assert_param_rpm(float *rpm){ if( fabsf(*rpm) > wtrcfg_VESC_COMMAND_ERPM_MAX ) *rpm = *rpm > 0 ? wtrcfg_VESC_COMMAND_ERPM_MAX : - wtrcfg_VESC_COMMAND_ERPM_MAX ; } /** - * @brief 返回电机数据指针 - * @param[in] i: 电机编号 - * @retval 电机数据指针 + * @brief 使vesc电机进入转速模式 + * @param[in] controller_id: vesc电机控制器id + * @param[in] RPM: 电机转速 + * @retval RPM(1000-50000之间的数) */ -motor_measure_t *get_motor_point(uint8_t i) -{ - return &motor_chassis[i]; -} - -/* -用转速模式控制电机 -输入参数是controller_id(我用的是65,这个可以在上位机找到)和RPM(1000-50000之间的数) -*/ void CAN_VESC_RPM(uint8_t controller_id, float RPM) { uint32_t id; @@ -347,3 +355,23 @@ void CAN_VESC_RPM(uint8_t controller_id, float RPM) HAL_CAN_AddTxMessage(&hcan1, &vesc_tx_message, vesc_send_data, &send_mail_box); } + +/** + * @brief 使vesc电机进入制动模式 + * @param[in] controller_id: vesc电机控制器id + * @retval none + */ +void CAN_VESC_HEAD(uint8_t controller_id) +{ + uint32_t id; + uint32_t send_mail_box; + + id = controller_id | ((uint32_t)CAN_PACKET_SET_CURRENT_BRAKE << 8); + + vesc_tx_message.ExtId = id; + vesc_tx_message.IDE = CAN_ID_EXT; + vesc_tx_message.RTR = CAN_RTR_DATA; + vesc_tx_message.DLC = 0x04; + + HAL_CAN_AddTxMessage(&hcan1, &vesc_tx_message, vesc_send_data, &send_mail_box); +} diff --git a/User/device/djiMotor.h b/User/device/djiMotor.h index 490b452..ad363a1 100644 --- a/User/device/djiMotor.h +++ b/User/device/djiMotor.h @@ -166,6 +166,8 @@ void vescMotorEncode(void); void CAN_VESC_RPM(uint8_t controller_id, float RPM); +void CAN_VESC_HEAD(uint8_t controller_id); + #ifdef __cplusplus } #endif diff --git a/User/module/shoot.c b/User/module/shoot.c index dbf7412..27b8745 100644 --- a/User/module/shoot.c +++ b/User/module/shoot.c @@ -1,9 +1,67 @@ #include "shoot.h" #include "remote_control.h" +#include "read_spi.h" extern RC_mess_t RC_mess; +extern Encoder_t encoder; extern motor_measure_t *trigger_motor_data;//3508电机数据 +int mode=0; +int shoot=0; +#define Stop 0 +#define Hasten 1 +#define Slow 2 +#define Shoot 3 +#define VESC_ID 77 +int speed_6384=10000; +void control_clutch_shoot(void) +{ + + if(mode == Stop) + { + + if(encoder.round_cnt == 0) + { + + CAN_VESC_HEAD(VESC_ID); + } + + + } + else if(mode == Hasten) + { + if(shoot ==0) + { + if(encoder.round_cnt <= 4) + { + + CAN_VESC_RPM(VESC_ID, speed_6384); + + } + + } + else if(shoot ==Shoot) + { + if(encoder.round_cnt <= 4) + { + + HAL_GPIO_WritePin(key_GPIO_Port,key_Pin,GPIO_PIN_SET); + + CAN_VESC_RPM(VESC_ID, speed_6384); + + } + else if(encoder.round_cnt >= 4) + { + HAL_GPIO_WritePin(key_GPIO_Port,key_Pin,GPIO_PIN_RESET); + + CAN_VESC_HEAD(VESC_ID); + } + + + } + } + +} diff --git a/User/module/shoot.h b/User/module/shoot.h index 7cdbb14..6878b1a 100644 --- a/User/module/shoot.h +++ b/User/module/shoot.h @@ -5,7 +5,7 @@ #include "djiMotor.h" #include "calc_lib.h" #include "pid.h" - +#include "main.h" diff --git a/User/task/dji_task.c b/User/task/dji_task.c index c012f63..cca0c8e 100644 --- a/User/task/dji_task.c +++ b/User/task/dji_task.c @@ -13,13 +13,10 @@ extern RC_mess_t RC_mess; extern int16_t result; extern int16_t t_result; extern motor_measure_t *trigger_motor_data; -Encoder_t encoder; + float vofa[8]; -int speed=0; -float m=0; -float trigger_angle_o=0; -int mode=0; + /** * \brief 电机任务 * @@ -32,19 +29,13 @@ void Task_Motor(void *argument) const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CTRL_CHASSIS; motor_init(); - Encoder_Init(&encoder); uint32_t tick = osKernelGetTickCount(); while(1) { - //收到消息队列新数据 - - // 更新编码器数据 - Update_Encoder(&encoder); - m=trigger_angle_o*(8191/360); - - + + CAN_cmd_200(t_result,0,0,0,&hcan1); osDelay(2); diff --git a/User/task/shoot_task.c b/User/task/shoot_task.c index a3ee326..b6b66d0 100644 --- a/User/task/shoot_task.c +++ b/User/task/shoot_task.c @@ -10,27 +10,28 @@ #include "djiMotor.h" extern RC_mess_t RC_mess; -extern Encoder_t encoder; -extern motor_measure_t *trigger_motor_data;//3508电机数据 -extern int mode; -int speed_6384=10000; +Encoder_t encoder; void Task_Shoot(void *argument) { (void)argument; /* 未使用argument,消除警告 */ const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CAN; - + Encoder_Init(&encoder); uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计算 */ while(1) { - - CAN_VESC_RPM(77, speed_6384); - + //收到消息队列新数据 + + // 更新编码器数据 + Update_Encoder(&encoder); + + + tick += delay_tick; /* 计算下一个唤醒时刻 */ osDelayUntil(tick); /* 运行结束,等待下一个周期唤醒 */ }