arduino - 压电电机的 Arduino MKR (RS)485 错误
问题描述
我的新项目有问题。目标是通过RS485使用Arduino MKR Wifi 1010控制我的压电电机。出于这个原因,我有这些组件:
Arduino MKR Wifi 1010 Arduino MKR 485 Shield 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 Shield 正在向 Piezodriver 发送命令,而不是发送到任何地方?在我看来,终端机的号码是随机的。即使没有任何东西连接到 MKR 485 Shield,它们也会出现。
那么如何在代码中找到或设置PM401的地址呢?
还是我必须发送完全不同的命令?
它们必须以 ASCII 格式发送到 115200n81。这条线RS485.write('X127M2;');
提供了吗?
我有点迷茫,也是因为我在该领域没有太多经验,并且 try&error 在这里不起作用。希望有一些提示:)
解决方案
我需要地址吗?如果,我如何得到它。
这在手册中进行了解释...阅读它!
压电驱动器是半双工还是全双工?
该手册仅列出了一对数据引脚。所以它必须是半双工的。
但是示例代码说它必须是全双工的。
MKR 485 扩展板支持半双工和全双工。阅读手册。
我想以 ASCII 码发送 piezodriver 的命令是:
X1M2;
X1J200,0,100;
根据手动命令以回车结束。为什么要在命令末尾加上分号?
RS485.write(X1J200,0,100;);
甚至RS485.write('X1M2;');
不会编译。
替换你需要使用双引号。使用无引号或单引号将不起作用。
你的命令应该看起来像RS485.write("X1M2\r");
推荐阅读
- node.js - 我在 ejs 中发现错误。请告诉我哪里出错了?
- c# - 如何为每个 Xamarin.Forms 页面设置不同的 colorPrimary、colorAccent...?C#
- snowflake-cloud-data-platform - 如何加载和验证多种格式的时间戳数据?
- coq - 位向量的强制转换
- informix - 备份和恢复informix数据库
- python - 具有所用参数选择的函数
- database - 将多个数据库数据同步到一个数据库中
- javascript - 如何使用 Javascript 在 Photoshop 中选择另一层内的层,并使其可见/不可见
- java - Java-17 - switch case - 应该删除未使用的方法参数
- javascript - Vercel - 无需推广的部署