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.

[参考译文] TMS320F28075:CLA 读取 ADC 结果问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1071121/tms320f28075-cla-read-adc-result-issue

部件号:TMS320F28075
“线程:测试”中讨论的其它部件

您好,专家,

我有一位客户遇到 CLA 读取 ADC 结果错误。

他们发现 ADC 读数结果异常,细节上比采样值高得多。 发生在特定情况下:逆变器正常连接至电网,然后将 PV 源电压向下拉并从电网断开,可能会触发错误427 (交流电流和电压的异常采样)。 持续时间从0.5到2分钟不等,然后可以恢复正常。

 

然后,他们使用自己的 GUI 绘制 ADC 结果和 CLA 读取 ADC 结果。

绿线是 ADC 结果。

红线是 CLA 读数结果,有时太高,有时太低。

接下来,他们直接在 CLA 中检查 ADC 结果,但结果也不正确。

他们没有给一个变量登记册,只是读了价值和判断。 该值不应低于图中所示的800。

 

接下来,他们刚刚检查了:

硬件端:

  1. ADC 端口值正确。
  2. 测试晶体波形,错误发生后是正常的。
  3. 测试3.3V 电源波形,这是正常的,并且没有下降。
  4. 在 C28中断和 CLA 中断中使用 IO 切换以查看代码运行状态。 它工作正常。
  5. 错误发生后,使用看门狗重置设备,设备仍会报告错误。

SW 端:

  1. 确认 CLA typedef 信息。 如该线程所示,只需检查此错误。 e2e.ti.com/.../c2000-cla---accessing-adc-results-register-from-within-cla-task

 

我刚刚发现他们只是将有用的 CLA 类型定义放入源文件中,然后再包括其他头文件。

2.我还检查了 CLA 配置和 CLA CMD。 我未找到错误。

  1. ADC 时钟配置为48MHz,等于120M/2.5

请分享您对该错误的潜在原因的见解。  

巴西

