专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
PIC单片机
有个AD数据画出来的图,大家帮我看看怎么滤波比较合适
2020-02-08 09:07
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
10721
7
7
这是一个对电压的采集数据,里面还有许多涉及到的IO操作,用万用表测试5V电压很准,可是采集到的数据却又很大的波动
数据采集是有8通道,每次切换通道间隔60us,采用循环方式采集
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
yangzichen
2020-02-08 17:42
JamesErik 发表于 2012-7-23 14:46
看看我的帖子,很多高人指导。
正在看 ,但是对那段程序代码没有看明白,
软件滤波比较重要 曾经没软件滤波前AD跳动50个数 加滤波跳动5个数
int filter(unsigned char channel)
{
unsigned char i;
unsigned int idata adc_value[8]; //AD转换缓冲区
unsigned int adc_value_ave=0;
unsigned int max_value=0,min_value=0,max_index=1,min_index=1;
for (i=0;i<8;i++) //连续转换8次
{
adc_value
= get_AD_result(channel); //将单次ADC转换结果放入缓冲区
// delay(10); //每次转换延迟时间
}
for(i=1;i<8;i++) // 去掉第一次测量值
{
adc_value_ave+=adc_value
;
}
adc_value_ave/=7; // 去掉一个值外的平均值
for(i=1;i<8;i++) // 计算最大值和最小值索引号 排序
{ //排序 最大值第1位(1) 最小值最后1位(i)
if(adc_value
>adc_value_ave)//大于平均值
{
if((adc_value
-adc_value_ave)>max_value)
{
max_value=adc_value
;
max_index=1;
}
}
else //小于平均值
{
if((adc_value_ave-adc_value
)>min_value)
{
min_value=adc_value_ave-adc_value
;
min_index=i;
}
}
}
adc_value_ave=0;
for(i=1;i<8;i++) // 计算去掉最大值和最小值后的总和
{
if((i!=max_index)&&(i!=min_index))//去掉最大值和最小值
{
adc_value_ave+=adc_value
;
}
}
if(max_index!=min_index) // 如果测量值不同
{
adc_value_ave/=5; // 计算平均值
}
else // 如果测量值相同
{
adc_value_ave/=6; // 计算平均值
}
return adc_value_ave;
}
你能加个QQ私聊吗 305834138
加载中...
查看其它7个回答
一周热门
更多
>
相关问题
PIC单片机不同的IO口驱动74HC573驱动共阴极的数码管,有的段不亮
1 个回答
一种简单精确的pic延时方法
21 个回答
谁熟悉PIC的产品发布时间的,帮看看PIC18F47K40啥版本IDE能开发
12 个回答
求AN1078对应的源代码下载地址
5 个回答
PIC单片机应用技巧
4 个回答
相关文章
一种用PIC单片机主时钟驱动的老式挂钟
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
PIC单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
正在看 ,但是对那段程序代码没有看明白,
软件滤波比较重要 曾经没软件滤波前AD跳动50个数 加滤波跳动5个数
int filter(unsigned char channel)
{
unsigned char i;
unsigned int idata adc_value[8]; //AD转换缓冲区
unsigned int adc_value_ave=0;
unsigned int max_value=0,min_value=0,max_index=1,min_index=1;
for (i=0;i<8;i++) //连续转换8次
{
adc_value = get_AD_result(channel); //将单次ADC转换结果放入缓冲区
// delay(10); //每次转换延迟时间
}
for(i=1;i<8;i++) // 去掉第一次测量值
{
adc_value_ave+=adc_value;
}
adc_value_ave/=7; // 去掉一个值外的平均值
for(i=1;i<8;i++) // 计算最大值和最小值索引号 排序
{ //排序 最大值第1位(1) 最小值最后1位(i)
if(adc_value>adc_value_ave)//大于平均值
{
if((adc_value-adc_value_ave)>max_value)
{
max_value=adc_value;
max_index=1;
}
}
else //小于平均值
{
if((adc_value_ave-adc_value)>min_value)
{
min_value=adc_value_ave-adc_value;
min_index=i;
}
}
}
adc_value_ave=0;
for(i=1;i<8;i++) // 计算去掉最大值和最小值后的总和
{
if((i!=max_index)&&(i!=min_index))//去掉最大值和最小值
{
adc_value_ave+=adc_value;
}
}
if(max_index!=min_index) // 如果测量值不同
{
adc_value_ave/=5; // 计算平均值
}
else // 如果测量值相同
{
adc_value_ave/=6; // 计算平均值
}
return adc_value_ave;
}
你能加个QQ私聊吗 305834138
一周热门 更多>