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.

[参考译文] TMS320F28P550SJ:TMS320F28p550SJ - CMPSS 异步跳闸示例 (cmpss_exp1_asynch)-GPIO14 始终读为 0、GPIO15 始终切换

Guru**** 2862450 points

Other Parts Discussed in Thread: LAUNCHXL-F28P55X, TMS320F28P550SJ, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1634838/tms320f28p550sj-tms320f28p550sj---cmpss-asynchronous-trip-example-cmpss_exp1_asynch--gpio14-is-always-reads-0-and-gpio15-is-always-toggling

器件型号: TMS320F28P550SJ
Thread 中讨论的其他器件: C2000WARE、LAUNCHXL-F28P55X

我在 TMS320F28p550SJ Launchpad 上运行 c2000ware 的 cmpss_exp1_asynch 示例。 根据示例文档:

当 CMPIN1P (HSEC 引脚 15) 接收到高电平输入时、GPIO14 应变为高电平、GPIO15 应锁存为高电平。

当 CMPIN1P 接收到低电平输入时、GPIO14 应变为低电平、GPIO15 应正常切换。

从 TMS320F28p550SJ 数据表中、CMP1_HP0 连接到 GPIO224 (Launchpad 上的引脚 A2)。

内部 DAC 设置为 VDD/2、即 1.65V。

我正在从 LaunchPad 3.3V 引脚直接向 A2 施加 3.3V 电压。

但我观察到 GPIO15 正常切换、就像表达式窗口中没有发生跳闸且 OST 也为 0、并且 GPIO14 仅读取 0 一样。但当断点放置在 if (OST!=0) 块内时:观察到 DCBEV1=1、OST=1、GPIO15=1 和 GPIO 14=0

