有个ADC的初始化程序是这样的:
void AD_Init(void)
{
ATD0CTL1=0x00; //7:1-外部触发,65:00-8位精度,4:放电,3210:ch
ATD0CTL2=0x40; //禁止外部触发, 中断禁止
ATD0CTL3=0xa0; //右对齐无符号,每次转换4个序列, No FIFO, Freeze模式下继续转
ATD0CTL4=0x01; //765:采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1]
ATD0CTL5=0x30; //6:0特殊通道禁止,5:1连续转换 ,4:1多通道轮流采样
ATD0DIEN=0x00; //禁止数字输入
}
我理解是:对通道0连续进行4次采样,不断循环。每一轮采样的结果存放在ATDDR0,ATDDR1,ATDDR2和ATDDR3中。
我用开发板进行了调试。通过改变AN0的模拟输入进行测试。测试结果如下:
模拟输入1: ADDR0 1.68 ; ADDR1 2.21 ; ADDR2 2.25; ADDR3 2.78
模拟输入2: ADDR0 1.45 ; ADDR1 2.03 ; ADDR2 2.50; ADDR3 2.31
模拟输入3: ADDR0 1.09 ; ADDR1 1.86 ; ADDR2 2.31; ADDR3 2.58
我的问题是:为什么对同一输入进行4次采样,而采样结果却有很大的差别呢?
难道这就是要加入滤波算法的原因吗?还是我对程序理解有错误?
请大家给些提示。谢谢!
ATD0CLT5寄存器的MULT位为1,意味着对多个通道轮流进行采样,而不是对单个通道进行多次采样。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |