一种在STM32应用FIR滤波器的设计与实现.docx_第1页
一种在STM32应用FIR滤波器的设计与实现.docx_第2页
一种在STM32应用FIR滤波器的设计与实现.docx_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一种在STM32应用FIR滤波器的设计与实现 摘 要:STM32微控制器是ST公司面向嵌入式应用领域开发的微控制器,它具有很高的性价比,由于内核不同,它的产品种类也不同,本文主要针对STM32F4x系列,利用ST公司的DSP函数库实现在STM32上运行有限单位冲激响应滤波器(FIR)的设计方法,实践表明,STM32F407在开启浮点运算后可以流畅运行FIR,满足微处理器对传感器信号进行滤波的要求。 下载 关键词:STM32微控器;FIR滤波器;设计 0 引言 在小型的嵌入式应用系统当中,微控制器的主要作用不仅是协调、控制各个外围电路工作,有些系统还需要微控制器运算一些算法,简单而有效的算法或者数字滤波器可以替代纯硬件电路,具有硬件电路少、成本低、故障率低的优点,但是有些算法规模和复杂程度较大,一般的微控制器如8位、16位微控制器偏重于实时控制、寄存器较多,浮点运算能力很弱运行起来就显得特别吃力,而现阶段ST公司推出的STM32微控制器性能较为强劲,在保证实时性的情况下,也可以运行一些大型的数字滤波器和算法。 1 STM32F407微控制器 STM32F407是一种基于ARM cortex-M4内核的高性能微处理器,它是STM32F4系列的中高端产品,具备168MHz主频下达到210DMIPS的性能,内置1MB闪存和192KB的SRAM。其内部资源比较丰富,具有2个USB2.0的OTG,3个快速转换的12位ADC,相比上一代ARM cortex-M3内核产品,STM32F407微控制器集成了单周期的DSP指令集和浮点运算单元FPU,大大提高了微控制器在浮点运算的计算能力,配合ST公司专为STM32微控制器开发的库函数,可以运行大型数学运算,提升了微控制器的执行效率和运行速度,节约项目开发成本和开发时间。 2 FIR滤波器 在嵌入式应用领域中,微控制器不仅仅需要对传感器信号进行采集然后送入A/D转换器进行处理,还要针对处理结果控制外围设备。在这个过程中,对于传感器信号进行采集、滤波处理一般由外围电路组成,如常用的巴特沃斯滤波器、切比雪夫滤波器等,把经过滤波处理过的信号送入A/D转换器,可以获得准确度较高的数据。而在实际应用中,某些外界因素对传感器的影响会使检测的模拟信号受到干扰,而这些干扰信号是可以利用数字滤波器滤除的,目前应用比较多的数字滤波器是无限冲激响应滤波器(IIR)和有限冲激响应滤波器(FIR)两种,IIR滤波器具有输入反馈,所以其输出值不仅要取决于当前输入值,还要取决于过去的输出值,那么理论上,这种滤波器的冲激响应是无限持续的,有不容易被设计的缺点。而FIR滤波器不具有输入反馈,即输出值只取决于当前和过去的输入值,容易被设计,但是同样功能的FIR滤波器相比IIR滤波器要复杂很多,系数更多,给原本就负担较重和实时性要求较高的微控制器增加致命的计算量,使系统的实时性降低。所以一些采用数字滤波器的系统,都会将计算数字滤波器的工作量交给其他微处理器运行,如DSP或者FPGA,所以,本文主要提出一种采用STM32F407微控制器运行FIR滤波器的设计方案,在运行一定量的采样率和阶数的FIR下保证系统实时性,满足控制系统的要求。 3 库函数中的FIR滤波器设计方法 要在STM32F407上利用DSP库运行FIR,首先需要利用Matlab的工具箱FDATOOL设计FIR滤波器,然后生成滤波器所需的系数,为了增强其运算性能,还需要在程序中添加开启FPU的命令。 本设计利用Matlab设计一个带阻滤波器,所滤波信号由10Hz和100Hz信号组成,截止频率50Hz,采样率为1000Hz。为了更好的检测信号,防止能量泄露,FIR选择窗函数、hamming窗减少旁瓣,由于DSP库中的FIR滤波器系数必须是4的倍数,所以选择200阶。设计好FIR滤波器后生成系数,保存为数组形式或者头文件形式等待移植。 DSP库中的FIR函数支持Q7、Q15、Q31和浮点四种数据类型,需要用到arm_fir_f32()函数,这个函数可以在DSP_LibSourceFilteringFunctions文件夹中的arm_fir_32.c找到,在使用函数前需要对该函数中的参数定义有所了解。 阶数越高,系数越复杂,STM32F407的运算时间越长。一般来讲,开启FPU后的STM32F407运行200阶左右的FIR滤波器运算时间为毫秒级,是可以保证实时性的。 4 开启FPU的方法 早期的STM32F4xx固件库中的system_stm32f4xx.c文件默认禁用FPU的,即在CMSIS中没有定义FPU,虽然文件中添加了FPU相关代码,但是利用MDK编译器执行过程中会产生错误,为保证系统准确运行,可以在system_init()函数中添加条件编译代码或者直接使用FPU即可。如: #if (_FPU_PRESENT = 1) (_FPU_USED = 1) SCB-CPACR |= (3UL 10*2)|(3UL 11*2); #endif 或者: #define _FPU_USED 1 两种方法不同,但是都需要对各个相关文件进行设置,只需根据相应的#define命令查找定义即可设置,这里不再赘述。 需要注意的是,启用FPU不代表微控制器处理复杂运算就大大的提升效率了,这里还需要对ARM处理器的math.h头文件进行替换,因为math.h头文件中的运算函数都是基于定点处理器和IEEE-754标准来运行的,想要提升微控制器的运算性能,还需要STM32固件库中的优化函数来解决,即包含arm_math.h头文件即可。以上两个设置都需要在工程选项中的C/C+加入define命令: _FPU_PRESENT=1,_FPU_USED =1 ARM_MATH_CM4 5 结论

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论