"); //-->
ADC采集和过滤
STM32采用的是12位ADC是一种逐次逼近型模拟数字转换器,它有多达18个通道,可以测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以是左对齐或者是右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阈值。ADC的输入时钟不得超过14MHZ,它是由PCLK2经分频产生。
有16个通道,可以把转换组织分成两组:规则组和注入组。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道0、通道2、通道15。
规则组:由多达16个转换组成,规则通道和它们的转换顺序在ADC_SQRx寄存器中选择,规则组中转换的总数应写入ADC_SQR1寄存器的了L[3:0]位中。
注入组:由多达4个转换组成,注入通道和它们的转换顺序在ADC_JSQR寄存器中选择,注入组里的转换总数目应写入ADC_JSQR寄存器的L[1:0]中。
如果 ADC_SQRx 或 ADC_JSQR 寄存器在转换期间被更改,当前的转换被清除,一个新的启动脉
冲将发送到 ADC 以转换新选择的组。
温度传感器/Vrefint内部通道
温度传感器和通道ADC_IN16相连接,内部参照电压Vrefint和ADC_IN17相连接。可以按注入或规则通道对这两个内部通道进行转换
在使用ADC的时候要注意ADC的采样时间。
ADC输入时钟有ADC_CLK由PCLK2(一般72M)分配产生,最大14M。
ADC用若干个ADC_CLK周期对输入电压进行采样,采样的周期数可由ADC采样时间寄存器ADC_SMPR1和ADC_SMPR2中的SMP位设置,ADC_SMPR2控制通道0~9,ADC_SMPR1控制通道10~17,最小采样周期是1.5个,周期为1/ADC_CLK.。
ADC转换时间:Tconv = 采样时间 + 12.5个周期。当ADC_CLK设置最大14M,采样时间设置最快的1.5个周期,转换时间最短=1.5个周期 + 12.5个周期 = 14个周期 = 1us。但一般PCLK2 = 72M,ADC_CLK最大为12M,所以最短转换时间为1.17us。
在我们使用ADC采集数据的时候会遇到很多问题,当我们遇到采集的数据不稳定的时候这个时候需要我们使用特定的方法使测得的数据更加稳定。
我经常使用的方法有四种:
每100ms测一次数据,将测得的连续的两个数据求他们的差,给定一个值与他们的差进行比较,如果变化过大判定为无效数据,过滤掉。
建立一个数组这个数组大小根据具体情况而定,每次测得一个数据去头进尾,然后求平均值,这样可以让我们的数据不会变化太大,我们的数据看上去会更加平滑。
建立一个有10个元素的数组,每测得10个数据去掉最大值和最小值,然后求取平局值作为一次测量的结果,将这10个数据全部对掉,以此类推。这个方法可以排除不定的因素的干扰。
四、每次读取5次数据,对这5个数据进行排序,使用这五个数的中位数。再将这五个数全部去掉。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。