159 lines
5.0 KiB
C
159 lines
5.0 KiB
C
/**
|
||
****************************(C) COPYRIGHT 2019 DJI****************************
|
||
* @file can_receive.c/h
|
||
* @brief there is CAN interrupt function to receive motor data,
|
||
* and CAN send function to send motor current to control motor.
|
||
* 这里是CAN中断接收函数,接收电机数据,CAN发送函数发送电机电流控制电机.
|
||
* @note
|
||
* @history
|
||
* Version Date Author Modification
|
||
* V1.0.0 Dec-26-2018 RM 1. done
|
||
* V1.1.0 Nov-11-2019 RM 1. support hal lib
|
||
*
|
||
@verbatim
|
||
==============================================================================
|
||
|
||
==============================================================================
|
||
@endverbatim
|
||
****************************(C) COPYRIGHT 2019 DJI****************************
|
||
*/
|
||
|
||
#ifndef CAN_RECEIVE_H
|
||
#define CAN_RECEIVE_H
|
||
|
||
#include "struct_typedef.h"
|
||
|
||
#define CHASSIS_CAN hcan1
|
||
#define GIMBAL_CAN hcan2
|
||
|
||
/* CAN send and receive ID */
|
||
typedef enum
|
||
{
|
||
CAN_CHASSIS_ALL_ID = 0x200,
|
||
CAN_3508_M1_ID = 0x201,
|
||
CAN_3508_M2_ID = 0x202,
|
||
CAN_3508_M3_ID = 0x203,
|
||
CAN_3508_M4_ID = 0x204,
|
||
|
||
CAN_YAW_MOTOR_ID = 0x205,
|
||
CAN_PIT_MOTOR_ID = 0x206,
|
||
CAN_TRIGGER_MOTOR_ID = 0x207,
|
||
CAN_GIMBAL_ALL_ID = 0x1FF,
|
||
|
||
} can_msg_id_e;
|
||
|
||
//rm motor data
|
||
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;
|
||
} motor_measure_t;
|
||
|
||
//rm motor data
|
||
|
||
/**
|
||
* @brief send control current of motor (0x205, 0x206, 0x207, 0x208)
|
||
* @param[in] yaw: (0x205) 6020 motor control current, range [-30000,30000]
|
||
* @param[in] pitch: (0x206) 6020 motor control current, range [-30000,30000]
|
||
* @param[in] shoot: (0x207) 2006 motor control current, range [-10000,10000]
|
||
* @param[in] rev: (0x208) reserve motor control current
|
||
* @retval none
|
||
*/
|
||
/**
|
||
* @brief 发送电机控制电流(0x205,0x206,0x207,0x208)
|
||
* @param[in] yaw: (0x205) 6020电机控制电流, 范围 [-30000,30000]
|
||
* @param[in] pitch: (0x206) 6020电机控制电流, 范围 [-30000,30000]
|
||
* @param[in] shoot: (0x207) 2006电机控制电流, 范围 [-10000,10000]
|
||
* @param[in] rev: (0x208) 保留,电机控制电流
|
||
* @retval none
|
||
*/
|
||
extern void CAN_cmd_gimbal(int16_t yaw, int16_t pitch, int16_t shoot, int16_t rev);
|
||
|
||
/**
|
||
* @brief send CAN packet of ID 0x700, it will set chassis motor 3508 to quick ID setting
|
||
* @param[in] none
|
||
* @retval none
|
||
*/
|
||
/**
|
||
* @brief 发送ID为0x700的CAN包,它会设置3508电机进入快速设置ID
|
||
* @param[in] none
|
||
* @retval none
|
||
*/
|
||
extern void CAN_cmd_chassis_reset_ID(void);
|
||
|
||
/**
|
||
* @brief send control current of motor (0x201, 0x202, 0x203, 0x204)
|
||
* @param[in] motor1: (0x201) 3508 motor control current, range [-16384,16384]
|
||
* @param[in] motor2: (0x202) 3508 motor control current, range [-16384,16384]
|
||
* @param[in] motor3: (0x203) 3508 motor control current, range [-16384,16384]
|
||
* @param[in] motor4: (0x204) 3508 motor control current, range [-16384,16384]
|
||
* @retval none
|
||
*/
|
||
/**
|
||
* @brief 发送电机控制电流(0x201,0x202,0x203,0x204)
|
||
* @param[in] motor1: (0x201) 3508电机控制电流, 范围 [-16384,16384]
|
||
* @param[in] motor2: (0x202) 3508电机控制电流, 范围 [-16384,16384]
|
||
* @param[in] motor3: (0x203) 3508电机控制电流, 范围 [-16384,16384]
|
||
* @param[in] motor4: (0x204) 3508电机控制电流, 范围 [-16384,16384]
|
||
* @retval none
|
||
*/
|
||
extern void CAN_cmd_chassis(int16_t motor1, int16_t motor2, int16_t motor3, int16_t motor4);
|
||
|
||
/**
|
||
* @brief return the yaw 6020 motor data point
|
||
* @param[in] none
|
||
* @retval motor data point
|
||
*/
|
||
/**
|
||
* @brief 返回yaw 6020电机数据指针
|
||
* @param[in] none
|
||
* @retval 电机数据指针
|
||
*/
|
||
extern const motor_measure_t *get_yaw_gimbal_motor_measure_point(void);
|
||
|
||
/**
|
||
* @brief return the pitch 6020 motor data point
|
||
* @param[in] none
|
||
* @retval motor data point
|
||
*/
|
||
/**
|
||
* @brief 返回pitch 6020电机数据指针
|
||
* @param[in] none
|
||
* @retval 电机数据指针
|
||
*/
|
||
extern const motor_measure_t *get_pitch_gimbal_motor_measure_point(void);
|
||
|
||
/**
|
||
* @brief return the trigger 2006 motor data point
|
||
* @param[in] none
|
||
* @retval motor data point
|
||
*/
|
||
/**
|
||
* @brief 返回拨弹电机 2006电机数据指针
|
||
* @param[in] none
|
||
* @retval 电机数据指针
|
||
*/
|
||
extern const motor_measure_t *get_trigger_motor_measure_point(void);
|
||
|
||
/**
|
||
* @brief return the chassis 3508 motor data point
|
||
* @param[in] i: motor number,range [0,3]
|
||
* @retval motor data point
|
||
*/
|
||
/**
|
||
* @brief 返回底盘电机 3508电机数据指针
|
||
* @param[in] i: 电机编号,范围[0,3]
|
||
* @retval 电机数据指针
|
||
*/
|
||
extern const motor_measure_t *get_chassis_motor_measure_point(uint8_t i);
|
||
void CAN2_board_to_board_send(void);
|
||
|
||
#endif
|