文号
t28328
阅读
11337
回复
10
收藏
5
再来一个stm32的问题...ADC采样MMA7260波动太大了,怎么解决?
2010/08/13
IP:黑龙江
我用stm32的ADC来采样MMA7260,波动实在太大
电路跟数据手册上一样,输出端串一个1k电阻,再并一个0.1uf电容到地。
症状跟这个贴极为相似:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
请问,除了上面那个帖子提到的办法,还有没有别的原因造成这样大的波动? 无标题.png
16年5个月前IP:未同步
248117
1楼
最近也在玩MMA7260
只不过用的是8位单片机

单片机中的滤波算法有很多

用滤波算法应该可以解决

调下灵敏度?????
引用
评论
16年5个月前IP:未同步
248121
2楼
stm32的adc采样引脚不是高阻输入的么?  AVR就是的...
你用来测1000Hz的抖动? 那加个带通看看效果怎么样..
引用
评论
16年5个月前IP:未同步
248289
3楼
滤波器伺候
另外你的那条长电线也是罪魁祸首,电线上感应到的干扰有一部分是在1kHz以下的,这样的话怎么都没法滤掉。

MMA7260-低通-导线(有干扰)-高阻输入,并没有对导线感应到的干扰进行滤波。
最简单的方法:加入一个数字低通滤波器。
首先STM32的ADC采样率要设高一些,这样可以更好的发挥ADC的性能
STM32的ADC采样周期最多为239.5Cycles,如果ADC时钟设为APB2 /8,APB2 = 36MHz ,完全能获得5k的采样率。

不要随便用滑动平均,会抹掉一些特定频率上的信号
引用
评论
16年5个月前IP:未同步
248303
4楼

attachment icon acc_meter_filter.rar 1.48KB RAR 47次下载
加速度计专用滤波程序
调用acc_meter_filter()就行了,采样率必须是5kHz
把采样到的数据按照时间顺序逐个代入这个函数,返回值是滤波后的结果。
示例:
sprintf(txbuff,"%d\\n",acc_meter_filter(ADC_readvalue(MMA7260_AXIS_X)));
transmit(UART1,txbuff);
引用
评论
16年5个月前IP:未同步
249117
5楼
今天我到实验室来了,把电路改成这样了:
照片-0398.jpg
但噪音还是那么大,图像的采样率是11k/s:
无标题.png

这回真不知怎么回事了TAT。。另外用示波器看X轴的输出脚(没有连线,只接了电源线),噪音就跟上图一样TAT。。。是不是电路上的加速度计的问题呢我在想..准备今晚焊一个新的上去
引用
评论
16年5个月前IP:未同步
249155
6楼
采样率高了,噪声偏大。
那些细小毛刺大概5个点左右
那些大的波动频率大约73Hz,不像是电网干扰,倒像是振动
把数据做1kHz的低通滤波应该就能用了
引用
评论
16年4个月前IP:未同步
255146
7楼
片内的AD基本上都是鸡肋。
很大程度上这是由于内部的基准造成的。
另外一个原因就是数模混合的片子基本上都这样,内部干扰超级严重
引用
评论
16年4个月前IP:未同步
255314
8楼
引用第7楼德律风根于2010-09-04 01:10发表的  :
片内的AD基本上都是鸡肋。
很大程度上这是由于内部的基准造成的。
另外一个原因就是数模混合的片子基本上都这样,内部干扰超级严重

内部基准是方便你用AD而已, 你要精度用431做基准源吧..
数字地和模拟地要分开
引用
评论
16年4个月前IP:未同步
255429
9楼
引用第8楼nhlijiaming于2010-09-04 13:48发表的  :

内部基准是方便你用AD而已, 你要精度用431做基准源吧..
数字地和模拟地要分开


LM399有爱
片内AD基本上都是采一些电池电压什么的信号用的
当然片内的也能调校到不错,软件处理重要,但始终没有外置的好
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的