今天手头的项目算是暂时告一段落了,所以今天稍微空闲点,看着眼前的样机,在稳定的工作着,音箱里里传出并不是很清晰的音乐,想想这一个月来的忙碌,有收获,也有些遗憾。 在这个项目中,ADC折腾了我很久,有来自软件上困惑也有硬件上的迷茫。
我要使用6个通道来获取AD值,而且对AD值的使用很频繁,所以,就要求,必须放在主循环中。现在“分享”我的困惑。
1.首先看了好久没明白ADC的3种工作方式。
<1>查询方式:这个最好理解的了。先启动AD转换,在我们需要获取AD值的时候去查询,转换是否完成,完成了就到对应的寄存器中去取得就可以了,在此同时,中断表示也就清除了,AD又继续工作了。
缺点:等待消耗时间,效率低,满足不了实时要求,而且不小心就会死机。
<2>中断方式:这是最常见的方式。转换完毕后,就会产生一个中断同时也会产生中断标识。
优点:采取事件触发机制,实时性好些。
<3>突发模式(burst mode)这个模式刚开始没弄明白。后来不断看DS才明白,这种模式无需硬件去控制,从第一通道逐渐向高通道转换,硬件自己不断转换,周而复始。但明白,搞清楚,以上三种工作方式,根据自己的实际情况来选择。
在整个过程中,硬件的设计也很关键,转换的电压要低于参考电压Vref,由于转换的电压为3.3V,而我的参考电压是从LDO中出来的,压降有些大,只要3.25V,所以刚开始的时候一直出现溢出错误的想象,这个问题,我花了一个上午的时间来解决。参考电压的纹波系数要小,否则线面的问题就会出现:电压值倒是读出来了,但是用printf打印出结果发现,转换出来电压值,经常会出现跳动现象,这种比较难搞。用一般平均法滤波是没用的,应为他的出现是离转换电压的两端。除非采取“去大去小"的方法滤波,但是增加软件开销。
这个问题解决了,我有遇到了一个问题,将另外一块电路板,链接上后,莫名其妙的漂移有开始了。我开始郁闷,思索。我想肯定是链接上的板子干扰了,检查了好久也没发现什么问题。用万用表量,没有发现跳动。FLUKE 15B的应该不会很烂吧!没有办法,只有用示波器开抓波形,这回泰克500M的示波器终于派上用场,一测量吓一跳,抖动的太厉害,而且频率很高,万用表自然测量不出来。
既然找到源头了,就要找出”病灶“。打开PCB layout,终于发向,ADC的三个通道居然从开关DC-DC的下一层通过,中间也没有地层,干扰自然严重。飞线出来,直接接到LPC1766的引脚上,果然OK了。连续读了2000多次,平局误差不超过0.05V.这样的漂移满足我要求。
文章评论(0条评论)
登录后参与讨论