59 lines
1.7 KiB
C
59 lines
1.7 KiB
C
/**
|
|
* @file main.c
|
|
* @brief Emm_V5.0 步进闭环电机驱动演示 (ESP-IDF)
|
|
*
|
|
* 硬件接线:
|
|
* ESP32 TX (GPIO6) -> 电机 RX
|
|
* ESP32 RX (GPIO7) -> 电机 TX
|
|
* ESP32 GND -> 电机 GND
|
|
*/
|
|
|
|
#include "emm_v5.h"
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
|
|
void app_main(void)
|
|
{
|
|
uint8_t rx_buf[128] = {0};
|
|
uint8_t rx_len;
|
|
|
|
/* 初始化驱动 (UART1, TX=GPIO6, RX=GPIO7, LED=GPIO2) */
|
|
Emm_V5_Init(UART_NUM_1, GPIO_NUM_6, GPIO_NUM_7);
|
|
|
|
/* 上电延时 2 秒, 等待电机闭环初始化完毕 */
|
|
ESP_LOGI("MAIN", "等待电机初始化...");
|
|
vTaskDelay(pdMS_TO_TICKS(2000));
|
|
|
|
/* ---- 速度模式演示 ---- */
|
|
ESP_LOGI("MAIN", "发送速度控制命令: 地址1, CW, 1000RPM, 加速度10");
|
|
Emm_V5_Vel_Control(1, 0, 100, 10, false);
|
|
|
|
/* 接收电机返回的数据 */
|
|
rx_len = Emm_V5_Receive_Data(rx_buf, sizeof(rx_buf));
|
|
|
|
/* 验证校验字节 (0x6B), 点亮/熄灭 LED */
|
|
if (rx_len > 0 && rx_buf[rx_len - 1] == 0x6B) {
|
|
gpio_set_level(EMM_V5_LED_GPIO, 1);
|
|
ESP_LOGI("MAIN", "通信正常 (校验通过, LED亮)");
|
|
} else {
|
|
gpio_set_level(EMM_V5_LED_GPIO, 0);
|
|
ESP_LOGW("MAIN", "通信异常 (校验失败, LED灭)");
|
|
}
|
|
|
|
/* 打印返回的原始数据 (调试用, 每个字节+1 避免与电机地址冲突) */
|
|
ESP_LOGI("MAIN", "返回数据长度: %d", rx_len);
|
|
if (rx_len > 0) {
|
|
printf("返回数据(+1偏移): ");
|
|
for (int i = 0; i < rx_len; i++) {
|
|
printf("%02X ", rx_buf[i] + 1);
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
ESP_LOGI("MAIN", "演示完成, 程序挂起");
|
|
while (1) {
|
|
vTaskDelay(pdMS_TO_TICKS(1000));
|
|
}
|
|
}
|
|
|