renchaopeng 发表于 2014-8-28 10:30

DSP28335级联模式两路采集都会对另一路产生影响,解决办法

我声明了AD初始化的程序。在中断中实现AD采样。我设定的是级联模式,AINA0采集一路,AINA1采集另一路,但是两路采集都会对另一路产生影响。该怎么办。
下面是我AD初始化的程序,还有中断服务函数程序。
void AD_Init(void)
{

   EALLOW;
   SysCtrlRegs.HISPCP.all = ADC_MODCLK;        // HSPCLK = SYSCLKOUT/ADC_MODCLK
   EDIS;

InitAdc();         // For this example, initializes the ADC

// Specific ADC setup for this example:                  
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;// Sequential mode: Sample rate   = 1/[(2+ACQ_PS)*ADC clock in ns]
                     //                     = 1/(3*40ns) =8.3MHz (for 150 MHz SYSCLKOUT)   //ADC_SHCLK为1
                                          //                     = 1/(3*80ns) =4.17MHz (for 100 MHz SYSCLKOUT)
                                          // If Simultaneous mode(同时处理模式) enabled: Sample rate = 1/[(3+ACQ_PS)*ADC clock in ns]
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;// 预分频用                      //ADC_CKPS为0,表示不分频                      //P144
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;      // 1Cascaded mode////1 级联模式   ,SEQ为16通道////   0双排序模式SEQ1和SEQ2各为8通道
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;          //选择通道ADCINA0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1;          //选择通道ADCINA1
AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run   连续模式      

AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1;       // Enable Sequencer override feature            
                                          
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x01;// convert and store in 8 results registers   因为只有A0转换//转换次数为1+1=2次
                                             //一个序列内所完成的转换次数为MAX_CONVn+1

}



interrupt void ISRTimer0(void)//中断服务程序(Interrupt Service Routine)                                                             //中断服务程序,清零标志位,重新计时,//采样
{

    CpuTimer0.InterruptCount++;
    AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;/////打开AD采样//////不加的话,就不行,while(AdcRegs.ADCST.bit.INT_SEQ1 == 0);看不到执行//////

                            while(AdcRegs.ADCST.bit.INT_SEQ1 == 0);//为0表示没有INT_SEQ1,为1表示有INT_SEQ1,才能执行后面的程序
//                        AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0;   
                            AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;//置位表示清除INT_SEQ1。

                        a= ((AdcRegs.ADCRESULT0)>>4);//AdcRegs.ADCRESULT0右移4位
                        b= ((AdcRegs.ADCRESULT1)>>4);


                                                  j++;
                                                  sum1=sum1+a;
                            sum2=sum2+b;

                                          if(j>=512)      //采样20次
                                          {
                                                  dianya1=(sum1/512/4096)*2.94985;//i
                                                  dianya2=(sum2/512/4096)*2.94985;//u
                                                  sum1=sum1/512;//i
                                                  sum2=sum2/512;//u
                                                  sum_pwm_caiyang_i=sum1;//i       ////////////AD0寄存器中的值,即采样值(0-4095)///////////
                                                  sum_pwm_caiyang_u=sum2;//u      ////////////AD1寄存器中的值,即采样值(0-4095)///////////
                                                  sum_lcd1=sum1/2100/2;//实际的电流值
                                                  sum_lcd2=dianya2;//实际的电压值
                                                  AD0=sum1;//i          ////////////AD0寄存器中的值,即采样值(0-4095)///////////
                                                  AD1=sum2;//i         ////////////AD1寄存器中的值,即采样值(0-4095)///////////
                                                  j=0;
                                                  sum1=0;
                                                  sum2=0;
                                          }
}
谢谢了,在线等。

wangch_sh 发表于 2014-8-28 17:34

用非级联模式试下

renchaopeng 发表于 2014-8-28 18:13

我知道问题了,因为我测量一个管脚时,另一个是悬空的,会有很大影响。如果在我测量一个管脚时,另一个管脚接个高电平或者地,就不变化了。

