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); /* 运行结束,等待下一个周期唤醒 */
}