您好!
最近我一直在测试 MCF8316A、每当我遇到一个问题、我主要是在论坛上找到它、但这个问题我很难找到很多相关信息。
我将评估模块套件(MCF8316AEVM)与外部 MC (Arduino)配合使用、并且我已成功写入和读取寄存器、并将寄存器写入 EEPROM、因此建立了通信(所有这些都已禁用 CRC)。
当时我正在写入速度并进行读取(使用 I2C)、大部分情况下都可以正常工作并保持准确、但有时会停止正确通信、无法写入新速度或读取完整的寄存器、 或者有时是完整寄存器(也称为读取 FG_SPEED_fdbk、为我提供0xFFFFFFFF 的值)。 我知道在使用 I2C 进行速度控制时读取寄存器的错误、但读取应该在电机运行时读取的寄存器是否合适、至少每秒读取一次? 至少这是我的想法、因此我猜想、因为我不仅仅是以新的速度重写登记册、 但是我只是使用0x06630000 (最大速度5%)的值来递增 DIGITAL_SPEED_CTRL 寄存器、且通信发生损坏且希望实施 CRC 以确保数据流正确。
我在代码中执行了 CRC 计算、通过使用在线计算器、我确保了结果正确、并且正在写入或读取正确的 CRC 值。 不过、当读取某个数据的 CRC 值的 MCF 时、我会得到一个完全不同的值、该值未显示在任何 CRC8算法中。 现在、我遇到了这个论坛文章: https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1120366/mcf8316a-cannot-clear-faults、它确实指出这是一个自定义的 CRC8、但初始值和多项式与 ROHC 相同、所以我使用 ROHC 查找表。
只是为了确认使用示例值0x440FCEC6构建 CRC 的方法、此示例值读取到 MOTOR_STARTUP1寄存器(0x84)
1) 0x02
2) 0xD0、0x00、0x84
3) 0x03 (因为数据表要求+ READ 位)
4) 0x44、0x0F、0xCE、0xC6
计算结果为0x13、读数为0x20
这是正确的操作顺序吗? 我也尝试过4) 0xC6, 0xCE, 0x0F, 0x44,我计算为0x5D,这仍然不是我从 MCF 得到的20。
如果有人能对电机转速写入和读取可能遇到的困难以及 MCF 计算 CRC 的方式给出一些见解、我将不胜感激。
提前感谢!
此致、
约旦