actuator应用层基本完成
This commit is contained in:
1 parent
32a3a87ef2
commit
a226b15413
9 files changed
+1081
-44
No files matched your search
@@ -5,6 +5,7 @@
|
||||
|
||||
#include "emm_v5.h"
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "esp_timer.h"
|
||||
@@ -161,6 +162,18 @@ void Emm_V5_Pos_Control(uint8_t addr, uint8_t dir, uint16_t vel, uint8_t acc,
|
||||
Emm_V5_Send(cmd, 13);
|
||||
}
|
||||
|
||||
void Emm_V5_Pos_Control_Angle(uint8_t addr, uint8_t dir, uint16_t vel,
|
||||
uint8_t acc, float angle_deg, bool raF, bool snF)
|
||||
{
|
||||
/* 负角度 → 取绝对值 + 翻转方向 */
|
||||
float abs_deg = fabsf(angle_deg);
|
||||
uint32_t clk = EMM_V5_DEG_TO_CLK(abs_deg);
|
||||
if (angle_deg < 0.0f) dir = (uint8_t)(!dir);
|
||||
ESP_LOGD("EMM_V5", "角度→脉冲: %.1f° (%s) → %lu",
|
||||
(double)angle_deg, dir ? "CCW" : "CW", (unsigned long)clk);
|
||||
Emm_V5_Pos_Control(addr, dir, vel, acc, clk, raF, snF);
|
||||
}
|
||||
|
||||
void Emm_V5_Stop_Now(uint8_t addr, bool snF)
|
||||
{
|
||||
uint8_t cmd[5] = {addr, 0xFE, 0x98, (uint8_t)snF, 0x6B};
|
||||
|
||||
@@ -30,6 +30,16 @@ extern "C" {
|
||||
/* 接收超时时间 (毫秒) */
|
||||
#define EMM_V5_RX_TIMEOUT_MS 100
|
||||
|
||||
/**
|
||||
* Emm 固件角度 ↔ 脉冲 换算
|
||||
* 1.8° 步进电机 + 16 微步 → 3200 脉冲/圈
|
||||
* 每脉冲 = 1.8° / 16 = 0.1125°
|
||||
*/
|
||||
#define EMM_V5_PULSES_PER_REV 3200
|
||||
#define EMM_V5_DEG_TO_CLK(deg) ((uint32_t)((float)(deg) * \
|
||||
(float)EMM_V5_PULSES_PER_REV / 360.0f + 0.5f))
|
||||
#define EMM_V5_CLK_TO_DEG(clk) ((float)(clk) * 0.1125f)
|
||||
|
||||
/* ============================================================
|
||||
* 系统参数枚举 (与 Arduino 版本一致)
|
||||
* ============================================================ */
|
||||
@@ -120,6 +130,19 @@ void Emm_V5_Vel_Control(uint8_t addr, uint8_t dir, uint16_t vel, uint8_t acc, bo
|
||||
void Emm_V5_Pos_Control(uint8_t addr, uint8_t dir, uint16_t vel, uint8_t acc,
|
||||
uint32_t clk, bool raF, bool snF);
|
||||
|
||||
/**
|
||||
* @brief 位置模式控制 (角度输入, °)
|
||||
* @param addr 电机地址
|
||||
* @param dir 方向, 0=CW, 其他=CCW
|
||||
* @param vel 速度 0~5000 RPM
|
||||
* @param acc 加速度 0~255 (0=直接启动)
|
||||
* @param angle_deg 目标角度 (°), 内部换算为脉冲 (3200=360°)
|
||||
* @param raF 相对/绝对, false=相对, true=绝对
|
||||
* @param snF 多机同步标志, false=不启用, true=启用
|
||||
*/
|
||||
void Emm_V5_Pos_Control_Angle(uint8_t addr, uint8_t dir, uint16_t vel,
|
||||
uint8_t acc, float angle_deg, bool raF, bool snF);
|
||||
|
||||
/**
|
||||
* @brief 立即停止电机 (所有控制模式通用)
|
||||
* @param addr 电机地址
|
||||
@@ -129,7 +152,8 @@ void Emm_V5_Stop_Now(uint8_t addr, bool snF);
|
||||
|
||||
/**
|
||||
* @brief 触发多机同步开始运动
|
||||
* @param addr 电机地址
|
||||
* @param addr 电机地址; 协议约定使用广播地址 0 发送一次,
|
||||
* 所有以 snF=true 入队的电机会同时启动
|
||||
*/
|
||||
void Emm_V5_Synchronous_motion(uint8_t addr);
|
||||
|
||||
|
||||
Reference in new issue
Block a user