我用f5529自带AD采集电压,当采集到的电压经过AD采样后值在2048上下一定范围内时,输出的AD采集值会变为2048,导致采集一条0-3V渐变的电压在采集值2048上下一定范围内的值变成一条直线,当值偏离2048比较远之后一切恢复正常。源信号通过示波器观察一切正常。将数据通过串口输出,画图软件画出来后结果如下图。可以肯定源信号没有问题。初始化代码如下:
unsigned int Init_AD()
{ P6SEL |= BIT4 + BIT5 + BIT6 + BIT7; // P6.5 ADC option select (A5)
ADC12CTL0 = ADC12SHT02 + ADC12ON/* + ADC12REFON + ADC12REF2_5V*/; // 打开ADC12,选择采样时间周期,选择比较电压
ADC12CTL1 = ADC12SHP + ADC12SSEL0 + ADC12SSEL1/* + ADC12CONSEQ0*/; // 选择采样结果存储地址,采样默认单通道模式
ADC12MCTL0 = ADC12SREF_0; // Vr+=AVDD and Vr-=AVss //ADC12MCTLx,X表示结果存储的地址,基准及通道选择。
ADC12MCTL0 = (ADC12MCTL0 & 0xf0) | ADC12INCH_0; // 通道选择。
ADC12CTL0 |= ADC12ENC;
ADC12CTL0 |= ADC12SC;
while (!(ADC12IFG & BIT0));
_NOP();
positionData = ADC12MEM0;
return positionData;
}
Hardy Hu:
Hi, Simon,
你好!从你给的信息看,有几个建议可以去尝试:
1)现在配置的ADC时钟使用内部MODOSC,4.8MHz左右,采保时间为16个ADC时钟,则采保时间为大约3.33us,那么需要采样的信号频率最好是在KHz以下。
2)你所指的2048上下的区间是多少,能否把你的信号曲线和采到的曲线发上来看一下。
Simon Chang:
回复 Hardy Hu:
谢谢你的解答。单片机频率为16M,AD时钟也是16M的,采样频率为512Hz,信号曲线在我发帖的1.jpg图片上画出来了,是不是采样时间太短的问题?
Simon Chang:
回复 Hardy Hu:
图形见下图
Hardy Hu:
回复 Simon Chang:
Hi, Simon,
1)从你给的代码看,ADC时钟是用的4.8MHz的MODOSC;
2)我看不出来你的信号频率是多少,可以尝试将采保时间延长来试试,修改ADC12SHT0x;