From ef8657c965fbf6985ff6ecfc1e57369e1e99bdc1 Mon Sep 17 00:00:00 2001 From: ZHAISHUI04 <3150778793@qq.com> Date: Fri, 25 Apr 2025 20:16:02 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8D=E4=B9=90=E8=BF=AA=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MDK-ARM/R2.uvoptx | 209 +++++--------------------- MDK-ARM/R2.uvprojx | 30 ++-- MDK-ARM/R2/R2.axf | Bin 2826344 -> 2823936 bytes User/Algorithm/user_math.c | 5 +- User/Algorithm/user_math.h | 2 +- User/bsp/bsp_usart.h | 1 - User/device/LD_remote.c | 31 ---- User/device/LD_remote.h | 21 --- User/device/cmd.c | 92 ++++-------- User/device/cmd.h | 21 ++- User/device/dr16.c | 136 ----------------- User/device/motor_control.c | 7 - User/device/motor_control.h | 23 --- User/device/r12ds.c | 192 ------------------------ User/device/r12ds.h | 29 ---- User/device/rc.c | 211 +++++++++++++++++++++++++++ User/device/{dr16.h => rc.h} | 51 ++++--- User/device/remote_control.c | 185 ----------------------- User/device/remote_control.h | 42 ------ User/task/error_detect_task.c | 1 - User/task/init.c | 6 +- User/task/r12ds_task.c | 82 ----------- User/task/r12ds_task.h | 16 -- User/task/{dr16_task.c => rc_task.c} | 39 ++--- User/task/user_task.c | 2 +- User/task/user_task.h | 22 +-- 26 files changed, 364 insertions(+), 1092 deletions(-) delete mode 100644 User/device/LD_remote.c delete mode 100644 User/device/LD_remote.h delete mode 100644 User/device/dr16.c delete mode 100644 User/device/motor_control.c delete mode 100644 User/device/motor_control.h delete mode 100644 User/device/r12ds.c delete mode 100644 User/device/r12ds.h create mode 100644 User/device/rc.c rename User/device/{dr16.h => rc.h} (56%) delete mode 100644 User/device/remote_control.c delete mode 100644 User/device/remote_control.h delete mode 100644 User/task/r12ds_task.c delete mode 100644 User/task/r12ds_task.h rename User/task/{dr16_task.c => rc_task.c} (68%) diff --git a/MDK-ARM/R2.uvoptx b/MDK-ARM/R2.uvoptx index 7c29790..7424a0e 100644 --- a/MDK-ARM/R2.uvoptx +++ b/MDK-ARM/R2.uvoptx @@ -153,112 +153,7 @@ 0 1 - chassis - - - 1 - 1 - ctrl - - - 2 - 1 - dr16,0x0A - - - 3 - 1 - UP_t,0x0A - - - 4 - 1 - UP,0x0A - - - 5 - 1 - can,0x0A - - - 6 - 1 - up_cmd,0x0A - - - 7 - 1 - rc_ctrl - - - 8 - 1 - up_cmd - - - 9 - 1 - cmd,0x0A - - - 10 - 1 - ctrl,0x0A - - - 11 - 1 - ctrl_up,0x0A - - - 12 - 1 - task_runtime,0x0A - - - 13 - 1 - can,0x0A - - - 14 - 1 - can_rx,0x0A - - - 15 - 1 - can_out,0x0A - - - 16 - 1 - gcan - - - 17 - 1 - raw_tx,0x0A - - - 18 - 1 - raw_rx2,0x0A - - - 19 - 1 - can_rx,0x0A - - - 20 - 1 - can_out - - - 21 - 1 - UP_CAN_out,0x0A + rc_ctrl,0x0A @@ -1222,8 +1117,8 @@ 0 0 0 - ..\User\task\dr16_task.c - dr16_task.c + ..\User\task\up_task.c + up_task.c 0 0 @@ -1234,20 +1129,8 @@ 0 0 0 - ..\User\task\r12ds_task.c - r12ds_task.c - 0 - 0 - - - 8 - 73 - 1 - 0 - 0 - 0 - ..\User\task\up_task.c - up_task.c + ..\User\task\rc_task.c + rc_task.c 0 0 @@ -1261,7 +1144,7 @@ 0 9 - 74 + 73 1 0 0 @@ -1273,7 +1156,7 @@ 9 - 75 + 74 1 0 0 @@ -1285,7 +1168,7 @@ 9 - 76 + 75 1 0 0 @@ -1297,7 +1180,7 @@ 9 - 77 + 76 1 0 0 @@ -1309,7 +1192,7 @@ 9 - 78 + 77 1 0 0 @@ -1321,7 +1204,7 @@ 9 - 79 + 78 1 0 0 @@ -1341,7 +1224,7 @@ 0 10 - 80 + 79 1 0 0 @@ -1353,7 +1236,7 @@ 10 - 81 + 80 1 0 0 @@ -1365,7 +1248,7 @@ 10 - 82 + 81 1 0 0 @@ -1377,7 +1260,7 @@ 10 - 83 + 82 1 0 0 @@ -1389,7 +1272,7 @@ 10 - 84 + 83 1 0 0 @@ -1401,31 +1284,7 @@ 10 - 85 - 1 - 0 - 0 - 0 - ..\User\device\dr16.c - dr16.c - 0 - 0 - - - 10 - 86 - 1 - 0 - 0 - 0 - ..\User\device\r12ds.c - r12ds.c - 0 - 0 - - - 10 - 87 + 84 1 0 0 @@ -1435,17 +1294,29 @@ 0 0 + + 10 + 85 + 1 + 0 + 0 + 0 + ..\User\device\rc.c + rc.c + 0 + 0 + Application/User/USB_DEVICE/App - 0 + 1 0 0 0 11 - 88 + 86 1 0 0 @@ -1457,7 +1328,7 @@ 11 - 89 + 87 1 0 0 @@ -1469,7 +1340,7 @@ 11 - 90 + 88 1 0 0 @@ -1483,13 +1354,13 @@ Application/User/USB_DEVICE/Target - 0 + 1 0 0 0 12 - 91 + 89 1 0 0 @@ -1503,13 +1374,13 @@ Middlewares/USB_Device_Library - 0 + 1 0 0 0 13 - 92 + 90 1 0 0 @@ -1521,7 +1392,7 @@ 13 - 93 + 91 1 0 0 @@ -1533,7 +1404,7 @@ 13 - 94 + 92 1 0 0 @@ -1545,7 +1416,7 @@ 13 - 95 + 93 1 0 0 diff --git a/MDK-ARM/R2.uvprojx b/MDK-ARM/R2.uvprojx index f9d4bc2..ee3c96d 100644 --- a/MDK-ARM/R2.uvprojx +++ b/MDK-ARM/R2.uvprojx @@ -1228,21 +1228,16 @@ 1 ..\User\task\error_detect_task.c - - dr16_task.c - 1 - ..\User\task\dr16_task.c - - - r12ds_task.c - 1 - ..\User\task\r12ds_task.c - up_task.c 1 ..\User\task\up_task.c + + rc_task.c + 1 + ..\User\task\rc_task.c + @@ -1308,21 +1303,16 @@ 1 ..\User\device\vofa.c - - dr16.c - 1 - ..\User\device\dr16.c - - - r12ds.c - 1 - ..\User\device\r12ds.c - GO_M8010_6_Driver.c 1 ..\User\device\GO_M8010_6_Driver.c + + rc.c + 1 + ..\User\device\rc.c + diff --git a/MDK-ARM/R2/R2.axf b/MDK-ARM/R2/R2.axf index 3d40118e6362054cb38ed19a39c72c0b646a14af..801082c6ceb4d02e4f3cbb7677fc3491f5b70f40 100644 GIT binary patch delta 118675 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 ztrAo$QCujX9S=-deadzone&&value<=deadzone) diff --git a/User/Algorithm/user_math.h b/User/Algorithm/user_math.h index 766dc9a..8021299 100644 --- a/User/Algorithm/user_math.h +++ b/User/Algorithm/user_math.h @@ -159,5 +159,5 @@ PolarCoordinate_t addPolarVectors(PolarCoordinate_t v1, PolarCoordinate_t v2); uint8_t average(uint8_t arr[], uint8_t n); int abs_value(int num); - +float expo_map(float value, float expo_factor) ; #endif diff --git a/User/bsp/bsp_usart.h b/User/bsp/bsp_usart.h index cef04b6..4974127 100644 --- a/User/bsp/bsp_usart.h +++ b/User/bsp/bsp_usart.h @@ -7,7 +7,6 @@ #define SBUS_RX_BUF_NUM 50u - #define RC_FRAME_LENGTH 25u typedef enum { diff --git a/User/device/LD_remote.c b/User/device/LD_remote.c deleted file mode 100644 index 14c70bf..0000000 --- a/User/device/LD_remote.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "LD_remote.h" -#include - -#include "bsp_usart.h" -#include "error_detect.h" - -static uint8_t sbus_rx_buf_new[SBUS_RX_BUF_NUM]; // SBUS 数据缓冲区 -static RC_Ctrl_New_t rc_ctrl_new; // SBUS 数据结构 - -/* SBUS 数据解析 */ -static void sbus_to_rc_new(volatile const uint8_t *sbus_buf) { - if (sbus_buf == NULL) return; - - rc_ctrl_new.ch[0] = (sbus_buf[1] | (sbus_buf[2] << 8)) & 0x07FF; - rc_ctrl_new.ch[1] = ((sbus_buf[2] >> 3) | (sbus_buf[3] << 5)) & 0x07FF; - rc_ctrl_new.ch[2] = ((sbus_buf[3] >> 6) | (sbus_buf[4] << 2) | (sbus_buf[5] << 10)) & 0x07FF; - rc_ctrl_new.ch[3] = ((sbus_buf[5] >> 1) | (sbus_buf[6] << 7)) & 0x07FF; - - rc_ctrl_new.sw[0] = ((sbus_buf[6] >> 4) | (sbus_buf[7] << 4)) & 0x07FF; - rc_ctrl_new.sw[1] = ((sbus_buf[7] >> 7) | (sbus_buf[8] << 1) | (sbus_buf[9] << 9)) & 0x07FF; -} - -/* 初始化函数 */ -void RC_New_Init(void) { - HAL_UARTEx_ReceiveToIdle_DMA(&huart3, sbus_rx_buf_new, SBUS_RX_BUF_NUM); -} - -/* 获取数据指针 */ -const RC_Ctrl_New_t* RC_New_GetData(void) { - return &rc_ctrl_new; -} \ No newline at end of file diff --git a/User/device/LD_remote.h b/User/device/LD_remote.h deleted file mode 100644 index 5ee6770..0000000 --- a/User/device/LD_remote.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef LD_H -#define LD_H -#include "user_math.h" - - -#include "main.h" - -/* SBUS ݽṹ */ -typedef struct { - int16_t ch[4]; // 4 ͨ - int16_t sw[8]; // 8 -} RC_Ctrl_New_t; - -/* */ -void RC_New_Init(void); -const RC_Ctrl_New_t* RC_New_GetData(void); - - - -#endif - diff --git a/User/device/cmd.c b/User/device/cmd.c index d73c2f7..316793a 100644 --- a/User/device/cmd.c +++ b/User/device/cmd.c @@ -25,41 +25,18 @@ return 0; } - - static void CMD_RcLogic(const CMD_RC_t *rc, CMD_t *cmd) { - /* 将操纵杆的对应值转换为底盘的控制向量和云台变化的欧拉角 */ -// RC_dr16 , -// RC_r12ds -// - - /*乐迪反馈值转换(-1 -- 1 )范围*/ - -// if(rc->ch_x<0) cmd->Vx =map_fp32(rc->ch_x,-337,0,-1,0); -// else cmd->Vx =map_fp32(rc->ch_x,0,310,0,1); -// -// -// if(rc->ch_y<0) cmd->Vy =map_fp32(rc->ch_y,-260,0,-1,0); -// else cmd->Vy =map_fp32(rc->ch_y,0,312,0,1); - -// if(rc->ch_w<0) cmd->Vw =map_fp32(rc->ch_w,-308,0,-1,0); -// else cmd->Vw =map_fp32(rc->ch_w,0,291,0,1); -// cmd->key_ctrl_l = rc->key [0]; -// cmd->key_ctrl_r = rc->key [1]; -// + cmd->Vx = rc->dr16.ch_r_x; + cmd->Vy = rc->dr16.ch_r_y; + cmd->Vw = rc->dr16.ch_l_x; + cmd->poscamear = rc->dr16.ch_l_y; - cmd->Vx = rc->ch_r_x; - cmd->Vy = rc->ch_r_y; - cmd->Vw = rc->ch_l_x; - - cmd->poscamear = rc->ch_l_y; - - cmd->key_ctrl_l = rc->sw_l; - cmd->key_ctrl_r = rc->sw_r ; + cmd->key_ctrl_l = rc->dr16.sw_l; + cmd->key_ctrl_r = rc->dr16.sw_r ; } @@ -80,7 +57,7 @@ int8_t CMD_ParseRc(CMD_t *cmd,CMD_RC_t *rc){ if (rc == NULL) return -1; /*c当rc丢控时,恢复机器人至默认状态 */ - if ((rc->sw_l == CMD_SW_ERR) || (rc->sw_r == CMD_SW_ERR)) { + if ((rc->dr16.sw_l == CMD_SW_ERR) || (rc->dr16.sw_r == CMD_SW_ERR)) { CMD_RcLostLogic(cmd); } else { CMD_RcLogic(rc, cmd); @@ -123,69 +100,52 @@ int8_t CMD_ParseNuc(CMD_t *cmd,CMD_NUC_t *n){ -/* - 遥控器模式重新分配 - 这一部分没有设置具体的模式名,后期根据需要修改 - 遥控器模式(RC): - 左按键 --- 右按键 - mode1 - up no_mode - mode2 - - - mode3 - down no_mode - mode4 - - mid auto_navi(0x09)雷达导航 - -*/ /*遥控器,上下层通用,按键控制,统一到cmd*/ int8_t CMD_ParseRC(CMD_t *cmd,const CMD_RC_t *rc) { if(cmd == NULL) return -1; - cmd->Vx = rc->ch_r_x; - cmd->Vy = rc->ch_r_y; - cmd->Vw = rc->ch_l_x; + cmd->Vx = rc->dr16.ch_r_x; + cmd->Vy = rc->dr16.ch_r_y; + cmd->Vw = rc->dr16.ch_l_x; - cmd->poscamear = rc->ch_l_y; + cmd->poscamear = rc->dr16.ch_l_y; - cmd->key_ctrl_l = rc->sw_l; - cmd->key_ctrl_r = rc->sw_r ; + cmd->key_ctrl_l = rc->dr16.sw_l; + cmd->key_ctrl_r = rc->dr16.sw_r ; - if ((rc->sw_l == CMD_SW_ERR) || (rc->sw_r == CMD_SW_ERR)) { + if ((rc->dr16.sw_l == CMD_SW_ERR) || (rc->dr16.sw_r == CMD_SW_ERR)) { cmd->CMD_CtrlType =RELAXED; } - else if(rc->sw_l==CMD_SW_UP) + else if(rc->dr16.sw_l==CMD_SW_UP) { cmd ->CMD_CtrlType =RCcontrol; - if(rc->sw_r ==CMD_SW_UP) cmd ->CMD_mode =Pitch; //左上,右上,投篮,设置好的 + if(rc->dr16.sw_r ==CMD_SW_UP) cmd ->CMD_mode =Pitch; //左上,右上,投篮,设置好的 - if(rc->sw_r ==CMD_SW_MID) cmd ->CMD_mode =Normal; //左上,右中,无模式 + if(rc->dr16.sw_r ==CMD_SW_MID) cmd ->CMD_mode =Normal; //左上,右中,无模式 - if(rc->sw_r ==CMD_SW_DOWN) cmd ->CMD_mode =Normal; //左上,右上,手动调整 + if(rc->dr16.sw_r ==CMD_SW_DOWN) cmd ->CMD_mode =Normal; //左上,右上,手动调整 } - else if(rc->sw_l==CMD_SW_MID) + else if(rc->dr16.sw_l==CMD_SW_MID) { cmd ->CMD_CtrlType =AUTO; - if(rc->sw_r ==CMD_SW_UP) cmd ->CMD_mode =AUTO_NAVI; //左中,右中,雷达 + if(rc->dr16.sw_r ==CMD_SW_UP) cmd ->CMD_mode =AUTO_NAVI; //左中,右中,雷达 - if(rc->sw_r ==CMD_SW_MID) cmd ->CMD_mode =Normal; //左中,右中,无模式 + if(rc->dr16.sw_r ==CMD_SW_MID) cmd ->CMD_mode =Normal; //左中,右中,无模式 - if(rc->sw_r ==CMD_SW_DOWN) cmd ->CMD_mode =AUTO_PICK; //左中,右下,视觉 + if(rc->dr16.sw_r ==CMD_SW_DOWN) cmd ->CMD_mode =AUTO_PICK; //左中,右下,视觉 } - else if(rc->sw_l==CMD_SW_DOWN) + else if(rc->dr16.sw_l==CMD_SW_DOWN) { cmd ->CMD_CtrlType =RCcontrol; - if(rc->sw_r ==CMD_SW_UP) cmd ->CMD_mode =Normal; //左下,右上,投篮 - if(rc->sw_r ==CMD_SW_MID) cmd ->CMD_mode =Normal; //左下,右中,无模式 - if(rc->sw_r ==CMD_SW_DOWN) cmd ->CMD_mode =Normal; //左下,右上,无模式 + if(rc->dr16.sw_r ==CMD_SW_UP) cmd ->CMD_mode =Normal; //左下,右上,投篮 + if(rc->dr16.sw_r ==CMD_SW_MID) cmd ->CMD_mode =Normal; //左下,右中,无模式 + if(rc->dr16.sw_r ==CMD_SW_DOWN) cmd ->CMD_mode =Normal; //左下,右上,无模式 } diff --git a/User/device/cmd.h b/User/device/cmd.h index 986e80d..9efab0d 100644 --- a/User/device/cmd.h +++ b/User/device/cmd.h @@ -54,23 +54,36 @@ typedef enum { CMD_SW_MID = 3, CMD_SW_DOWN = 2, } CMD_SwitchPos_t; - +typedef enum{ + RC_DR16, + RC_LD +}rc_type_t; /*遥控器值,使用CMD_RcLogic函数传入CMD_t结构体*/ typedef struct { + + rc_type_t rc_type; + + struct { float ch_l_x; /* 遥控器左侧摇杆横轴值,上为正 */ float ch_l_y; /* 遥控器左侧摇杆纵轴值,右为正 */ float ch_r_x; /* 遥控器右侧摇杆横轴值,上为正 */ float ch_r_y; /* 遥控器右侧摇杆纵轴值,右为正 */ - float ch_res; /* 第五通道值 */ - CMD_SwitchPos_t sw_r; /* 右侧拨杆位置 */ CMD_SwitchPos_t sw_l; /* 左侧拨杆位置 */ - uint16_t key; /* 按键值 */ uint16_t res; /* 保留,未启用 */ + }__attribute__((packed))dr16; + + struct { + fp32 map_ch[4]; + int16_t ch[4]; + int16_t sw[8]; + + }__attribute__((packed))LD; + } __attribute__((packed))CMD_RC_t; diff --git a/User/device/dr16.c b/User/device/dr16.c deleted file mode 100644 index 04454d2..0000000 --- a/User/device/dr16.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - DR16接收机 - -*/ - -/* Includes ----------------------------------------------------------------- */ -#include "dr16.h" - -#include - -#include "bsp_usart.h" -#include "error_detect.h" - - - - -/* Private define ----------------------------------------------------------- */ -#define DR16_CH_VALUE_MIN (364u) -#define DR16_CH_VALUE_MID (1024u) -#define DR16_CH_VALUE_MAX (1684u) - -/* Private macro ------------------------------------------------------------ */ -/* Private typedef ---------------------------------------------------------- */ -/* Private variables -------------------------------------------------------- */ - -static osThreadId_t thread_alert; -uint8_t cbuf[36]; //此处设置为两帧字节的长度 若为一帧会出现乱码的情况 -/* Private function -------------------------------------------------------- */ -static void DR16_RxCpltCallback(void) { - osThreadFlagsSet(thread_alert, SIGNAL_DR16_RAW_REDY); -// detect_hook(DR16_TOE); -} - -static bool DR16_DataCorrupted(const DR16_t *dr16) { - if (dr16 == NULL) return DEVICE_ERR_NULL; - - if ((dr16->data.ch_r_x < DR16_CH_VALUE_MIN) || - (dr16->data.ch_r_x > DR16_CH_VALUE_MAX)) - return true; - - if ((dr16->data.ch_r_y < DR16_CH_VALUE_MIN) || - (dr16->data.ch_r_y > DR16_CH_VALUE_MAX)) - return true; - - if ((dr16->data.ch_l_x < DR16_CH_VALUE_MIN) || - (dr16->data.ch_l_x > DR16_CH_VALUE_MAX)) - return true; - - if ((dr16->data.ch_l_y < 1000u) || - (dr16->data.ch_l_y > DR16_CH_VALUE_MAX)) - return true; - - if (dr16->data.sw_l == 0) return true; - - if (dr16->data.sw_r == 0) return true; - - return false; -} -/* Exported functions ------------------------------------------------------- */ -int8_t DR16_Init(DR16_t *dr16) { - if (dr16 == NULL) return DEVICE_ERR_NULL; - if ((thread_alert = osThreadGetId()) == NULL) return DEVICE_ERR_NULL; - - BSP_UART_RegisterCallback(BSP_UART_REMOTE, BSP_UART_IDLE_LINE_CB, - DR16_RxCpltCallback); - return DEVICE_OK; -} - -int8_t DR16_Restart(void) { - __HAL_UART_DISABLE(BSP_UART_GetHandle(BSP_UART_REMOTE)); - __HAL_UART_ENABLE(BSP_UART_GetHandle(BSP_UART_REMOTE)); - return DEVICE_OK; -} - -int8_t DR16_StartDmaRecv(DR16_t *dr16) { - if (HAL_UARTEx_ReceiveToIdle_DMA(BSP_UART_GetHandle(BSP_UART_REMOTE), - (uint8_t *)cbuf, - sizeof(cbuf)) == HAL_OK) - return DEVICE_OK; - return DEVICE_ERR; -} - -bool DR16_WaitDmaCplt(uint32_t timeout) { - return (osThreadFlagsWait(SIGNAL_DR16_RAW_REDY, osFlagsWaitAll, timeout) == - SIGNAL_DR16_RAW_REDY); -} - -int8_t DR16_ParseRaw(DR16_t *dr16) -{ - if(dr16 ==NULL) return DEVICE_ERR_NULL; - dr16->data.ch_r_x = (cbuf[0] | (cbuf[1] <<8)); - dr16->data.ch_r_y = ((cbuf[1] >> 3)| (cbuf[2] << 5)); - dr16->data.ch_l_x = ((cbuf[2] >>6) | (cbuf[3] << 2) | (cbuf[4] <<10)); - dr16->data.ch_l_y = ((cbuf[4] >>1) | (cbuf[5] <<7)); - dr16->data.sw_r = ((cbuf[5] >>4)); - dr16->data.sw_l = ((cbuf[5] >> 4) & 0x000C) >> 2; - - return 1; -} - -int8_t DR16_ParseRC(const DR16_t *dr16, CMD_RC_t *rc) { - if (dr16 == NULL) return DEVICE_ERR_NULL; - - if (DR16_DataCorrupted(dr16)) { - return DEVICE_ERR; - } else { - memset(rc, 0, sizeof(*rc)); - } - float full_range = (float)(DR16_CH_VALUE_MAX - DR16_CH_VALUE_MIN); - - rc->ch_r_x = 2 * ((float)dr16->data.ch_r_x - DR16_CH_VALUE_MID) / full_range; - rc->ch_r_y = 2 * ((float)dr16->data.ch_r_y - DR16_CH_VALUE_MID) / full_range; - rc->ch_l_x = 2 * ((float)dr16->data.ch_l_x - DR16_CH_VALUE_MID) / full_range; - rc->ch_l_y = 2 * ((float)dr16->data.ch_l_y - DR16_CH_VALUE_MID) / full_range; - - rc->sw_l = (CMD_SwitchPos_t)dr16->data.sw_l; - rc->sw_r = (CMD_SwitchPos_t)dr16->data.sw_r; - - rc->key = dr16->data.key; - -// rc->ch_res = ((float)dr16->data.res - DR16_CH_VALUE_MID) / full_range; - return DEVICE_OK; -} - -int8_t DR16_HandleOffline(const DR16_t *dr16, CMD_RC_t *rc) { - if (dr16 == NULL) return DEVICE_ERR_NULL; - if (rc == NULL) return DEVICE_ERR_NULL; - - (void)dr16; - memset(rc, 0, sizeof(*rc)); - return 0; -} - - - - diff --git a/User/device/motor_control.c b/User/device/motor_control.c deleted file mode 100644 index 560da9f..0000000 --- a/User/device/motor_control.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "motor_control.h" -#include "pid.h" -#include "user_math.h" -#include "device\device.h" -#include "can_use.h" - - diff --git a/User/device/motor_control.h b/User/device/motor_control.h deleted file mode 100644 index 2bf0589..0000000 --- a/User/device/motor_control.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef _MOTOR_CONTROL_H_ -#define _MOTOR_CONTROL_H_ - -#include "struct_typedef.h" -#include "pid.h" - -/*󽮵*/ -typedef struct -{ - uint16_t ecd; - int16_t speed_rpm; - int16_t given_current; - uint16_t temperate; - int16_t last_ecd; - int16_t round_cnt; - int16_t total_angle; - uint16_t offset_ecd; - uint32_t msg_cnt; -} DJmotor_measure_t; - - - -#endif \ No newline at end of file diff --git a/User/device/r12ds.c b/User/device/r12ds.c deleted file mode 100644 index e5bbe97..0000000 --- a/User/device/r12ds.c +++ /dev/null @@ -1,192 +0,0 @@ -/* - 乐迪r12ds遥控器。 - 需要根据实际的遥控器通道修改解析的函数 该遥控器采用sbus 用的uart3 - -*/ - - -/* Includes ----------------------------------------------------------------- */ -#include "r12ds.h" -#include "main.h" -#include "error_detect.h" -#include -#include "cmd.h" -#include "user_math.h" - -#ifdef r12ds_t -extern UART_HandleTypeDef huart3; -extern DMA_HandleTypeDef hdma_usart3_rx; - - - -osThreadId_t thread_alert; - -int buf0ready =0; /*不起作用*/ -int buf1ready =0; - -/* Private function -------------------------------------------------------- */ -static void R12DS_IdleCallback(void) { - static uint16_t this_time_rx_len = 0; - if( (hdma_usart3_rx.Instance->CR & DMA_SxCR_CT) == RESET) - { - //current memory buffer used is memory0 - - //disable dma to change dma register - __HAL_DMA_DISABLE(&hdma_usart3_rx); - - //get received data length, length = set_data_length - remain_length - this_time_rx_len = SBUS_RX_BUF_NUM - hdma_usart3_rx.Instance->NDTR; - - //reset set_data_length - hdma_usart3_rx.Instance->NDTR = SBUS_RX_BUF_NUM; - - //change memory0 to memory1 - hdma_usart3_rx.Instance->CR |= DMA_SxCR_CT; - - //enable dma - __HAL_DMA_ENABLE(&hdma_usart3_rx); - - //1 frame length is correct data - if(this_time_rx_len == RC_FRAME_LENGTH) - { -// osThreadFlagsSet(thread_alert,SIGNAL_R12DS_BUF0_REDY); - buf0ready = 1; -// detect_hook(R12DS_TOE); - } - } - else - { - __HAL_DMA_DISABLE(&hdma_usart3_rx); - - this_time_rx_len = SBUS_RX_BUF_NUM - hdma_usart3_rx.Instance->NDTR; - - hdma_usart3_rx.Instance->NDTR = SBUS_RX_BUF_NUM; - - //change memory1 to memory0 - DMA1_Stream1->CR &= ~(DMA_SxCR_CT); - - __HAL_DMA_ENABLE(&hdma_usart3_rx); - - if(this_time_rx_len == RC_FRAME_LENGTH) - { -// osThreadFlagsSet(thread_alert,SIGNAL_R12DS_BUF1_REDY); - buf1ready = 1; -// detect_hook(R12DS_TOE); - } - } -} - -/* Exported functions ------------------------------------------------------- */ - - -int8_t R12ds_DMA_Init(uint8_t *rx1_buf, uint8_t *rx2_buf, uint16_t dma_buf_num) -{ - if((thread_alert = osThreadGetId()) == NULL ) return DEVICE_ERR_NULL; - //enable the dma transfer for the receiver request - SET_BIT(huart3.Instance->CR3, USART_CR3_DMAR); - - //enable idle interrupt - __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE); - - //disable dma, to change the dma register - __HAL_DMA_DISABLE(&hdma_usart3_rx); - - //disable dma again but why? - //what's the condition? - while(hdma_usart3_rx.Instance->CR & DMA_SxCR_EN) - { - __HAL_DMA_DISABLE(&hdma_usart3_rx); - } - - //?? - hdma_usart3_rx.Instance->PAR = (uint32_t) & (USART3->DR); - - //memory buffer 1 - hdma_usart3_rx.Instance->M0AR = (uint32_t)(rx1_buf); - - //momory buffer 2 - hdma_usart3_rx.Instance->M1AR = (uint32_t)(rx2_buf); - - //data length - hdma_usart3_rx.Instance->NDTR = dma_buf_num; - - //enable double memory buffer - SET_BIT(hdma_usart3_rx.Instance->CR, DMA_SxCR_DBM); - - - //enable dma - __HAL_DMA_ENABLE(&hdma_usart3_rx); - - BSP_UART_RegisterCallback(BSP_UART_REMOTE, BSP_UART_IDLE_LINE_CB, - R12DS_IdleCallback); - - return 1; -} - - - -int8_t sbus_to_rc(volatile const uint8_t *sbus_buf, CMD_RC_t *rc_ctrl) -{ - if (sbus_buf == NULL || rc_ctrl == NULL) - { - return 0; - } - - - rc_ctrl->ch_x = (sbus_buf[1] | (sbus_buf[2] << 8)) & 0x07ff; //Channel 1 x - rc_ctrl->ch_y = ((sbus_buf[2] >> 3) | (sbus_buf[3] << 5)) & 0x07ff; //Channel 2 mul - rc_ctrl->mul= ((sbus_buf[3] >> 6) | (sbus_buf[4] << 2) | //Channel 3 y - (sbus_buf[5] << 10)) &0x07ff; - rc_ctrl->ch_w = ((sbus_buf[5] >> 1) | (sbus_buf[6] << 7)) & 0x07ff; //Channel 4 w - - rc_ctrl->key[0] = ((int16_t)sbus_buf[6] >> 4 | ((int16_t)sbus_buf[7] << 4 )) & 0x07FF; //Channel 5 - rc_ctrl->key[1] = ((int16_t)sbus_buf[7] >> 7 | ((int16_t)sbus_buf[8] << 1 ) | (int16_t)sbus_buf[9] << 9 ) & 0x07FF; //Channel 6 - rc_ctrl->key[2] = ((int16_t)sbus_buf[9] >> 2 | ((int16_t)sbus_buf[10] << 6 )) & 0x07FF;; //Channel 7 - rc_ctrl->key[3] = ((int16_t)sbus_buf[10] >> 5 | ((int16_t)sbus_buf[11] << 3 )) & 0x07FF; //Channel 8 - rc_ctrl->key[4] = ((int16_t)sbus_buf[12] << 0 | ((int16_t)sbus_buf[13] << 8 )) & 0x07FF; //Channel 9 - rc_ctrl->key[5] = ((int16_t)sbus_buf[13] >> 3 | ((int16_t)sbus_buf[14] << 5 )) & 0x07FF; //Channel 10 - rc_ctrl->key[6] = ((int16_t)sbus_buf[14] >> 6 | ((int16_t)sbus_buf[15] << 2 ) | (int16_t)sbus_buf[16] << 10 ) & 0x07FF; //Channel 11 - rc_ctrl->key[7] = ((int16_t)sbus_buf[16] >> 1 | ((int16_t)sbus_buf[17] << 7 )) & 0x07FF; //Channel 12 - - rc_ctrl->ch_y -= RC_CH_VALUE_OFFSET; - rc_ctrl->ch_x -= RC_CH_VALUE_OFFSET; - rc_ctrl->mul -= RC_CH_VALUE_OFFSET; - rc_ctrl->ch_w -= RC_CH_VALUE_OFFSET; - - - - rc_ctrl->ch_y -= 4; //y(-694,693) - rc_ctrl->ch_x += 3; //x(-693,694) - rc_ctrl->mul = rc_ctrl->mul; //m(-518,843) - rc_ctrl->ch_w += 4; //w(-694,693) - - rc_ctrl->key[2] = map_fp32(rc_ctrl->key[2],306,1694,1694,306); - rc_ctrl->key[3] = map_fp32(rc_ctrl->key[3],306,1694,1694,306); - rc_ctrl->ch_x = map_fp32(rc_ctrl->ch_x,700,-800,-700,700); //x - rc_ctrl->ch_y = map_fp32(rc_ctrl->ch_y,-900,796,700,-700); //y - rc_ctrl->mul = map_fp32(rc_ctrl->mul,-632,901,25,0); //m - rc_ctrl->ch_w = map_fp32(rc_ctrl->ch_w,-820,780,-700,700); - rc_ctrl->ch_w = 0.5f*(rc_ctrl->ch_w); - rc_ctrl->ch_x = -0.5f*(rc_ctrl->ch_x); - rc_ctrl->ch_y = 0.5f*(rc_ctrl->ch_y); -// -//̀死区(-5,5) - if(rc_ctrl->ch_y>-15&&rc_ctrl->ch_y<15) rc_ctrl->ch_y=0; - if(rc_ctrl->ch_x>-15&&rc_ctrl->ch_x<15) rc_ctrl->ch_x=0; - if(rc_ctrl->mul>=0&&rc_ctrl->mul<=3) rc_ctrl->mul=0; - if(rc_ctrl->ch_w>-15&&rc_ctrl->ch_w<15) rc_ctrl->ch_w=0; - - - if( (((int16_t)sbus_buf[16] >> 1 | ((int16_t)sbus_buf[17] << 7 )) & 0x07FF )<380) rc_ctrl->offline =1; //遥控器掉线 - else rc_ctrl->offline =0; - - - return 0; -} - - - - - -#endif - diff --git a/User/device/r12ds.h b/User/device/r12ds.h deleted file mode 100644 index 111c3bc..0000000 --- a/User/device/r12ds.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef _R12DS_H -#define _R12DS_H - -#include -#include "device.h" -#include "bsp_usart.h" -#include "cmd.h" - - -#ifdef r12ds_t - -#define RC_FRAME_LENGTH 25u - - -#define RC_CH_VALUE_OFFSET ((uint16_t)1024) - - - -int8_t R12ds_DMA_Init(uint8_t *rx1_buf, uint8_t *rx2_buf, uint16_t dma_buf_num); - -int8_t sbus_to_rc(volatile const uint8_t *sbus_buf,CMD_RC_t *rc_ctrl); - - - - - -#endif - -#endif diff --git a/User/device/rc.c b/User/device/rc.c new file mode 100644 index 0000000..8c15501 --- /dev/null +++ b/User/device/rc.c @@ -0,0 +1,211 @@ +/* + DR16接收机 + +*/ + +/* Includes ----------------------------------------------------------------- */ +#include "rc.h" + +#include + +#include "bsp_usart.h" +#include "error_detect.h" + + +#define DR16 +//#define LD_t + +#ifdef DR16 +#define FRAME_LEN 36 + +#elif defined(LD_t) + +#define FRAME_LEN 25 + +#endif +/* Private define ----------------------------------------------------------- */ + +#define RC_CH_VALUE_MIN ((uint16_t)364) +#define RC_CH_VALUE_MID ((uint16_t)1024) +#define RC_CH_VALUE_MAX ((uint16_t)1684) + +static osThreadId_t thread_alert; +static uint8_t cbuf[FRAME_LEN]; //此处设置为两帧字节的长度 若为一帧会出现乱码的情况 + +/*通用,初始化,串口回调注册,dma数据接收*/ +int8_t RC_SBUS_Init(void ) +{ + if ((thread_alert = osThreadGetId()) == NULL) return DEVICE_ERR_NULL; + + BSP_UART_RegisterCallback(BSP_UART_REMOTE, BSP_UART_IDLE_LINE_CB, + RC_SBUS_RxCpltCallback); + return DEVICE_OK; +} + +static void RC_SBUS_RxCpltCallback(void) { + osThreadFlagsSet(thread_alert, SIGNAL_DR16_RAW_REDY); +// detect_hook(DR16_TOE); +} +int8_t RC_SBUS_Restart(void) { + __HAL_UART_DISABLE(BSP_UART_GetHandle(BSP_UART_REMOTE)); + __HAL_UART_ENABLE(BSP_UART_GetHandle(BSP_UART_REMOTE)); + return DEVICE_OK; +} +int8_t RC_SBUS_StartDmaRecv(void) { + + if (HAL_UARTEx_ReceiveToIdle_DMA(BSP_UART_GetHandle(BSP_UART_REMOTE), + (uint8_t *)cbuf, + sizeof(cbuf)) == HAL_OK) + return DEVICE_OK; + return DEVICE_ERR; +} +bool RC_SBUS_WaitDmaCplt(uint32_t timeout) { + return (osThreadFlagsWait(SIGNAL_DR16_RAW_REDY, osFlagsWaitAll, timeout) == + SIGNAL_DR16_RAW_REDY); +} +/*乐迪数据解析 */ +int8_t LD_ParseRaw( RC_ctrl_t *rc_ctrl) +{ + rc_ctrl->ch[0] = (cbuf[1] | (cbuf[2] << 8)) & 0x07ff; //!< Channel 0 + rc_ctrl->ch[1] = ((cbuf[2] >> 3) | (cbuf[3] << 5)) & 0x07ff; //!< Channel 1 + rc_ctrl->ch[2] = ((cbuf[3] >> 6) | (cbuf[4] << 2) | //!< Channel 2 + (cbuf[5] << 10)) &0x07ff; + rc_ctrl->ch[3] = ((cbuf[5] >> 1) | (cbuf[6] << 7)) & 0x07ff; //!< Channel 3 + + rc_ctrl->sw[0] = ((int16_t)cbuf[6] >> 4 | ((int16_t)cbuf[7] << 4 )) & 0x07FF; + rc_ctrl->sw[1] = ((int16_t)cbuf[7] >> 7 | ((int16_t)cbuf[8] << 1 ) | (int16_t)cbuf[9] << 9 ) & 0x07FF; + rc_ctrl->sw[2] = ((int16_t)cbuf[9] >> 2 | ((int16_t)cbuf[10] << 6 )) & 0x07FF;; + rc_ctrl->sw[3] = ((int16_t)cbuf[10] >> 5 | ((int16_t)cbuf[11] << 3 )) & 0x07FF; + rc_ctrl->sw[4] = ((int16_t)cbuf[12] << 0 | ((int16_t)cbuf[13] << 8 )) & 0x07FF; + rc_ctrl->sw[5] = ((int16_t)cbuf[13] >> 3 | ((int16_t)cbuf[14] << 5 )) & 0x07FF; + rc_ctrl->sw[6] = ((int16_t)cbuf[14] >> 6 | ((int16_t)cbuf[15] << 2 ) | (int16_t)cbuf[16] << 10 ) & 0x07FF; + rc_ctrl->sw[7] = ((int16_t)cbuf[16] >> 1 | ((int16_t)cbuf[17] << 7 )) & 0x07FF; + + rc_ctrl->ch[0] -= RC_CH_VALUE_MID; + rc_ctrl->ch[1] -= RC_CH_VALUE_MID; + rc_ctrl->ch[2] -= RC_CH_VALUE_MID; + rc_ctrl->ch[3] -= RC_CH_VALUE_MID; + + + rc_ctrl->ch[0] += 24; //y(-694,693)左右 + rc_ctrl->ch[1] = -rc_ctrl->ch[1]-24; //x(-693,694)前后 + rc_ctrl->ch[2] = -rc_ctrl->ch[2]+764; //m(95,1482)油门 + rc_ctrl->ch[3] += 24; //w(-694,693)旋转 + + rc_ctrl->ch[1] = map_int(rc_ctrl->ch[1],-693,694,-700,700); //x映射到(-700,700) + rc_ctrl->ch[0] = map_int(rc_ctrl->ch[0],-694,693,-700,700); //y映射到(-700,700) + rc_ctrl->ch[3] = 0.5*(rc_ctrl->ch[3]); //w + +// //死区(-30,30) +// if(rc_ctrl->ch[0]>-50&&rc_ctrl->ch[0]<50) rc_ctrl->ch[0]=0; +// if(rc_ctrl->ch[1]>-50&&rc_ctrl->ch[1]<50) rc_ctrl->ch[1]=0; +// if(rc_ctrl->ch[2]>-50&&rc_ctrl->ch[2]<50) rc_ctrl->ch[2]=0; +// if(rc_ctrl->ch[3]>-50&&rc_ctrl->ch[3]<50) rc_ctrl->ch[3]=0; +// + + rc_ctrl->map_ch[0]=map_fp32(rc_ctrl->ch[0],-719,680,-1,1); + rc_ctrl->map_ch[1]=map_fp32(rc_ctrl->ch[1],-567,832,-1,1); + rc_ctrl->map_ch[2]=map_fp32(rc_ctrl->ch[2],95,1482,0,1); + rc_ctrl->map_ch[3]=map_fp32(rc_ctrl->ch[3],-317,375,-1,1); + + rc_ctrl->map_ch[0]=expo_map(rc_ctrl->map_ch[0], 0.7f); + rc_ctrl->map_ch[1]=expo_map(rc_ctrl->map_ch[1],0.7f); + rc_ctrl->map_ch[2]=expo_map(rc_ctrl->map_ch[2],0.7f); + rc_ctrl->map_ch[3]=expo_map(rc_ctrl->map_ch[3],0.7f); + + //死区(-30,30) + if(rc_ctrl->map_ch[0]>-0.05f&&rc_ctrl->map_ch[0]<0.05f) rc_ctrl->map_ch[0]=0; + if(rc_ctrl->map_ch[1]>-0.05f&&rc_ctrl->map_ch[1]<0.05f) rc_ctrl->map_ch[1]=0; + if(rc_ctrl->map_ch[2]>-0.05f&&rc_ctrl->map_ch[2]<0.05f) rc_ctrl->map_ch[2]=0; + if(rc_ctrl->map_ch[3]>-0.05f&&rc_ctrl->map_ch[3]<0.05f) rc_ctrl->map_ch[3]=0; + return 1; + +} +/*dr16数据解析+校验 */ +static bool DR16_DataCorrupted(const DR16_t *dr16) { + if (dr16 == NULL) return DEVICE_ERR_NULL; + + if ((dr16->data.ch_r_x < RC_CH_VALUE_MIN) || + (dr16->data.ch_r_x > RC_CH_VALUE_MAX)) + return true; + + if ((dr16->data.ch_r_y < RC_CH_VALUE_MIN) || + (dr16->data.ch_r_y > RC_CH_VALUE_MAX)) + return true; + + if ((dr16->data.ch_l_x < RC_CH_VALUE_MIN) || + (dr16->data.ch_l_x > RC_CH_VALUE_MAX)) + return true; + + if ((dr16->data.ch_l_y < 1000u) || + (dr16->data.ch_l_y > RC_CH_VALUE_MAX)) + return true; + + if (dr16->data.sw_l == 0) return true; + + if (dr16->data.sw_r == 0) return true; + + return false; +} +int8_t DR16_ParseRaw(DR16_t *dr16) +{ + if(dr16 ==NULL) return DEVICE_ERR_NULL; + dr16->data.ch_r_x = (cbuf[0] | (cbuf[1] <<8)); + dr16->data.ch_r_y = ((cbuf[1] >> 3)| (cbuf[2] << 5)); + dr16->data.ch_l_x = ((cbuf[2] >>6) | (cbuf[3] << 2) | (cbuf[4] <<10)); + dr16->data.ch_l_y = ((cbuf[4] >>1) | (cbuf[5] <<7)); + dr16->data.sw_r = ((cbuf[5] >>4)); + dr16->data.sw_l = ((cbuf[5] >> 4) & 0x000C) >> 2; + + return 1; +} +int8_t RC_ParseRC( DR16_t *dr16, RC_ctrl_t *rc_ctrl, CMD_RC_t *rc) { + if (dr16 == NULL) return DEVICE_ERR_NULL; + if (rc_ctrl == NULL) return DEVICE_ERR_NULL; +#ifdef DR16 + /*DR16部分*/ + rc->rc_type=RC_DR16; + DR16_ParseRaw(dr16); + if (DR16_DataCorrupted(dr16)) { + return DEVICE_ERR; + } else { + memset(rc, 0, sizeof(*rc)); + } + + float full_range = (float)(RC_CH_VALUE_MAX - RC_CH_VALUE_MIN); + + rc->dr16.ch_r_x = 2 * ((float)dr16->data.ch_r_x - RC_CH_VALUE_MID) / full_range; + rc->dr16.ch_r_y = 2 * ((float)dr16->data.ch_r_y - RC_CH_VALUE_MID) / full_range; + rc->dr16.ch_l_x = 2 * ((float)dr16->data.ch_l_x - RC_CH_VALUE_MID) / full_range; + rc->dr16.ch_l_y = 2 * ((float)dr16->data.ch_l_y - RC_CH_VALUE_MID) / full_range; + + rc->dr16.sw_l = (CMD_SwitchPos_t)dr16->data.sw_l; + rc->dr16.sw_r = (CMD_SwitchPos_t)dr16->data.sw_r; + + rc->dr16.key = dr16->data.key; + +// rc->ch_res = ((float)dr16->data.res - DR16_CH_VALUE_MID) / full_range; + + +#elif defined(LD_t) + + /*乐迪*/ + rc->rc_type=RC_LD; + LD_ParseRaw(rc_ctrl); + + memcpy(&rc->LD, rc_ctrl, sizeof(RC_ctrl_t)); +#endif + return DEVICE_OK; + +} + + +/*离线处理*/ +int8_t DR16_HandleOffline(const DR16_t *dr16, CMD_RC_t *rc) { + if (dr16 == NULL) return DEVICE_ERR_NULL; + if (rc == NULL) return DEVICE_ERR_NULL; + + (void)dr16; + memset(rc, 0, sizeof(*rc)); + return 0; +} diff --git a/User/device/dr16.h b/User/device/rc.h similarity index 56% rename from User/device/dr16.h rename to User/device/rc.h index 2b99679..f39fe24 100644 --- a/User/device/dr16.h +++ b/User/device/rc.h @@ -1,9 +1,9 @@ -#ifndef DR16_h -#define DR16_h +#ifndef RC_h +#define RC_h /* Includes ----------------------------------------------------------------- */ #include - +#include "bsp_usart.h" #include "cmd.h" #include "user_math.h" #include "device.h" @@ -11,11 +11,6 @@ /* Exported constants ------------------------------------------------------- */ /* Exported macro ----------------------------------------------------------- */ /* Exported types ----------------------------------------------------------- */ - - - - - typedef __packed struct { uint16_t ch_r_x : 11; @@ -37,17 +32,39 @@ typedef struct { DR16_Data_t data; } DR16_t; -/* Exported functions prototypes -------------------------------------------- */ -int8_t DR16_Init(DR16_t *dr16); -int8_t DR16_Restart(void); -int8_t DR16_StartDmaRecv(DR16_t *dr16); -bool DR16_WaitDmaCplt(uint32_t timeout); + +//#define SBUS_RX_BUF_NUM 25u + +//#define RC_FRAME_LENGTH 18u + + + +typedef __packed struct +{ + fp32 map_ch[4]; + int16_t ch[4]; + int16_t sw[8]; + +} RC_ctrl_t; + + + + + + + + +int8_t RC_SBUS_Init(void ); +static void RC_SBUS_RxCpltCallback(void) ; +int8_t RC_SBUS_Restart(void) ; +int8_t RC_SBUS_StartDmaRecv(void) ; +bool RC_SBUS_WaitDmaCplt(uint32_t timeout) ; +int8_t LD_ParseRaw( RC_ctrl_t *rc_ctrl); +static bool DR16_DataCorrupted(const DR16_t *dr16) ; int8_t DR16_ParseRaw(DR16_t *dr16); -int8_t DR16_ParseRC(const DR16_t *dr16, CMD_RC_t *rc); -int8_t DR16_HandleOffline(const DR16_t *dr16, CMD_RC_t *rc); +int8_t RC_ParseRC( DR16_t *dr16, RC_ctrl_t *rc_ctrl, CMD_RC_t *rc) ; +int8_t DR16_HandleOffline(const DR16_t *dr16, CMD_RC_t *rc) ; #endif - - diff --git a/User/device/remote_control.c b/User/device/remote_control.c deleted file mode 100644 index aa5e3ed..0000000 --- a/User/device/remote_control.c +++ /dev/null @@ -1,185 +0,0 @@ -/** - ****************************(C) COPYRIGHT 2019 DJI**************************** - * @file remote_control.c/h - * @brief ңңͨSBUSЭ鴫䣬DMA䷽ʽԼCPU - * ԴôڿжͬʱṩһЩDMA - * ķʽ֤Ȳεȶԡ - * @note ͨжfreeRTOS - * @history - * Version Date Author Modification - * V1.0.0 Dec-01-2019 RM 1. - * - @verbatim - ============================================================================== - - ============================================================================== - @endverbatim - ****************************(C) COPYRIGHT 2019 DJI**************************** - */ - -#include "remote_control.h" -#include "main.h" - - -extern UART_HandleTypeDef huart3; -extern DMA_HandleTypeDef hdma_usart3_rx; - -static void sbus_to_rc(volatile const uint8_t *sbus_buf, RC_ctrl_t *rc_ctrl); - -RC_ctrl_t rc_ctrl; -static uint8_t sbus_rx_buf[2][RC_FRAME_LENGTH]; -uint8_t remote_ready = 0;//ң׼ - -void remote_control_init(void) -{ - RC_init(sbus_rx_buf[0], sbus_rx_buf[1], RC_FRAME_LENGTH); -} - - -//ж -void USART3_IRQHandler(void) -{ - //have received data ??? - if(huart3.Instance->SR & UART_FLAG_RXNE) - { - __HAL_UART_CLEAR_FEFLAG(&huart3); - } - else if(USART3->SR & UART_FLAG_IDLE) - { - - static uint16_t this_time_rx_len = 0; - __HAL_UART_CLEAR_PEFLAG(&huart3); - - if( (hdma_usart3_rx.Instance->CR & DMA_SxCR_CT) == RESET) - { - //current memory buffer used is memory0 - - //disable dma to change dma register - __HAL_DMA_DISABLE(&hdma_usart3_rx); - - //get received data length, length = set_data_length - remain_length - this_time_rx_len = SBUS_RX_BUF_NUM - hdma_usart3_rx.Instance->NDTR; - - //reset set_data_length - hdma_usart3_rx.Instance->NDTR = SBUS_RX_BUF_NUM; - - //change memory0 to memory1 - hdma_usart3_rx.Instance->CR |= DMA_SxCR_CT; - - //enable dma - __HAL_DMA_ENABLE(&hdma_usart3_rx); - - //1 frame length is correct data - if(this_time_rx_len == RC_FRAME_LENGTH) - { - sbus_to_rc(sbus_rx_buf[0], &rc_ctrl); - } - } - else - { - __HAL_DMA_DISABLE(&hdma_usart3_rx); - - this_time_rx_len = SBUS_RX_BUF_NUM - hdma_usart3_rx.Instance->NDTR; - - hdma_usart3_rx.Instance->NDTR = SBUS_RX_BUF_NUM; - - //change memory1 to memory0 - DMA1_Stream1->CR &= ~(DMA_SxCR_CT); - - __HAL_DMA_ENABLE(&hdma_usart3_rx); - - if(this_time_rx_len == RC_FRAME_LENGTH) - { - sbus_to_rc(sbus_rx_buf[1], &rc_ctrl); - } - } - } -} - -static void sbus_to_rc(volatile const uint8_t *sbus_buf, RC_ctrl_t *rc_ctrl) -{ - if (sbus_buf == NULL || rc_ctrl == NULL) - { - return; - } - - rc_ctrl->ch[1] = (sbus_buf[1] | (sbus_buf[2] << 8)) & 0x07ff; //Channel 1 - rc_ctrl->ch[2] = ((sbus_buf[2] >> 3) | (sbus_buf[3] << 5)) & 0x07ff; //Channel 2 - rc_ctrl->ch[0] = ((sbus_buf[3] >> 6) | (sbus_buf[4] << 2) | //Channel 3 - (sbus_buf[5] << 10)) &0x07ff; - rc_ctrl->ch[3] = ((sbus_buf[5] >> 1) | (sbus_buf[6] << 7)) & 0x07ff; //Channel 4 - - rc_ctrl->sw[0] = ((int16_t)sbus_buf[6] >> 4 | ((int16_t)sbus_buf[7] << 4 )) & 0x07FF; //Channel 5 - rc_ctrl->sw[1] = ((int16_t)sbus_buf[7] >> 7 | ((int16_t)sbus_buf[8] << 1 ) | (int16_t)sbus_buf[9] << 9 ) & 0x07FF; //Channel 6 - rc_ctrl->sw[2] = ((int16_t)sbus_buf[9] >> 2 | ((int16_t)sbus_buf[10] << 6 )) & 0x07FF;; //Channel 7 - rc_ctrl->sw[3] = ((int16_t)sbus_buf[10] >> 5 | ((int16_t)sbus_buf[11] << 3 )) & 0x07FF; //Channel 8 - rc_ctrl->sw[4] = ((int16_t)sbus_buf[12] << 0 | ((int16_t)sbus_buf[13] << 8 )) & 0x07FF; //Channel 9 - rc_ctrl->sw[5] = ((int16_t)sbus_buf[13] >> 3 | ((int16_t)sbus_buf[14] << 5 )) & 0x07FF; //Channel 10 - rc_ctrl->sw[6] = ((int16_t)sbus_buf[14] >> 6 | ((int16_t)sbus_buf[15] << 2 ) | (int16_t)sbus_buf[16] << 10 ) & 0x07FF; //Channel 11 - rc_ctrl->sw[7] = ((int16_t)sbus_buf[16] >> 1 | ((int16_t)sbus_buf[17] << 7 )) & 0x07FF; //Channel 12 - - rc_ctrl->ch[0] -= RC_CH_VALUE_OFFSET; - rc_ctrl->ch[1] -= RC_CH_VALUE_OFFSET; - rc_ctrl->ch[2] -= RC_CH_VALUE_OFFSET; - rc_ctrl->ch[3] -= RC_CH_VALUE_OFFSET; - - -// //ң - rc_ctrl->ch[0] += 20; //y(-694,693) - rc_ctrl->ch[1] += 20; //x(-693,694) - rc_ctrl->ch[2] = -rc_ctrl->ch[2]+144; //m(-518,843) - rc_ctrl->ch[3] += 4; //w(-694,693) - - rc_ctrl->sw[2] = map(rc_ctrl->sw[2],306,1694,1694,306); - rc_ctrl->sw[3] = map(rc_ctrl->sw[3],306,1694,1694,306); -// rc_ctrl->ch[1] = map(rc_ctrl->ch[1],656,-656,-700,700); //x - rc_ctrl->ch[0] = map(rc_ctrl->ch[0],-800,796,700,-700); //y - rc_ctrl->ch[2] = map(rc_ctrl->ch[2],-632,901,25,0); //m - rc_ctrl->ch[3] = map(rc_ctrl->ch[3],-820,780,-700,700); - rc_ctrl->ch[3] = 0.5*(rc_ctrl->ch[3]); - rc_ctrl->ch[1] = 0.5*(rc_ctrl->ch[1]); - rc_ctrl->ch[0] = 0.5*(rc_ctrl->ch[0]); -// - //(-30,30) - if(rc_ctrl->ch[0]>-14&&rc_ctrl->ch[0]<10) rc_ctrl->ch[0]=0; - if(rc_ctrl->ch[1]>-30&&rc_ctrl->ch[1]<20) rc_ctrl->ch[1]=0; - if(rc_ctrl->ch[2]>=0&&rc_ctrl->ch[2]<=3) rc_ctrl->ch[2]=0; - if(rc_ctrl->ch[3]>-22&&rc_ctrl->ch[3]<22) rc_ctrl->ch[3]=0; - - remote_ready = 1; -} - - - -int map(int x, int in_min, int in_max, int out_min, int out_max) //ӳ亯 -{ - return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; -} - - -/* - - - - -306 306 - sw[] sw[7] -1694 1694 - -306 306 -sw[6] sw[4] -1694 1694 - -306 306 306 306 -sw[0] sw[2] sw[1]:306-1694 sw[5]:306-1694 sw[]1000 sw[3] -1694 1694 1694 1694 - 710 - 688 1425 - | | - | | - 54 -616------ch[3]770 -354---------ch[0] 339 0 - | | - | | - ch[2] ch[1] - _699 38 -*/ diff --git a/User/device/remote_control.h b/User/device/remote_control.h deleted file mode 100644 index 5971266..0000000 --- a/User/device/remote_control.h +++ /dev/null @@ -1,42 +0,0 @@ -/** - ****************************(C) COPYRIGHT 2016 DJI**************************** - * @file remote_control.c/h - * @brief ңңͨSBUSЭ鴫䣬DMA䷽ʽԼCPU - * ԴôڿжͬʱṩһЩDMA - * ķʽ֤Ȳεȶԡ - * @note - * @history - * Version Date Author Modification - * V1.0.0 Dec-26-2018 RM 1. - * - @verbatim - ============================================================================== - - ============================================================================== - @endverbatim - ****************************(C) COPYRIGHT 2016 DJI**************************** - */ -#ifndef REMOTE_CONTROL_H -#define REMOTE_CONTROL_H -#include "struct_typedef.h" -#include "bsp_rc.h" - -#define SBUS_RX_BUF_NUM 50u - -#define RC_FRAME_LENGTH 25u - -#define RC_CH_VALUE_OFFSET ((uint16_t)1024) - -typedef struct -{ - int16_t ch[4]; - int16_t sw[8]; - -}__attribute__((packed)) RC_ctrl_t; - -extern void remote_control_init(void); -static void sbus_to_rc(volatile const uint8_t *sbus_buf, RC_ctrl_t *rc_ctrl); -int map(int x, int in_min, int in_max, int out_min, int out_max); //ӳ亯 - - -#endif diff --git a/User/task/error_detect_task.c b/User/task/error_detect_task.c index f8e8992..8ace272 100644 --- a/User/task/error_detect_task.c +++ b/User/task/error_detect_task.c @@ -51,7 +51,6 @@ */ #include "error_detect.h" #include "user_task.h" -#include "r12ds.h" #include "nuc.h" /** * @brief init error_list, assign offline_time, online_time, priority. diff --git a/User/task/init.c b/User/task/init.c index 7300d1a..e63b787 100644 --- a/User/task/init.c +++ b/User/task/init.c @@ -35,10 +35,8 @@ void Task_Init(void *argument) { osThreadNew(Task_AttiEsti, NULL, &attr_atti_esti); task_runtime.thread.chassis = osThreadNew(Task_Chassis, NULL, &attr_chassis); -// task_runtime.thread.r12ds = -// osThreadNew(Task_r12ds,NULL,&attr_r12ds); - task_runtime.thread.dr16 = - osThreadNew(Task_dr16,NULL,&attr_dr16); + task_runtime.thread.rc = + osThreadNew(Task_rc,NULL,&attr_rc); task_runtime.thread.can = osThreadNew(Task_can,NULL,&attr_can); diff --git a/User/task/r12ds_task.c b/User/task/r12ds_task.c deleted file mode 100644 index 3e5aa3a..0000000 --- a/User/task/r12ds_task.c +++ /dev/null @@ -1,82 +0,0 @@ -#include "r12ds.h" -#include "cmsis_os.h" -#include "user_task.h" -#include - - -#ifdef r12ds_t - -#ifdef DEBUG - -CMD_RC_t cmd_rc; - -uint8_t sbus_rx_buf[2][RC_FRAME_LENGTH]; - -#else - -static CMD_RC_t cmd_rc; - -#endif - - - -CMD_RC_t *R12ds_DataGet(){ - return &cmd_rc; -} - - -void R12ds_HandleOffline(void) { - CMD_RC_t *rc; - rc = R12ds_DataGet(); - memset(rc, 0, sizeof(rc->ch_x) + sizeof(rc->mul) + sizeof(rc->ch_y) + sizeof(rc->ch_w) + sizeof(rc->key)); -} - -#endif - -void Task_r12ds(void *argument) -{ - (void)argument; - - - const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_R12DS; -#ifdef r12ds_t - - R12ds_DMA_Init(sbus_rx_buf[0],sbus_rx_buf[1],50); -#endif - - uint32_t tick = osKernelGetTickCount(); - - - while (1) - { - -#ifdef r12ds_t - -#ifdef DEBUG - - task_runtime.stack_water_mark.r12ds = - osThreadGetStackSpace(osThreadGetId()); - -#endif - - sbus_to_rc(sbus_rx_buf[0],&cmd_rc); - - if(cmd_rc.offline ==1) - { - R12ds_HandleOffline(); - } - - osMessageQueueReset(task_runtime.msgq.cmd.raw.rc); - osMessageQueuePut(task_runtime.msgq.cmd.raw.rc,(&cmd_rc),0,0); -#endif - - tick += delay_tick; /* 计算下一个唤醒时*/ - - osDelay(10); - - } - - - - - } diff --git a/User/task/r12ds_task.h b/User/task/r12ds_task.h deleted file mode 100644 index ebf5d49..0000000 --- a/User/task/r12ds_task.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef _R12DS_TASK_H -#define _R12DS_TASK_H - - - - - - - - - - - - - -#endif \ No newline at end of file diff --git a/User/task/dr16_task.c b/User/task/rc_task.c similarity index 68% rename from User/task/dr16_task.c rename to User/task/rc_task.c index d465e15..5584765 100644 --- a/User/task/dr16_task.c +++ b/User/task/rc_task.c @@ -5,26 +5,24 @@ /* Includes ----------------------------------------------------------------- */ #include -#include "dr16.h" +#include "rc.h" #include "user_task.h" /* Private typedef ---------------------------------------------------------- */ /* Private define ----------------------------------------------------------- */ /* Private macro ------------------------------------------------------------ */ /* Private variables -------------------------------------------------------- */ - - - #ifdef DEBUG DR16_t dr16; CMD_RC_t cmd_rc; +RC_ctrl_t ld; #else static DR16_t dr16; static CMD_RC_t cmd_rc; + static RC_ctrl_t cc; + #endif - - /* Private function --------------------------------------------------------- */ /* Exported functions ------------------------------------------------------- */ @@ -33,31 +31,22 @@ static CMD_RC_t cmd_rc; * * \param argument 未使用 */ -void Task_dr16(void *argument) { +void Task_rc(void *argument) { (void)argument; /* 未使用,消除警告 */ - const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_DR16; - uint32_t tick = osKernelGetTickCount(); - - - - DR16_Init(&dr16); /* 初始化dr16 */ + RC_SBUS_Init(); /* 初始化 */ while (1) { - - #ifdef DEBUG /* */ - task_runtime.stack_water_mark.dr16 = osThreadGetStackSpace(osThreadGetId()); + task_runtime.stack_water_mark.rc = osThreadGetStackSpace(osThreadGetId()); #endif - /* 开启DMA */ - DR16_StartDmaRecv(&dr16); + RC_SBUS_StartDmaRecv(); - if (DR16_WaitDmaCplt(30)) { - /* 转换 */ - DR16_ParseRaw(&dr16); - DR16_ParseRC(&dr16, &cmd_rc); + if (RC_SBUS_WaitDmaCplt(30)) { + + RC_ParseRC(&dr16,&ld, &cmd_rc); } else { /* 处理遥控器离线 */ DR16_HandleOffline(&dr16, &cmd_rc); @@ -65,10 +54,4 @@ void Task_dr16(void *argument) { osMessageQueueReset(task_runtime.msgq.cmd.raw.rc); osMessageQueuePut(task_runtime.msgq.cmd.raw.rc, &cmd_rc, 0, 0); } - - - tick += delay_tick; /* 计算下一个唤醒时*/ - - osDelay(10); - } diff --git a/User/task/user_task.c b/User/task/user_task.c index 569ce05..8c37e77 100644 --- a/User/task/user_task.c +++ b/User/task/user_task.c @@ -58,7 +58,7 @@ const osThreadAttr_t attr_error_detect = { .stack_size = 128 *4, }; -const osThreadAttr_t attr_dr16 = { +const osThreadAttr_t attr_rc = { .name = "dr16", .priority = osPriorityRealtime, .stack_size = 128 *4, diff --git a/User/task/user_task.h b/User/task/user_task.h index 02fdf1a..2108081 100644 --- a/User/task/user_task.h +++ b/User/task/user_task.h @@ -21,7 +21,7 @@ #define TASK_FREQ_NUC (500u) #define TASK_FREQ_CAN (1000u) #define TASK_FREQ_R12DS (1000u) -#define TASK_FREQ_DR16 (1000u) +#define TASK_FREQ_RC (1000u) #define TASK_FREQ_ERROR_DTC (3u) @@ -40,8 +40,7 @@ typedef struct { osThreadId_t chassis; osThreadId_t up; - osThreadId_t dr16; - osThreadId_t r12ds; + osThreadId_t rc; osThreadId_t can; osThreadId_t cmd; osThreadId_t nuc; @@ -111,8 +110,7 @@ typedef struct { UBaseType_t can; UBaseType_t atti_esti; - UBaseType_t dr16; - UBaseType_t r12ds; + UBaseType_t rc; UBaseType_t cmd; UBaseType_t nuc; @@ -124,8 +122,7 @@ typedef struct { float chassis; float can; float atti_esti; - float r12ds; - float dr16; + float rc; float up; float cmd; @@ -137,8 +134,7 @@ typedef struct { float chassis; float can; float atti_esti; - float r12ds; - float dr16; + float rc; float up; float cmd; @@ -166,7 +162,7 @@ extern const osThreadAttr_t attr_nuc; extern const osThreadAttr_t attr_error_detect; -extern const osThreadAttr_t attr_dr16; +extern const osThreadAttr_t attr_rc; //extern const osThreadAttr_t attr_r12ds; @@ -179,17 +175,13 @@ void Task_Chassis(void *argument); void Task_up(void *argument); - void Task_can(void *argument); void Task_cmd(void *argument); void Task_nuc(void *argument); - void Task_error_detect(void *argument); -void Task_r12ds(void *argument); - -void Task_dr16(void *argument); +void Task_rc(void *argument); #endif