69 lines
2.5 KiB
C
69 lines
2.5 KiB
C
#ifndef _DRIVE_RS04_H_
|
||
#define _DRIVE_RS04_H_
|
||
|
||
|
||
#define MASTER_CANID 0xFD
|
||
|
||
#define PI 3.1415926
|
||
|
||
#define MOTOR_RxCAN_Mask 0x1F00FFFF //电机CAN接收掩码 移除故障位
|
||
|
||
// 最大允许的单步变化量 (A)
|
||
#define MAX_STEP 1.0f // 单步最大变化量 (A),从5A开始
|
||
#define MAX_DI_DT 1000.0f // 最大变化率 (A/s),从5000A/s开始
|
||
|
||
|
||
#define LIMIT_SPEED_INDEX 0x7017//CSP的速度
|
||
#define LOC_REF_INDEX 0x7016//CSP的位置
|
||
#define IQ_REF_INDEX 0x7006//电流模式电流索引
|
||
#define SPD_REF 0x700A//速度模式 速度值
|
||
|
||
#define LIMIT_CUR 0X7018//速度位置模式电流限制
|
||
|
||
|
||
|
||
#define RUM_MODE 0x7005//mode模式
|
||
|
||
#define OPERATION_MODE 0 // 运控模式
|
||
#define POSITION_MODE_PP 1 // 位置模式 (PP - Profile Position)
|
||
#define VELOCITY_MODE 2 // 速度模式
|
||
#define CURRENT_MODE 3 // 电流模式
|
||
#define POSITION_MODE_CSP 5 // 位置模式 (CSP - Cyclic Synchronous Position)
|
||
|
||
// 角度量程定义 (对应Byte0~1: 当前角度)
|
||
#define ANGLE_RANGE_MIN (-4.0f * PI) // 最小角度: -4π 弧度
|
||
#define ANGLE_RANGE_MAX (4.0f * PI) // 最大角度: 4π 弧度
|
||
|
||
// 角速度量程定义 (对应Byte2~3: 当前角速度)
|
||
#define RS02_ANGULAR_VELOCITY_MAX 20.0f // RS02型号最大角速度: 20 rad/s
|
||
#define RS04_ANGULAR_VELOCITY_MAX 15.0f // RS04型号最大角速度: 15 rad/s
|
||
|
||
|
||
|
||
|
||
|
||
#define MOTOR_VELOCITY_DEADZONE 0.1f// 死区
|
||
#define MOTOR_ANGLE_DEADZONE 0.01f// 死区
|
||
|
||
#define SWAP_ENDIAN_16(x) ((((x) & 0xFF) << 8) | (((x) >> 8) & 0xFF))
|
||
#define SWAP_ENDIAN_32(x) (((x) << 24) | (((x) & 0xFF00) << 8) | (((x) >> 8) & 0xFF00) | ((x) >> 24))
|
||
|
||
|
||
|
||
float constrain(float value, float min_val, float max_val);
|
||
float convertPhysical(uint16_t raw_value, float min, float max, float deadzone);
|
||
uint32_t floatToUint32(float num);
|
||
int8_t motorDisable(uint8_t master_id, uint8_t motor_id, StrTxCanFrame *unsdodata);
|
||
int8_t motorEnable(uint8_t master_id, uint8_t motor_id, StrTxCanFrame *unsdodata);
|
||
int8_t setMotorMode(uint8_t master_id, uint8_t motor_id, StrTxCanFrame *unsdodata, uint8_t mode);
|
||
int8_t setMotorWrite(uint8_t master_id, uint8_t motor_id, StrTxCanFrame *unsdodata, uint16_t index, float ref);
|
||
float dynamic_current_limit(float *last_command, float target_current, float delta_time);
|
||
|
||
|
||
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif // _DRIVE_RS04_H_
|