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-Q1: TMS320F28035的SOC之间存在干扰

Part Number: TMS320F28035-Q1
Other Parts Discussed in Thread: TMS320F28035, C2000WARE

TMS320F28035的ADC在带载重载时候,在某占空比时候某个ADC通道读到的的结果比正常多了或者少了20左右!通道不变更换EPWM3(原来是EPWM2)触发源后那个通道就正常了,但是另外一个AD通道又出现了类似多了或者少了20,经过测试发现ADC引脚波形没有变化,所以怀疑是不是内部ADC模块受干扰了?

  • 我采用顺序采样和同步采样都有这个问题

  • 正常情况下不会有这个问题。

    有没有试过例程测试一下?

    有没有更换其他芯片测试一下?

  • 试过了没用,用的TI的ADC_SOC_CNF.c测试的然后配置通道和PWM触发也不行,我现在打算不用触发源了,打算连续转换,怎么设置呢?论坛上有很多写着SOC之间干扰的最后也没看到结果,不知道解决没有还是放弃了?

  • 你好,这个例程的路径是什么?我没有看到过这个例程名,一般使用的例程都是这个位置的:C:\ti\c2000\C2000Ware_3_04_00_00\device_support\f2803x\examples\c28\adc_soc

    连续模式可以看一下INTSELxNy寄存器的INTxCONT位,此位就是设置连续模式的。

  • #include "PeripheralHeaderIncludes.h"

    void ADC_SOC_CNF(int ChSel[], int Trigsel[], int ACQPS[], int IntChSel, int mode)
    {

    extern void DSP28x_usDelay(Uint32 Count);


    EALLOW;
    AdcRegs.ADCCTL1.bit.ADCREFSEL = 0; //内部/外部参考选择, 0:内部能带隙用于参考源的产生
    AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; // Power up band gap 内核内的能带隙缓冲电路上电
    AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; // Power up reference 内核内的参考缓冲电路断电
    AdcRegs.ADCCTL1.bit.ADCPWDN = 1; // Power up rest of ADC
    AdcRegs.ADCCTL1.bit.ADCENABLE = 1; // Enable ADC

    DSP28x_usDelay(1000); // Delay before converting ADC channels

    AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //中断脉冲在ADC结果锁存到结果寄存器的前一个周期产生

    AdcRegs.ADCSOC0CTL.bit.ACQPS = ACQPS[0]; //控制SOCx的采样和保持窗口。最小允许值为6。 ,, 8,,采样窗口为9个周期的长度
    AdcRegs.ADCSOC1CTL.bit.ACQPS = ACQPS[1];
    AdcRegs.ADCSOC2CTL.bit.ACQPS = ACQPS[2];
    AdcRegs.ADCSOC3CTL.bit.ACQPS = ACQPS[3];
    AdcRegs.ADCSOC4CTL.bit.ACQPS = ACQPS[4];
    AdcRegs.ADCSOC5CTL.bit.ACQPS = ACQPS[5];
    AdcRegs.ADCSOC6CTL.bit.ACQPS = ACQPS[6];
    AdcRegs.ADCSOC7CTL.bit.ACQPS = ACQPS[7];
    AdcRegs.ADCSOC8CTL.bit.ACQPS = ACQPS[8];
    AdcRegs.ADCSOC9CTL.bit.ACQPS = ACQPS[9];
    AdcRegs.ADCSOC10CTL.bit.ACQPS = ACQPS[10];
    AdcRegs.ADCSOC11CTL.bit.ACQPS = ACQPS[11];
    AdcRegs.ADCSOC12CTL.bit.ACQPS = ACQPS[12];
    AdcRegs.ADCSOC13CTL.bit.ACQPS = ACQPS[13];
    AdcRegs.ADCSOC14CTL.bit.ACQPS = ACQPS[14];
    AdcRegs.ADCSOC15CTL.bit.ACQPS = ACQPS[15];

    AdcRegs.INTSEL1N2.bit.INT1SEL = IntChSel; // IntChSel=16, IntChSel causes ADCInterrupt 1 ,ADCINTx EOC源选择 ,16,无效值
    // INTSEL1N2,,中断选择1和2寄存器(INTSEL1N2)(地址偏移量08h)

    if (mode == 0) // Start-Stop conv mode 模式选择,
    {
    AdcRegs.ADCINTFLG.bit.ADCINT1 = 0; // clear interrupt flag for ADCINT1
    AdcRegs.INTSEL1N2.bit.INT1CONT = 0; // clear ADCINT1 flag to begin a new set of conversions
    //0:在ADCINTx标志(ADCINTFLG寄存器)被用户清除前,没有另外的 ADCINTx边沿产生。
    AdcRegs.ADCINTSOCSEL1.all=0x0000; // No ADCInterrupt will trigger SOCx,,没有ADCINT能触发SOCx。TRIGSEL字段决定了SOCx的触发源
    AdcRegs.ADCINTSOCSEL2.all=0x0000;
    }
    if (mode == 1) // Continuous conv mode
    {
    AdcRegs.INTSEL1N2.bit.INT1CONT = 1; // set ADCInterrupt 1 to auto clr 1:无论EOC边沿何时产生都将产生ADCINTx边沿(不考虑标志位是否清零)
    AdcRegs.ADCINTSOCSEL1.all=0xFF;// ADCInterrupt 1 will trigger SOCx, TrigSel is ignored
    AdcRegs.ADCINTSOCSEL2.all=0xFF;
    }

    if (mode == 2) // CLA mode, Start Stop ADC with auto clr ADC Flag
    {
    AdcRegs.ADCINTFLG.bit.ADCINT1 = 0; // clear interrupt flag for ADCINT1
    AdcRegs.INTSEL1N2.bit.INT1CONT = 1; // set ADCInterrupt 1 to auto clr
    AdcRegs.ADCINTSOCSEL1.all=0x0000; // No ADCInterrupt will trigger SOCx
    AdcRegs.ADCINTSOCSEL2.all=0x0000;
    }

    if(IntChSel<15)
    AdcRegs.INTSEL1N2.bit.INT1E = 1; // enable ADC interrupt 1
    else
    AdcRegs.INTSEL1N2.bit.INT1E = 0; // disable the ADC interrupt 1

    // Select the channel to be converted when SOCx is received
    AdcRegs.ADCSOC0CTL.bit.CHSEL= ChSel[0]; //选择被转换的通道。
    AdcRegs.ADCSOC1CTL.bit.CHSEL= ChSel[1];
    AdcRegs.ADCSOC2CTL.bit.CHSEL= ChSel[2];
    AdcRegs.ADCSOC3CTL.bit.CHSEL= ChSel[3];
    AdcRegs.ADCSOC4CTL.bit.CHSEL= ChSel[4];
    AdcRegs.ADCSOC5CTL.bit.CHSEL= ChSel[5];
    AdcRegs.ADCSOC6CTL.bit.CHSEL= ChSel[6];
    AdcRegs.ADCSOC7CTL.bit.CHSEL= ChSel[7];
    AdcRegs.ADCSOC8CTL.bit.CHSEL= ChSel[8];
    AdcRegs.ADCSOC9CTL.bit.CHSEL= ChSel[9];
    AdcRegs.ADCSOC10CTL.bit.CHSEL= ChSel[10];
    AdcRegs.ADCSOC11CTL.bit.CHSEL= ChSel[11];
    AdcRegs.ADCSOC12CTL.bit.CHSEL= ChSel[12];
    AdcRegs.ADCSOC13CTL.bit.CHSEL= ChSel[13];
    AdcRegs.ADCSOC14CTL.bit.CHSEL= ChSel[14];
    AdcRegs.ADCSOC15CTL.bit.CHSEL= ChSel[15];


    AdcRegs.ADCSOC0CTL.bit.TRIGSEL= Trigsel[0]; //SOCx触发源选择 ,sampling triggered by EPWM1 SOCA
    AdcRegs.ADCSOC1CTL.bit.TRIGSEL= Trigsel[1];
    AdcRegs.ADCSOC2CTL.bit.TRIGSEL= Trigsel[2];
    AdcRegs.ADCSOC3CTL.bit.TRIGSEL= Trigsel[3];
    AdcRegs.ADCSOC4CTL.bit.TRIGSEL= Trigsel[4];
    AdcRegs.ADCSOC5CTL.bit.TRIGSEL= Trigsel[5];
    AdcRegs.ADCSOC6CTL.bit.TRIGSEL= Trigsel[6];
    AdcRegs.ADCSOC7CTL.bit.TRIGSEL= Trigsel[7];
    AdcRegs.ADCSOC8CTL.bit.TRIGSEL= Trigsel[8];
    AdcRegs.ADCSOC9CTL.bit.TRIGSEL= Trigsel[9];
    AdcRegs.ADCSOC10CTL.bit.TRIGSEL= Trigsel[10];
    AdcRegs.ADCSOC11CTL.bit.TRIGSEL= Trigsel[11];
    AdcRegs.ADCSOC12CTL.bit.TRIGSEL= Trigsel[12];
    AdcRegs.ADCSOC13CTL.bit.TRIGSEL= Trigsel[13];
    AdcRegs.ADCSOC14CTL.bit.TRIGSEL= Trigsel[14];
    AdcRegs.ADCSOC15CTL.bit.TRIGSEL= Trigsel[15];
    EDIS;

    AdcRegs.ADCSOCFRC1.all = 0xFFFF; // kick-start ADC 1:清除SOCx溢出标志

    }

    ————————————————

    用的EPWM6作为触发源

    int ChSel[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    int TrigSel[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    int ACQPS[16] = {8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8};

    ADC_SOC_CNF(ChSel,TrigSel, ACQPS, 16, 0);

    通道选择都没有错!

  • 你好,你这段程序具体问题是什么?还是说依然有采样干扰的问题?

  • 我用的是这个程序,干扰依然存在,看了论坛上关于SOC存在干扰问题也没得出结论!

  • 问题已经解决!