【发布时间】:2014-11-25 08:55:51
【问题描述】:
我尝试使用使用协议的程序来控制步进电机(见下文) 我可以使用 Accelstepper(见下文)控制步进器,但不知道如何对 Arduino 进行编程,以便它能够通过串行端口根据 te 协议进行通信。
#include <AccelStepper.h>
// Define a stepper and the pins it will use
AccelStepper stepper(1, 3, 4);
int pos = 8192;
void setup()
{
stepper.setMaxSpeed(5000);
stepper.setAcceleration(1500);
}
void loop()
{
if (stepper.distanceToGo() == 0)
{
delay(500);
pos = -pos;
stepper.moveTo(pos);
}
stepper.run();
}
发送到转台的所有命令都是简单的字符格式,包括电机编号。只有标记为 xxx 的部分作为字节数据传递给表。例如,如果您希望表 1 旋转 4 步而不是传递“I1M004”,则传递“I1M”+ (char)0 + (char)0 + (char)4 一般来说,所有命令都会以如下形式得到回复:^XXXXXX
命令
V 请求转台的状态。通常的回复是 ^R1R2R3R4 表示旋转 1 准备好,旋转 2 准备好等。^B1xxxR2R3R4 表示旋转 1 忙,其中 xxx 是 3 个字节,表示旋转还需要执行多少步。
SmMxxx 将电机 m 的速度设置为 xxx,其中 xxx 是一个 3 字节的数据,表示速度。示例代码:port.Write("S1M" + (char)0 + (char)6 + (char)255); // 将电机 1 的速度设置为 1791。我们转台的标准速度范围是:0x000001 到 0x0012FF(1 到 4863)。控制器将响应 ^mxx 镜像电机编号和速度设置的最后 2 个字节。
Immxxx 转动电机 m xxx 步数。控制器将通过 ^Bmxxx
进行确认DmCWLO 设置电机编号 m 顺时针旋转(因此每个连续命令旋转电机 m 都会顺时针旋转)。
DmCWHi 设置旋转 m 逆时针旋转。
EmHALT 旋转 m 停止。 旋转采样命令序列
为了简单起见,电机编号以字符形式传递,但步数和速度以 3 个字节的二进制形式传递。 发送:V 回复:^R1R2R3R4 发送:S1M1791 回复:^191 发送:D1CWLO 回复:^ 发送:I1M100 回复:^B1100
【问题讨论】:
标签: arduino