/** * @file emm_v5.h * @brief Emm_V5.0 步进闭环电机驱动器 - ESP-IDF 组件 * @author 移植自 Arduino 版本 (原作者: ZHANGDATOU) * * 通信协议: UART, 115200bps, 8N1 * 使用方式: * Emm_V5_Init(UART_NUM_1, GPIO_NUM_6, GPIO_NUM_7); */ #ifndef EMM_V5_H #define EMM_V5_H #include #include #include "driver/uart.h" #include "driver/gpio.h" #include "esp_log.h" #ifdef __cplusplus extern "C" { #endif /* ============================================================ * 可配置常量 * ============================================================ */ #define EMM_V5_UART_BAUDRATE 115200 #define EMM_V5_UART_BUF_SIZE 256 /* LED 指示 (GPIO2 为多数 ESP32 板载 LED) */ #define EMM_V5_LED_GPIO GPIO_NUM_2 /* 接收超时时间 (毫秒) */ #define EMM_V5_RX_TIMEOUT_MS 100 /* ============================================================ * 系统参数枚举 (与 Arduino 版本一致) * ============================================================ */ typedef enum { S_VER = 0, /* 读取固件版本和对应的硬件版本 */ S_RL = 1, /* 读取相电阻和相电感 */ S_PID = 2, /* 读取PID参数 */ S_VBUS = 3, /* 读取总线电压 */ S_CPHA = 5, /* 读取相电流 */ S_ENCL = 7, /* 读取经过线性化校准后的编码器值 */ S_TPOS = 8, /* 读取电机目标位置角度 */ S_VEL = 9, /* 读取电机实时转速 */ S_CPOS = 10, /* 读取电机实时位置角度 */ S_PERR = 11, /* 读取电机位置误差角度 */ S_FLAG = 13, /* 读取使能/到位/堵转状态标志位 */ S_Conf = 14, /* 读取驱动参数 */ S_State = 15, /* 读取系统状态参数 */ S_ORG = 16, /* 读取正在回零/回零失败状态标志位 */ } EmmSysParams_t; /* ============================================================ * API 函数声明 * ============================================================ */ /** * @brief 初始化 UART 和 LED GPIO * @param port UART 端口号, 如 UART_NUM_1 * @param tx_pin TX 引脚, 如 GPIO_NUM_6 * @param rx_pin RX 引脚, 如 GPIO_NUM_7 */ void Emm_V5_Init(uart_port_t port, int tx_pin, int rx_pin); void Emm_V5_Reset_CurPos_To_Zero(uint8_t addr); void Emm_V5_Reset_Clog_Pro(uint8_t addr); void Emm_V5_Read_Sys_Params(uint8_t addr, EmmSysParams_t s); void Emm_V5_Modify_Ctrl_Mode(uint8_t addr, bool svF, uint8_t ctrl_mode); void Emm_V5_En_Control(uint8_t addr, bool state, bool snF); void Emm_V5_Vel_Control(uint8_t addr, uint8_t dir, uint16_t vel, uint8_t acc, bool snF); void Emm_V5_Pos_Control(uint8_t addr, uint8_t dir, uint16_t vel, uint8_t acc, uint32_t clk, bool raF, bool snF); void Emm_V5_Stop_Now(uint8_t addr, bool snF); void Emm_V5_Synchronous_motion(uint8_t addr); void Emm_V5_Origin_Set_O(uint8_t addr, bool svF); void Emm_V5_Origin_Modify_Params(uint8_t addr, bool svF, uint8_t o_mode, uint8_t o_dir, uint16_t o_vel, uint32_t o_tm, uint16_t sl_vel, uint16_t sl_ma, uint16_t sl_ms, bool potF); void Emm_V5_Origin_Trigger_Return(uint8_t addr, uint8_t o_mode, bool snF); void Emm_V5_Origin_Interrupt(uint8_t addr); uint8_t Emm_V5_Receive_Data(uint8_t *rxCmd, uint8_t maxLen); #ifdef __cplusplus } #endif #endif /* EMM_V5_H */