# 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](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Version](https://img.shields.io/badge/version-4.0-green.svg)]() [![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20Android%20%7C%20macOS-lightgrey.svg)]() > 超小型创客神器,尺寸仅 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 产品图
**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 互通 | ## 🔧 产品细节 ### 📸 多角度展示
正面视图
正面视图
电源侧
电源接口侧
信号侧
信号接口侧
USB侧
USB 接口侧
## 📐 机械尺寸
机械尺寸图

精确的机械尺寸图,便于集成设计

## 🔌 接口布局
接口布局图

标准化接插件设计,确保连接可靠性

### 📋 接口详细说明 | 接口类型 | 规格 | 功能说明 | 注意事项 | |----------|------|----------|----------| | **🔋 电源接口** | 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)**
USB发送帧

PC → Ant4 数据帧格式

**接收数据帧(Rx Message)**
USB接收帧

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总线广播通信模式

CAN总线采用**广播通信**模式设计: - 📡 **多主模式**:总线上任何设备都可发起通信 - 🔄 **实时响应**:所有设备同时接收广播消息 - 🎯 **ID过滤**:设备根据CAN ID判断是否处理消息 - 🌐 **网络拓扑**:支持菊花链、星型等多种连接方式 ##### 📋 通信参数
| 参数 | 规格 | 说明 | |------|------|----- | | **波特率** | 1 Mbps | 高速实时通信 | | **数据位** | 8 bits | 标准CAN数据格式 | | **校验方式** | CRC-15 | 硬件CRC校验 | | **帧格式** | 标准帧 | 11位标识符 | | **总线长度** | ≤40m | @1Mbps波特率 | | **节点数量** | ≤127 | 理论最大节点数 |
##### 📦 CAN帧结构
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串口) ![](images/isp.png) 发送插补数据帧长度:324字节,返回数据帧长度:11字节. 发送插补数据帧结构:4+5x16x4,分别为4字节的帧头,5组数据,每组数据包含16个电机(编号1-16)的插补位置信息(4字节). 插补周期:10ms,每次发送的插补数据包含5个插补周期,共计50ms的数据. 发送数据帧帧头内容(4字节): 0x01,0x0c,0x00,0x00. 返回缓存状态数据帧结构:如图. ![](images/Usb_rx_msg.png) 返回数据帧的意义和用法:返回数据帧中包含了设备中缓存的状态信息,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