我打算通过定时器来触发ADC采样,但是无论如何调整都无法改变定采样频率,相关代码如下:
时钟设置:
UCSCTL0 = 0x0000;
UCSCTL1 = DCORSEL_5;
UCSCTL2 = FLLD_1 | 374; // DCO=12MHz
ADC12设置:
P6SEL = 0x0F; // Enable A/D channel inputs
ADC12CTL0 = ADC12ON + ADC12MSC + ADC12SHT0_8; // Turn on ADC12, extend sampling time to avoid overflow of results
ADC12CTL1 = ADC12SHP + ADC12CONSEQ_3 + ADC12SHS_1; // Use sampling timer, repeated sequence
ADC12MCTL0 = ADC12INCH_0 + ADC12SREF_1; // ref+=AVcc, channel = A0
ADC12MCTL1 = ADC12INCH_1 + ADC12SREF_1; // ref+=AVcc, channel = A1
ADC12MCTL2 = ADC12INCH_2 + ADC12SREF_1; // ref+=AVcc, channel = A2
ADC12MCTL3 = ADC12INCH_3 + ADC12SREF_1 + ADC12EOS; // ref+=AVcc, channel = A3, end seq.
ADC12IE = 0x08; // Enable ADC12IFG.3
ADC12CTL0 |= ADC12ENC; // Enable conversions
定时器TA0设置:
TA0CCR0 = 10000; // PWM Period,1.2kHz
TA0CCTL1 = OUTMOD_7; // CCR1 reset/set
TA0CCR1 = 2000;
msp430f663x的手册上说当ADC12SHS设置为1时,ADC12的采样由TA0.1触发,按照如上设置,我的AD采样频率应该是1.2kHz,我用AD对50Hz的工频信号进行采样,理论上24个点就能够采集一个周波。但是通过调试,我发现实际上却需要90多个点才行,也就是说这使的采样频率只有1.2kHz的四分之一左右,并且更重要的是,无论我怎么改变TA0CCR0和TA0CCR1寄存器的值,采样频率都不会改变。
所以我想请问一下,是我设置的不对,还是哪里出了问题?
灰小子:
你的定时器的时钟频率是多少?
一个adc采样的周期包括采样保持时间和转换时间,手册里有介绍,可以计算出一个周期需要多少时钟周期。