119 lines
3.2 KiB
C
119 lines
3.2 KiB
C
#ifndef __GO_M8010_6_H
|
||
#define __GO_M8010_6_H
|
||
|
||
#include "struct_typedef.h"
|
||
#pragma pack(1)
|
||
/**
|
||
* @brief 电机模式控制信息
|
||
*
|
||
*/
|
||
typedef struct
|
||
{
|
||
uint8_t id : 4; // 电机ID: 0,1...,13,14 15表示向所有电机广播数据(此时无返回)
|
||
uint8_t status : 3; // 工作模式: 0.锁定 1.FOC闭环 2.编码器校准 3.保留
|
||
uint8_t reserve : 1; // 保留位
|
||
} RIS_Mode_t; // 控制模式 1Byte
|
||
|
||
/**
|
||
* @brief 电机状态控制信息
|
||
*
|
||
*/
|
||
typedef struct
|
||
{
|
||
int16_t tor_des; // 期望关节输出扭矩 unit: N.m (q8)
|
||
int16_t spd_des; // 期望关节输出速度 unit: rad/s (q8)
|
||
int32_t pos_des; // 期望关节输出位置 unit: rad (q15)
|
||
int16_t k_pos; // 期望关节刚度系数 unit: -1.0-1.0 (q15)
|
||
int16_t k_spd; // 期望关节阻尼系数 unit: -1.0-1.0 (q15)
|
||
|
||
} RIS_Comd_t; // 控制参数 12Byte
|
||
|
||
/**
|
||
* @brief 电机状态反馈信息
|
||
*
|
||
*/
|
||
typedef struct
|
||
{
|
||
int16_t torque; // 实际关节输出扭矩 unit: N.m (q8)
|
||
int16_t speed; // 实际关节输出速度 unit: rad/s (q8)
|
||
int32_t pos; // 实际关节输出位置 unit: rad (q15)
|
||
int8_t temp; // 电机温度: -128~127°C
|
||
uint8_t MError : 3; // 电机错误标识: 0.正常 1.过热 2.过流 3.过压 4.编码器故障 5-7.保留
|
||
uint16_t force : 12; // 足端气压传感器数据 12bit (0-4095)
|
||
uint8_t none : 1; // 保留位
|
||
} RIS_Fbk_t; // 状态数据 11Byte
|
||
|
||
/**
|
||
* @brief 控制数据包格式
|
||
*
|
||
*/
|
||
typedef struct
|
||
{
|
||
uint8_t head[2]; // 包头 2Byte
|
||
RIS_Mode_t mode; // 电机控制模式 1Byte
|
||
RIS_Comd_t comd; // 电机期望数据 12Byte
|
||
uint16_t CRC16; // CRC 2Byte
|
||
|
||
} RIS_ControlData_t; // 主机控制命令 17Byte
|
||
|
||
/**
|
||
* @brief 电机反馈数据包格式
|
||
*
|
||
*/
|
||
typedef struct
|
||
{
|
||
uint8_t head[2]; // 包头 2Byte
|
||
RIS_Mode_t mode; // 电机控制模式 1Byte
|
||
RIS_Fbk_t fbk; // 电机反馈数据 11Byte
|
||
uint16_t CRC16; // CRC 2Byte
|
||
|
||
} RIS_MotorData_t; // 电机返回数据 16Byte
|
||
|
||
#pragma pack()
|
||
|
||
/// @brief 电机指令结构体
|
||
typedef struct
|
||
{
|
||
unsigned short id; // 电机ID,15代表广播数据包
|
||
unsigned short mode; // 0:空闲 1:FOC控制 2:电机标定
|
||
float T; // 期望关节的输出力矩(电机本身的力矩)(Nm)
|
||
float W; // 期望关节速度(电机本身的速度)(rad/s)
|
||
float Pos; // 期望关节位置(rad)
|
||
float K_P; // 关节刚度系数(0-25.599)
|
||
float K_W; // 关节速度系数(0-25.599)
|
||
|
||
|
||
} GO_MotorCmd_t;
|
||
|
||
/// @brief 电机反馈结构体
|
||
typedef struct
|
||
{
|
||
unsigned char motor_id; // 电机ID
|
||
unsigned char mode; // 0:空闲 1:FOC控制 2:电机标定
|
||
int Temp; // 温度
|
||
int MError; // 错误码
|
||
float T; // 当前实际电机输出力矩(电机本身的力矩)(Nm)
|
||
float W; // 当前实际电机速度(电机本身的速度)(rad/s)
|
||
float Pos; // 当前电机位置(rad)
|
||
int correct; // 接收数据是否完整(1完整,0不完整)
|
||
int footForce; // 足端力传感器原始数值
|
||
|
||
uint16_t calc_crc;
|
||
uint32_t timeout; // 通讯超时 数量
|
||
uint32_t bad_msg; // CRC校验错误 数量
|
||
RIS_MotorData_t motor_recv_data; // 电机接收数据结构体
|
||
|
||
} GO_MotorData_t;
|
||
|
||
void modify_data(GO_MotorCmd_t *motor_s);
|
||
void extract_data(GO_MotorData_t *motor_r);
|
||
GO_MotorData_t *get_GO_measure_point(void);
|
||
void GO_M8010_send_data( GO_MotorCmd_t *cmd);
|
||
void USART6_RxCompleteCallback(void );
|
||
|
||
|
||
|
||
|
||
|
||
#endif /*__GO_M8010_6_H */
|