KmdFoc 指令结构
大约 26 分钟KmdFoc使用指南
KmdFoc 指令结构
合理的设置参数,对于FOC的稳定和高效运行有着不可忽视的作用,我们不应该只满足于自己做的东西仅限于玩具的层次,在此应当尽可能的发挥它的性能和价值,在此我无法像你过多的解释 PID
、低通滤波、锁相环 、 Clark
、 Park
变换等的知识,希望可以自行了解相关内容,这可以帮助你更好的使用 KmdFoc
,甚至于你也可以尝试设计自己的 Foc驱动器
。
Important
- can数据帧中的 uint8_t格式的 buffer[0-3],buffer[4-7],分别对应32位的范型数据(int,uint32_t,float)pData[0],pData[1],数据按小端模式(数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中)。
HAL_KMD_MOTOR_DISABLE
Note
- 用户可以通过此命令失能Foc控制。
HAL_KMD_MOTOR_CTR
Note
- 用户可以通过此命令设置电机状态,在函数 hal_kmd_motor_receive_callback 中会利用pData[0]作为二级命令进行进一步的操作,主要包含以下设置。
- 发送值:
- pData[0] ->> pData[0]的低16位表示二级ID tHalMotorCmd = pData[0]&0XFF
- pData[1] ->> 0
- 返回值:
- pData[0] = [(result<<16)|(tHalMotorCmd)]
- result表示指令结果返回,为0表示正常,非0表示失败
- tHalMotorCmd
- pData[1] = [float\int...]
HAL_MOTOR_DISABLE
Note
- 失能电机时,会返回当前的位置,数据位于pData[1]。
- 返回值:
- pData[1] = 当前位置
HAL_MOTOR_ENABLE
Note
- 使能电机时,Foc控制器会稳定在当前位置,并返回当前的位置,数据位于pData[1]。
- 返回值:
- pData[1] = 当前位置
HAL_MOTOR_ERROR_REPORT
Note
- 该数据帧是主动上报的,不能发送指令进行获取,值得注意的是,对于主动上报类型必须在设置通信方式后才能主动上报(也就是必须在获取版本号之后)。
- 该消息在发生错误后会主动上报
- 返回值:
- pData[1] = (((uint16_t)pFocFsm->state) << 16) | (pFocFsm->motor_err & 0XFFFF);
- state ->>当前运行状态
- motor_err ->>错误标志
Important
motor_err实际表示含义
typedef enum eHalMotorError
{
MOTOR_ERR_OVER_VOLTAGE = 0,
MOTOR_ERR_UNDER_VOLTAGE = 1,
MOTOR_ERR_OVER_SPEED = 2,
MOTOR_ERR_OVER_CURRENT = 3,
MOTOR_ERR_ENCODER = 4,
MOTOR_ERR_CAN_CONFLICT = 5,
MOTOR_ERR_HANLDER = 15,
MOTOR_ERR_NUM = 16,//此位无效
}tHalMotorError;
// Errors
#define ERR_OVER_VOLTAGE ((uint16_t)1 << MOTOR_ERR_OVER_VOLTAGE)
#define ERR_UNDER_VOLTAGE ((uint16_t)1 << MOTOR_ERR_UNDER_VOLTAGE)
#define ERR_OVER_SPEED ((uint16_t)1 << MOTOR_ERR_OVER_SPEED)
#define ERR_OVER_CURRENT ((uint16_t)1 << MOTOR_ERR_OVER_CURRENT)
#define ERR_ENCODER ((uint16_t)1 << MOTOR_ERR_ENCODER)
#define ERR_CAN_CONFLICT ((uint16_t)1 << MOTOR_ERR_CAN_CONFLICT)
#define ERR_HANLDER_IRQ ((uint16_t)1 << MOTOR_ERR_HANLDER)
HAL_MOTOR_ERROR_RESET
Note
- 清除电机错误状态。
- 返回值:
- pData[1] = 0
HAL_MOTOR_GET_STAT
Note
- 获取电机状态。
- 返回值:
- pData[1] = (((uint16_t)pFocFsm->state) << 16) | (pFocFsm->motor_err & 0XFFFF);
- state ->>当前运行状态
- motor_err ->>错误标志
HAL_MOTOR_CALIBRATION_START
Note
- 开始校准。
- 返回值:
- pData[1] = 0
HAL_MOTOR_CALIBRATION_ABORT
Note
- 停止校准。
- 返回值:
- pData[1] = 0
HAL_MOTOR_CONFIGS_UPDATA
Note
- 保存参数。
- 返回值:
- pData[1] = 0
HAL_MOTOR_CONFIGS_RESET_ALL
Note
- 复位所有参数。
- 返回值:
- pData[1] = 0
HAL_KMD_CALIBRATION_REPORT
Note
- 报告校准。
- 校准数据为校准过程中主动上报,其前提是已经初始化通信方式。
- 校准结果数据处理在 hal_kmd_cali_receive_callback 获取。
- 发送值:
- 无需发送
- 返回值:
- pData[0] = [(result<<16)|(cali_report_id)]
- result 始终为0
- cali_report_id
- pData[1] = [float\int...]
HAL_CALIBRATION_ERROR = 0
Note
- 校准错误上报。
- 返回值:
- pData[1] = mCalibError,int //mCalibError为校准错误标志 0表示正常
HAL_CALIBRATION_RES = 1, //电阻
Note
- 校准结果电阻阻值上报。
- 返回值:
- pData[1] = 电阻值,float
HAL_CALIBRATION_IND = 2, //电感
Note
- 校准结果电感值上报。
- 返回值:
- pData[1] = 电感值,float
HAL_CALIBRATION_PAIRS = 3, //极对数
Note
- 校准结果极对数上报。
- 返回值:
- pData[1] = 极对数,int
HAL_CALIBRATION_DIR = 4, //极性
Note
- 校准结果极性上报。
- 返回值:
- pData[1] = 极性,int
HAL_CALIBRATION_OFFSET = 5, //偏移
Note
- 校准结果编码器偏移上报。
- 返回值:
- pData[1] = 编码器偏移,int
HAL_CALIBRATION_POSITION = 6, //电机位置
Note
- 校准过程电机位置上报。
- 返回值:
- pData[1] = 电机当前位置,float
HAL_CALIBRATION_END = 7, //校准结束
Note
- 校准结束校准结果通知。
- 返回值:
- pData[1] = mCalibError,int //mCalibError为校准错误标志 0表示正常
HAL_CALIBRATION_OFFSET_LUT = 10,//校准数据头
Note
- 校准结束上报校准结果数组。
- cali_report_id = HAL_CALIBRATION_OFFSET_LUT+i;(i<128)
- 返回值:
- pData[1] = offset_lut[i],int //编码器校准数组
HAL_KMD_READY_SET_POSITION
Note
- 设置目标位置 ->返回值 [float,0]
- 发送值:
- pData[0] = 设置目标位置,float
- pData[1] = 0
- 返回值:
- pData[0] = 当前目标位置,float
- pData[1] = 0
HAL_KMD_READY_SET_VELOCITY
Note
- 设置目标转速 ->返回值 [float,0]
- 发送值:
- pData[0] = 设置目标转速,float
- pData[1] = 0
- 返回值:
- pData[0] = 当前目标转速,float
- pData[1] = 0
HAL_KMD_READY_SET_CURRENT
Note
- 设置目标电流 ->返回值 [float,0]
- 发送值:
- pData[0] = 设置目标电流,float
- pData[1] = 0
- 返回值:
- pData[0] = 当前目标电流,float
- pData[1] = 0
HAL_KMD_GET_POSITION
Note
- 目标位置,实际位置 ->返回值 [float,float]
- 发送值:
- pData[0] = 0
- pData[1] = 0
- 返回值:
- pData[0] = 目标位置
- pData[1] = 实际位置
HAL_KMD_GET_VELOCITY
Note
- 目标转速,实际转速 ->返回值 [float,float]
- 发送值:
- pData[0] = 0
- pData[1] = 0
- 返回值:
- pData[0] = 目标转速
- pData[1] = 实际转速
HAL_KMD_GET_CURRENT
Note
- 目标电流,实际电流 ->返回值 [float,float]
- 发送值:
- pData[0] = 0
- pData[1] = 0
- 返回值:
- pData[0] = 目标电流
- pData[1] = 实际电流
HAL_KMD_GET_FOCBUS
Note
- 总线电压,实际电压 ->返回值 [float,float]
- 发送值:
- pData[0] = 0
- pData[1] = 0
- 返回值:
- pData[0] = 总线电压
- pData[1] = 实际电压
HAL_KMD_SET_CONFIG
Note
- 设置参数 ->返回值 [(result<<16)|(tHalUsrConfigsCmd),实际值(int/float)]
- 发送值:
- pData[0] = tHalUsrConfigsCmd
- pData[1] = 设置参数值,float\int
- 返回值:
- pData[0] = (0<<16)|tHalUsrConfigsCmd
- pData[1] = 实际值(int/float)
HAL_KMD_GET_CONFIG
Note
- 获取参数 ->返回值 [(result<<16)|(tHalUsrConfigsCmd),实际值(int/float)]
- 发送值:
- pData[0] = tHalUsrConfigsCmd
- pData[1] = 0
- 返回值:
- pData[0] = (0<<16)|tHalUsrConfigsCmd
- pData[1] = 实际值(int/float)
HAL_KMD_GET_FW_VERSION
Note
- 获取电机版本号
- 发送值:
- pData[0] = 0
- pData[1] = 0
- 返回值:
- pData[0] = (version[0]) | (version[1] << 16)
- pData[1] = (version[2]) | (version[3] << 16)
HAL_KMD_FSM_HEARTBEAT0
Note
- 报告电机状态 0,在设置上报数据和心跳周期后将自动的进行周期性上报,以减少发送获取信息请求占用一定的数据通信带宽。
- 无需发送
- 返回值:
- pData[0] = (((uint16_t)pFocFsm->state) << 16) | (pFocFsm->motor_err & 0XFFFF)
- pData[1] = 实际位置
HAL_KMD_POS_HEARTBEAT1
Note
- 报告位置信息 1,在设置上报数据和心跳周期后将自动的进行周期性上报,以减少发送获取信息请求占用一定的数据通信带宽。
- 无需发送
- 返回值:
- pData[0] = 目标位置
- pData[1] = 实际位置
HAL_KMD_VEL_HEARTBEAT2
Note
- 报告速度信息 2,在设置上报数据和心跳周期后将自动的进行周期性上报,以减少发送获取信息请求占用一定的数据通信带宽。
- 返回值:
- pData[0] = 目标转速
- pData[1] = 实际转速
HAL_KMD_CUR_HEARTBEAT3
Note
- 报告电流信息 3,在设置上报数据和心跳周期后将自动的进行周期性上报,以减少发送获取信息请求占用一定的数据通信带宽。
- 返回值:
- pData[0] = 目标电流
- pData[1] = 实际电流
HAL_KMD_BUS_HEARTBEAT4
Note
- 报告总线信息 4,在设置上报数据和心跳周期后将自动的进行周期性上报,以减少发送获取信息请求占用一定的数据通信带宽。
- 返回值:
- pData[0] = 总线电压
- pData[1] = 实际电压
Important
- HAL_KMD_FSM_HEARTBEAT0~HAL_KMD_BUS_HEARTBEAT4 为主动上报,对于主动上报类型都必须在初始化通信方式(也就是发送获取版本号之后才能触发),同时HAL_KMD_FSM_HEARTBEAT0~HAL_KMD_BUS_HEARTBEAT4的命令可以通过设置user_config数据进行配置,HAL_USER_CONFIG_CAN_HEARTBEAT_MS 命令会设置上报周期,非0值将启动上报,设备端会周期性检查使能的上报数据位,并对使能的数据进行周期性上报,而使能位则通过HAL_USER_CONFIG_CAN_HEARTBEAT_CH进行数据选择,更详细的请查阅user_config参数设置内容。