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.

[参考译文] PGA450-Q1:LIN 请求或不使用多个器件

Guru**** 2587365 points
Other Parts Discussed in Thread: PGA450-Q1

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/615799/pga450-q1-lin-request-nor-working-with-multiple-devices

器件型号:PGA450-Q1

您好!

LIN 总线上有多个 pga450器件。 我已经通过使用 PID ( 命令的高3位、地址的低3位)实现了一个寻址方案和基本命令。 我可以使用分配的地址与器件进行良好的通信。 但我的问题是、当我让器件进行测量、然后询问返回飞行时间数据时、我是否从飞行时间变量接收0xFF 0xFF。  

这是因为代码中的条件:[如果(ECHO_DATA > DetectionThreshold)] 从未满足。 但在第二次读取时、它是、之后每次我读取时、我都会获得有效数据。  然后、当我在另一个器件上读取读数时、我需要再次执行2次读数以获得有效响应、然后返回到之前的器件、再次需要2次读数。 这不是设备之间的干扰问题、我可以在两次读取之间等待几秒钟或几分钟、这无关紧要。 我还可以确保不会触发错误器件的 RX 中断、但在与另一个器件通信时仍然存在一些干扰。

有什么想法吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Gideon、
    是否可以在发送两个初始测量命令时验证 PGA450-Q1是否确实突发? 您可以使用示波器探测换能器、以监控励磁电压。 如果激励为真、那么您能否独立验证 FIFO 存储器是否实际记录了飞行时间数据? 您可能需要使用 EVM 或编写 UART 例程、以便独立于 LIN 接口读取 FIFO 存储器段。

    此外、您能否使用示波器监控 LIN 线路以确保通信信号保持完整性?

    很抱歉、如果您已经尝试过某些硬件调试、但我想通过消除过程确保这完全是一个与 LIN 软件相关的问题。 我可能需要查看您的代码来帮助进一步解决此问题。 我以前没有遇到过这个问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、谢谢你 Akeem!

    LIN 总线通信正常。 我使用 LIN 示例项目2.1.1版。 我的更改仅在这个阶段处理。 在 PID 中断中、我使用 PID 的高3位作为命令、使用低3位作为地址。

    使用3的 void linPID_ISR (void)中断5
    PID = LIN_PID 和0x38;
    地址= LIN_PID&0x7;
    if (address =DATA_EEPROM[31]){
    switch (pid){
    情况0x20://开始距离测量(1 ->长(0.5到5米、否则短(< 1米))
    DATA_CNT = 1;//要接收的字节数
    LIN_CTRL = 0;//Rx
    EI6 = 1;//启用 LIN Rx 中断
    中断;

    情况0x8:
    DATA_CNT = 3;//要发送的字节数
    TX_DATA0 = 0x12;
    TX_Data1 = 0x34;
    TX_DATA2 = DATA_EEPROM[31];
    LIN_CTRL = 1;// Tx
    EI7 = 1;//启用 Tx 中断
    中断;

    情况0x10://向主控方发送2个字节(回波)
    DATA_CNT = 2;//要发送的字节数
    TX_DATA0 = TimeOfFl光.u8[0];
    TX_Data1 = TimeOfFl光.u8[1];
    LIN_CTRL = 1;// Tx
    EI7 = 1;//启用 Tx 中断
    中断;

    情况0x18://针对回波阈值写入 EEPROM 的前7个字节
    DATA_CNT = 7;// LIN 消息将有7个字节
    LIN_CTRL = 0;//LIN 接收设置
    EI6 = 1;//启用 LIN Rx 中断
    中断;

    默认值://未定义 LIN 命令
    中断;




    在进一步检查时、您对激励检查的请求向我展示了更多内容。 如果我只使用一个器件、并且我进行一个简短的测量、它就可以工作。 如果我尝试长距离测量、第一次将发送突发、就像再次进行短距离测量一样、然后第二次读取后就可以了。 如果我切换回短距离、它首先测量一个长距离、然后仅测量一个短距离、以便在之后读取。 因此、这似乎与我在两个器件之间来回切换时的问题相同。 它总是在第一次尝试时进行短距离突发、然后我不会得到该阈值交叉、因此接收中断中的代码位被命中:

    if (MaskEcho =0){
    TimeOfFlIGHT.U16 = 65535;