智能车制作

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

作者: 自由的飞    时间: 2012-2-19 15:01
标题: AD的转换问题
请问一下:XS128中AD转换中转换队列长度与单多通道的设置还有连续队列转换方式之间是怎样的关系?
转换队列的长度是不是反映多通道转换的数目?单通道时又对应着什么东西?
作者: wuqt    时间: 2012-2-19 15:28
MUL位:如果是单通道,那就只采样一个通道的值,具体哪个通道由ATDCTL5的CD-CA决定;
多通道就是从一个选定的通道开始一个个通道转换下去,ATDCTL5的CD-CA决定从哪个通道开始采样,ATDCTL3 的S8C,S4C,S2C,S1C决定连续采样通道的数目。
MC9S12XS的AD只有一个转换器,选择多通道的话,它得一个个转换下来。
作者: 自由的飞    时间: 2012-2-19 22:17
wuqt 发表于 2012-2-19 15:28
MUL位:如果是单通道,那就只采样一个通道的值,具体哪个通道由ATDCTL5的CD-CA决定;
多通道就是从一个选定 ...

如果我设置为单通道,队列长度为4,那么就会在ATDCTL5的CC-CA决定的通道处采集模拟信号,会采集出4个值,分别放在对应的结果寄存器里,此时我可以取平均,得到较为准确的AD转换值。
如果我设置为多通道,队列长度为4,就表示会采集4路模拟信号。那么我如果想多通道取平均怎么办?
还想问一下:SCAN  连续与单次转换模式 是个什么概念?作用是什么?
麻烦你啦!

作者: wuqt    时间: 2012-2-19 23:03
自由的飞 发表于 2012-2-19 22:17
如果我设置为单通道,队列长度为4,那么就会在ATDCTL5的CC-CA决定的通道处采集模拟信号,会采集出4个值 ...

不是的,单通道是只采一个通道的值,S8C~S1C这时不作用。多通道时就从SD~SA决定的通道开始 连续采样S8C~S1C个通道。
SCAN模式就是不停地转换队列,反之就是只转换一次队列。

作者: 自由的飞    时间: 2012-2-20 11:31
wuqt 发表于 2012-2-19 23:03
不是的,单通道是只采一个通道的值,S8C~S1C这时不作用。多通道时就从SD~SA决定的通道开始 连续采样S8C~ ...

不是啊,我在很多书上见到的都是单通道,队列长度为4,就表示在确定的通道采集4个值,然后可取平均进行滤波。

作者: wuqt    时间: 2012-2-20 17:19
自由的飞 发表于 2012-2-20 11:31
不是啊,我在很多书上见到的都是单通道,队列长度为4,就表示在确定的通道采集4个值,然后可取平均进行滤 ...

这样貌似意义不大,所以忽略队列长度了。你可以试试单通道到底会不会转换多次。。。

作者: 春风    时间: 2012-3-5 15:42
wuqt 发表于 2012-2-19 15:28
MUL位:如果是单通道,那就只采样一个通道的值,具体哪个通道由ATDCTL5的CD-CA决定;
多通道就是从一个选定 ...

我通过硬件调试。一经过AD初始化函数  标志位CCF0-8就为1了, ATD0DR0-8为1500左右的初值是怎么回事?


   初始化 函数 是 AD7-15位,9通道  从AD7开始转换 多通道连续
void ADC_Init(void)
{
     ATD0DIEN = 0;  
ATD0CTL1 = 0x57;       //AD分辨率选择12位,且采样前放电
ATD0CTL2 = 0x40;//AD模块快速清零, 无等待模式, 禁止外部触发, 中断禁止
ATD0CTL3 = 0xC8;//AD转换结果右对齐,每个序列9次转换, No FIFO, Freeze模式下继续转换
ATD0CTL4 = 0x0f;  //采样时间4个周期,PRS=15  
TD0CTL5 = 0x37;   //多通道连续采样,通道7-----15,
}
  能不能麻烦你帮我看下,这个程序哪个地方出了问题。  我按照寄存器来设定的呀。
作者: wuqt    时间: 2012-3-5 17:27
春风 发表于 2012-3-5 15:42
我通过硬件调试。一经过AD初始化函数  标志位CCF0-8就为1了, ATD0DR0-8为1500左右的初值是怎么回事?

...

开始转换是通过写ATDCTL5来启动的,你写完ATDCTL5它就开始转换了。1500初值可能是引脚悬空着的吧?

