英飞凌
直播中

贾飞世

8年用户 1887经验值
私信 关注

请问如何在LIN从属设备中使用自动调整器?

当联机模式为从属模式时
如何选择正确的参数来设置从属模式下的自动步进率?
这是我在函数 lin_init() 中的代码
if (lin_mode[bus] == IfxAsclin_LinMode_master) // for master init
{
linConfig.brg.baudrate = 19200;
}
else //for slave init
{
linConfig.btc.prescaler = 32; //3000
// linConfig.brg.baudrate = 19200;
linConfig.brd.abd = TRUE;
linConfig.brd.lowerLimit = 0x36;
linConfig.brd.upperLimit = 0xBB; //3000
}
而我得到的错误信息是这样的
linAutobaudDetectionError = 1

回帖(1)

杨海清

2024-5-20 15:38:37
在 LIN 从属设备中使用自动调整器,首先需要确保从属设备能够正确地识别和同步主设备的波特率。在您提供的代码中,您已经为从属设备设置了一些参数,但是可能需要进行一些调整以解决自动步进率的问题。

1. 首先,确保从属设备的波特率与主设备相匹配。在您的代码中,无论 LIN 模式是主模式还是从模式,波特率都设置为 19200。这是一个好的开始,但请确保主设备也使用相同的波特率。

2. 在从属模式下,您需要启用自动波特率检测(Autobaud Detection)。在您的代码中,已经设置了 `linConfig.brd.abd = TRUE;`,这是一个正确的步骤。

3. 设置自动波特率检测的上下限制。在您的代码中,已经设置了 `linConfig.brd.lowerLimit = 0x36;` 和 `linConfig.brd.upperLimit = 0xBB;`。这些值应该覆盖了可能的波特率范围,但请确保它们与主设备的波特率相匹配。

4. 检查错误信息 `linAutobaudDetectionError = 1`。这个错误通常表示自动波特率检测失败。可能的原因包括:
   - 主设备和从属设备的波特率不匹配。
   - 从属设备没有正确地识别到主设备的同步脉冲。
   - 从属设备的自动波特率检测参数设置不正确。

为了解决这个问题,您可以尝试以下步骤:

1. 确保主设备和从属设备的波特率完全匹配。

2. 检查从属设备的硬件连接,确保没有连接问题。

3. 检查从属设备的自动波特率检测参数设置,确保它们覆盖了主设备的波特率范围。

4. 如果问题仍然存在,您可以尝试使用调试工具或示波器来观察从属设备接收到的信号,以确定问题所在。

5. 如果需要,您可以考虑修改从属设备的自动波特率检测算法,以便更好地适应您的特定应用场景。

通过以上步骤,您应该能够解决自动步进率的问题,并确保从属设备能够正确地与主设备通信。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分