求点拨!!
想要使用单通道重复采样,工作在最高采样率。但是用TI的例程实测,采样率都低太多,跟手册上说的200ksps都不在一个数量级。
时钟用ADC内部振荡器,约5MHz,2个采样周期+13个转换周期,计算下来应该4us左右采一个点。
但是,计数1s进入ADC中断的次数,才不到6000多次。
IAR编译,自己画的开发板,代码如下:
#include <msp430.h>
#include "..\com\delay.h"
#define Num_of_Results 30
static unsigned int results[Num_of_Results]; // Needs to be global in this
// example. Otherwise, the
// compiler removes it because it
// is not used for anything.
static unsigned int index = 0;
unsigned char ir;
void main(void)
{
WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
/* for test */
P1DIR |= BIT0; // 上电指示
P1OUT |= BIT0;
P2DIR |= BIT6; // ADC12CLK
P2SEL |= BIT6;
// Vref+ 在pin7测试
P5DIR |= 0x70; // P5.6,5,4 outputs
P5SEL |= 0x70; // P5.6,5,4 options, ACLK, SMCLK, MCLK
/**/
P6SEL |= 0x01; // Enable A/D channel A0
ADC12CTL0 = ADC12ON + SHT0_2 + REFON + MSC; // Turn on ADC12, set sampling time
ADC12CTL1 = SHP + CONSEQ_2; // Use sampling timer, single-repeat mode, default: ADC12CLK = ADC12OSC(about 5MHz)
ADC12MCTL0 = SREF_1; // Vr+=Vref+
ADC12IE = 0x01; // Enable ADC12IFG.0
delay_ms(20);
ADC12CTL0 |= ENC; // Enable conversions
ADC12CTL0 |= ADC12SC; // Start conversion
_BIS_SR(LPM0_bits + GIE); // Enter LPM0,Enable interrupts
}
#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{
results[index] = ADC12MEM0; // Move results
index = (index+1)%Num_of_Results; // Increment results index, modulo
}
Xutong Han2:
200-ksps maximum conversion rate 看芯片手册上200Ksps是转换速率,转换需要12CLK+1CLK to Store. 如果选用内部的OS 大约5M 周期为0.2uS ,ADC采集前期还要有采样和保持 最少的时间是4CLK 时钟,
zhi xin chen:
你好,我最近也在做MSP430 ADC12的模拟信号采样,也希望采样率尽可能大,不知道你遇到的问题怎么解决的?
希望能得到你的回复,不甚感激。