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:与 CPU1、CPU2和 CM 启动序列相关的 ADC 转换错误

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/880352/tms320f28388d-adc-conversion-error-related-to-booting-sequence-of-cpu1-cpu2-and-cm

器件型号:TMS320F28388D

团队、

我的一位客户在添加 CPU2和 CM 操作后发现 ADC 转换错误。

ADC 转换误差超过10%。

为了避免这种转换错误、他们在 CPU2和 CM 启动后增加了延迟。

当它们添加5s 延迟时、没有转换错误。 如果延迟小于5s、则存在转换误差。 较短的延迟会产生较大的误差。

ADC 仅由 CPU1使用。

这是他们的初始化固件。

空 sysinit()

InitSysCtrl(); //定制板 OSC 25MHz로 설정 변경 및 PLL 변경

CM_Clock_coconfig();

   CONFIG_GPIO();

   ConfigureCpu2Gpio();

   配置 CmGpio();

 

   Cpu2FlashBootFunction();

   CmFlashBootFunction();

  DELAY_US (5000000);

 

   //启用 PWM

   CpuSysRegs.PCLKCR2.bit.EPWM1=1;

   CpuSysRegs.PCLKCR2.bit.EPWM2=1;

   CpuSysRegs.PCLKCR2.bit.EPWM3=1;

   CpuSysRegs.PCLKCR2.bit.EPWM4=1;

 

   //启用 eQEP

   CpuSysRegs.PCLKCR4.bit.EQEP1=1;

   CpuSysRegs.PCLKCR4.bit.EQEP2=1;

 

   //针对 ePWM 初始化 GPIO 引脚

   InitEPwm1Gpio();

   InitEPwm2Gpio();

   InitEPwm3Gpio();

   InitEPwm4Gpio();

 

   //针对 eQEP 初始化 GPIO 引脚

   InitEQep1Gpio();

   InitEQep2Gpio();

 

   //INJAE initXbar 编码器索引                 /200204

   InitXBar ();

 

   Dint;

 

   InitPieCtrl();

 

   IER = 0x0000;

   IFR = 0x0000;

 

   InitPieVectTable();

 

   EALLOW;

 

   PieVectTable.Timer1_INT =&cpuTimer1ISR;

//   PieVectTable.TIMER2_INT =&cpuTimer2ISR;

 

   PieVectTable.ADCA1_INT =&adca2_ISR;

//   PieVectTable.ADCA1_INT =&adca1_ISR;

   PieVectTable.ADCA_EVT_INT =&adca_ppb_ISR;

   PieVectTable.ADCB_EVT_INT =&adca_ppb_ISR;

   PieVectTable.ADCC_EVT_INT =&adca_ppb_ISR;

   PieVectTable.ADCD_EVT_INT =&adca_ppb_ISR;

 

   PieVectTable.EQEP2_INT =&eqep2_ISR;

   PieVectTable.EQEP1_INT =&eqep1_ISR;

   EDIS;

   InitCpuTimer();

   ConfigCpuTimer (&CpuTimer1、200、1000);// 200MHz CPU 频率,1000us 周期

 

   //初始化 ePWM

   EALLOW;

   CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0;

   EDIS;

 

   InitEPwm1();

   InitEPwm2();

   InitEPwm3();

   InitEPwm4();

 

   //ePWM 时基时钟同步

   EALLOW;

   CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;

   EDIS;

 

   //初始化 eQEP

   InitEqep1();

   InitEqep2();

 

   //初始化温度传感器 DSP_Temperature

   InitTempSensor (3.3);//注意:如果使用3.3V 以外的 VREFHI 电压、则参数需要更改

 

   ConfigureADC();

   SetupADCSoftware_PWM();

 

   SetupPPBOffset (2048,2048,2048,2048);

 

//   configureDAC();

 

 

   IER |= M_INT1 | M_INT5 | M_INT10 | M_INT13;

 

   PieCtrlRegs.PIEIER1.bit.INTx1 = 1; //ADC1生成25us 中断

   PieCtrlRegs.PIEIER10.bit.INTx1 = 1;//ADCA_EVT 用于驱动器过流

   PieCtrlRegs.PIEIER10.bit.INTx5 = 1;//ADCB_EVT 用于驱动器过流

   PieCtrlRegs.PIEIER10.bit.INTx9 = 1;//ADCC_EVT 用于驱动器过流

   PieCtrlRegs.PIEIER10.bit.INTx13 = 1;//ADCD_EVT 用于驱动器过流

 

   针对 Axis1位置比较中断的 PieCtrlRegs.PIEIER5.bit.INTx2 = 1;//EQEP2

   针对 Axis1位置比较中断的 PieCtrlRegs.PIEIER5.bit.INTx1 = 1;//EQEP2

 

 它们不希望有5s 的启动延迟。 问题可能是什么、我们如何解决?

如果您需要更多数据、请告诉我。

 

此致、
TED

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

    尊敬的 Ted:

    我不确定、如果器件内部有任何东西会导致这种情况。 所涉及的持续时间似乎表明系统在外部发生了什么。  

    第一步可能是使用示波器在加电期间观察 VREFHI、VDDA、任何信号调节电路的电源等、并结合 ADC 输入、以查看在观察到的时间段内是否发生任何趋稳。   

    您还可以尝试修改 CPU2和 CM 代码以开始执行、但不会驱动任何外部引脚。  如果您仍然看到问题、则似乎表明耦合是通过 CPU2和 CM 的额外功耗实现的、这可能表示电路板上的稳压器没有足够的容量。