智能车制作

标题: 求助,单片机的AD取值时间过长影响中断 [打印本页]

作者: 破晓骑士道    时间: 2015-4-2 22:27
标题: 求助,单片机的AD取值时间过长影响中断
——我是做直立的小菜鸟
——我用PIT定了一个1ms的中断——然后按照官方直立方案,在这个中断里弄了四个中断周期,他们的周期都是五毫秒
[size=15.4545450210571px]——中断里用flag_1ms来计数,来进行四个中断周期的判断
——弄了2个星期勉强让它完成了会往前加速的直立

——后来在中断周期里测试CCD的时候发现,读取周期并非我所想的100ms。竟然是1s多

——然后我就在100ms的周期里加了LED的翻转
——确实是1s多
——后来CCD的读取函数去掉,发现仍然不是100ms
——后来发现,读取陀螺仪的AD值时要读取20次,进行均值滤波,将20次改成1次,瞬间可以了。
——但是马上发现这样子没法直立了
——于是乎问题处在AD读取好像容易超出1ms的时间
——那么这要怎么办呀!!!
——我们下周五就校赛了,我们才刚直立起来,完了

作者: 、痕迹    时间: 2015-4-3 00:53
读取周期100ms你也能忍?我反正不能忍...ccd采样用8位快速采样..陀螺仪加速度计用12位快速采样..单次采样不用平均...模拟的加速度计和陀螺仪垃圾的很..响应频率300Hz你在3ms内采的值都一样
作者: 破晓骑士道    时间: 2015-4-3 08:27
、痕迹 发表于 2015-4-3 00:53
读取周期100ms你也能忍?我反正不能忍...ccd采样用8位快速采样..陀螺仪加速度计用12位快速采样..单次采样不用 ...

ccd要读128次ad,好像会超过一ms中断,是应该再弄一个pit定时器吗还是说把128次读取分散来?

作者: 、痕迹    时间: 2015-4-3 12:07
破晓骑士道 发表于 2015-4-3 08:27
ccd要读128次ad,好像会超过一ms中断,是应该再弄一个pit定时器吗还是说把128次读取分散来?

你用的什么单片机...8位高速采样只要0.5us一次

作者: 破晓骑士道    时间: 2015-4-3 13:30
、痕迹 发表于 2015-4-3 12:07
你用的什么单片机...8位高速采样只要0.5us一次

K60,用 的是LPLD的库

作者: 、痕迹    时间: 2015-4-3 14:55
破晓骑士道 发表于 2015-4-3 13:30
K60,用 的是LPLD的库

那就是你配置错了吧...不用关闭硬件平均,短采样时间..8位精度..一个点0.5us绝对可以

作者: 破晓骑士道    时间: 2015-4-3 16:12
、痕迹 发表于 2015-4-3 14:55
那就是你配置错了吧...不用关闭硬件平均,短采样时间..8位精度..一个点0.5us绝对可以

谢啦,难道和选用什么通道有关?我根据LPLD的数据手册,将AD读取的接口放在A7,B3,B0(确实配置了这些通道)
莫非只有”ADC0_DP3“这种AD专用通道才能是高速的?

作者: 、痕迹    时间: 2015-4-3 16:21
肯定不是...我随便选了两个通道..你要看adc配置是不是选了硬件平均
作者: 破晓骑士道    时间: 2015-4-3 18:52
这是LPLD函数库里的AD的初始化函数里的一句:

  ADC_Config_Alt(ADCx_Ptr[adcx], ADC_CfgPtr);    //配置 ADC寄存器
  ADC_Cal(ADCx_Ptr[adcx]);                       //首先进行32次的硬件平均校准进行校准

这就是硬件平均吧?
作者: 破晓骑士道    时间: 2015-4-3 20:23
、痕迹 发表于 2015-4-3 16:21
肯定不是...我随便选了两个通道..你要看adc配置是不是选了硬件平均

已经改成了短采样时间, 将硬件平均的代码注释掉了,结果还是一样。。。。

作者: 木乃晗    时间: 2015-4-3 23:33
建议把采样和均值分开处理,先统一采样,然后利用滑动滤波,进行均值处理,可以试一下。我们之前遇到这个问题,已解决!
作者: 、痕迹    时间: 2015-4-4 00:48
破晓骑士道 发表于 2015-4-3 20:23
已经改成了短采样时间, 将硬件平均的代码注释掉了,结果还是一样。。。。

那就检查你的各个中断有没有冲突...我1ms的中断..所有程序都要求在1ms之内结束..时序很稳定...
作者: 破晓骑士道    时间: 2015-4-4 11:12
木乃晗 发表于 2015-4-3 23:33
建议把采样和均值分开处理,先统一采样,然后利用滑动滤波,进行均值处理,可以试一下。我们之前遇到这个问 ...


“连续取N个采样值看成一个循环队列,队列的长度固定为N,每次采样到一个新数据放入队尾,并扔掉原来队首的一个数据(先进先出原则),滤波器每次输出的数据总是当前队列中的N个数据的算术平均值”
这个就是你所说的滑动滤波吗。那么1ms的中断里应该AD采集几次?
作者: 木乃晗    时间: 2015-4-4 16:41
建议取中值或者取循环队列的中间几个的平均值,
作者: 木乃晗    时间: 2015-4-4 16:46
AD采集放在中断里,会不会影响实时性!




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