单片机ADC采样算法-限幅滤波法c代码实现
限幅滤波法是利用软件来限制当前采样值与上一次采样值的偏差。如果本次采样值与上一次采样值的偏差超过设定的最大偏差值,则拒绝本次采样值。
参见下面的C代码实现
//返回两个整数b之间的差? (a - b) : (b - a) ; signed int new_value;
new_value = ReadVol_CH2();
if( num_sub( new_value, value ) > A ){❀返回值;
}
value = new_value;
返回new_value;
}
A为连续两次采样的最大误差值。如果两个采样值之差超过最大允许误差,则拒绝当前采样值。如果误差小于最小允许误差,则当前采样值保持有效。
void main( void )
{
while( 1 )
{
val = ReadVol_CH2(); //读取AD采样值
val1 = filter1();
printf( "A%drn", val );
printf( "B%" drn", val1 );
}
}
在主程序中,循环读取AD口的采样值,并通过限幅滤波算法对采样值进行滤波,通过串口输出原始采样值和滤波后的值,通过串口输出数据,并显示在串口波形软件中。
![]()
蓝色曲线是采样后的原始数据波形,橙色曲线是经过限幅滤波算法滤波后的波形。曲线中可以看出,经过限幅滤波算法后,原曲线的峰值数据被滤除,使得采样数据更加平滑。
限幅滤波法可以滤除随机因素引起的脉冲扰动,但需要对系统的采样数据区域进行准确的评估。否则,如果允许误差值设置不合理,则可能会滤除系统的正常数据。
关键词:单片机ADC采样算法限制滤波方法编辑:什么鱼参考:本站转载的所有文章、图片、音视频文件等资料均归版权人所有。本站所使用的材料并非本站的材料。无法单独联系到本网站原创文章、图片等内容的版权人。如果本站所选内容的作者或编辑认为其作品不适合公开免费分发或不应免费使用,请立即通过电子邮件或电话通知我们,以便我们迅速采取必要措施。以避免双方不必要的经济损失。 。
推荐阅读
第九课:单片机数据传输指令
单片机数据传输指令(3)以直接地址为目的操作数的指令 MOV direct,A 例:MOV 20H、AMOV direct、Rn MOV 20H、R1MOV direct1、direct2 MOV 20H ,30HMOV direct,@Ri MOV 20H,@R1MOV direct,#data MOV 20H,#34H (4) 以间接地址为目标操作数的指令 MOV @Ri,A 示例:MOV @R0,AMOV @Ri,direct MOV @ R1,20HMOV @Ri,#data MOV @R0,#34H (5) 十六位移位指令 MOV DPTR,#data168051 是 8 位机器,唯一 16 位立即数
发布 2020 -03 -10
![]()
第八课:单片机地址空间与命令系统
通过前面的学习,我们已经了解了单片机的内部结构,也知道我们需要控制单片机,让它来教我们。对于操作说明,我们学过一些指令,但是很分散。下面我们就系统的学习8051单片机的指令。一、概述 1、我们已经知道指令的格式。为了让计算机做事,我们需要给计算机发出指令。而且,我们知道计算机非常“愚蠢”,只能理解我们之前输入机器的75H和90H等数字。 、00H等,所以指令的第一种形式是机器码形式,也称数字形式。但这种格式对于我们人类来说确实很尴尬,太难记了,所以就有了另一种格式,像MOV P1、#0FFH这样的内存格式,这样更容易记住。我们不难理解这两种形式之间的关系。基本上它们是一模一样的,只是形状不同。 2. 组装 我们以组装形式并在计算机上编写指令
发布于2020-03-10
第7课:单片机特殊功能寄存器
根据前面的学习,我们知道单片机内部有ROM、RAM和并行I/O端口。除了这些东西之外,单片机内部还有什么?这些分散的事物是如何联系在一起的?下面我们对单片机内部的寄存器进行一次完整的功能分析!从下图中我们可以看到51单片机内部是一个用于计算和控制的CPU。有四个并行 I/O 端口,即 P0、P1、P2 和 P3。有用于存储程序的ROM和用于存储程序的RAM。 ,除了定时器/计数器、串行I/O端口、中断系统和内部时钟电路之外,还用于存储中间结果。 51单片机里面有很多东西。更详细的分析上图,我们知道,读写并行I/O口,只需将数据发送到对应I/O口的锁存器,然后发送到定时器/计数器串行I/O口/ O端口
发布于2020-03-10
![]()
第六课:单片机并行门构造
我们最后两次做了两个实验,都是让这个引脚点亮一盏灯。我们可以想象:因为它可以让灯亮,但是其他引脚呢?见图1,是8031单片机的引脚说明。旁边是……,他们都能让灯亮起来吗?除了以P1开头的以外,还有以P0、P2、P3开头的。数一数,一共有32个引脚。我们之前学过 7 个钉子以及这 32 和 39 个钉子。它们都是以P开头,但后面的数字不同。他们之间有什么联系吗?他们都能保持灯亮吗?除了P10之外,我们的测试板还有P11 -> P17,都是连接LED的。我们来做一个实验。程序如下: MAIN: MOV P1, #0FFHLCALL DELAYMOV P1, #00HLCALL
发表于2020-03-10
![]()
第5课:单片机延时程序分析
;说到传输,我们都知道,为了将东西从一个人的手中传递到另一个人的手中,必须有一个接收器、一个发射器以及同样的东西。分析指令MOV R7,#250,R7是接收方,250是要发送的数字,这条指令省略了发送方(注意:不是所有的传输指令都省略,事实上,大多数传输指令都是发送方) 。其含义也很明显:将数据发送到250 R7,所以执行该命令后,R7单元的值应该是250。250前面有一个#号。这是什么意思?这个#是用来说明的250 是可交付成果,而不是供应商。那么什么是MOV R6,#250
发布于2020-03-10
![]()
单片机模拟I2C总线和24C02(I2C EEPROM)读写示例
/*使用单片机时有时需要51/*模拟I2C总线, *//* 这里是一个例子(读写串行EEPROM芯片at2402)
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网