renchaopeng 发表于 2014-8-28 18:14

谢谢了。

zhangmangui 发表于 2014-8-28 23:20

renchaopeng 发表于 2014-8-28 18:13 static/image/common/back.gif
我知道问题了,因为我测量一个管脚时,另一个是悬空的,会有很大影响。如果在我测量一个管脚时,另一个管脚 ...

如果要使用并行采样也就是级联同时采样两路信号
可定需要送入两路信号   悬空有些不妥
问题解决了就好   谢谢你的分享

renchaopeng 发表于 2014-8-29 10:25

恩,谢谢了。

闵大 发表于 2019-7-20 17:09

感谢楼主分享。我今天也遇到了和楼主一样的问题,其次我还遇到另一个问题。我使用的是DSP28335,配置好ADC模块后,A0引脚未接入电压就已经有1V的电压值。请问这是什么问题?非常感谢!

闵大 发表于 2019-7-20 17:32

zhangmangui 发表于 2014-8-28 23:20
如果要使用并行采样也就是级联同时采样两路信号
可定需要送入两路信号   悬空有些不妥
问题解决了 ...

大神您好!
      我想请问您两个问题,望不吝请教。小弟使用DSP28335的ADC模块采集两路电压值(A0和A1)。
      问题1:A0和A1引脚悬空,从采样窗观测已有1V电压值。
      问题2:把A0引脚和AGND短接,悬空的A1引脚电压值下降为0.43V。
      非常感谢!

zhangmangui 发表于 2019-7-22 23:56

闵大 发表于 2019-7-20 17:32
大神您好!
      我想请问您两个问题,望不吝请教。小弟使用DSP28335的ADC模块采集两路电压值(A0和A1) ...

悬空一般会采集到2000多的数字量   
如果把A0接到地上测到0.43V   你的所有采集值可以与实际对比一下
应该需要减去一个固定值比如0.43V

闵大 发表于 2019-7-25 08:55

zhangmangui 发表于 2019-7-22 23:56
悬空一般会采集到2000多的数字量   
如果把A0接到地上测到0.43V   你的所有采集值可以与实际对比一下
...

感谢您的回复,问题已解决。我配置了A0、A1两路ADC通道,如果只用其中一路则把另外一路接地避免引脚悬空产生干扰。

zhangmangui 发表于 2019-7-29 20:59

闵大 发表于 2019-7-25 08:55
感谢您的回复,问题已解决。我配置了A0、A1两路ADC通道,如果只用其中一路则把另外一路接地避免引脚悬空 ...

好的   这种硬件设计很重要

蒋博1026 发表于 2019-7-30 20:09

闵大 发表于 2019-7-20 17:32
大神您好!
      我想请问您两个问题,望不吝请教。小弟使用DSP28335的ADC模块采集两路电压值(A0和A1) ...

悬空的话,应该是随机噪声会产生影响吧,就是输入值会不固定

蒋博1026 发表于 2019-7-30 20:09

闵大 发表于 2019-7-20 17:32
大神您好!
      我想请问您两个问题,望不吝请教。小弟使用DSP28335的ADC模块采集两路电压值(A0和A1) ...

如果输入值不固定的话,那么输出值肯定也是不固定的了

蒋博1026 发表于 2019-7-30 20:10

闵大 发表于 2019-7-20 17:32
大神您好!
      我想请问您两个问题,望不吝请教。小弟使用DSP28335的ADC模块采集两路电压值(A0和A1) ...

第二个问题的话,建议你可以看看这个数据是不是固定的

蒋博1026 发表于 2019-7-30 20:11

闵大 发表于 2019-7-20 17:32
大神您好!
      我想请问您两个问题,望不吝请教。小弟使用DSP28335的ADC模块采集两路电压值(A0和A1) ...

再者就是改变输入值,看看输出是不是线性的变化,如果是线性变化,可以用软件修正一下这个0.43
页: [1]
查看完整版本: DSP28335级联模式两路采集都会对另一路产生影响,解决办法