智能车制作

标题: XS128的AD问题 [打印本页]

作者: destiny24    时间: 2013-4-5 13:25
标题: XS128的AD问题
       XS128的AD的各个通道相互之间为什么会有影响的?比如说我要用到四个通道,0,1,2,3这四个,然后我烧程序进去单片机中用BDM查看AD转换后的值,我先不给输入信号,然后那四个通道的值好像就在200以上变化(8位精度),接着我再在其中一个通道那里接上地线,那个通道的值就变成了0,但是其他通道的值也受到了影响,相邻的下一个通道的值变得只有100多,其他两个通道的值也受到些许影响。单片机试过好几块了,还是一样的问题。我把AD设置和采集的程序贴在下面,求解救。求帮忙啊,弄车弄了好久,突然发现到这个问题,排除了好久,也没找到为什么,纠结。。。
//AD初始化
void AD_INIT(void){
  ATD0DIEN=0x00;   //禁止数字输入
  ATD0CTL1_SRES=0;//8位精度
  ATD0CTL2=0x40;//启动转换,快速清除标志,禁止中断
  ATD0CTL3=0xA0;//右对齐,转换序列长度8,非先进先出模式
  ATD0CTL4=0x13;//80M总线,采样频率2M
  ATD0CTL5=0x30;//连续转换序列,多通道AD0-AD3
}

//AD采集,在PIT0终端中调用
void AD_DO(unsigned int *AD_value){
  if(ATD0STAT0_SCF)
  *AD_value=ATD0DR0;
  AD_value++;
  *AD_value=ATD0DR1;
  AD_value++;
  *AD_value=ATD0DR2;
  AD_value++;
  *AD_value=ATD0DR3;
  AD_value++;
}


作者: destiny24    时间: 2013-4-5 21:38
求高手指点迷津啊~~~
作者: verm    时间: 2013-4-7 16:11
很高兴能为你解答问题,其实因为你采取了非先进先出模式 所以在只针对一个通道采集而其他通道并没有输入信号时,就会出现如上的这种情况(其他引脚也有信号,仔细观察你就会发现,信号变化惊人的一样 ,不过大小有所差异 ,这是因为后面没有接信号的引脚也采集了前一通道的值),解决这个问题的办法就是 在你需要的AD端口都连接上相应的信号,比如说AD0陀螺仪 AD1 加速度计 AD2 线性CCD 你将他们的信号线分别对应的连接在相应的传感器信号线就不会出现这种情况了;其实说实话如果 假设你只用到AD0,完全可以不用管其他引脚的情况。  不知道你明白了没有
作者: destiny24    时间: 2013-4-7 17:23
verm 发表于 2013-4-7 16:11
很高兴能为你解答问题,其实因为你采取了非先进先出模式 所以在只针对一个通道采集而其他通道并没有输入信号 ...

十分感谢你细心的回答。我原来遇到的情况是0~3这四个通道都给了输入信号,接了四个电感传感器电路传回来的信号。电感布局是两排平放,前面一排两个电感信号给0和3通道,后面一排两个信号给1和2通道。0,1和3通道的值正常,但是2通道的值不对,无论是它对应的电感在漆包线附近还是离得比较远,它的值始终比通道1的值大,在漆包线附近时通道2的值大概为150多,远离时值还有六七十那么多,正常的话应该是小于十几的。我以为单片机的多通道采集之间有影响,于是我就一楼所描述的那样测试AD模块了。不知道你有没什么对策?


作者: verm    时间: 2013-4-7 17:38
你可以将正常的电感比如说是0通道连接的那个(0,1和3通道的值正常),接给通道2看看正不正常,或者是将不正常的通道2所连接的电感接到正常的通道上面观察一下,
作者: destiny24    时间: 2013-4-7 23:40
verm 发表于 2013-4-7 17:38
你可以将正常的电感比如说是0通道连接的那个(0,1和3通道的值正常),接给通道2看看正不正常,或者是将不正 ...

    今晚鼓捣了一下,居然正常了。我晕,貌似是AD的通道2的外接口与插头之间接触不良导致的,不太确定~~后来打球去了,回复晚了~不过谢谢啦,那个先进先出什么的那里没仔细看datasheet,学到东西了。
作者: verm    时间: 2013-4-8 07:22
{:soso_e181:}
作者: 暖暖10312138    时间: 2013-5-18 16:01

作者: 疯狂的想法    时间: 2014-4-11 20:12
估计是通道设置有问题,你这样设计是采集了16个通道加上 ATD0CTL0=0x03试试

作者: 世界领袖2013    时间: 2014-4-20 15:05
我的电感值在没有输入时电感都在200多,怎么回事?
作者: cs172034    时间: 2014-4-25 23:54
世界领袖2013 发表于 2014-4-20 15:05
我的电感值在没有输入时电感都在200多,怎么回事?

我也是,而且通道间会相互影响,请问解决了吗?

作者: 世界领袖2013    时间: 2014-4-26 07:59
cs172034 发表于 2014-4-25 23:54
我也是,而且通道间会相互影响,请问解决了吗?

我感觉是AD初始化没设置好。

作者: ↗仰┢┦望☆    时间: 2014-4-27 16:59
把 if(ATD0STAT0_SCF)  改成   每个*AD_value前while(!ATD0STAT2L_CCF0)  呢?
作者: D调华丽    时间: 2014-5-17 16:33
↗仰┢┦望☆ 发表于 2014-4-27 16:59
把 if(ATD0STAT0_SCF)  改成   每个*AD_value前while(!ATD0STAT2L_CCF0)  呢?

我的AD采集电感信号放大后大概1v左右,但是蓝牙串口反馈的值只有40 和 0B,其他的值全是0,是AD通道没打开吗?虚心求解
作者: D调华丽    时间: 2014-5-17 16:34
destiny24 发表于 2013-4-5 21:38
求高手指点迷津啊~~~

我的AD采集电感信号放大后大概1v左右,但是蓝牙串口反馈的值只有40 和 0B,其他的值全是0,是AD通道没打开吗?虚心求解
作者: D调华丽    时间: 2014-5-17 16:34
verm 发表于 2013-4-7 16:11
很高兴能为你解答问题,其实因为你采取了非先进先出模式 所以在只针对一个通道采集而其他通道并没有输入信号 ...

我的AD采集电感信号放大后大概1v左右,但是蓝牙串口反馈的值只有40 和 0B,其他的值全是0,是AD通道没打开吗?虚心求解




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2