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.

[参考译文] TMS320F28035:ADC 转换结果的刷新

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/806153/tms320f28035-the-refresh-of-adc-convert-result

器件型号:TMS320F28035

#pragma CODE_SECTION (DCDC_ISR、"IsrRamfuncs");

中断空 DCDC_ISR ()

………μ A

………μ A

………μ A

  IsrVars.U16_FSBB_CurrentASampSum += adValueBranchACurr;

   IsrVars.U16_FSBB_CurrentASampsum -= IsrVars.U16_FSBB_CurrentASampAD[IsrVars.U16_FSBB_IsrTimer];

   IsrVars.U16_FSBB_CurrentASampAD[IsrVars.U16_FSBB_IsrTimer]= adValueBranchACurr;

………μ A

………μ A

………μ A

 

#pragma CODE_SECTION (OCP_tzint_ISR、"IsrRamfuncs");

中断空 OCP_tzint_ISR (空)

{        

………μ A

………μ A

………μ A

 

添加信息

 

#define adValueBranchACurr              AdcMirror.ADCRESULT2

 

PieVectTable.EPWM5_INT =&DCDC_ISR;       //循环计算  

PieVectTable.EPWM6_TZINT =&OCP_tzint_ISR;

EPwm5Regs.TBPRD = EPWM5_TIMER_TBPRD;//299

EPwm5Regs.ETSEL.bit.SOCASEL = ET_CTR_PRDZERO;  

现象

只有 EPWM5触发中断 void DCDC_ISR ()、代码执行时、adValueBranchACurr 的值保持不变。 当调试器中断 void OCP_tzint_ISR (void)时、代码执行时、adValueBranchACurr 的值偶尔会有所不同。 我们认为 AdcMirror.ADCRESULT2刷新了、我们检查了以下时间:

 

采样在第三个通道中。 理论上,最大转换时间为3*333ns=999us。 在正常条件下、此代码执行的最早时间为3.2us、而执行的最晚时间为4.6us。

在上图中、A 点是完成 A 向电流转换的时间、B 点是执行的最早时间代码、C 点是执行的最晚时间代码。 考虑到这一点、应该不可能刷新代码执行中的转换值、但当触发中断 void OCP_tzint_isr (void)时、这种现象确实存在。

那么、我们想知道为什么在点 B 和点 C 之间刷新转换值? 谢谢。

 

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

    Tobby、

    感谢您在 E2E 上与我们联系。  

    我想看看这是否与 E2E https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/805657上的这篇文章相关 、如果这样、我们可以将它们合并、以确保我们的回复一致。 请告诉我、在本例中、我们是否可以合并线程。

    最棒的
    Matthew

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

    感谢您的回答。

    当知道 adValueBranchACurr 的价值时,我会先向 Brian 寻求帮助。 Brian 给出了一些建议、与 Tommy 几乎相同。
    •ADC 恰好在 TBCTR=0和 TBCTR=PRD 时触发
    EPWM5的唯一 ADC 触发源,配置代码为:
    EPwm5Regs.ETSEL.bit.SOCASEL = ET_CTR_PRDZERO;

    •从触发到 ADCRESULT 锁存的 ADC 转换时间< 1us
    AdcRegs.ADCSOC2CTL.bit.TRIGSEL = EPWM5_ADCSOCA;
    AdcRegs.ADCSOC2CTL.bit.ACQPS = ADC_SHCLK;
    AdcRegs.ADCSOC2CTL.bit.CHSEL = BRANCHURRA;
    #define ADC_SHCLK0x8
    此 ADC 转换在第三个通道上,每次转换的最大时间为(9+13)*SYSCLK =350ns,因此完成第三次转换大约为1us

    •在触发后、ADCRESULT 在3us 和4us 处读取
    我们在代码执行前读取最大值和最小值 EPwm5Regs.TBCTR、并计算读取时间介于3us 和4us 之间。

    在向 Brian 寻求帮助后、将执行更多测试、仅在调试器中断 void OCP_tzint_ISR (void)时、adValueBranchACurr 的值偶尔会有所不同。 当没有调试器中断 void OCP_tzint_ISR (void)时、adValueBranchACurr 的值保持不变。
    中断空 DCDC_ISR ()是优先级 OCP_tzint_ISR (void)、因此我们认为 tirgger OCP_tzint_ISR (void)不会对 DCDC_ISR ()产生影响、但这可能会导致 adValueBranchACurr 的值偶尔不同。

    任何其他建议、谢谢。

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

    您能否确认为 ADCINT 和 EPWM6_TZINT 启用哪些 PIE 矢量?

    您是否知道 OCP_tzint_isr () ISR 的执行时间? 缺省情况下不支持中断嵌套、所以一个具有一个长 ISR 的 TZ 事件有可能延迟 DCDC_ISR ()的执行、这样它与下一个 ADC 转换重叠。

    您可以尝试在进入 DCDC_ISR()时保存 ePWM TBCTR 值,并在两个 adValueBranchACurr 读取时返回不同的值时停止执行(例如,使用 ESTOP0)。 然后,您将能够查看当您具有不同的 ADC 结果值时,DCDC_ISR()执行是否被延迟。

    此外、AdcMirror.ADCRESULT2是否映射回 AdcResult.ADCRESULT2?

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

    Tobby、

    想要再次查看并查看您是否已解决问题或仍需要帮助?   我将标记 TI 认为已解决、但如果您需要、您可以回复并重新打开主题帖。

    最棒的

    Matthew

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

    对不起,作为龙舟节,我不能马上回复。

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

    Tommy

    感谢您的回答。  

    您能否确认为 ADCINT 和 EPWM6_TZINT 启用哪些 PIE 矢量?

          PieCtrlRegs.PIEIER3.bit.INTx5 = EPWM5_INT_ENABLE;

          PieCtrlRegs.PIEIER2.bit.INTx6 = EPWM6_TZINT_ENABLE;

          EPwm5Regs.ETSEL.bit.INTEN = 1;

          EPwm5Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;

        EPwm6Regs.TZEINT.bit.OST = 1;

        ADC 仅触发 SOC、ePWM_INT 由 CTR 触发、等于零。

     

    您是否知道 OCP_tzint_isr () ISR 的执行时间?

          硬件禁用下行,OCP_tzint_isr ()仅初始化某些变量,最长时间为0.8us

     

    缺省情况下不支持中断嵌套、所以一个具有一个长 ISR 的 TZ 事件有可能延迟 DCDC_ISR ()的执行、这样它与下一个 ADC 转换重叠。

          在我看来,void DCDC_ISR()是优先级 OCP_tzint_ISR (void),因此当 DCDC_ISR()被执行时,OCP_tzint_ISR (void)的触发没有影响,OCP_tzint_ISR (void)在 DCDC_ISR()运行结束后执行。   当 OCP_tzint_ISR (void)被执行时,它的 WAR 被 DCDC_ISR()中断。只有当 DCDC_ISR()运行时,OCP_tzint_ISR (void)才会被执行。

     

    您可以尝试在进入 DCDC_ISR()时保存 ePWM TBCTR 值,并在两个 adValueBranchACurr 读取时返回不同的值时停止执行(例如,使用 ESTOP0)。 然后,您将能够查看当您具有不同的 ADC 结果值时,DCDC_ISR()执行是否被延迟。

          我们记录 EPWM5.TBCTR 的值。 此代码执行的最早时间为3.2us、执行的最晚时间为4.6us、ADC 结果值不同或相同。

     

    此外、AdcMirror.ADCRESULT2是否映射回 AdcResult.ADCRESULT2?

          我认为 AdcMirror 和 AdcResult 是相同的、除了 DMA 读取。 我们不使用 DMA、因此我认为它们在工程中是相同的、在工程中、ADC_regs 没有 AdcResult。

    最棒的
    Tobby

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

    Tobby、

    AdcMirror 不是 F28035上的本机寄存器。 我建议研究在读取 AdcMirror.ADCRESULTn 变量时访问的内容。

    Tommy

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

    Tommy

    感谢您的建议。

    #pragma DATA_SECTION (AdcMirror、"AdcMirrorFile");

    volatile struct adc_result_mirror_regs AdcMirror;

    AdcMirrorFile    :>ADC_mirror, page = 1.

    ADC_mirror :origin = 0x000B00,length = 0x000020    // ADC results register mirror */

    Tobby

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

    您好、香榭丽舍

    这似乎只是郭先生公司的一种编码习惯、该公司已被用于多种不同的产品。

    ADC_mirror 等于 ADC_Result、此值在 TI 示例中已被广泛使用、但不应是错误。

    如果对此问题有任何其他想法、请随时分享您的意见。

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

    我目前唯一能想到的另一个想法是使用 GPIO 分析、使用不同的 GPIO 来表示不同的 ISR 和状态。

    进入 ISR 时设置 GPIO、退出时清除 GPIO。  为每次 ADCRESULT 读取切换另一个 GPIO。  当 ADCRESULT 值发现不同时、设置另一个 GPIO、并将其用作示波器的触发器。  然后、可以跟踪导致意外 ADCRESULT 读取的事件。

    Tommy

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

    我已要求 Brian 重新检查时间计算、ADC 配置、ePWM 配置、中断配置、以确保我的上述信息正确无误。

    我们将第一个传输结果锁存在变量中、然后使用该变量进行下一次计算、以避免 偶尔 出现的差异。

    我邀请 Brian 到我的办公室进行更多的测试、当他下次访问我的公司时。

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

    Tobby、

    想要查看您的一方是否对上述问题进行了更新。

    最棒的
    Matthew