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;
}
}
谢谢了,在线等。 用非级联模式试下 我知道问题了,因为我测量一个管脚时,另一个是悬空的,会有很大影响。如果在我测量一个管脚时,另一个管脚接个高电平或者地,就不变化了。 谢谢了。 renchaopeng 发表于 2014-8-28 18:13 static/image/common/back.gif
我知道问题了,因为我测量一个管脚时,另一个是悬空的,会有很大影响。如果在我测量一个管脚时,另一个管脚 ...
如果要使用并行采样也就是级联同时采样两路信号
可定需要送入两路信号 悬空有些不妥
问题解决了就好 谢谢你的分享 恩,谢谢了。 感谢楼主分享。我今天也遇到了和楼主一样的问题,其次我还遇到另一个问题。我使用的是DSP28335,配置好ADC模块后,A0引脚未接入电压就已经有1V的电压值。请问这是什么问题?非常感谢! zhangmangui 发表于 2014-8-28 23:20
如果要使用并行采样也就是级联同时采样两路信号
可定需要送入两路信号 悬空有些不妥
问题解决了 ...
大神您好!
我想请问您两个问题,望不吝请教。小弟使用DSP28335的ADC模块采集两路电压值(A0和A1)。
问题1:A0和A1引脚悬空,从采样窗观测已有1V电压值。
问题2:把A0引脚和AGND短接,悬空的A1引脚电压值下降为0.43V。
非常感谢! 闵大 发表于 2019-7-20 17:32
大神您好!
我想请问您两个问题,望不吝请教。小弟使用DSP28335的ADC模块采集两路电压值(A0和A1) ...
悬空一般会采集到2000多的数字量
如果把A0接到地上测到0.43V 你的所有采集值可以与实际对比一下
应该需要减去一个固定值比如0.43V zhangmangui 发表于 2019-7-22 23:56
悬空一般会采集到2000多的数字量
如果把A0接到地上测到0.43V 你的所有采集值可以与实际对比一下
...
感谢您的回复,问题已解决。我配置了A0、A1两路ADC通道,如果只用其中一路则把另外一路接地避免引脚悬空产生干扰。 闵大 发表于 2019-7-25 08:55
感谢您的回复,问题已解决。我配置了A0、A1两路ADC通道,如果只用其中一路则把另外一路接地避免引脚悬空 ...
好的 这种硬件设计很重要 闵大 发表于 2019-7-20 17:32
大神您好!
我想请问您两个问题,望不吝请教。小弟使用DSP28335的ADC模块采集两路电压值(A0和A1) ...
悬空的话,应该是随机噪声会产生影响吧,就是输入值会不固定 闵大 发表于 2019-7-20 17:32
大神您好!
我想请问您两个问题,望不吝请教。小弟使用DSP28335的ADC模块采集两路电压值(A0和A1) ...
如果输入值不固定的话,那么输出值肯定也是不固定的了 闵大 发表于 2019-7-20 17:32
大神您好!
我想请问您两个问题,望不吝请教。小弟使用DSP28335的ADC模块采集两路电压值(A0和A1) ...
第二个问题的话,建议你可以看看这个数据是不是固定的 闵大 发表于 2019-7-20 17:32
大神您好!
我想请问您两个问题,望不吝请教。小弟使用DSP28335的ADC模块采集两路电压值(A0和A1) ...
再者就是改变输入值,看看输出是不是线性的变化,如果是线性变化,可以用软件修正一下这个0.43
页:
[1]