我使用 LPC11Cxx 演示测试并理解了 SDO rx 和 tx。但这个演示堆栈只有 SDO 函数和驱动程序API。我想为此实现 PDO。有哪些示例代码或实现步骤或功能?
我想定期从从节点向主节点发送 68(ADC 数据)字节的数据。我怎样才能做到这一点?
对于上述任务,SDO 是否优于 PDO?我需要多少个 PDO 才能发送 64 字节的数据?如何设置 PDO 映射和参数?主节点和从节点有什么区别?我如何区分代码?
我不确定你的例子,但如果你可以通过 CAN 总线发送 SDO,你应该能够使用 PDO,尽管更复杂。
一般步骤是: 1. 定义您的 PDO。您正在创建 PDO 与节点中的一个或多个数据对象之间的映射。例如,在我的系统上,我创建了一个 Transmit PDO,它设置电机位置和速度(两个对象),它响应另一个包含电机电流、位置和状态的 PDO(一个接收 PDO)。这是 PDO 的定义。
要使用您的 PDO,请发送一条带有您在步骤 1 中定义的 COBid 的 PDO 消息。对于我来说,我发送带有位置和速度的 PDO 0x201。节点将接收此信息并设置您为您定义的对象映射提供的值。请注意,该节点尚未对数据起作用。
在您发送了所需数量的 PDO 之后(例如,我将用于位置/速度的 PDO 发送到总线上的 7 个节点以控制 7 个电机),然后您发送一个 SYNC。这会导致节点对您发送的 PDO 数据进行操作 - 即移动电机。
每个节点都会用一个传输 PDO 进行响应,以发回您定义的任何内容。我的节点发送位置、状态和当前。
根据需要重复。
谷歌“CANOpen momento dupin”以获取文档中的一些示例。您必须阅读节点上的文档以了解它们是如何定义的,或者阅读嵌入式 canopen 书中的章节。我有一些旧代码,您可以查看供应商提供给我的旧代码。这也可能是一个很好的来源。节点不必支持 PDO 映射,但我认为大多数都支持。