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

MSP430F5172 ADC10 多通道多次采样问题

各位好:

我现在在用MSP430F5172做一款控制器,使用的板子为自己设计的电路板,编译器采用IAR5.30在XP的操作系统上面,

板子XT1的晶振为8M,目前在调试中对于ADC10多通道多次采样这块有点不是很明白,想问问是不是在多通道时先对高通道进行一次AD转换,然后再是低通道,直到A0吗?那这个多次采样在多通道中怎么实现?还有就是ADC10的ADC转换结果就一个ADC10MEM0,怎样区分是哪个通道的采样结果,难道只能根据自己软件设置标志位区分吗?希望大家能多多给予帮助,非常感谢!

Ken Wang:

Hi Yezi,

  首先关于我们ADC10多通道采样转换的理解,你是对的。它是先对高通道x采样,然后再到x-1,最后知道A0通道。这个对于用户编程来说,首先你要设定ADC工作在sequence模式下,然后再去设置ADCMCTL里面去设定最高通道的值。

  在转换结果里面我们确实是只有一个ADC10MEMO寄存器,但是在ADC12里面是有多个结果寄存器的。对于多通道采样的情况,我们一般可以采用DMA的方式来直接将转换的结果传输到你需要存储的区域。用DMA的好处是,它会自动根据ADC10MEMO里面是否有数据触发每次DMA,然后根据自己设定的终端地址,来区别存储每次ADC的转换值。

我们的430ware里面有关于这方面的例子,你可以参考一下。

谢谢

ken

yezi:

回复 Ken Wang:

恩,我明白了,那是不是设置成SEQUENCE模式后,只需要设置你使用的最高通道,其他通道不用设置是吗?比方说我使用了三个通道,通道8,通道7,通道6,是不是就只设置8就行了,ADC10MCTL0 = ADC10SREF_1 + ADC10INCH_8;还有那个多次采样怎么在多通道中实现?

Ken Wang:

回复 yezi:

Hi Yezi,

  你在设置多个采样通道的过程中,有个需要注意的问题是,你需要选择好你的采样通道,特别是当你打算选用sequence模式时,因为你只能通过ADC10MCTL0设置最高通道的值。举个例子说如果你设置为通道8,它就意味着这个sequence会从A8一次轮询采样至A0。

  如果你要设置多次采样的话,你可以设置位repeat sequence模式。即如下设置:

ADC10CTL1 =  ADC10CONSEQ_3; // repeat sequence mode

谢谢

ken

yezi:

回复 Ken Wang:

恩,我把我程序贴出来,想知道,我如何获取ADC结果,如何在DMA中得到。而且我还是不明白这个多通道多次采样的多次体现在哪?

void ADC_Convern(void){ P3SEL |= BIT7+BIT6+BIT5; // P3.7 ADC option select // Configure internal reference while(REFCTL0 & REFGENBUSY); // If ref generator busy, WAIT REFCTL0 |= REFVSEL_2+REFON; // Select internal ref = 2.5V // Internal Reference ON ADC10CTL0 |= ADC10SHT2 + ADC10ON+ADC10MSC; // Sampling and holding time(16), ADC10 on ADC10CTL1 = ADC10SHP + ADC10CONSEQ_3; // s/w trig, single ch/conv // MODCLK 单通道多次 SampCon信号选择定时器输出 ADC10CTL2 |= ADC10RES; // 10-bit conversion results ADC10MCTL0 = ADC10SREF_1 + ADC10INCH_8; // 选择参考为Vref+,A8 UsDelay(75); ADC10IE = 0x01; // Enable interrupt ADC10CTL0 |= ADC10ENC+ADC10SC; //使能转换 // Start sampling/conversion// Configure DMA0 (ADC10IFG trigger) DMACTL0 = DMA0TSEL_24; // ADC10IFG trigger __data16_write_addr((unsigned short) &DMA0SA,(unsigned long) &ADC10MEM0); // Source single address DMA0SZ = 0x02; // 2×32 conversions DMA0CTL = DMADT_4 + DMADSTINCR_3 + DMAEN + DMAIE; // Rpt, inc dest, byte access, // enable int after seq of convs }

还有就是我硬件已经确定是使用A8A7 A6这三个通道了,ADC10的多次与DMA 的DMA0SZ有关吗  怎么配置?谢谢!

Ken Wang:

回复 yezi:

Hi Yezi,

 你贴出来的代码应该是我们的参考代码,里面初始化的设计基本没什么问题,关键就是你提到的DMA0SZ的设置,我们的实例程序里面设置的两通道重复采样,它设置的重复采样次数是32次,所以设置的DMA0SZ= 2*32,然后在主程序里面更新DMA的终端地址。

因为你选择的是A8到A6三个通道,所以DMA0SZ的大小应该是等于你想设置的重复采样的次数在乘以3. 但是这边有可能会遇到的一个问题是,因为你设置的sequence 采样的最高值是A8,我担心它会一直采样到A0,然后在循环回来,这样会导致你得到的数据有误。

你看你能不能先这样试试,就采用single sequence模式,只采一次,然后看看A8-A6的三个数值是否正确。

谢谢

ken

fifasanguo:

回复 Ken Wang:

说实话,我用了G2553一年多了,一一直对于ADC10的多通道重复采样没有用明白,一直不知道什么时候读ADC10的转换结果的值,他说的是自动存在一个规定好的内存里面,那么这个内存改怎么规定,他的大小和采样次数有什么联系(例如我先选择ADC0—ADC3,4个通道进行序列的ADC转换,希望每个通道采样10,然后去平均值,改选择多大的内存和采样次数呢?),希望TI的工程师们给个可靠的历程看看;再就是他每次什么时候进中断,是转换一个通道结束后进中断,还以这一个序列转换结束后再进通道呢?

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F5172 ADC10 多通道多次采样问题
分享到: 更多 (0)