# Ant
**Repository Path**: DBDynamics/Ant
## Basic Information
- **Project Name**: Ant
- **Description**: Ant是DBD团队开发的一款超小型创客神器,尺寸只有50mm x 30mm x 9mm, 它采用ARM Cortex-M3内核的32位处理器, 主频72MHz, 配备TOSHIBA的双全桥驱动IC,
运行空间矢量控制算法及动态力矩调节算法, 可以完美控制42 35 28 20等型号步进电机.
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-04-26
- **Last Updated**: 2025-07-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# DBD-Ant4 步进电机驱动器
[](LICENSE)
[]()
[]()
> 超小型创客神器,尺寸仅 50mm × 30mm × 9mm 的高性能步进电机驱动器
## 📋 目录
- [🚀 快速开始](#-快速开始)
- [📖 产品简介](#-产品简介)
- [⚡ 技术规格](#-技术规格)
- [🔧 产品细节](#-产品细节)
- [📐 机械尺寸](#-机械尺寸)
- [🔌 接口布局](#-接口布局)
- [⚙️ 接线说明](#️-接线说明)
- [🎯 运行模式](#-运行模式)
- [📊 性能分析](#-性能分析)
- [💻 调试软件](#-调试软件)
- [👨💻 开发者资源](#-开发者资源)
- [📚 使用教程](#-使用教程)
- [🎥 视频演示](#-视频演示)
- [🏢 关于我们](#-关于我们)
## 🚀 快速开始
### 安装驱动
1. 下载并安装 [USB串口驱动](downloads/CH341SER.EXE)
2. 连接 Ant4 到电脑 USB 端口
3. 下载 [调试软件](downloads/StepperControlLatest.zip)
### 基本使用
```python
from DBDynamics import Ant
# 初始化连接
m = Ant('/dev/ttyUSB0') # Linux 或 'COM3' (Windows)
# 使能电机
m.setPowerOn(1)
# 设置位置模式并运动
m.setPositionMode(1)
m.setTargetPosition(1, 50000) # 转动一圈
m.waitTargetPositionReached(1)
# 释放资源
m.stop()
```
---
## 📖 产品简介
**Ant4** 是 DBD 团队开发的第四代超小型步进电机驱动器,专为创客和工程师设计。凭借其紧凑的尺寸(50mm × 30mm × 9mm)和强大的性能,Ant4 在便携性和功能性之间实现了完美平衡。
### 🌟 核心特性
- **🔬 超小尺寸**:仅 50mm × 30mm × 9mm,比传统驱动器小 90%
- **🧠 高性能处理器**:ARM Cortex-M3 内核,72MHz 主频
- **⚡ 先进算法**:空间矢量控制 + 动态力矩调节
- **🔌 双接口设计**:USB + CAN 总线,协议互通
- **🌐 跨平台支持**:Windows、Linux、Android、macOS
- **🛠️ 多语言开发**:支持 Python、C/C++、Matlab 等
### 🎯 适用电机
支持市面上常见的步进电机型号:
- **NEMA 17** (42mm)
- **NEMA 14** (35mm)
- **NEMA 11** (28mm)
- **NEMA 8** (20mm)
### 💡 创新亮点
1. **智能网关**:USB 与 CAN 协议自动转换,无需额外转换器
2. **丰富 I/O**:1路输入 + 1路输出,支持传感器和执行器
3. **即插即用**:免驱动设计,连接即可使用
4. **开放协议**:完整的通信协议文档,便于二次开发
## ⚡ 技术规格
### 📋 基本参数
| 参数 | 规格 | 说明 |
|------|------|------|
| **重量** | 32g | 超轻量化设计 |
| **尺寸** | 50×30×9 mm | 业界最小尺寸 |
| **电机类型** | 4线2相步进电机 | 支持主流步进电机 |
| **细分精度** | 250细分 | 超高精度控制 |
| **工作温度** | -10°C ~ +60°C | 工业级温度范围 |
### ⚡ 电气特性
| 参数 | 规格 | 备注 |
|------|------|------|
| **工作电压** | 5V - 15V | 推荐 12V |
| **最大电流** | 1.5A (持续) | 峰值 2A |
| **PWM 频率** | 50 KHz | 静音运行 |
| **输入 I/O** | 1路 (3.3V-15V) | 支持多种传感器 |
| **输出 I/O** | 1路 (开漏 500mA) | 可驱动继电器/LED |
### 🔌 通信接口
| 接口 | 规格 | 特性 |
|------|------|------|
| **USB 串口** | CH340E @ 1.5Mbps | 即插即用 |
| **CAN 总线** | TJA1050A @ 1Mbps | 工业级可靠性 |
| **协议转换** | 自动网关 | USB ↔ CAN 互通 |
## 🔧 产品细节
### 📸 多角度展示
## 📐 机械尺寸
精确的机械尺寸图,便于集成设计
## 🔌 接口布局
标准化接插件设计,确保连接可靠性
### 📋 接口详细说明
| 接口类型 | 规格 | 功能说明 | 注意事项 |
|----------|------|----------|----------|
| **🔋 电源接口** | XH2.54-2P | DC 12V 供电 | ✅ 防反接保护 |
| **⚙️ 电机接口** | XH2.54-4P | 2相4线步进电机 | ⚠️ 注意线序:A+A-B-B+ |
| **🌐 CAN 接口** | SH1.0-2P × 2 | 总线通信 | ⚠️ 需要120Ω终端电阻 |
| **📥 输入 I/O** | SH1.0-3P | 传感器接口 | 💡 内置10kΩ下拉电阻 |
| **📤 输出 I/O** | SH1.0-2P | 开漏输出 | ⚡ 最大500mA电流 |
| **🔌 USB 接口** | Micro USB | 编程/调试 | 📱 需要数据线(非充电线) |
### 🔧 支持的外设
#### 输入设备
- 🔘 物理开关/按键
- 💡 光电开关
- 🧲 霍尔传感器
- 📏 接近开关
#### 输出设备
- 🔌 电磁继电器
- 🌀 散热风扇
- 💡 LED 指示灯
- ⚙️ 小型直流电机
- 🛑 电磁刹车
## ⚙️ 接线说明
标准接线示意图
### ⚠️ 重要注意事项
#### 🔋 电源接线
> **⚡ 电压要求**:5V-15V(推荐12V)
> **🛡️ 安全保护**:具有防反接保护,反接不会损坏设备
```
电源接口:XH2.54-2P
红线 → 正极 (+)
黑线 → 负极 (-)
```
#### ⚙️ 电机接线
> **📐 线序要求**:严格按照 A+ A- B- B+ 顺序连接
> **⚠️ 错误后果**:接错会导致电机抖动或无法运转
```
电机接口:XH2.54-4P
1号线 → A+ (相A正极)
2号线 → A- (相A负极)
3号线 → B- (相B负极)
4号线 → B+ (相B正极)
```
#### 🌐 CAN 总线接线
> **🔗 连接规则**:H接H,L接L
> **🔚 终端电阻**:网络首末两端各加120Ω电阻
```
CAN接口:SH1.0-2P × 2
CAN-H → 高电平线
CAN-L → 低电平线
推荐线材:双绞线或CAN专用线
```
#### 📥 传感器接线
> **🔌 接口类型**:SH1.0-3P
> **⚡ 供电能力**:12V输出,内置10kΩ下拉电阻
```
传感器接口:SH1.0-3P
12V → 传感器电源正极
GND → 传感器电源负极
IN → 信号输入
支持传感器类型:
✅ PNP输出型传感器
✅ 常开/常闭开关
✅ 霍尔传感器
✅ 光电开关
```
#### 📤 输出接口
> **⚡ 最大负载**:500mA
> **🔧 输出类型**:开漏输出
```
输出接口:SH1.0-2P
适用负载:
✅ 继电器 (< 500mA)
✅ LED指示灯
✅ 小型风扇
✅ 电磁铁 (< 500mA)
⚠️ 大功率负载请通过继电器控制
```
---
## 🎯 运行模式
Ant4 支持多种运行模式,满足不同应用场景的需求。每种模式都经过精心优化,确保运行平稳、精度高。
### 📍 位置模式(推荐)
**特点**:平滑位置控制,自动轨迹规划
- 🎯 **精确定位**:根据目标位置自动规划运动轨迹
- 📈 **平滑加减速**:S型加减速曲线,减少冲击
- ⚙️ **参数可调**:目标位置、最大速度、加速时间
- 🔄 **点位运动**:适合精确定位应用
**应用场景**:3D打印、数控机床、自动化设备
### 🏃 速度模式
**特点**:平滑速度控制,连续运转
- 🚀 **速度控制**:精确控制电机转速
- 📊 **平滑变速**:渐进式加减速
- 🔄 **连续运行**:适合传送带等应用
- ⚡ **响应快速**:实时速度调节
**应用场景**:传送带、搅拌器、风扇控制
### 🏠 回零模式
**特点**:自动寻找机械零点
- 📍 **自动寻零**:配合传感器自动找零点
- 🔄 **智能恢复**:完成后自动恢复原模式
- ⚙️ **参数可调**:回零方向、速度、触发电平
- 🛡️ **安全保护**:防止过冲和碰撞
**配置参数**:
- 回零方向:1(正向)或 -1(负向)
- 回零速度:建议 20-50 pulse/ms
- 触发电平:0 或 1(根据传感器类型)
### 🔗 插补模式
**特点**:多轴同步运动控制
- 🎯 **多轴联动**:最多支持16轴同步
- 📐 **轨迹插补**:直线、圆弧插补
- ⏱️ **实时同步**:10ms插补周期
- 🎨 **连续轨迹**:适合复杂路径
**应用场景**:
- 🖨️ 3D打印机
- ✍️ 写字机/画图机
- 🔧 雕刻机
- 💧 点胶机
### 🔧 气缸模式(开发中)
**特点**:模拟气缸动作
- 🔄 **双位控制**:高/低电平对应两个位置
- ⚙️ **参数保存**:位置、速度可预设
- 🏠 **配合回零**:可选择回零定位
- 🎛️ **IO触发**:通过输入IO控制
> 💡 **提示**:如需气缸模式,请联系技术支持
## 📊 性能分析
### 🆚 与传统驱动器对比
| 对比项目 | Ant4 | 传统驱动器 | 优势 |
|----------|------|------------|------|
| **📏 体积** | 50×30×9 mm | 100×80×40 mm | 🏆 小90% |
| **⚡ 细分精度** | 250细分 | 8-32细分 | 🏆 更平滑 |
| **🔌 接线复杂度** | 2根线(USB/CAN) | 6-8根线 | 🏆 简化75% |
| **🛠️ 开发难度** | 即插即用 | 需要控制器 | 🏆 零门槛 |
| **💰 系统成本** | 低 | 高 | 🏆 节省50% |
### ✅ 核心优势
#### 🎯 技术创新
- **🔬 超高细分**:250细分精度,运动更平滑,噪音更小
- **🧠 智能算法**:动态力矩调节,加速时增强,静止时节能
- **🌐 协议融合**:USB与CAN自动转换,无需额外网关
- **📱 跨平台**:支持Windows、Linux、Android、macOS
#### 🛠️ 工程优势
- **⚡ 即插即用**:免驱动设计,连接即可使用
- **🔧 参数丰富**:数十个可调参数,适配各种电机
- **📊 实时监控**:位置、速度、状态实时反馈
- **🔄 模式切换**:多种运行模式,一键切换
#### 🏗️ 设计优势
- **📦 紧凑设计**:体积仅为传统驱动器的10%
- **🌡️ 散热优化**:6061铝合金外壳,可外接散热器
- **🔌 接口标准**:采用标准接插件,连接可靠
- **🛡️ 保护完善**:防反接、过流、过温保护
### ⚠️ 使用限制
#### 🔋 电源限制
- **电压范围**:5V-15V(推荐12V)
- **影响**:相比24V/48V系统,最高转速受限
- **建议**:选择低电压、低电感的高速电机
#### ⚡ 电流限制
- **额定电流**:1.5A(峰值2A)
- **影响**:大力矩应用受限
- **建议**:选择合适的电机匹配
#### 🌡️ 散热考虑
- **小体积**:散热面积相对较小
- **建议**:大功率应用需要额外散热措施
- **方案**:可选配散热风扇或散热器
### 🚀 产品路线图
#### 🐝 下一代产品 - Bee系列
| 改进项目 | Ant4 | Bee系列 | 提升 |
|----------|------|---------|------|
| **供电电压** | 5V-15V | 8V-30V | 🆙 支持高速 |
| **输出电流** | 1.5A | 3A | 🆙 大力矩 |
| **散热设计** | 标准 | 强化 | 🆙 更稳定 |
> 💡 **持续改进**:我们持续收集用户反馈,在新产品中不断优化和改进
## 💻 调试软件
### 📥 软件下载
| 平台 | 软件包 | 大小 | 说明 |
|------|--------|------|------|
| 🪟 **Windows** | [Ant调试软件](downloads/StepperControlLatest.zip) | ~5MB | 免安装绿色版 |
| 🐧 **Linux** | [Ant调试软件](downloads/Ant-x86_64.AppImage) | ~8MB | AppImage格式 |
| 🤖 **Android** | [Ant调试软件](downloads/Ant-App.zip) | ~3MB | APK安装包 |
### 🔌 驱动程序
| 操作系统 | 驱动下载 | 说明 |
|----------|----------|------|
| 🪟 **Windows** | [CH341串口驱动](downloads/CH341SER.EXE) | 自动安装 |
| 🐧 **Linux** | [CH341驱动包](downloads/CH341SER_LINUX.ZIP) | 多数发行版免驱 |
| 🍎 **macOS** | [CH341驱动包](downloads/CH341SER_MAC.ZIP) | 支持最新系统 |
> 💡 **提示**:大部分Linux发行版(Ubuntu、Debian、Fedora等)已集成驱动,可直接使用
#### 图文教程
##### 驱动安装
### 📖 图文教程
#### 🔧 驱动安装指南
**步骤1:下载驱动程序**

**步骤2:运行驱动安装程序**

**步骤3:安装成功确认**
> ✅ **安装成功标志**:设备管理器中出现"USB-SERIAL CH340"设备
> 💡 **Linux用户**:大部分发行版(Ubuntu、Debian、Fedora等)已集成驱动,可直接使用
#### 🖥️ 软件界面介绍
**调试软件图标**

**主界面功能区域**
##### 🎛️ 界面功能详解
| 序号 | 功能分类 | 功能名称 | 详细说明 |
|------|----------|----------|----------|
| 1 | **基础操作** | 软件信息 | 显示软件名称及版本信息 |
| 2 | | 扫描端口 | USB插入后点击扫描,列出所有可用端口 |
| 3 | | 端口选择 | 从下拉菜单选择对应的通信端口 |
| 4 | | 连接设备 | 端口选好后点击打开建立通讯连接 |
| 5 | | 扫描设备 | 连接成功后扫描总线上的所有设备 |
| 6 | **设备管理** | 当前设备 | 显示当前操作的设备编号,可切换 |
| 7 | | 设备列表 | 绿色表示在线设备,可直接点击切换 |
| 8 | **状态监控** | 通讯状态 | 显示通讯连接状态,判断是否正常 |
| 9 | | 使能状态 | 显示电机使能/失能状态 |
| 10 | | 到位状态 | 显示电机是否运行到目标位置 |
| 11 | | 按键状态 | 显示按键是否按下 |
| 12 | | 输入IO | 显示输入传感器(回零传感器)状态 |
| 13 | | 目标位置 | 实时显示电机的目标位置 |
| 14 | | 当前位置 | 实时显示电机的当前位置 |
| 15 | **高级功能** | 批量修改 | 指定ID范围批量修改设备参数 |
| 16 | | ID修改 | 修改设备ID号,需保存参数永久生效 |
| 17 | **电机参数** | 运行电流 | 设置电机运动过程中的电流大小 |
| 18 | | 保持电流 | 设置电机静止时的电流,降低发热 |
| 19 | | 保持时间 | 运行到静止状态的电流切换延迟时间 |
| 20 | | 回零方向 | 设置回零模式下的运动方向(±1) |
| 21 | | 回零电平 | 设置回零传感器的触发电平(0/1) |
| 22 | | 加速时间 | 设置加减速过程的时间参数 |
| 23 | | 运行速度 | 设置目标速度或最大速度参数 |
| 24 | | 运行模式 | 选择位置/速度/回零/插补模式 |
| 25 | | 心跳频率 | 该参数已移除 |
| 26 | | CAN波特率 | 设置CAN通信波特率,影响速度和距离 |
| 27 | **参数操作** | 读取参数 | 从设备读取参数到软件界面 |
| 28 | | 更新参数 | 将界面参数更新到设备中 |
| 29 | | 保存参数 | 将参数保存到设备FLASH,断电保持 |
| 30 | **IO控制** | IO输出 | 控制设备的IO输出状态 |
| 31 | **运动控制** | 运动指令 | 发送绝对/增量位置或速度指令 |
| 32 | | 启动停止 | 使能/失能电机控制 |
| 33 | | 回零操作 | 切换到回零模式并执行回零 |
| 34 | **多轴控制** | 同步控制 | 多电机同步运动控制 |
| 35 | | 同步模式 | 进入同步位置模式 |
| 36 | | 同步位置 | 发送同步目标位置指令 |
| 37 | | 同步运动 | 发送广播同步运动指令 |
| 38 | **技术支持** | 微信支持 | 扫码获取技术支持 |
| 39 | **固件管理** | 固件升级 | 暂不提供升级功能 |
| 40 | | 固件选择 | 暂不提供升级功能 |
> 💡 **使用提示**:
> - 🔌 首次使用请按顺序:扫描端口 → 选择端口 → 连接设备 → 扫描设备
> - ⚙️ 修改参数后务必点击"保存参数"以永久保存
> - 🔄 绿色设备表示在线,可直接点击切换操作对象
> - 📊 状态信息实时更新,便于监控设备运行状态
## 👨💻 开发者资源
### 📦 SDK下载中心
| 开发平台 | SDK包 | 示例代码 | 文档 | 特性 |
|----------|-------|----------|------|------|
| 🐍 **Python** | [Python SDK](downloads/PythonSDK.zip) | [示例代码](downloads/testAntProfile.py) | [API文档](#python-api) | 跨平台、易上手 |
| 🧮 **MATLAB** | [MATLAB SDK](downloads/DBD-Matlab.zip) | 内置示例 | [使用指南](#matlab-guide) | 科学计算、仿真 |
| 🤖 **Android** | [Android SDK](downloads/testDemo001.zip) | 完整Demo | [开发指南](#android-dev) | 移动端控制 |
| ⚡ **Profile** | [Profile SDK](downloads/sdkDemo20200620.zip) | 高级示例 | [协议文档](#profile-protocol) | 高性能、实时 |
### 🛠️ 开发环境要求
#### Python 开发环境
```bash
# 推荐Python版本
Python >= 3.7
# 依赖库
pip install pyserial
pip install numpy
pip install matplotlib # 可选,用于数据可视化
```
#### MATLAB 开发环境
```matlab
% 推荐MATLAB版本
MATLAB R2018b 或更高版本
% 需要工具箱
% - Instrument Control Toolbox
% - Signal Processing Toolbox (可选)
```
#### Android 开发环境
```gradle
// 最低SDK版本
minSdkVersion 21
targetSdkVersion 33
// 权限要求
```
---
#### SDK接口
##### Python SDK接口说明
SDK接口分为4类,参数设置set类,参数获取get类,等待信号wait类,功能操作类,下面将做详细介绍.
| | |
| --- | --- |
| setPowerOn(id) | 设置对应id号的状态为使能,使能后电机开始受驱动器控制.使能后状态指示灯由快速闪烁变为慢速闪烁. |
| setPowerOff(id) | 设置对应id号的状态为失能,失能后电机不再受驱动器控制.失能后状态指示灯由慢速闪烁变为快速闪烁. |
| setTargetVelocity(id, value) | 设置目标速度.数值范围通常位1-300,单位pulse/ms近似等于RPM. |
| setTargetPosition(id, value) | 设置目标位置.Ant控制1.8度步进电机时,50000脉冲当量对应一圈. |
| setVelocityMode(id) | 设置运行模式为平滑速度模式,详细内容参考[运行模式](#operationmode) |
| setPositionMode(id) | 设置运行模式为平滑位置模式,详细内容参考[运行模式](#operationmode) |
| setHomingMode(id) | 设置运行模式为回零模式,详细内容参考[运行模式](#operationmode) |
| setHomingDirection(id, value) | 设置回零方向.取值为1或者-1. |
| setHomingLevel(id, value) | 设置回零电平.取值为1或者0. |
| setRunningCurrent(id, value) | 设置运行电流.取值范围100-1500,单位mA,通常300-800比较合理. |
| setKeepingCurrent(id, value) | 设置保持电流.取值范围100-1500,单位mA,通常300-800比较合理. |
| setAccTime(id, value) | 设置加速时间.在位置模式下或者速度模式下的加减速过程的时间,单位ms.通常100-2000比较合理. |
| setOutputIO(id, value) | 设置IO输出.取值0或者1. |
| getInputIO(id) | 获取输入IO的状态.返回值为0或者1. |
| getActualVelocity(id) | 获取当前的实际运行速度. |
| getActualPosition(id) | 获取当前的实际位置. |
| getTargetVelocity(id) | 获取目标速度. |
| getTargetPosition(id) | 获取目标位置. |
| getRunningCurrent(id) | 获取运行电流. |
| getKeepingCurrent(id) | 获取保持电流. |
| getAccTime(id) | 获取加速时间. |
| getHomingDirection(id) | 获取回零方向. |
| getHomingLevel(id) | 获取回零电平. |
| waitHomingDone(id) | 等待回零完成. |
| waitTargetPositionReached(id) | 等待目标位置到达. |
| getDeviceID(id) | 获取设备ID. |
| scanDevices() | 扫描在线设备. |
| saveParameters(id) | 保存参数. |
| changeID(id, value) | 修改ID.ID范围1-120. |
##### 如何使用Python SDK
###### 准备工作
1.安装pyserial.用户可以通过pycharm的库管理下载添加, 或者通过命令行添加, 有问题请联系我们或者自行搜索解决.
2.桌面开发环境推荐使用PyCharm进行程序编写.
3.终端开发环境,sudo python3 -m pip install pyserial
4.获取串口权限.Linux下的设备使用都需要使用sudo或root用户才能打开,为了能让普通用户也能使用串口,可以增加udev规则来实现,具体方法如下: sudo vim
/etc/udev/rules.d/70-ttyusb.rules 增加如下内容: KERNEL=="ttyUSB[0-9]\*",MODE="0666"
保存,重新插入USB转串口,普通用户就能搞定了.
5.下载[Python SDK](#sdk).并拷贝到用户运行目录.
###### 代码运行
```
#!/usr/bin/python3
from DBDynamics import Ant
import time
def mainAnt():
# Note: for Linux System Users, you can use "ls /dev/ttyU*" to find your port name
# Note: for Windows System Users, portName='COM?', change ? to your COM number
portName = '/dev/ttyUSB0'
DBD = Ant(portName)
# Your Code Start Here:
DBD.setTargetPosition(8, -50000)
DBD.waitTargetPositionReached(8)
DBD.setTargetPosition(8, 50000)
DBD.waitTargetPositionReached(8)
# Close Communication
DBD.stop()
if __name__ == '__main__':
mainAnt()
```
##### Matlab SDK接口
DBD提供的m文件按功能分为3类,分别是:set类设置参数,get类获取参数,wait类等待信号.
| | |
| --- | --- |
| DBD\_setPowerOn(id) | 设置对应id号的状态为使能,使能后电机开始受驱动器控制.使能后状态指示灯由快速闪烁变为慢速闪烁. |
| DBD\_setPowerOff(id) | 设置对应id号的状态为失能,失能后电机不再受驱动器控制.失能后状态指示灯由慢速闪烁变为快速闪烁. |
| DBD\_setPositionMode(id) | 设置运行模式为平滑位置模式,详细内容参考运行模式 |
| DBD\_setVelocityMode(id) | 设置运行模式为平滑速度模式,详细内容参考运行模式 |
| DBD\_setHomingMode(id) | 设置运行模式为回零模式,详细内容参考运行模式 |
| DBD\_setRunningCurrent(id,value) | 设置运行电流.取值范围100-1500,单位mA,通常300-800比较合理. |
| DBD\_setKeepingCurrent(id,value) | 设置保持电流.取值范围100-1500,单位mA,通常300-800比较合理. |
| DBD\_setTargetVelocity(id,value) | 设置目标速度.数值范围通常位1-300,单位pulse/ms近似等于RPM. |
| DBD\_setTargetPosition(id,value) | 设置目标位置.Ant控制1.8度步进电机时,50000脉冲当量对应一圈. |
| DBD\_setHomingDirection(id, value) | 设置回零方向.取值为1或者-1. |
| DBD\_setHomingLevel(id,value) | 设置回零电平.取值为1或者0. |
| ret = DBD\_getActualPosition(id) | 获取当前的实际位置. |
| ret = DBD\_getActualVelocity(id) | 获取当前的实际运行速度. |
| ret = DBD\_getTargetPosition(id) | 获取目标位置. |
| ret = DBD\_getTargetVelocity(id) | 获取目标速度. |
| DBD\_waitHomeDone(id) | 等待回零完成. |
| DBD\_waitTargetPositionReached(id) | 等待目标位置到达. |
###### 示例代码
```
clc;
clear;
% 数据及通信初始化
% 使用 seriallist 命令来获取可用串口号
DBD = DBD_Init("COM17");
% Demo 用户代码放这里
DBD_setTargetPosition(4, 50000)
DBD_waitTargetPositionReached(4)
DBD_setTargetPosition(4, -50000)
DBD_waitTargetPositionReached(4)
% 调用此函数来清理相关资源,包括串口和定时器,否则会导致Matlab资源不释放,程序无法运行.
DBD_Stop();
```
### 📡 通信协议详解
Ant4 提供两种通信接口:USB串口和CAN总线,两个接口数据互通,具备自动网关功能。当收到数据与自己ID不匹配时,自动转发给另一个接口,实现无缝协议转换。
#### 🔌 USB串口通信
##### 通信架构
Client-Server通信模式
USB串口采用**Client-Server**模式设计:
- 🖥️ **PC端(Client)**:通信发起者,发送指令
- 🤖 **Ant4(Server)**:指令执行者,立即响应
- 🔄 **通信流程**:每次Client发送一条消息,Server立即回复一条消息
##### 📋 通信参数
| 参数 | 规格 | 说明 |
|------|------|----- |
| **波特率** | 1.5 Mbps | 高速通信,响应迅速 |
| **数据位** | 8 bits | 标准8位数据格式 |
| **停止位** | 1 bit | 单停止位 |
| **校验位** | 无 | 无奇偶校验 |
| **流控制** | 无 | 无硬件/软件流控 |
##### 📦 数据帧结构
**发送数据帧(Tx Message)**
PC → Ant4 数据帧格式
**接收数据帧(Rx Message)**
Ant4 → PC 响应帧格式
##### 🔍 帧格式详解
| 字段 | 长度(字节) | 功能说明 | 示例值 |
|------|------------|----------|--------|
| **设备ID** | 1 | 目标设备地址(1-127) | 0x01 |
| **帧长度** | 1 | 数据帧总长度 | 0x05 |
| **Index** | 1 | 参数索引编号 | 0x31 |
| **SubIndex** | 1 | 读写操作标识 | 0x00 |
| **操作码** | 1 | 具体操作类型 | 0x00 |
| **数据域** | 4 | 参数数值 | 0x50C30000 |
| **校验和** | 1 | 帧完整性校验 | 0x36 |
> 💡 **提示**:所有多字节数据采用小端序(Little Endian)格式传输
#### 🚌 CAN总线通信
##### 通信架构
CAN总线广播通信模式
CAN总线采用**广播通信**模式设计:
- 📡 **多主模式**:总线上任何设备都可发起通信
- 🔄 **实时响应**:所有设备同时接收广播消息
- 🎯 **ID过滤**:设备根据CAN ID判断是否处理消息
- 🌐 **网络拓扑**:支持菊花链、星型等多种连接方式
##### 📋 通信参数
| 参数 | 规格 | 说明 |
|------|------|----- |
| **波特率** | 1 Mbps | 高速实时通信 |
| **数据位** | 8 bits | 标准CAN数据格式 |
| **校验方式** | CRC-15 | 硬件CRC校验 |
| **帧格式** | 标准帧 | 11位标识符 |
| **总线长度** | ≤40m | @1Mbps波特率 |
| **节点数量** | ≤127 | 理论最大节点数 |
##### 📦 CAN帧结构
CAN 2.0A标准帧格式
##### 🔍 CAN ID分配规则
| CAN ID范围 | 功能分类 | 说明 | 优先级 |
|------------|----------|------|--------|
| **0x000-0x07F** | 系统保留 | 系统级广播指令 | 最高 |
| **0x080-0x0FF** | 设备控制 | 单设备控制指令 | 高 |
| **0x100-0x17F** | 状态反馈 | 设备状态上报 | 中 |
| **0x180-0x1FF** | 参数配置 | 参数读写操作 | 低 |
| **0x200-0x7FF** | 用户自定义 | 扩展功能使用 | 最低 |
> 🔧 **配置建议**:
> - 🏃♂️ **高频指令**:使用低CAN ID获得更高优先级
> - 📊 **状态监控**:合理设置上报频率避免总线拥塞
> - 🔗 **多设备**:预留足够的ID空间便于扩展
##### 📊 数据帧结构
CAN消息主要由两部分组成:**CAN ID** 和 **数据域**
- **CAN ID**:功能码(Function Code) + 设备ID(0-127)
- **数据域**:8字节,包含Index、SubIndex和Data
### 📋 协议参数详解
USB串口和CAN总线共用Index、SubIndex和Value/Data参数体系,实现统一的通信协议。
- **Index**:参数索引编号,标识具体的功能参数
- **SubIndex**:操作类型标识,区分读写操作
- **Value/Data**:参数数值,包含要读写的具体数据
#### 🔧 功能码定义(FunctionCode)
| 功能码 | 数值 | 功能名称 | 说明 | 应用场景 |
|--------|------|----------|------|----------|
| **FUNC_CODE_TSDO** | 0x580 | 标准数据对象 | 最常用功能码,用于参数读写 | 🔄 参数配置、状态查询 |
| **FUNC_CODE_FREE** | 0x780 | 空闲消息 | 保留功能码,暂未使用 | 📝 协议扩展预留 |
| **FUNC_CODE_SYNC** | 0x080 | 同步信号 | 多设备同步控制信号 | ⚡ 多轴联动、同步运动 |
> 💡 **使用建议**:
> - 🎯 **日常操作**:使用FUNC_CODE_TSDO进行参数读写
> - 🔄 **同步控制**:使用FUNC_CODE_SYNC实现多设备协调
> - 📈 **协议扩展**:FUNC_CODE_FREE为未来功能预留
#### 📊 Index参数索引表
##### 🎛️ 基础控制参数
| Index | 数值 | 参数名称 | 数据类型 | 单位 | 说明 |
|-------|------|----------|----------|------|------|
| **ControlWordIndex** | 0 | 控制字 | UINT16 | - | 使能/失能控制 |
| **ModesofOperationIndex** | 1 | 运行模式 | UINT8 | - | 位置/速度/回零/插补模式 |
| **DeviceIDIndex** | 31 | 设备ID | UINT8 | - | 设备地址(1-127) |
| **StatusWordIndex** | 50 | 状态字 | UINT16 | - | 系统运行状态 |
| **ActualPositionIndex** | 53 | 实际位置 | INT32 | pulse | 电机当前位置 |
##### ⚙️ 电机运动参数
| Index | 数值 | 参数名称 | 数据类型 | 单位 | 说明 |
|-------|------|----------|----------|------|------|
| **StepperRunPosIndex** | 49 | 目标位置 | INT32 | pulse | 位置模式目标值 |
| **StepperRunVelIndex** | 48 | 目标速度 | INT32 | pulse/ms | 速度模式目标值 |
| **StepperAccTimeIndex** | 47 | 加速时间 | UINT16 | ms | 加减速过程时间 |
| **StepperCurrentRunIndex** | 40 | 运行电流 | UINT16 | mA | 运动时电流设定 |
| **StepperCurrentKeepIndex** | 42 | 保持电流 | UINT16 | mA | 静止时电流设定 |
##### 🏠 回零配置参数
| Index | 数值 | 参数名称 | 数据类型 | 单位 | 说明 |
|-------|------|----------|----------|------|------|
| **StepperHomeDirIndex** | 45 | 回零方向 | INT8 | - | 1:正向 -1:负向 |
| **StepperHomeLevelIndex** | 46 | 回零电平 | UINT8 | - | 0:低电平 1:高电平 |
##### 🔗 同步控制参数
| Index | 数值 | 参数名称 | 数据类型 | 单位 | 说明 |
|-------|------|----------|----------|------|------|
| **SyncTargetPositionIndex** | 38 | 同步目标位置 | INT32 | pulse | 同步模式目标位置 |
| **SyncRunIndex** | 39 | 同步运行 | UINT8 | - | 同步执行命令 |
| **InterpolationTargetPostion** | 12 | 插补目标位置 | INT32 | pulse | 插补模式目标位置 |
| **InterpolationBufStatus** | 98 | 插补缓存状态 | UINT8 | - | 插补数据缓存状态 |
##### 📡 通信与IO参数
| Index | 数值 | 参数名称 | 数据类型 | 单位 | 说明 |
|-------|------|----------|----------|------|------|
| **HeartBeatRateIndex** | 35 | 心跳频率 | UINT16 | ms | 心跳包间隔(已移除) |
| **IO_OUT_Index** | 14 | IO输出 | UINT8 | - | 数字输出控制 |
| **IO_InputIndex** | 54 | IO输入 | UINT8 | - | 数字输入状态 |
##### 🔧 系统管理参数
| Index | 数值 | 参数名称 | 数据类型 | 单位 | 说明 |
|-------|------|----------|----------|------|------|
| **MemoryIndex** | 30 | 参数保存 | UINT8 | - | 写1保存到FLASH |
> ⚠️ **重要提示**:
> - 📝 **参数保存**:FLASH存储有约10000次写入限制,请勿频繁保存
> - 🔄 **数据格式**:所有多字节数据采用小端序(Little Endian)格式
> - 📊 **状态监控**:StatusWord包含使能、回零、到位、IO等状态信息
> - 🎯 **设备检测**:读取DeviceIDIndex,返回值与指令ID相同表示设备在线
#### 🔄 SubIndex操作类型表
| SubIndex | 数值 | 操作类型 | 说明 | 应用场景 |
|----------|------|----------|------|----------|
| **WriteSubIndex** | 0 | 写操作 | 向设备写入参数值 | ✏️ 参数配置、控制指令 |
| **ReadSubIndex** | 1 | 读操作 | 从设备读取参数值 | 📖 状态查询、参数获取 |
| **WriteOKSubIndex** | 2 | 写操作成功 | 设备确认写入成功 | ✅ 写入确认响应 |
| **ReadOKSubIndex** | 3 | 读操作成功 | 设备返回读取数据 | 📊 读取数据响应 |
> 💡 **使用说明**:
> - 📖 **读操作流程**:发送ReadSubIndex → 设备返回ReadOKSubIndex + 数据
> - ✏️ **写操作流程**:发送WriteSubIndex + 数据 → 设备返回WriteOKSubIndex
> - 🔄 **通信机制**:每次请求都有对应的响应,确保通信可靠性
#### 📊 StatusWord状态字详解
StatusWord是一个16位状态寄存器,实时反映设备的运行状态,每个位代表不同的状态信息。
##### 🔍 状态位定义表
| 位序号 | 位名称 | 状态说明 | 0状态 | 1状态 | 重要性 |
|--------|--------|----------|-------|-------|--------|
| **Bit 0** | DeviceEnable | 电机使能控制状态 | 🔴 失能状态 | 🟢 使能状态 | ⭐⭐⭐ |
| **Bit 1** | HomeDone | 回零操作完成状态 | ❌ 回零未完成 | ✅ 回零已完成 | ⭐⭐⭐ |
| **Bit 2** | TargetReached | 运动到位检测状态 | 🏃 未到位 | 🎯 已到位 | ⭐⭐⭐ |
| **Bit 3** | IO_Input | 数字输入端子状态 | 📉 低电平 | 📈 高电平 | ⭐⭐ |
| **Bit 4-15** | 保留位 | 系统保留,未来扩展 | - | - | ⭐ |
##### 🎛️ 状态字使用示例
```c
// 状态字解析示例
uint16_t statusWord = 0x0007; // 示例状态字
// 检查各个状态位
bool isEnabled = (statusWord & 0x0001) ? true : false; // Bit 0: 使能状态
bool isHomed = (statusWord & 0x0002) ? true : false; // Bit 1: 回零状态
bool isInPosition = (statusWord & 0x0004) ? true : false; // Bit 2: 到位状态
bool isIOHigh = (statusWord & 0x0008) ? true : false; // Bit 3: IO输入状态
```
##### 📋 常见状态组合
| 状态组合 | 十六进制 | 二进制 | 说明 | 应用场景 |
|----------|----------|--------|------|----------|
| **待机状态** | 0x0000 | 0000000000000000 | 设备上电,未使能 | 🔌 初始化阶段 |
| **使能状态** | 0x0001 | 0000000000000001 | 设备使能,可接受指令 | ⚡ 准备运动 |
| **回零完成** | 0x0003 | 0000000000000011 | 使能+回零完成 | 🏠 建立坐标系 |
| **运动到位** | 0x0007 | 0000000000000111 | 使能+回零+到位 | 🎯 运动完成 |
> 🔧 **调试建议**:
> - 📊 **实时监控**:定期读取StatusWord监控设备状态
> - 🚨 **异常检测**:状态位异常变化可能表示硬件故障
> - 🎯 **运动控制**:确认使能和回零状态后再执行运动指令
> - 🔄 **状态机**:基于StatusWord设计设备状态机逻辑
#### 例子:(ID=1)
[更多数据请下载Python脚本自行测试,每次运行一条指令,会打印出对应的发送和返回数据.](downloads/testAntProfile.py)
| | | |
| --- | --- | --- |
| SDK指令 | 发送数据 | 返回数据 |
| PowerOn(1) | ['0x81', '0x5', '0x0', '0x0', '0x0', '0x0', '0x1', '0x0', '0x0', '0x0'] | ['0x81', '0x5', '0x0', '0x0', '0x2', '0x0', '0x1', '0x0', '0x0', '0x0', '0x36'] |
| PowerOn(2) | ['0x82', '0x5', '0x0', '0x0', '0x0', '0x0', '0x1', '0x0', '0x0', '0x0'] | ['0x80', '0x7', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x36'] |
| PowerOff(1) | ['0x81', '0x5', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0'] | ['0x81', '0x5', '0x0', '0x0', '0x2', '0x0', '0x0', '0x0', '0x0', '0x0', '0x36'] |
| setPositionMode(1) | ['0x81', '0x5', '0x1', '0x0', '0x0', '0x0', '0x1f', '0x0', '0x0', '0x0'] | ['0x81', '0x5', '0x1', '0x0', '0x2', '0x0', '0x1f', '0x0', '0x0', '0x0', '0x36'] |
| setAccTime(1, 1000) | ['0x81', '0x5', '0x2f', '0x0', '0x0', '0x0', '0xe8', '0x3', '0x0', '0x0'] | ['0x81', '0x5', '0x2f', '0x0', '0x2', '0x0', '0xe8', '0x3', '0x0', '0x0', '0x36'] |
| setTargetVelocity(1, 100) | ['0x81', '0x5', '0x30', '0x0', '0x0', '0x0', '0x64', '0x0', '0x0', '0x0'] | ['0x81', '0x5', '0x30', '0x0', '0x2', '0x0', '0x64', '0x0', '0x0', '0x0', '0x36'] |
| setTargetPosition(1,50000) | ['0x81', '0x5', '0x31', '0x0', '0x0', '0x0', '0x50', '0xc3', '0x0', '0x0'] | ['0x81', '0x5', '0x31', '0x0', '0x2', '0x0', '0x50', '0xc3', '0x0', '0x0', '0x36'] |
| setHomingMode(1) | ['0x81', '0x5', '0x1', '0x0', '0x0', '0x0', '0x28', '0x0', '0x0', '0x0'] | ['0x81', '0x5', '0x1', '0x0', '0x2', '0x0', '0x28', '0x0', '0x0', '0x0', '0x36'] |
| getAccTime(1) | ['0x81', '0x5', '0x2f', '0x0', '0x1', '0x0', '0x0', '0x0', '0x0', '0x0'] | ['0x81', '0x5', '0x2f', '0x0', '0x3', '0x0', '0xe8', '0x3', '0x0', '0x0', '0x36'] |
#### 插补模式通信协议
##### 进入插补模式
需要切换运行模式为同步位置插补模式.最好是回零之后,再切换为插补模式.其他模式切换如出现问题请与技术支持联系. 用户可以在插补模式下可以自己平滑位置,平滑速度模式.
##### 插补模式的通信机制(板载USB串口)

发送插补数据帧长度:324字节,返回数据帧长度:11字节.
发送插补数据帧结构:4+5x16x4,分别为4字节的帧头,5组数据,每组数据包含16个电机(编号1-16)的插补位置信息(4字节).
插补周期:10ms,每次发送的插补数据包含5个插补周期,共计50ms的数据.
发送数据帧帧头内容(4字节): 0x01,0x0c,0x00,0x00.
返回缓存状态数据帧结构:如图.

返回数据帧的意义和用法:返回数据帧中包含了设备中缓存的状态信息,0x03表示已满,不要再发数据给设备,否则会溢出,导致数据丢失,此时发送一条缓存状态查询指令(10字节),等待返回数据帧,
如果返回数据任然为0x03则继续发送查询指令,直到状态数据小于0x03,
则发送下一组324字节的数据帧.这样做是为了保证设备中的数据缓存不出现断流,设备中使用硬件定时器从缓存中取数据,向其他从站发送,时间以当前插USB的设备为基准.发送查询缓存指令时也要注意ID号码,
任意ID均可作为主站,但是要查询该ID号的缓存状态,再决定是否发送插补数据帧.
查询缓存指令:Index 98,详细的请参考上面介绍.
#### 并发数据(一个消息控制120个电机)通信协议
数据帧长度:484字节,返回数据帧长度:0字节 or 11字节(2020年11月之后发货的版本有返回数据).
数据帧结构:4+120x4,分别为4字节的帧头,120个电机(编号1-120)的插补位置信息(4字节).
帧头内容(4字节): 0x01(预留) 0xXX(参数索引) 0x00(预留) 0x00(预留)
注意: 并发数据只能进行写操作,不能进行读取数据.
---
### 教程
| |
| --- |
| [001.使能电机](#t001) |
| [002.失能电机](#t002) |
| [003.工作在位置模式](#t003) |
| [004.工作在回零模式](#t004) |
| [005.工作在速度模式](#t005) |
| [006-扫描在线设备](#t006) |
| [007-修改ID编号](#t007) |
| [008-让两台电机同时运动, 工作在位置模式](#t008) |
#### 001-使能电机
```
# Demo-01: How to turn on DBD Stepper Driver
# 示例-01:如何使能DBD步进电机驱动器
from DBDynamics import Ant
m = Ant('/dev/ttyUSB0') # or COM2 COM3
motor_id = 1 # 目标驱动器的编号
m.setPowerOn(motor_id)
m.stop() # 释放接口资源
# Note: when turn on stepper driver, the motor is controlled by driver, otherwise, the motor is free to run.
# 注意:当使能驱动器后,电机受驱动器控制,否则电机可自由转动
```
#### 002-失能电机([setPowerOff](#setPowerOff) )
```
# Demo-02: How to turn off DBD Stepper Driver
# 示例-02:如何失能DBD步进电机驱动器
from DBDynamics import Ant
m = Ant('/dev/ttyUSB0') # or COM2 COM3
motor_id = 1 # 目标驱动器的编号
m.setPowerOff(motor_id)
m.stop() # 释放接口资源
# Note: when turn on stepper driver, the motor is controlled by driver, otherwise, the motor is free to run.
# 注意:当使能驱动器后,电机受驱动器控制,否则电机可自由转动
```
#### 003-工作在位置模式
```
# Demo-03: How to set DBD Stepper Driver working at Position Mode
# 示例-03:如何设置DBD驱动器工作在位置模式,并且在AB两个位置点间反复运行3次。
from DBDynamics import Ant
import time
m = Ant('/dev/ttyUSB0') # or COM2 COM3
motor_id = 1 # 目标驱动器的编号
m.setPositionMode(motor_id) # 设置运行模式
m.setTargetVelocity(motor_id, 100) # 设置目标速度
m.setAccTime(motor_id, 500) # 设置加速时间
m.setPowerOn(motor_id) # 使能
pos_a = 50000 * 1 # 目标位置a 正一圈
pos_b = 50000 * -1 # 目标位置b 负一圈
for loop in range(0, 3): # 循环3次
m.setTargetPosition(motor_id, pos_a) # 设置目标位置a
time.sleep(0.5)
m.waitTargetPositionReached(motor_id) # 等待到达目标位置
m.setTargetPosition(motor_id, pos_b) # 设置目标位置b
time.sleep(0.5)
m.waitTargetPositionReached(motor_id) # 等待到达目标位置
m.stop() # 释放接口资源
# Note: DBD Driver can work at Position Mode, Velocity Mode, Homing Mode and Interpolation Mode.
# please visit https://roboway.top/products/Ant/#operationmode for details.
# 注意:DBD驱动器可以工作在位置模式,速度模式和回零模式以及插补模式
# 请登录网站 https://roboway.top/products/Ant/#operationmode 查看更加详细的模式信息介绍。
```
#### 004-工作在回零模式
```
# Demo-04: How to set DBD Stepper Driver working at Homing Mode
# 示例-04:如何设置DBD驱动器工作在回零模式
from DBDynamics import Ant
m = Ant('/dev/ttyUSB0') # or COM2 COM3
motor_id = 1 # 目标驱动器的编号
m.setPowerOn(motor_id) # 使能
m.setHomingLevel(motor_id, 1) # 设置回零传感器的触发电平 1/0
m.setHomingDirection(motor_id, 1) # 设置回零的运动方向 1/-1
m.setTargetVelocity(motor_id, 20) # 设置回零的运行速度,建议速度慢一些
print("Enter Homing Mode")
m.setHomingMode(motor_id) # 进入回零模式
m.waitTargetPositionReached(motor_id) # 等待回零模式完成
print("Homing Done")
m.stop() # 释放接口资源
# Note: DBD Driver can work at Position Mode, Velocity Mode, Homing Mode and Interpolation Mode.
# please visit https://roboway.top/products/Ant/#operationmode for details.
# 注意:DBD驱动器可以工作在位置模式,速度模式和回零模式以及插补模式
# 请登录网站 https://roboway.top/products/Ant/#operationmode 查看更加详细的模式信息介绍。
```
#### 005-工作在速度模式
```
# Demo-04: How to set DBD Stepper Driver working at Velocity Mode
# 示例-04:如何设置DBD驱动器工作在速度模式
from DBDynamics import Ant
m = Ant('/dev/ttyUSB0') # or COM2 COM3
motor_id = 1 # 目标驱动器的编号
m.setRunningCurrent(motor_id, 500)
m.setKeepingCurrent(motor_id, 200)
m.setPowerOn(motor_id) # 使能
m.setTargetVelocity(motor_id, 50) # 设置回零的运行速度,建议速度慢一些
print("Enter Homing Mode")
m.setVelocityMode(motor_id) # 进入回零模式
m.stop() # 释放接口资源
# Note: DBD Driver can work at Position Mode, Velocity Mode, Homing Mode and Interpolation Mode.
# please visit https://roboway.top/products/Ant/#operationmode for details.
# 注意:DBD驱动器可以工作在位置模式,速度模式和回零模式以及插补模式
# 请登录网站 https://roboway.top/products/Ant/#operationmode 查看更加详细的模式信息介绍。
```
#### 006-扫描在线设备
```
# 扫描在线设备
from DBDynamicsPro import Ant
m = Ant('/dev/ttyUSB0') # or COM2 COM3
m.scanDevices()
m.stop()
```
#### 007-修改ID编号
```
# 修改ID编号
from DBDynamics import Ant
m = Ant('/dev/ttyUSB0') # or COM2 COM3
currentID = 1 #当前编号
targetID = 3 #目标编号
# 将currentID改为targetID
m.changeID(id=currentID, value=targetID)
m.stop()
```
#### 008-让两台电机同时运动, 工作在位置模式
两台Ant驱动器通过CAN总线连接,CAN总线的收尾要接120欧母终端电阻,USB插到其中任意一个驱动器上.注意:再CAN总线级联前,要确保ID编号不同.
```
# 示例-08:让两台电机同时运动, 工作在位置模式
from DBDynamics import Ant
import time
m = Ant('/dev/ttyUSB0') # or COM2 COM3
motorA_id = 1 # A驱动器的编号
motorB_id = 2 # B驱动器的编号
m.setPowerOn(motorA_id)
m.setPowerOn(motorB_id)
m.setPositionMode(motorA_id) # 设置运行模式
m.setPositionMode(motorB_id) # 设置运行模式
m.setTargetVelocity(motorA_id, 100) # 设置目标速度
m.setTargetVelocity(motorB_id, 100) # 设置目标速度
m.setAccTime(motorA_id, 500) # 设置加速时间
m.setAccTime(motorB_id, 500) # 设置加速时间
pos_a = 50000 * 1 # 目标位置a 正一圈
pos_b = 50000 * -1 # 目标位置b 负一圈
for loop in range(0, 3): # 循环3次
m.setTargetPosition(motorA_id, pos_a) # 设置目标位置a
m.setTargetPosition(motorB_id, pos_b) # 设置目标位置a
time.sleep(0.5)
m.waitTargetPositionReached(motorA_id) # 等待到达目标位置
m.waitTargetPositionReached(motorB_id) # 等待到达目标位置
m.setTargetPosition(motorA_id, pos_b) # 设置目标位置b
m.setTargetPosition(motorB_id, pos_a) # 设置目标位置b
time.sleep(0.5)
m.waitTargetPositionReached(motorA_id) # 等待到达目标位置
m.waitTargetPositionReached(motorB_id) # 等待到达目标位置
m.stop() # 释放接口资源
# Note: when turn on stepper driver, the motor is controlled by driver, otherwise, the motor is free to run.
# 注意:当使能驱动器后,电机受驱动器控制,否则电机可自由转动
```
---
### 视频
---
#### 01-PythonSDK简单测试
#### 02-PythonSDK直线滑台回零测试
#### 03-AndroidSDK测试
## About DBD
DBD is a startup manufacturer of innovative matrix motion technologies, and as a manufacturer and
developer
of motor drives, controllers, and systems, DBD is designing its technology with emphasis on
performance,
efficiency, reliability, safety and simplicity.
* [Twitter](#)
* [Facebook](#)
* [Instagram](#)
* [Email](#)
© DB Dynamics