This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28069:低温度下的 CAN 行为

Guru**** 2539500 points
Other Parts Discussed in Thread: TCAN1042-Q1

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1222178/tms320f28069-can-behavior-in-low-temperature

器件型号:TMS320F28069
主题中讨论的其他器件:TCAN1042-Q1

尊敬的专家:

我已经注意到、当温度下降到非常低的水平(-30 ~-40°C)时、我的应用中 CAN 模块的一个奇怪运行状态。 CAN 查看器以不受控制的间隔显示一系列 CAN Tx 消息。 在室温下、CAN Tx 被监控为正常、传输间隔为1秒。 最近、我在示波器上检查了 Tx 信号、发现有连续的 CAN Tx 消息。

此信号类似于 CAN 节点未连接到任何物体(开放节点)且未接收到 ACK 时的信号。 我发现当没有接收到 ACK 时、eCAN 模块将继续进行重新传输、如本文中所述、我已经通过在 MCU 节点开路时探测 CAN-Tx 引脚来确认这一点。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1010550/tms320f28069-can-transmit-acknowledgment-isr-is-not-receive/3740382?tisearch=e2e-sitesearch&keymatch=can%25252520transmit%25252520no%25252520acknowledgment#3740382

CAN 电路由 MCU F28069、收发器 TCAN1042-Q1和 TVS 二极管 NUP2105L 组成、所有这些器件的工作温度都高达-55。
我有两个问题:

为什么 CAN 模块在低温环境下会这样运行?

2.是否有任何方法可以取消重新传输,例如设置 CANTRR 位或 CANTA 位?

感谢您的帮助。

此致、
Luiz

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Luiz、

            您尚未附加任何波形。 请附上良好和"不良"波形。 "坏"波形可能不是有效的 CAN 帧。

    CAN 电路包含 MCU F28069、收发器 TCAN1042-Q1和 TVS 二极管 NUP2105L、它们的工作温度高达-55。[/报价]

    您说的对 NUP2105L 正确、但对额定温度仅在-40°C 之前的 F28069和 TCAN1042-Q1不正确

    Unknown 说:
    1. 为什么 CAN 模块在低温环境下的行为如此?

    您正在查看的确切低温是多少 启动 要查看此问题? 您是否将 INTOSC 用作器件时钟源? 如果是、您是否会按照 www.ti.com/lit/SPRABI7?中所述执行振荡器补偿

    Unknown 说:
    2. 是否有任何方法可以取消重新传输、例如设置 CANTRR 位或 CANTA 位?

    您可以尝试 CANTRR。 如果这不起作用、您可以对模块进行软复位。 但是、您需要首先了解问题的根本原因。

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Hareesh。
    感谢您的答复。

    您尚未附加任何波形。 请附上良好和"不良"波形。 "坏"波形可能不是有效的 CAN 帧。

    请查看下面随附的文件。 和 CAN 日志均在-23摄氏度下捕获。 CAN 例程是含有8个字节数据的1秒 Tx。 良好信号显示一致的1秒间隔。 差信号会显示非常密集的间隔。 CAN 日志显示了类似的模式。 良好信号显示均匀的1秒间隔。 不良信号间隔约为500us。

    您说的对 NUP2105L 是正确的、但对 F28069和 TCAN1042-Q1则不正确、它们的额定值仅在-40°C 之前。

    可以。 同意。 当温度大约-20摄氏度时,症状开始出现,并在-30摄氏度及以下变得更糟,我找不到任何良好的信号。

    您的精确低温是什么 启动 要查看此问题? 您是否将 INTOSC 用作器件时钟源? 如果是、您是否会按照 www.ti.com/lit/SPRABI7?
    中所述执行振荡器补偿

    我使用 INTOSC、不执行 osc 补偿。 为了检查时钟 的重要性、我在 CAN_Tx 函数上放置了一个计数器和一个计时器。 计数器仍正常运行、在1秒内仅增加1次。 我确认每秒调用一次 CAN_Tx 函数。

    当它与秒表相比较时、定时器的值(以秒为单位)也是一致的。

    实际上、MCU 也在运行 SCI、这在同样的情况下是没有问题的。

    您可以尝试 CANTRR。 如果这不起作用、您可以对模块进行软复位。 但是,您需要先了解问题的根本原因。

    我确实尝试了使用 CANTRR 方法。 在传输和 CANTA 之后检查10ms、如果没有收到 CANTA、则触发 TRR。 从理论上讲、不良信号只能持续10ms。 实际上、不良信号的持续时间仍然超过10ms、几乎没有任何改善。

    bool check_can_ack(uint16_t mbox_num){
        struct ECAN_REGS ECanaShadow;
        uint32_t ack_bit;
    
        ECanaShadow.CANTA.all = ECanaRegs.CANTA.all;
        ack_bit = (ECanaShadow.CANTA.all >> mbox_num) & 0x01;
        if(ack_bit == 0){
            return true;
        }
        else{
            return false;
        }
    }
    void clear_can_ack(uint16_t mbox_num){
        ECanaRegs.CANTRR.all = ((uint32_t)0x00000001) << (mbox_num);
    }
    
    main(){
    ...
        if(systemTime.usec - time > 10000 && check_can_ack(CAN_TX.MBox_Num)){
            clear_can_ack(CAN_TX.MBox_Num);
        }
    ...
    }

    问题是、当不良信号持续出现时、CAN 模块无法接收消息、因此我无法控制器件。

    .e2e.ti.com/.../TI_2D00_CAN_2D00_Issue_2D00_20230503.pptx

    希望我的问题陈述清楚。

    此致、
    Luiz

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用 INTOSC,不执行 osc 补偿。

    这是你的问题的根源。 INTOSC 不能在没有振荡器补偿的情况下用于整个器件工作温度范围。

    要检查时钟的 重要性,我在 can_Tx 函数上放置了一个计数器和一个计时器。 计数器仍正常运行、在1秒内仅增加1次。 因此、我确认每1秒调用一次 CAN_Tx 函数。

    这没什么关系。 您的器件不再以90MHz 的频率运行。  

    实际上,MCU 也在运行 SCI,这在同样的情况下也没有问题。

    SCI 没有与 CAN 相同的严格时序要求。 要么需要使用外部晶体运行器件、要么需要定期执行温度补偿、如我在前面的 app.note 中所述。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我曾尝试使用 INTOSC 补偿。 通过快速测试、到目前为止我在 CAN 上没有看到任何坏信号。

    感谢您的建议。

    此致、
    Luiz

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我想得差不多了。 必须使用补偿。 最好使用外部晶体(或陶瓷谐振器)、以实现更严格的容差。