我的新项目有问题。目标是通过通过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软件公司工作)
我试着用下面的代码来做:
#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);
}在终点站,我得到了这样的东西:
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;');提供这一点吗?
我有点迷茫,也因为我在这个领域没有太多的经验,而且尝试&错误在这里行不通。希望有一些建议:)
发布于 2021-01-15 09:48:23
所以我现在明白了,这是个愚蠢的电缆问题。来自MKR 485屏蔽的Y输出必须转到数据+ (从PMD401到Z到Data - )。而不是到处乱跑,到处都是。
下面是每个尝试相同测试的人的最终测试代码:
#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);
}发布于 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");
https://stackoverflow.com/questions/65717053
复制相似问题