作者: 春风    时间: 2012-3-5 17:53
wuqt 发表于 2012-3-5 17:27
开始转换是通过写ATDCTL5来启动的,你写完ATDCTL5它就开始转换了。1500初值可能是引脚悬空着的吧?

刚才试了下, AN7接了陀螺仪 还是一样。  1500左右。而且变成FIFO 现在标志位都为1了。。。。

  会是什么造成的。。?

作者: wuqt    时间: 2012-3-5 19:46
春风 发表于 2012-3-5 17:53
刚才试了下, AN7接了陀螺仪 还是一样。  1500左右。而且变成FIFO 现在标志位都为1了。。。。

  会是 ...

AFFC下完成标志位你读了结果寄存器,它就会自动清零的。SCAN模式下要是没来得及读结果,前一结果就会被自动覆盖了,FIFOR就会置1 ,你是用的NonFIFO模式,FIFOR没什么用的。至于结果对不对,你可以把通道接到参考电压下 看它是不是FFF。

作者: 春风    时间: 2012-3-5 20:03
wuqt 发表于 2012-3-5 19:46
AFFC下完成标志位你读了结果寄存器,它就会自动清零的。SCAN模式下要是没来得及读结果,前一结果就会被自 ...

我硬件一步步仿真的时候 , 没有出现复位呀。

     我刚才把AN7拉为5V,结果AD口都为3000多了,相差不大。。
而且是AD0--8有  其他口都为0 ,初始化肯定不对,但我又找不出问题在哪,语句是对着寄存器来的,只是改了CTL1 12位,
  CTL3 9个AD口,   CTL4  ad 2M  , CTL5 从7开始转换

作者: wuqt    时间: 2012-3-5 20:10
春风 发表于 2012-3-5 20:03
我硬件一步步仿真的时候 , 没有出现复位呀。

     我刚才把AN7拉为5V,结果AD口都为3000多了,相差不 ...

没错的,结果是放在AD0开始的连续n个寄存里的,不是跟通道对应起来。

作者: 春风    时间: 2012-3-5 20:37
wuqt 发表于 2012-3-5 20:10
没错的,结果是放在AD0开始的连续n个寄存里的,不是跟通道对应起来。

谢谢你的回答,我刚才又把AN10接地了,发现ATD0DR3为0 跟你说的现象一样的,但就是标志位还是511   FFFF
  是不是硬件仿真仿不出来还是怎么高的?  读数的时候没有清零 ,是不是我速度调太快了?  BUS频率 64M 
  我32分频的 ADCLK应该是2M

作者: wuqt    时间: 2012-3-5 20:52
春风 发表于 2012-3-5 20:37
谢谢你的回答,我刚才又把AN10接地了,发现ATD0DR3为0 跟你说的现象一样的,但就是标志位还是511   FFFF  ...

应该是硬件仿真的问题,AD转换太快,仿真单步肯定跟不上的,SCAN模式你可以不用太在意标志位,你只要while(!CCFn); result=ATDDRn;就可以了

作者: 春风    时间: 2012-3-5 21:01
wuqt 发表于 2012-3-5 20:52
应该是硬件仿真的问题,AD转换太快,仿真单步肯定跟不上的,SCAN模式你可以不用太在意标志位,你只要whil ...

恩,大神,谢谢你呀。 问题已经差不多解决了,  那个CCF也是不跟通道对应的对吧。  

作者: wuqt    时间: 2012-3-5 21:14
春风 发表于 2012-3-5 21:01
恩,大神,谢谢你呀。 问题已经差不多解决了,  那个CCF也是不跟通道对应的对吧。

哈哈,不客气啊,那CCFn跟ADDRn一一对应的。

作者: 蝴蝶树az    时间: 2012-3-11 10:53
还是没明白序列是咋回事

作者: hm_yuanfang    时间: 2012-11-14 21:44
wuqt 发表于 2012-2-19 23:03
不是的,单通道是只采一个通道的值,S8C~S1C这时不作用。多通道时就从SD~SA决定的通道开始 连续采样S8C~ ...

"不是的,单通道是只采一个通道的值,S8C~S1C这时不作用" 是错误的,单通道时,s8c~s1c 代表的是一个单通道序列中转换的次数。不用怀疑,本人试验过

作者: 736421469    时间: 2012-12-31 11:46
问下12为分辨率时读取ATDDRn时是不是ATDDRL+256*ATDDRH




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