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:ADC 结果寄存器值突然变为一个非常小的值

Guru**** 2482105 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1445491/tms320f28p550sj-the-adc-result-register-value-suddenly-changes-to-a-very-small-value

器件型号:TMS320F28P550SJ

工具与软件:

尊敬的 TI 专家:

     TMS320F28P55SJ  ADC 结果寄存器值突然变为一个非常小的值

    在对三相输入电流进行采样时、由于 该电流 具有 正负两个 值、因此0A 对应于4096/2=2048的 AD 值。 当电流约为0A 时、理论 AD 采样结果寄存器值应约为2048。 但有时、相电流 AD 采样会瞬间下降、接近0、但发送到 DSP 模拟端口的实际电压不会波动。 此外、基准3.3V 也不会波动。 通过调整 AQCPS 和 SOC 转换信道、这种现象仍然 存在。


问题:

   发送至 DSP 的模拟端口的电压是正常的、但实际 AD 结果寄存器会波动。 如何配置 AD 采样? 是否存在 任何 干扰? 如何检查 DSP 是否受干扰影响。

  谢谢。

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

    尊敬的 Zhang:

    您是否在 ADC 上观察输入信号并验证它是否始终存在?

    您使用的是内部还是外部 VREFHI (电压基准)? 请仔细检查此配置。

    谢谢!

    Susmitha

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

    尊敬的 Susmitha:  

    客户端使用外部基准电压、我们对 ADC 引脚上的输入信号进行示波、但没有发现波形中的噪声。 外部基准电压也是稳定的。  关于 ADC 配置、该配置已从其上一代 F280049迁移。

    我们现在还不知道根本原因。 您能告诉我们一些有用的建议吗? 谢谢!

    BR、

    丰裕

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

    尊敬的 Fengyu:

    您能否共享您的部分代码、其中配置了 ADC?

    谢谢!
    Susmitha

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

    尊敬的  Susmitha:

    28p55 150m、ADC 配置如下、 采样频率为80k、12.5us。

        EALLOW;
        ADC_setOffsetTrim(ADCA_BASE);
        ADC_setOffsetTrim(ADCB_BASE);
        ADC_setOffsetTrim(ADCC_BASE);
        ADC_setOffsetTrim(ADCD_BASE);
        ADC_setOffsetTrim(ADCE_BASE);
        EDIS;
    
        EALLOW;
        ADC_setVREF(ADCA_BASE, ADC_REFERENCE_EXTERNAL, ADC_REFERENCE_2_5V);
        ADC_setVREF(ADCB_BASE, ADC_REFERENCE_EXTERNAL, ADC_REFERENCE_2_5V);
        ADC_setVREF(ADCC_BASE, ADC_REFERENCE_EXTERNAL, ADC_REFERENCE_2_5V);
        ADC_setVREF(ADCD_BASE, ADC_REFERENCE_EXTERNAL, ADC_REFERENCE_2_5V);
        ADC_setVREF(ADCE_BASE, ADC_REFERENCE_EXTERNAL, ADC_REFERENCE_2_5V);
        EDIS;
    
        EALLOW;
        //
        //
        AdcaRegs.ADCCTL2.bit.PRESCALE = 8;
        AdcbRegs.ADCCTL2.bit.PRESCALE = 8;
        AdccRegs.ADCCTL2.bit.PRESCALE = 8;
        AdcdRegs.ADCCTL2.bit.PRESCALE = 8;
        AdceRegs.ADCCTL2.bit.PRESCALE = 8;
        //
        //
        AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
        AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
        AdccRegs.ADCCTL1.bit.INTPULSEPOS = 1;
        AdcdRegs.ADCCTL1.bit.INTPULSEPOS = 1;
        AdceRegs.ADCCTL1.bit.INTPULSEPOS = 1;
    
        //
        //
        AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
        AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
        AdccRegs.ADCCTL1.bit.ADCPWDNZ = 1;
        AdcdRegs.ADCCTL1.bit.ADCPWDNZ = 1;
        AdceRegs.ADCCTL1.bit.ADCPWDNZ = 1;
        EDIS;
        
        
        AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 0x11;
        AdcbRegs.ADCSOC0CTL.bit.ACQPS = 0x28;          
        AdcbRegs.ADCSOC0CTL.bit.CHSEL = ADCIv; //b1
        
        AdccRegs.ADCSOC2CTL.bit.TRIGSEL = 0x11;    
        AdccRegs.ADCSOC2CTL.bit.ACQPS = 0x28;         
        AdccRegs.ADCSOC2CTL.bit.CHSEL = ADCIw; //c4             
    
        AdccRegs.ADCSOC5CTL.bit.TRIGSEL = 0x11;    
        AdccRegs.ADCSOC5CTL.bit.ACQPS = 0x28;         
        AdccRegs.ADCSOC5CTL.bit.CHSEL = ADCIu; //c14             
        
        AdcaRegs.ADCSOCPRICTL.bit.RRPOINTER = 0x0f;
        AdcbRegs.ADCSOCPRICTL.bit.RRPOINTER = 0x0f;
        AdccRegs.ADCSOCPRICTL.bit.RRPOINTER = 0x0f;
        AdcdRegs.ADCSOCPRICTL.bit.RRPOINTER = 0x0f;
        AdceRegs.ADCSOCPRICTL.bit.RRPOINTER = 0x0f;
    
        AdcaRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0x10;
        AdcbRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0x10;
        AdccRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0x10;
        AdcdRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0x10;
        AdceRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0x10;
        
        
       EPwm7Regs.ETSEL.bit.SOCAEN = 1;              //
       EPwm7Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO;   //80K=12.5us
       EPwm7Regs.ETPS.bit.SOCAPRD = ET_1ST;         //

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

    尊敬的 Zhang:

    您能否参考此主题

    TMS320F28P559SJ-Q1:ADC 设置的 P55x 外部电压基准- C2000微控制器论坛- C2000 ︎ 微控制器- TI E2E 支持论坛

    您是否可以通过确认 地址0x5D00C 上的值来检查板的修订版?  

    谢谢!
    Susmitha

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

    尊敬的 Susmitha:

    电路板的 REV 为1、显示在  地址0x5D00C 中。 版本是否正常?

    BR、

    丰裕

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

    尊敬的 Zhang:

    (+) TMS320F28P559SJ-Q1:ADC 设置的 P55x 外部电压基准- C2000微控制器论坛- C2000 ︎ 微控制器- TI E2E 支持论坛

    请参阅此主题、了解在上述条件下使用外部基准时如何配置 ADC。

    谢谢!

    Susmitha

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

    尊敬的 Susmitha:

    它们不是同一个问题。 我们已经配置了2.5V 基准。 您可以参阅之前分享的代码 Zhang。 您有其他建议吗?

    BR、

    丰裕

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

    尊敬的 Fengyu:

    当使用外部基准并且 电路板的 REV 为1时、需要进行一些修改。 您能否确认您的代码是否相同?

    请进行以下更改:

    • 如果修订版本 ID (地址0x5D00C 中的值)为"1"、则在 projectspec 中将 REV_ID 定义为预定义符号、并在编译器标志中添加(对应于 REV0的"--define=REV_ID=1")
    • 此外、在 sysctrl.h 内部、我们定义了 Device_cal 的位置  

          #define Device_cal ( void (void))((uintptr_t) 0x003fb1e7)。 请确保您具有相同的值。

    在 F28P55x 上、当选择外部基准模式时、 应将 ANAREFx1P65SEL 位设置为0以使 FSR = VREFHI。

      如果我们在外部施加1.65V 电压、将 ANAAREFx1P65SEL 位设置为1将导致 FSR = 2xVREFHI。 但是、由于您已经在外部施加了2.5V 电压、因此 该位应设置为0。  

     您能否整合这些更改并尝试运行相同的更改?

    谢谢!
    Susmitha