TI中文支持网
TI专业的中文技术问题搜集分享网站

28335 ADC同步采样两路信号

各位早安,最近我在用F28335上的ADC时遇到一个问题:据资料上说28335自带的ADC有两个采样保持器,可以用一个ADC实现两路信号同时采样;目前我需要实现这个功能,但写的ADC配置可能有些问题,一直无法输出正确的数,想请大家帮我看看哪里有问题,或是缺少了什么部分;代码如下:

AdcRegs.ADCTRL3.bit.SMODE_SEL = 1;//设置同步采样模式
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x00;//设置1对转换,共2通道
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x1;  //设置ADCINA1和ADCINB1
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1; //使能PWMA SOC触发
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;//使能SEQ1中断

我的预期是ADCINA1的结果存入AdcRegs.ADCRESULT0中,ADCINB1的结果存入AdcRegs.ADCRESULT1中,可程序运行并暂停后并没有我期望的结果。

上面是我根据书上的代码改的,可能问题不少,请大家不吝赐教。

mangui zhang:自动定序功能在单次会话中可提供多达16次“自动转换”。可将每次转换编程为选择16个输入信道中的任何一个。序列发生器可运行为2个独立的8态序列发生器,或作为1个较大的16态序列发生器(即2个级联的8态序列发生器)。
CONT_RUN配置了吗

各位早安,最近我在用F28335上的ADC时遇到一个问题:据资料上说28335自带的ADC有两个采样保持器,可以用一个ADC实现两路信号同时采样;目前我需要实现这个功能,但写的ADC配置可能有些问题,一直无法输出正确的数,想请大家帮我看看哪里有问题,或是缺少了什么部分;代码如下:

AdcRegs.ADCTRL3.bit.SMODE_SEL = 1;//设置同步采样模式
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x00;//设置1对转换,共2通道
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x1;  //设置ADCINA1和ADCINB1
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1; //使能PWMA SOC触发
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;//使能SEQ1中断

我的预期是ADCINA1的结果存入AdcRegs.ADCRESULT0中,ADCINB1的结果存入AdcRegs.ADCRESULT1中,可程序运行并暂停后并没有我期望的结果。

上面是我根据书上的代码改的,可能问题不少,请大家不吝赐教。

yingkan fu:

回复 mangui zhang:

啊,对,这也是我想问的;看书的时候对启停模式和连续模式的区别没太弄明白;现在我只是想在运行程序后立即开始采样,采够了双路的1024个点后自动停止采样,请问应该如何选择模式?

我是在TI官方的例程Example_2833xAdcSoc修改的,配置ADC后的内容我也贴一下:

// Assumes ePWM1 clock is already enabled in InitSysCtrl();EPwm1Regs.ETSEL.bit.SOCAEN = 1;// Enable SOC on A groupEPwm1Regs.ETSEL.bit.SOCASEL = 4;// Select SOC from from CPMA on upcountEPwm1Regs.ETPS.bit.SOCAPRD = 1;// Generate pulse on 1st eventEPwm1Regs.CMPA.half.CMPA = 0x0080;// Set compare A valueEPwm1Regs.TBPRD = 0xFFFF;// Set period for ePWM1EPwm1Regs.TBCTL.bit.CTRMODE = 0;// count up and start// Wait for ADC interruptfor(;;){LoopCount++;}}interrupt voidadc_isr(void)
{Voltage1[ConversionCount] = AdcRegs.ADCRESULT0 >>4;Voltage2[ConversionCount] = AdcRegs.ADCRESULT1 >>4;// If 40 conversions have been logged, start overif(ConversionCount == 255){ConversionCount = 0;}else ConversionCount++;// Reinitialize for next ADC sequenceAdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;// Reset SEQ1AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;// Clear INT SEQ1 bitPieCtrlRegs.PIEACK.all = PIEACK_GROUP1;// Acknowledge interrupt to PIEreturn;
}

各位早安,最近我在用F28335上的ADC时遇到一个问题:据资料上说28335自带的ADC有两个采样保持器,可以用一个ADC实现两路信号同时采样;目前我需要实现这个功能,但写的ADC配置可能有些问题,一直无法输出正确的数,想请大家帮我看看哪里有问题,或是缺少了什么部分;代码如下:

AdcRegs.ADCTRL3.bit.SMODE_SEL = 1;//设置同步采样模式
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x00;//设置1对转换,共2通道
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x1;  //设置ADCINA1和ADCINB1
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1; //使能PWMA SOC触发
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;//使能SEQ1中断

我的预期是ADCINA1的结果存入AdcRegs.ADCRESULT0中,ADCINB1的结果存入AdcRegs.ADCRESULT1中,可程序运行并暂停后并没有我期望的结果。

上面是我根据书上的代码改的,可能问题不少,请大家不吝赐教。

45 45:解决了吗

各位早安,最近我在用F28335上的ADC时遇到一个问题:据资料上说28335自带的ADC有两个采样保持器,可以用一个ADC实现两路信号同时采样;目前我需要实现这个功能,但写的ADC配置可能有些问题,一直无法输出正确的数,想请大家帮我看看哪里有问题,或是缺少了什么部分;代码如下:

AdcRegs.ADCTRL3.bit.SMODE_SEL = 1;//设置同步采样模式
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x00;//设置1对转换,共2通道
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x1;  //设置ADCINA1和ADCINB1
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1; //使能PWMA SOC触发
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;//使能SEQ1中断

我的预期是ADCINA1的结果存入AdcRegs.ADCRESULT0中,ADCINB1的结果存入AdcRegs.ADCRESULT1中,可程序运行并暂停后并没有我期望的结果。

上面是我根据书上的代码改的,可能问题不少,请大家不吝赐教。

yingkan fu:

回复 45 45:

感谢回复,目前看来基本是解决了,可还有一些小问题比较困惑,可以的话希望不吝赐教:
1、关于初始化:我看过了TI的4个ADC相关例程,都没有初始化ADC相关引脚(// InitGpio();// Skipped for this example),我的工程也没初始化,不过能出结果;这让我觉得很奇怪,难道ADC模块不用初始化引脚的吗?
2、关于采样率:我在资料上查到双通道同步采样级联的采样时序为:S/H采样保持时间(高电平)为(1+ACQ_PS)×T_adcclk,低电平为2×T_adcclk,所以一个采样周期应该是(ACQ_PS+3)×T_adcclk,可我实际测量出来的采样周期是这个值的2倍,也就是双通道同步采样率为1/(2×(ACQ_PS+3)×T_adcclk),这里的采样率为什么会减半呢?

各位早安,最近我在用F28335上的ADC时遇到一个问题:据资料上说28335自带的ADC有两个采样保持器,可以用一个ADC实现两路信号同时采样;目前我需要实现这个功能,但写的ADC配置可能有些问题,一直无法输出正确的数,想请大家帮我看看哪里有问题,或是缺少了什么部分;代码如下:

AdcRegs.ADCTRL3.bit.SMODE_SEL = 1;//设置同步采样模式
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x00;//设置1对转换,共2通道
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x1;  //设置ADCINA1和ADCINB1
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1; //使能PWMA SOC触发
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;//使能SEQ1中断

我的预期是ADCINA1的结果存入AdcRegs.ADCRESULT0中,ADCINB1的结果存入AdcRegs.ADCRESULT1中,可程序运行并暂停后并没有我期望的结果。

上面是我根据书上的代码改的,可能问题不少,请大家不吝赐教。

zhengkai li:请问解决了吗?能否把完整的代码粘贴一下?

赞(0)
未经允许不得转载:TI中文支持网 » 28335 ADC同步采样两路信号
分享到: 更多 (0)