工具/软件:Code Composer Studio
您好!
我正在使用 msp430f6638的 ADC12。 我需要100Hz 的采样频率。 那么、通过计时器、我创建了该信号。 然后、我选择了计时器作为 ADC12采样保持的源。 ADC 的时钟源是 SMCLK、该时钟源来自连接到8MHz 晶体的 XT2。 因此、我编写了一个包含所有这些配置的代码、并且在计时器输出上、我得到了预期的100Hz 信号。 然后、我想通过在输入端输入一个3Hz 正弦波来测试 ADC。 我想查看 ADC 是否能够重建输入正弦波、因此我创建了一个长度为1000的制表符来存储转换后的值。 然后、使用 CCS A 上的图形功能、将信号环路、结果是一条线、 这是因为我们采样的点数比预期的要多得多、并且这些值之间的距离非常近、并且值会逐位减小(2700、2699、2698等)、这对应于正弦波、但采样的点数过大。 我的意思是、采样频率似乎不是100Hz、但比我不理解的频率高得多、因为我在计时器输出上有100Hz 的频率。 我尝试通过创建变量"h"并写入仅当 h 大于200时才包含转换值的制表符来找到解决方案、例如、这意味着我们每写入制表符200次。 使用此解决方案、我能够正确地绘制波正弦(我可以看到多个周期)、但这不是正确的方法、因此我需要 ADC 以100Hz 频率进行采样。 以下是我的代码:
int i = 0;
int h =0;
int 选项卡[1000];
int main (空)
{
ADC12Init();
ADC12_sample_clk ();
_BIS_SR (GIE);
while (1)
{
if (write_mem=1 && i<1000)
{
write_mem=0;
ADC_Value =转换后的值;
如果(h>200)
{
TAB[I]=ADC_Value;
i++;
H = 0;
}
其他
{
H++;
}
}
}
}
#pragma vector = ADC12_vector
_interrupt void ADC12_ISR (void)
{
conved_value = ADC12MEM0和0x0FFF;//以便仅保持低12位
ADC12IFG &=~ADC12IFG0;
write_mem = 1;
}
空 ADC12初始化(空)
{
P6SEL|=BIT5; //选择 P6.5作为 ADC 而不是 I/O
ADC12CTL0 &=~ADC12ENC; // ADC12被禁用
REFCTL0 &=~REFMSTR; //复位 REFMSTR 以将控制权交给 ADC12_A 基准控制寄存器
ADC12CTL0 = ADC12ON + ADC12REFON + ADC12REF2_5V + ADC12SHT0_1 + ADC12MSC; //采样时间8、大约8/2MHz = 4us (好的、因为请参阅 P43数据表)、r é frence 2.5V、r é frence on et ADC12 on
ADC12CTL1 = ADC12SHP + ADC12SH_1 + ADC12DIV_3 + ADC12CONSEQ_2 + ADC12SSEL_3; //启用采样计时器、来自 SMCLK 的 ADC 时钟、触发源1计时器和 CONSEQ=2
ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_5; //选择参考和 A5面板
ADC12IE|= ADC12IE0; //为 ADC 启用中断
ADC12CTL0|=ADC12ENC; //启用转换
}
#define ADC_SAMPLE_PERIOD 327
#define ADC_SAMPLE_DC 163
void ADC12_sample_clk (void)
{
P1SEL|=BIT1; //选择 P1.1作为 TA0而不是 I/O
P1DIR|=BIT1;
P1SEL|=BIT2; //选择 P1.2作为 TA0输出而不是 I/O
P1DIR|=BIT2;
TA0CCR0 = ADC_SAMPLE_PERIOD - 1; // 100Hz 采样频率
TA0CCTL1|= OUTMOD_6; //输出模式2
TA0CCR1 = ADC_SAMPLE_DC; //占空比不重要是周期,而是周期
TA1R = ADC_SAMPLE_PERIOD - 2;
TA0CTL = tassel_1 + TACLR + MC_1; // ACLK、向上计数模式
}
因此、使用这里的代码是我在 ADC 输入端输入3Hz 正弦波时获得的信号:
在每个峰值之间有140个点。 假设我们仅在 h>200时才编写选项卡、实际情况下、140*200 = 28'000点、两个峰值之间的频率为3Hz 正弦、这意味着它为28'000*3 = 84'000点/秒、这可提供84kHz 信号、而不是100Hz。 我真的不知道我犯了什么错误。 我的意思是、我确实需要以100Hz 而不是84kHz 或更高的频率进行采样。 我不知道这是怎么可能的、因为我认为我已经很好地配置了 ADC。 请提供任何帮助。
非常感谢、
此致、
Mike