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.
团队、
我的一位客户在添加 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 的额外功耗实现的、这可能表示电路板上的稳压器没有足够的容量。