艾玛

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

    您好,Emma,

    1.正在读取 ADC 的 CLA 任务是否由 ADC 中断触发? 如果是,如何配置 ADC 以生成中断- 是否正在生成早期中断?

    2.您还可以确认 AdcResultsRegs.ADCRESULT3类型为 UINT16,UINT16正在映射到 CLA 侧的无符号短线。 如果您可以在正在读取 ADCREAULT3的 C 代码中发布汇编代码,则我们可以确认是否正在读取正确的 ADC 结果寄存器。

    谢谢,

    阿什维尼

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

    阿什维尼

    感谢你的回复。

    [引用 userid="84566" url="~/support/icros/c2000微控制器-组/CC2000 /f/c2000微控制器-论坛/1071121/tms320f28075-CLA-read-adc - result - issue/3964343#3964343]1. 正在读取 ADC 的 CLA 任务是否由 ADC 中断触发? 如果是,如何配置 ADC 以生成中断- 是否正在生成早期中断?

    INTPULSEPOS =1,因此它不是早期中断。

    [引用 userid="84566" url="~/support/icros/c2000微控制器-组/CC2000 /f/c2000微控制器-论坛/1071121/tms320f28075-CLA-read-adc - result - issue/3964343#3964343]2. 您是否还可以确认 AdcResultsRegs.ADCRESULT3类型为 UINT16,UINT16正在映射到 CLA 端的无符号短语。

    正如我上次所说,unit16映射到 CLA 侧的无符号短。

    ~引用 userid="84566" url="ë/support/icns/c2000-icroms-group/c2f/c2000-iclms -forume/1071121/tms320f28075-CLA-read-adC-result-issue/3964343#3964343"]如果您可以在 ADCREAULT3正在读取的 C 代码的位置发布汇编代码,并确认结果正确,则[如果我们可以对其进行读取/注册]。

    (笑声)

    巴西

    艾玛

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

    阿什维尼

    ~引用 userid="84566" url="ë/support/icns/c2000-icroms-group/c2f/c2000-iclms -forume/1071121/tms320f28075-CLA-read-adC-result-issue/3964343#3964343"]如果您可以在 ADCREAULT3正在读取的 C 代码的位置发布汇编代码,并确认结果正确,则[如果我们可以对其进行读取/注册]。

    巴西

    艾玛

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

    您好,Emma,

    fClaAdcResult 变量是否为 float 变量>,是否可以尝试将其读入 uint16_t 类型变量并进行检查?

    此致,

    维纳

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

    韦纳

    如 CLA 代码所示,客户阅读 ADCRESULT3 并判断值是否小于10。

    正常情况下没有计数。  

    在异常情况下,计数仍然存在折痕。

    所以我认为  fClaAdcResult 不 会影响这一点。

    巴西

    艾玛

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

    您好,Emma,

    感谢您提供更多信息。 我仍然不清楚客户期望看到什么以及客户获得什么。

    [引用 userid="278152" url="~ë/support/微处理器/CC2000 -微控制器组/CC2000 /f/C2000 -微控制器-论坛/1071121/tms320f28075-CLA-read-adc - result-issue"]

    然后,他们使用自己的 GUI 绘制 ADC 结果和 CLA 读取 ADC 结果。

    绿线是 ADC 结果。

    红线是 CLA 读数结果,有时太高,有时太低。

    [/引用]

    是显示 ADC 结果3正在从 C28 CPU 读取的绿线,是 CLA 在同一实例周围读取的红线 ADC 结果3—我假设 ADC 设置为中断 C28和 CLA 以捕获这些结果。

    红线显示的值为绿线显示的1/2。 我读的是正确的吗?

    [引用 userid="278152" url="~ë/support/微处理器/CC2000 -微控制器组/CC2000 /f/C2000 -微控制器-论坛/1071121/tms320f28075-CLA-read-adc - result-issue"]

    接下来,他们直接在 CLA 中检查 ADC 结果,但结果也不正确。

    他们没有给一个变量登记册,只是读了价值和判断。 该值不应低于图中所示的800。

    [/引用]

    为什么应用程序检查的值不应低于800,而是小于10。

    谢谢,

    阿什维尼

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

    阿什维尼,

    [引用 userid="278152" url="~ë/support/微处理器/CC2000 -微控制器组/CC2000 /f/C2000 -微控制器-论坛/1071121/tms320f28075-CLA-read-adc - result-issue"]
    1. 确认 CLA typedef 信息。 如该线程所示,只需检查此错误。 e2e.ti.com/.../c2000-cla---accessing-adc-results-register-from-within-cla-task

     

    我刚刚发现他们只是将有用的 CLA 类型定义放入源文件中,然后再包括其他头文件。

    [/引用]

    我通读了所有 CLA ADC 问题线程,发现它是主要的根本原因

    因此,我只想检查一下,如果他们将类型定义放在源代码中,它是否与包括 “F2837xD_CLA_typedefs.h”相同 ?

    2.对于代码,他们只读 ADC 值并在 CLA 任务中判断。(本屏幕截图中的第五个代码)

    数据类型是什么?

    3.进一步调试代码并保留所有汇编代码。  

    我发现比较说明太复杂了。

    为什么 MR0逻辑偏移左16位,逻辑偏移 右16位,这会导致数据溢出?

    CLA 状态寄存器为  

    我不知道 Nf=1意味着什么?

    我还将密钥代码粘贴到 CLA 中,并附上可识别代码。

    void sAdcValCalc1(void)
    {
    __asm(" MDEBUGSTOP");
    if(AdcaResultRegs.ADCRESULT3 < 10)
    {
    uwClaAdcResult[2]++;
    }
    fClaAdcResult[0] = ((stADCInCla.RGridVolt.ZerVal + stADCInCla.RGridVolt.PrdVal)*0.5)*(GRID_VOLT_RATIO);//stADCInCla.RGridVolt.ArithVal
    fClaAdcResult[1] = ((stADCInCla.SGridVolt.ZerVal + stADCInCla.SGridVolt.PrdVal)*0.5)*(GRID_VOLT_RATIO);//stADCInCla.SGridVolt.ArithVal
    fClaAdcResult[2] = ((stADCInCla.TGridVolt.ZerVal + stADCInCla.TGridVolt.PrdVal)*0.5)*(GRID_VOLT_RATIO);//stADCInCla.TGridVolt.ArithVal
    uwClaAdcResult[1] =AdcaResultRegs.ADCRESULT3;
    uwClaAdcResult[3] =stADCInCla.RGridVolt.PrdVal;
    
    // MUX
    switch(AD1_MUX_LEVEL)
    {
    case 0:            // switch 0
    stADCInCla.PVVolt[PV1].ArithVal = (stADCInCla.PVVolt[PV1].ZerVal + stADCInCla.PVVolt[PV1].PrdVal) * 0.5 * BT_VOLT_RATIO; // PV1
    stADCInCla.BTCurr[PV1].ArithVal = (stADCInCla.BTCurr[PV1].ZerVal +stADCInCla.BTCurr[PV1].PrdVal) * 0.5 * BT_CURR_RATIO;// - stADCInCla.BTCurr[PV1].offset;
            break;
    
        case 1:          // switch 1
         stADCInCla.PVVolt[PV2].ArithVal = (stADCInCla.PVVolt[PV2].ZerVal + stADCInCla.PVVolt[PV2].PrdVal) * 0.5 * BT_VOLT_RATIO; // PV1
         stADCInCla.BTCurr[PV2].ArithVal = (stADCInCla.BTCurr[PV2].ZerVal +stADCInCla.BTCurr[PV2].PrdVal) * 0.5 * fAdcRatio[1];// - stADCInCla.BTCurr[PV2].offset; // PV2
             break;
    
         default:
             break;
    }
    

    你发现了什么问题吗?

    e2e.ti.com/.../CLA_5F00_Task_5F00_AdcSample.asm

    我还想更改为最新的编译器,但我遇到了一个错误,因为它与 CLA 无关。 我又加入了另一条联系。

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1077007/tms320f28075-change-compiler-issue

    巴西

    艾玛

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

    您好,Emma,

    1.看起来使用了正确的数据类型-如果删除了头文件并在源代码中指定了类型,则将选取源代码中定义的类型。 从装配体中,我们可以看到 ADCRESULT3已在装配体代码中转换为0xB03地址,该地址是正确的地址。 如果类型不正确,则地址可能不正确。

    2.如果类型是无符号类型,则左和右移位操作似乎没有必要,但签名类型需要这些操作,这样16位值就会被正确的符号扩展为32位值。 如果 ADCRESULT 是无符号短类型和12位值,则最重要的位将始终为0。 换档操作不应导致负数。

    此代码是否总是失败,还是仅在特定时间失败? 何时触发 ADC 转换和 CLA 任务会有问题吗?

    谢谢,

    阿什维尼

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

    阿什维尼

    从文化角度看,同一代码和同一电路板在特定时间出现故障。

    更奇怪的是,在失败的时候。CLA 读数结果并不是完全错误。值可能是1,值后面的值可能是正确的。

    而且可能会发生电压正确,电流错误或反向的情况。

    另一件事是,它们更改为最新的编译 器 V21.6.0,但仍然错误。

    我对这种现象非常困惑。客户渴望解决问题或寻找解决方法。

    巴西

    艾玛

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

    您好,Emma,

    诊断起来有点困难-至少我看不到 CLA 代码有什么问题。 我可以提供一些建议来帮助调试:

    1.在 CLA 任务开始时添加大量 NOPS (或添加尽可能多的 NOPS,但不影响系统响应),以确定任务触发器和 ADC 值采样的时间是否存在时间问题。

    2.如果不触发 CLA 任务,而是在 C28中断上执行相同的代码,那么这是否会显示相同的问题? 如果没有,请检查 CLA 任务是否配置为完全按照触发 C28任务的方式触发。 如果在 CLA 任务内切换 GPIO,这可能会有所帮助...这样,检查范围以查看 CLA 任务是否按预期触发可能会更容易。

    谢谢,
    阿什维尼

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

    您好,Emma,

    [引用 userid="278152" url="~支持/微控制器/C2000 -微控制器-组/CC2000 /f/C2000 -微控制器-论坛/1071121/tms320f28075-CLA-read-adc -结果问题"]发生在特定情况下:逆变器正常连接到电网,然后 PV 源电压被拉低,并从电网中断开[引用/引用]

    在上述状态下,ADC,设备或设备针脚是否会发生与其它状态不同的情况?  模拟(或数字)针脚中的一个是否可能遇到电压大于 VDDA + 0.3V 或小于 VSSA - 0.3V 的情况?  这种状态是否可能比其他状态更嘈杂,从而导致噪音与 ADC 输入或 ADC 参考信号耦合?   

    在您有绿色和红色波形的图像中,是否确定每读1个 C28x CPU ADC,您就能获得1个 CLA ADC 读数?   

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

    阿什维尼

    1.让客户尝试您的第一个建议。

    他们增加了几个 NOPS。

    • 当 NOPS 为50时,它仍然给出错误的值。但现在它不是零。它 大约是190。(正常值应该是2048)
    • 当 NOPS 为80时 ,它仍然给出错误的值。但它大约是1700。(正常值应该是2048)
    • 当 NOPS 为100时,由于时间太长,它将滞留在 CLA 任务中。

    但是,他们告诉我 C28读数结果始终正确,上面是 CLA 读数结果。

    2.它们执行 ABBA 测试。问题出在 C2000器件上。

    3.修复了某些温度或其他非重要样品的4个1号选择 ADC 样品前端电路。当前样品(另一个 SOC 和 ADC 通道)问题将得到解决。 你能很好地解释这座农神庙吗?

    巴西

    艾玛

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

    您好,Emma,

    我将推迟到 Ashwini 进行 CLA 读取调试,但您可能尝试的另一个简单的调试策略是将 ADC 结果直接复制到 CLA 任务和 CPU ISR 中每个读取的缓冲 DAC 输出。  然后,您可以在系统运行时查看范围上的缓冲 DAC 波形,以了解 ADC 的产生效果。    

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

    您好,Emma,

    感谢您运行该实验。 其他建议很少:

    1.是否对 CLA 任务进行了分析,以检查它是否在再次触发之前完成,即没有溢出。 CLA 具有 MIOVF 寄存器来检测任务溢出-能否删除 NOP 并在任务开始时添加一个检查以检查是否设置了溢出标志,并关联是否仅在 ADC 读取错误值时才设置溢出?

    2.如果没有溢出,我建议使用 GPIO 进行性能分析,并查找范围,以确认执行 ADC 读取的 CLA 任务和执行 ADC 读取的 C28代码同时出现-可能 CLA 任务未被触发 和预期的一样。

    谢谢,

    阿什维尼

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

    德文,

    [引用 userid="52688" url="~/support/icins/c2000-icroms-group/c2f/c2000微控制器-forume/1071121/tms320f28075-CLA-read-adC-result -issue/3989499#3989499]]在上述状态下,ADC,设备或其他引脚状态是否与设备不同?  模拟(或数字)针脚中的一个是否可能遇到电压大于 VDDA + 0.3V 或小于 VSSA - 0.3V 的情况?  这种状态是否可能比其他状态更嘈杂,从而导致噪音与 ADC 输入或 ADC 参考信号耦合?   [/引用]

    经过一些测试,他们确实发现问题发生时,ADC 引脚的电压将为-0.5V 或4.8V

    这将导致什么?我们是否有文档描述它?

    巴西

    艾玛

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

    您好,Emma,

    这些电压超出绝对最大额定值,因此设备可能会损坏。 即使设备未损坏,在设备运行条件之外运行也可能导致操作不正确。   

    除了电压外,在出现问题时,还应该检查这些 ADC 引脚上的夹紧电流。  由于 ADC 输入具有 ESD 保护二极管,通常引脚本身不会经历施加的电压,而是会开始吸入 VDDA 轨中的电流或从 VSSA 获取电流。  ADC 输入上的串联电阻可用于限制夹持电流,以防止对设备造成永久性损坏。