为什么 GPIO15 始终切换、并且 GPIO14 即使在 A2 上施加 3.3V 电压时始终测量为 0?

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

    你好 kavana,

    可能有两个根本原因:

    1.缺少 X-bar 和 Digital Compare Routing

    打开了 从 CMPSS 到 ePWM 跳闸区域没有直接路径 —信号必须通过 ePWM X-BAR 路由到数字比较 (DC) 子模块[2]。 信号流应为:

    CMPSS1.CTRIPH → ePWM X-BAR (Mux 0, position 0) → TRIPx → DCAHTRIPSEL → TZDCSEL → DCAEVT1 → Trip Zone
    

    在示例代码中验证:

    • TRIPxMUXENABLE设置为通过 X-BAR 传递 CMPSS1.CTRIPH [3]
    • DCAHTRIPSEL配置为从正确的跳闸信号[3]生成 DCAH
    • TZDCSEL限定 DCAH 信号以生成 DCAEVT1 [3]

    2.不满足最短信号持续时间

    外部信号必须保持不变 至少持续 3×TBCLK 个周期 功耗问题并导致跳闸[2]。 如果 TBCLK 速度很快、比较器可能会检测到跳闸、但 DC 事件滤波器在正常执行期间不会捕获跳闸(仅在断点处停止时可见)。


    附加检查

    项目 要验证的内容
    DAC 上电延迟 在应用输入之前确保 DAC 初始化后的 500μs 延迟[4]
    OST 标志清除 必须使用EPWM_clearTripZoneFlag()EPWM_TZ_FLAG_OST[5]明确清除跳闸标志
    异步或锁存设置 确认在高电平比较器配置[6]中启用了“asynch or Latch“选项
    GPIO 多路复用器 引脚 A2 还支持 ADC 功能 — 验证引脚多路复用器是否设置为 CMP1_HP0 [1]

    建议的后续步骤

    1. 检查该示例的 X-BAR 配置 —专门查找XBAR_setEPWMMuxConfig()XBAR_enableEPWMMux()调用并确认目标 CMPSS1.CTRIPH
    2. 检查 TBCLK 频率 并计算 3.3V 信号的持续时间是否足够长 (> 3×TBCLK)
    3. 验证 GPIO14/GPIO15 是否配置为输出 由 ePWM 跳闸区操作通过驱动 TZCTL

    断点行为强烈建议比较器和跳闸检测正常工作、问题出在信号路由或时序上、阻止跳闸在正常执行期间锁存。


    来源:

    1. F28P55x LaunchPad 用户指南 — 引脚映射
    2. SPRAD12A - CMPSS 到 ePWM 跳闸布线
    3. SPRACX0 - X-BAR 和直流配置
    4. SPRAD12A - DAC 上电延迟
    5. SPRAD12A — 清除 OST 标志
    6. SPRAD12A — 异步或锁存选项

    此致、

    Zackary Fleenor

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

    我完全按照提供的方式在 LAUNCHXL-F28P55X 上运行 C2000Ware 中的 cmpss_ex1_asynch 示例、无需任何修改。

    这是 TI 的官方示例、但它的行为并不如所述。

    由于硬件和软件均来自 TI、您能解释一下

    为什么此示例在 Launchpad 上不起作用、以及需要进行哪些其他配置或更改才能使其按预期运行?

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

    你好 kavana,

    感谢您的澄清。 指出这一点是正确的、如果您是在 LAUNCHXL-F28P55X 上运行 C2000Ware 中未修改的 cmpss_ex1_asynch 示例、则该示例应按照文件所述运行。 请允许我更具体地缩小根本原因的范围。


    最有可能的根本原因:LaunchPad 上的引脚冲突

    cmpss_ex1_asynch 示例最初是针对 F28P55x controlCARD 开发的、在 LAUNCHXL-F28P55X 上使用时、可能存在引脚映射不匹配问题。

    请验证以下各项:

    1.确认 CMPIN1P 的输入引脚正确无误

    在 LAUNCHXL-F28P55X 上、检查 LaunchPad 原理图以确认:
    - GPIO224 / CMP1_HP0 实际上是可访问的,不与可能加载信号的板载元件(例如 LED,跳线或下拉电阻器)共享
    - LaunchPad 上下文中正确的接头引脚标签( HSEC 引脚 15 与物理接头位置)

    >操作: 对照 GPIO224 交叉参考[LAUNCHXL-F28P55X 原理图](www.ti.com/.../LAUNCHXL-F28P55X) 以检查是否存在板载冲突。


    2.验证 C2000Ware 版本

    C2000Ware 示例已更新、修复了特定于 LaunchPad 的问题。 请确认:

    -您使用的是哪个版本的 C2000Ware(例如,5.00.00.00 )?
    -导航至:`C2000Ware_x_xx_xx_xx\device_support\f28p55x\examples\cmpss\`
    -打开示例的`.projectspec`或`reADME`文件、然后检查 LaunchPad 型号是否有特定于硬件的注释

    >操作:如果您未使用最新的 C2000Ware 版本、请更新并重新测试。 版本说明有时包含特定于示例的错误修复。


    `检查示例中的 Δ I evice.h `d/ Board Selection Macro

    一些 C2000Ware 示例使用电路板选择宏在 controlCard 和 LaunchPad 目标之间切换引脚分配。 `示例的“r evice.h`或` board.h `d并查找类似以下内容:

    #define LAUNCHXL_F28P55X // or controlCARD equivalent

    如果宏设置为错误的电路板目标、示例中的 GPIO 和引脚多路复用器配置将不适合您的硬件。

    >操作:确认为 LAUNCHXL-F28P55X 定义了正确的电路板宏。


    4. GPIO14 始终读取 0

    关于 GPIO14 始终读为 0、请验证:

    -在示例代码中, GPIO14 被配置为通过输出 X-BAR 反映 CTRIPOUTH(高比较器输出)信号
    -确认`XBAR_setOutputMuxConfig ()`和`XBAR_enableOutputMux ()`正确调用 GPIO14 目标 CMPSS1 CTRIPOUTH
    -如果 GPIO14 不是由输出 X-BAR 驱动,而是被读作 GPIO 输入,除非信号被主动驱动,否则它将始终读为 0


    5、快速功能验证步骤

    要确定比较器本身是否正常工作、请尝试以下操作:

    步骤 行动
    检查 CMPSS 原始输出 在 Watch/Expressions 窗口中、监测`CMPSS1.COMPSTS`寄存器位、确认在向 A2 施加 3.3V 电压时高比较器输出置位
    确认 DAC 基准 验证是否针对~1.65V (DAC/2) 正确设置了内部 VDD 值寄存器
    使用示波器探测 GPIO14 使用 GPIO14 上的示波器来排除任何 IDE 采样工件、而不是在 IDE 中读取数据


    摘要

    您描述的断点行为 (OST=1、停止时 DCBEV1=1) 确认比较器跳闸正在发生 — 硬件正在正确检测跳闸。 很可能是以下问题之一:

    板载 LaunchPad 引脚冲突:将 GPIO224 拉至低电平
    2.电路板选择宏:示例中配置错误
    3.输出 X-BAR 路由:对于 GPIO14、未针对 LaunchPad 目标正确设置

    您能否分享:
    -您的 C2000Ware 版本
    -将 3.3V 电压施加到 A2 时`CMPSS1.COMPSTS`的值
    -项目中是否定义了任何电路板选择宏

    这将帮助我们确认确切的问题并提供有针对性的修复。

    此致、
    Zackary Fleenor

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

    HII Zackary、

    感谢您的指导。

    我遵循了您的建议、并对示例进行了进一步调试。 我发现的是、

    当我将高比较器 DAC 设置为低值(即 10)时:

      COMPHSTS = 1、

      跳闸信号后、

      GPIO14 和 GPIO15 设为 1。

    2、外部输入测试:

      CMPSS HP 通过以下方式配置:映射到 A2/GPIO224 的输入信号 0、如图中所示。

      当我将 GPIO224 连接到 LaunchPad 中生成的 3.3V 电压时:  

      COMPHSTS = 0

      GPIO14 保持低电平

      GPIO15 连续切换

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

    您好、Kavana、

    您的最新调试操作明确确认了该问题:比较器硬件起作用(当 DAC 设置为低电平时、COMPHSTS=1)、但可确保 A2/GPIO224 上的外部 3.3V 信号未到达 CMPSS1 输入端 (COMPHSTS=0)。 这是引脚布线问题、不是比较器或 X-BAR 配置问题。

    打开了 您需要检查和修复两件事 在 LAUNCHXL-F28P55X 上:


    1.将插针 A2 的 S6 DIP 开关设置为“开“

    LAUNCHXL-F28P55X 具有板载 DIP 开关 (S6)、可物理控制模拟输入引脚(包括 A2)是否从接头连接到 MCU。 如果相应的 S6 开关位置关闭、则您在接头上施加的 3.3V 电压永远不会达到 GPIO224 [1]。

    操作: 找到 LaunchPad 上的 DIP 开关 S6、并将 ADCINA2 对应的位置设置为 亮起


    2.确保 GPIO224 配置为模拟模式

    GPIO224 是 AGPIO (模拟+ GPIO)引脚。 模拟输入路径必须在软件中显式启用;否则、即使在外部施加电压[1][2]、比较器也看不到任何内容。 所需配置为:

    // Enable analog mode on GPIO224 for CMPSS1 HP input
    GPIO_setAnalogMode(224, GPIO_ANALOG_ENABLED);

    或等效于通过寄存器写入:

    EALLOW;
    AnalogSubsysRegs.AGPIOCTRLH.bit.GPIO224 = 1;
    GpioCtrlRegs.GPHAMSEL.bit.GPIO224 = 1;
    EDIS;

    单独的 E2E 主题确认了这个确切问题:在设置 S6 开关并配置了模拟模式寄存器之前、LAUNCHXL-F28P55X 上的用户无法获得 A2 上的正确读数[2][3]。

    操作: 检查该cmpss_ex1_asynch示例是否包括GPIO_setAnalogMode(224, ...)或等效寄存器写入。 如果没有、请在比较器初始化之前添加它们。


    3.使用板载模拟多路复用器 (U17) 进行验证

    另一位用户报告、即使在正确的软件配置后、LaunchPad 的板载模拟多路复用器也是如此 U17 需要正确配置以将 A2 连接到接头引脚[3]。 这是一个特定于 LaunchPad 的硬件详细信息、示例(最初针对的是 controlCARD)可能不考虑该详细信息。

    操作: 交叉参考 U17 的 LAUNCHXL-F28P55X 原理图并确认 A2 是否正确布线。


    为什么断点行为会产生误导

    当您将 DAC 设置为非常低的值 (10) 时、COMPHSTS=1、因为比较器正在比较 内部 DAC 基准 引脚上存在的任何残余电压、无需外部信号路由。 这样可确认比较器、X-BAR、跳闸区和 GPIO 配置均正确。 。 系统 而缺失的部分则是将外部模拟信号传输到比较器输入端。


    行动摘要

    优先级
    行动
    1.
    将 A2 的 S6 DIP 开关位置设置为 ON
    2.
    GPIO_setAnalogMode(224, GPIO_ANALOG_ENABLED)如果从示例中缺少、则添加
    3.
    验证 LaunchPad 原理图上的 U17 多路复用器布线
    4.
    修复后、当向 A2 施加 3.3V 电压时、确认 COMPHSTS=1

    这应该会解决 GPIO14 读数 0 和 GPIO15 锁存失败的问题。


    资源:

    1. LAUNCHXL-F28P55X:ADC 引脚 A2/B6 和 B3 未读取读数(S6 DIP 开关和模拟模式)
    2. TMS320F28P55x 技术参考手册 — 模拟子系统方框图
    3. TMS320F28P550SJ:A2 ADC 通道无法正确测量(U17 多路复用器问题)

    此致、

    Zackary Fleenor