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.

[参考译文] TMS320F28388D:ADC B-C-D 未采样

Guru**** 2696755 points

Other Parts Discussed in Thread: SYSCONFIG, TMDSCNCD28388D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1578636/tms320f28388d-adc-b-c-d-not-sampling

器件型号: TMS320F28388D
主题中讨论的其他器件: SysConfigTMDSCNCD28388D

您好、

我正在使用 F28388D 开发电池充电器。 但是、由于一些奇怪的原因、我无法使 ADC B、C 和 D 正常工作。 我已经检查了我能想到的所有内容、我看不到 ADC 之间有任何显著的配置差异、但只有 ADC A 会返回结果。 我已经检查了我正在使用的 controlCARD(控制卡)引脚上的电压、信号就在那里(即使没有,我应该会在 ADCRESULT 上看到一些噪声)。

(注意:尽管使用了 F28388D、但我仅使用内核 1、并且仅运行 CPU1 工程)

ADC A 配置:  

image.png

ADC B 配置:  

image.png

所有 ADC 均已通电:  

image.png

ADC 的内核分配:所有 CPU1

image.png

有什么想法可能会出错?

提前感谢、

此致、

Adrien

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

    您好:

    您能共享 SysConfig 文件的短格式吗? 我在提供的屏幕截图中看不到缺少的器件。

    此致、

    Masoud

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

    您好 Adrien、

    感谢您分享更多详细信息。  配置看起来与我类似并对称。 此外、还会启用所有 ADC。 如果我想尝试系统调试该问题、我首先要 暂时将所有 SOC 触发条件更改为 ADC_TRIGGER_SW_ONLY 并手动触发:

    ADC_forceSOC(ADCB_BASE, ADC_SOC_NUMBER0);
    DEVICE_DELAY_US(10);
    result = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER0);

    如果返回有效结果、则表示 ADC 本身工作正常、问题与触发/事件时序有关。

    您能否确认如何读取每个 ADC 结果?  每个 ADC 实例都有一个单独的结果寄存器基址 (ADCARESULT_BASE、ADCBRESULT_BASE、 ...)。

    请告诉我这是否有帮助。

    此致、

    Masoud

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

    您好、Masoud、

    您能否确认如何读取每个 ADC 结果?  每个 ADC 实例都有一个单独的结果寄存器基址 (ADCARESULT_BASE、ADCBRESULT_BASE、 ...)。

    我是老学校;-) 我已经工作了很多年的旧零件(从 F2802x 开始),我习惯了在 driverlib 之前的事情。 我在调试观察窗口中查看寄存器 (AdcaResultRegs、AdcbResultRegs、...)

    这是一个非常奇怪的部分,现在我想它(在我遇到了这个问题后,当将 SOC 触发器更改为仅 SW 时): ADC C SOC0 在 EOC 上触发主控制中断,而中断发生了。 这意味着转换可能发生? 但结果是 0LSB。

    因此、我将所有 SOC(中断触发一除外)设置为仅软件、并触发软件中的所有 SOC。

    ADC_forceSOC(MESURE_TENSION_1_BASE, ADC_FORCE_SOC0);
    ADC_forceSOC(MESURE_TENSION_1_BASE, ADC_FORCE_SOC1);
    ADC_forceSOC(MESURE_TENSION_1_BASE, ADC_FORCE_SOC2);
    ADC_forceSOC(MESURE_TENSION_1_BASE, ADC_FORCE_SOC3);
    ADC_forceSOC(MESURE_TENSION_2_BASE, ADC_FORCE_SOC0);
    ADC_forceSOC(MESURE_TENSION_2_BASE, ADC_FORCE_SOC1);
    ADC_forceSOC(MESURE_COURANT_BASE, ADC_FORCE_SOC1);
    ADC_forceSOC(MESURE_COURANT_BASE, ADC_FORCE_SOC2);
    ADC_forceSOC(MESURE_TEMPERATURE_BASE, ADC_FORCE_SOC0);
    ADC_forceSOC(MESURE_TEMPERATURE_BASE, ADC_FORCE_SOC1);
    ADC_forceSOC(MESURE_TEMPERATURE_BASE, ADC_FORCE_SOC2);

    我得到同样的结果: ADC A 结果是正确的,所有其他都是 0 甚至没有轻微的噪音。

    我忘了说,这看起来很奇怪,我买了第二张控制卡,以防目标被损坏,但问题是相同的品牌新控制卡.

    此致、

    Adrien

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

    尊敬的  Adrien:

    这是一种奇怪的感觉。 您能否查看我们的一个参考示例、看看是否能看到有关 ADC B-D 的结果? 如果您这样做 、那么使用较短格式的工程、我们可以尝试在那里进行调试。

    此致、

    Masoud

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

    尊敬的 Masoud:

    我尝试了一个超极简程序、ADC B-D 得到了结果。

    现在为什么在最简约程序中的 SOC 力产生结果,而在完整代码中的 soc for 不?

    我在那里真的迷路了。

    此致、

    Adrien

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

    这意味着硬件可以工作、并强烈建议问题在于触发/时序。 当您通过软件强制执行时,完整代码中的 B–D 为零,但会产生极简代码。  这意味着在整个系统中、SOC 可能被覆盖或复位、或者触发源正在被其他东西覆盖。 即使 配置了 SOC 触发器、但数字触发器事件可能从未发生或被屏蔽/禁用、转换仍可能“完成“(并生成 EOC 中断)、但会产生 0、因为没有对任何内容进行采样(或采样窗口配置不正确)。

    在此步骤、我要在 GPIO 引脚上提供 ADC SoC 并确认 数字触发事件是否实际发生。

    此致、

    Masoud

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

    尊敬的 Masoud:

    我会按照您的建议尝试。

    但是、我在前面忘记提到、只有在使用评估板 (controlCard) 时才存在问题。 在应用板上使用时、所有 ADC 都按预期工作。

    此致、

    Adrien

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

    尊敬的 Masoud:

    如何在 GPIO 引脚上引出 ADC SoC? 我不知道该怎么做。

    提前感谢、
    Adrien

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

    尊敬的 Adrien:

    例如、如果 ePWM1 SOCA 作为 ADC 触发源:

    然后、您可以在 EPMW1 选项卡中启用 ADC SOCA 输出:

    最后、您应按如下方式启用相应的 GPIO:

    此致、

    Masoud

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

    尊敬的 Masoud:

    我永远不会猜到/发现这个。 查看输出 XBar 周围。

    我确认在 GPIO 输出(低电平有效信号)上所有 SOC 都可见。

    我已经尝试将采样时间缩短到最小值、这似乎没有什么帮助。

    考虑到问题是在控制卡上而不是在应用程序板上(具有相同的配置)、有什么其他原因导致该问题?

    提前感谢、

    Adrien

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

    尊敬的 Adrien:

    总之:ADC A 工作正常;ADC B、C 和 D 在该控制卡上返回 0(无噪声或实际读数)。 在同一器件(具有相同的固件/配置)上、当您移动到应用板时、ADC B–D 确实会工作(因此问题似乎与控制卡有关)。 当您在极简的程序中通过软件显式强制执行 SOC 触发时、ADC B–D 也起作用。 但在完整的代码+控制卡组合中、ADC 的触发条件/配置似乎是对称设置的、但 B–D 仍然显示为零。

    从您的文件中、ADCA 未生成任何中断。 同时、ADCB、ADCC 和 ADCD 也具有。

    使用 ePWM 触发转换时、即使中断被禁用、ADC 结果寄存器本身仍将被更新。 但是、如果主控制循环或 ISR 逻辑依赖于 ADC 中断来处理或读取结果、则 ADC A 的转换可能仍会以静默方式完成(不调用 ISR)。 ADC B/C/D 将触发中断、并且可能会在您读取结果之前立即清除或覆盖结果。 这种不匹配很容易造成错觉 只有一些 ADC 模块正常工作 每个 ADC 的读取和服务方式而变化。

    此外、如果 CLA 由 ADCB 事件触发、如您的文件所示:


    cla1.trigger_CLA_TASK_1 = "CLA_TRIGGER_ADCB1";
    cla1.trigger_CLA_TASK_2 = "CLA_TRIGGER_ADCB2";
    cla1.trigger_CLA_TASK_3 = "CLA_TRIGGER_ADCB3";

    然后、ADCB 的中断路由到 CLA、而不是 CPU1。  这可能会让 CPU1 等待从不会到达那里的 ADC 结果(因为 CLA 正在获取这些结果)。

    您能否禁用所有 ADC 的中断并手动轮询结果寄存器(对于调试很有用)? 这样可以消除 ISR/CLA 干扰并测试原始采样。

    请尝试将已知的模拟电压(例如 1V)注入引脚、查看结果是否会发生变化。 这将验证引脚→ADC 的路径是否正常工作。

    此致、

    Masoud

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

    对于 ADC、S3 和 S4 开关是 controlCARD 专用的设置、允许您选择 ADC 基准。 您还能否验证 ADC 基准是否准确?

    此致、

    Masoud

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

    翻转开关时、ADC A 中的结果值会发生变化(因为参考 3.0V 与 3.3V 电源)、但在 ADC B、C、D 的输出端仍然为 0

    此致、

    Adrien

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

    我已经为自己试用了一个 controlCARD 样片、如果您共享短版本的程序、我将尝试重新创建和调试问题。

    此致、

    Masoud

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

    尊敬的 Adrien:

    我得到了代码、一旦收到控制卡、就会共享调试的版本。

    此致

    Masoud

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

    您好:

    我刚刚收到 TMDSCNCD28388D controlCARD 并测试了 ADC B、C 和 D、 使其按预期工作。 我附加了示例工程以供您参考。 您只需运行代码并观看:

    myADC_B_RESULTS;// B0 - HSEC 引脚 12

    myADC_C_RESULTS;// C5 - HSEC 引脚 39

    myADC_D_RESULTS;// D0 - HSEC 引脚 28

    监视窗口中。

    此致、

    Masoud

    e2e.ti.com/.../ADC_5F00_B_5F00_C_5F00_D_5F00_test.zip

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

    我还记得您通过电子邮件分享了几个项目。 我已经编辑了其中一个函数以读取 ADC B、C 和 D 结果。 我还附上了该工程、供您参考。

    此致、

    Masoud

    e2e.ti.com/.../Minimal_5F00_PWM_5F00_test.zip

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

    尊敬的 Masoud:

    想继续走得更糟...

    关于 ADC_B_C_D_test 工程、我确实获得了一些结果...但只使用了断点。 连续刷新和连续运行返回永久 0。

    带断点:

    无断点、持续刷新:

    我切换到 Minimal_pwm_test 工程、在这个工程中、它始终为 0、包括断点。

    当然、我并不会接触/更改连接到控制板的硬件(包括施加到 ADC 的电压)。

    两个项目是否都能在您的端正常工作?

    此致、

    Adrien

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

    是的、这两个项目都在我这边工作、没有任何持续刷新的中断点。 以下是 ControlCARD 的图片、用于仔细检查 CC 上的开关位置(每个开关都处于默认模式)。

    此致、

    Masoud

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

    尊敬的 Masoud:

    很抱歉、延迟的回复、最近几周非常忙。

    我已经检查了开关的电压基准、尝试了两个位置、结果是相同的。

    此致、

    Adrien