首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Piezo电机实现Arduino MKR (RS)485误差

用Piezo电机实现Arduino MKR (RS)485误差
EN

Stack Overflow用户
提问于 2021-01-14 10:15:09
回答 2查看 192关注 0票数 0

我的新项目有问题。目标是通过通过RS485控制 my 压电马达Arduino MKR Wifi 1010。出于这个原因,我有以下几个组件:

Arduino MKR Wifi 1010 Arduino MKR 485屏蔽Piezo Motordriver PM401 (手册:https://piezomotor.com/wp-content/uploads/2019/03/150025_PMD401_Technical_Manual.pdf)

我使用USB适配器和压僵尸软件测试了RS485。起作用了。但是如果涉及到代码,我就没有进一步的信息了。

我想在ASCII代码中向压电驱动器发送的命令是:

X127M2;

X127J200,0,100;

(他们在PiezoMotor DriveLab软件公司工作)

我试着用下面的代码来做:

代码语言:javascript
复制
#include <ArduinoRS485.h>

int counter = 0;

void setup() {
  RS485.begin(115200);
  Serial.begin(115200);
  RS485.receive();
}

void loop() {
  RS485.beginTransmission();
 
  if (RS485.available()){
    Serial.println(RS485.read());
  }
  else {
    Serial.write("Not available");
  }
  Serial.println(RS485.available());
  RS485.write('X127M2;');
  RS485.write('X127J200,0,100;');
  Serial.print("Count No: ");
  Serial.println(counter);
  RS485.endTransmission();
  counter ++;
  delay(2000);
}

在终点站,我得到了这样的东西:

代码语言:javascript
复制
88
8
Count No: 1
50
15
Count No: 2
67
22
Count No: 3

我怎么知道,MKR 485盾正在向Piezodriver发送命令,而不是向任何地方发送命令?在我看来,终端的数量是随机的。即使没有任何连接到MKR 485盾,它们也会出现。

那么,如何在代码中找到或设置PM401的地址呢?

还是我必须发出完全不同的命令?

他们必须在ASCII发送115200n81。行RS485.write('X127M2;');提供这一点吗?

我有点迷茫,也因为我在这个领域没有太多的经验,而且尝试&错误在这里行不通。希望有一些建议:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-15 09:48:23

所以我现在明白了,这是个愚蠢的电缆问题。来自MKR 485屏蔽的Y输出必须转到数据+ (从PMD401到Z到Data - )。而不是到处乱跑,到处都是。

下面是每个尝试相同测试的人的最终测试代码:

代码语言:javascript
复制
#include <ArduinoRS485.h>

int counter = 0;

void setup() {
  RS485.begin(115200);
  Serial.begin(115200);
  RS485.receive();
}

void loop() {
  RS485.beginTransmission();
 
  if (RS485.available()){
    Serial.println(RS485.read());
  }
  else {
    Serial.write("Not available");
  }
  RS485.write("X127M2;");
  delay(500);
  RS485.write("X127J200,0,200;");
  delay(2000);
  RS485.write("X127J-200,0,200;");
  Serial.print("Count No: ");
  Serial.println(counter);
  RS485.endTransmission();
  counter ++;
  delay(10000);
}
票数 0
EN

Stack Overflow用户

发布于 2021-01-14 10:46:47

,我需要一个入口吗?如果我怎么得到它。

手册中解释了这一点..。读一读!

也是Piezodriver的一半还是全双工?

手册只列出一对数据引脚。所以肯定是半复式。

,但是示例代码说它必须是全双工的。

MKR 485屏蔽支持半双工和全双工。阅读手册。

我想在ASCII代码中向压电驱动器发送的命令是:

X1M2;

X1J200,0,100;

根据手册,命令以回车方式终止。为什么你在命令的末尾加了一个塞米科伦?

RS485.write(X1J200,0,100;);RS485.write('X1M2;');甚至不会编译。

替换您需要使用双引号。不使用或单引号是行不通的。

您的命令应该类似于RS485.write("X1M2\r");

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65717053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档