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.

[参考译文] TMS570LS3137:捕捉信号读取不能正常工作

Guru**** 2595805 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1035914/tms570ls3137-capture-signal-read-not-working-properly

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

大家好、

虽然我已经从 halcogen 和 CCS 软件进行了必要的配置、但我无法获取稳定的数据。 当我生成 PWM 并以捕获模式读取它时、我获得的数据始终正确、但它不检测 GND 和空闲状态。

如果您能对此提供帮助、我将非常高兴。

Halcogen 配置:

CCS 代码配置:

/** PWM 占空 比和 频率 设置 开始 代码 */
    hetSIGNAL_t 信号;
    信号占空 比=  50
    SIGNAL.PERIOD =  1000
    pwmSetSignal (hetRAM1、pwm0、Signal);
    /** PWM 占空 比和 频率 设置 结束 代码 */

    /** 捕获 模式 读取 开始 代码 */
    while (1)
    {
        capGetSignal (hetRAM1、 cap0、 &DataCap0);
        浮点 PeriodValueCap0 =  ceil (DataCap0.Period);
        float DutyValueCap0 =  DataCap0.Duty
    }
    /** 捕获 模式 读取 结束 代码 */
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    PCNT 指令用于捕捉 PWM 信号。 在没有边沿转换(下降边沿或上升边沿)的情况下、PCNT 无法捕捉信号。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Hİ QJ Wang、
    感谢您的回答。  当系统稳定时、捕获模式是有效的。 但信号传感 PCB 也可能出现故障。 如果系统出现错误、我可以采取哪些预防措施? (用于系统自检)
    此致
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Eyup、

    如果长时间没有检测到边沿,则 PCNT 计数器会 溢出(计数器值中的所有1),然后 PCNT 停止计数,直到下一次复位
    检测到边沿。

    我不知道如何在系统级测试信号。

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

    我使用同一引脚的 capGetSignal()和 gioGetBit()函数计算了信号的瞬时逻辑状态和周期任务值。 我通过一个小型软件插件使捕获值对 GND 引脚敏感。 由于我还没有进行静态分析、我不知道 Misra 的适用性、但我想分享一下。

    /** Capture Mode Read Begin Code */
    capGetSignal(pinmapCAP_PIN, &data);
    CapData.Counter++;
    CapData.PeriodISR = gioGetBit(hetPORT1, 14);
    if(CapData.PeriodISROld != CapData.PeriodISR)
    {
        CapData.Counter = 0;
    }
    CapData.PeriodISROld = CapData.PeriodISR;
    if(CapData.Counter > 1000)
    {
        CapData.PeriodState = 0;
        CapData.Counter--;
    }
    else
    {
        CapData.PeriodState = 1;
    }
    
    CapData.PeriodValue = CapData.PeriodState & data.period;
    /** Capture Mode Read End Code */

    此致、

    Eyup sayin