一种在STM32应用FIR滤波器的设计与实现

来源 :中小企业管理与科技·下旬刊 | 被引量 : 0次 | 上传用户:efox_5
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要: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_Lib\Source\FilteringFunctions文件夹中的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 结论
  通过Matlab运行FDATOOL工具箱来设计FIR滤波器,可以
  节省很大一部分时间,对于STM32F407开启FPU后运行FIR滤
  波器能够在保证精度的情况下具有很好的实时性,在工业控制当中很实用,特别在小型的嵌入式应用系统开发应用中更具竞争实力。
其他文献
摘 要:我国高校环境艺术设计教学中还存在着很多的不足之处,教学方式太過于单一,以及在教学活动开展的过程中过重的强调基础知识教学,使得环境艺术设计教学缺乏针对性,等等。对于高校环境艺术设计教学中存在的问题必须要给予高度的重视,要积极地找寻有效的措施对于其中存在的问题进行有效的改善。本文就对高校环境艺术设计教学方法的应用进行深入探讨,希望对相关教学人员能够有所启示,促进我国环境艺术设计教学水平的提升。
中国改革开放初期,在中央与地方的关系中产生了一种新的关系形式,这就是经济体制转型期省级经济特区与中央政府的关系:即省级经济特区与中央政府的领导与被领导关系;省级经济特区
摘 要:高职实践教学的目的是培养学生的技术应用能力,在教学计划中占很大比例。为了搭建符合实际网络环境的实践平台,在教学中大量运用了虚拟化技术。各种虚拟机和模拟器在实践课上和顶岗实习期间的广泛应用,克服了实验设备和时间、空间的限制,提升实践教学效果。  关键词:实践教学;虚拟技术;教学改革  0 引言  本文作者在高职计算机类专业的教学实践中,广泛应用虚拟技术来搭建实验、实训环境,指导学生在课堂上和
教学中常有一种传统的教学模式,即四段论式:先交代时代背景,其次介绍作家生平与创作,再次阐发作品及其审美,最后小结意义与影响。四段论式教学模式的经常采用与文学史不无关系,因为
摘 要:本文主要探讨一种自主研发的低密度铵油炸药在黑岱沟露天煤矿预裂爆破的应用成功后,所取得的爆破效果以及经济效益的分析对比,得出了使用自主研发的低密度炸药不仅降低了采矿成本,提高了企业的经济效益,而且改良了爆破效果,通过爆破方案设计优化,提升了开挖效率和安全性。  关键词:高台阶预裂爆破;低密度铵油炸药;经济技术分析  1 概述  吊斗铲倒堆剥离工艺对抛掷爆破技术质量有较高的要求,主要是抛掷爆破
摘 要:高职院校道路桥梁工程技术专业主要以培养具备道路桥梁工程技术必需的文化基础知识和专业理论知识,掌握所需要的岗位能力和专业技能的高端技能型人才为目标,但传统的实习实训教学方式早已不能满足现在的专业需求。本文主要研究高职院校道路桥梁工程技术专业实习实训教学的改革办法,希望能为广大师生提供一些有益的建议。  关键词:高职院校;道路桥梁工程技术专业;实习实训教学  0 引言  道路桥梁工程技术专业对
期刊
“70后”代表诗人刘春同时还是一位待评家,近些年他逐渐展现出一个诗人对当代新诗史的个人化叙述。这种个人化首先体现为他在叙述新诗史时力图使历史“场景化”,试图使人“回到
摘 要:本文分析了在当前严峻的就业形势下,高职院校应该如何引导学生加强自身优势, 改变选择工作岗位的观念,树立正确的科学观,提高就业竞争力,进而有效提高学校毕业生就业率。  关键词:高等职业院校;毕业生;就业;择业;工作岗位  参加工作来,笔者一直负责系里的就业联络、统计工作。随着与毕业生和企业的接触,也发现了不少毕业生在就业过程中存在的问题,引起了笔者的思考。大学生就业难的问题是社会的普遍现象,
海南省古籍保护工作即将开展,本文从古籍保护管理机制的建立、古籍普查的开展,科学保护措施的采用等方面提出了相应的古籍保护措施。