基于ARMCortex一M4和快速傅里叶变换的蜂鸣器
扫描二维码
随时随地手机看文章
1自动测试简介
1.1ATE设备
ATE(AutomaticTestEquipment),即自动测试设备,是指对被测对象自动进行性能验证和故障诊断并对故障予以隔离的测试设备。
在当今的大型生产中,自动测试设备已经被越来越广泛地采用,这是因为对比传统的人工方式,自动测试设备测试更快速、更准确,操作更简单。
1.2蜂鸣器的自动测试
蜂鸣器(或报警器)是一种被广泛使用的发声设备,它可以是机械、电子或者压电装置。蜂鸣器的典型应用包括报警设备、定时器、用户输入设备例如鼠标或者键盘。
蜂鸣器本身并不复杂,但其本身仅是一个声音装置,而在市场上常见的自动测试设备中,通常仅配备了针对电压测量、电流测量、射频性能测试及接口通信装置测试的测试模块。对于蜂鸣器,由于其工作的性能表现在声音上而非电性能,所以常常需要测试员依靠听觉进行人工判断,这就引入了人工测试带来的几个问题,如低效、易出错等等。此外,功率较大的蜂鸣器还会损伤测试员的听力。
1.3测试模块的目标
利用一个低成本、高整合度的嵌入式方案,设计一个针对蜂鸣器的自动测试的模块,可以兼容多种音量、多种频率的被测蜂鸣器,同时,应使本模块具备一个可以用于通信的软件硬件接口,方便测试主机进行控制和调用。
2蜂鸣器测试模块的硬件组成
在硬件上,蜂鸣器自动测试模块主要由四部分组成:麦克风模块、运放电路、微处理器以及数据接口单元。框图如图1所示。
2.1麦克风模块
麦克风电路用于采集蜂鸣器产生的声音信号,并将声音信号转换成为电信号,传到运放电路部分。本设计选用了一种广泛使用的、小体积的驻极体麦克风。在测试系统中,麦克风可以被选择安装在离蜂鸣器较近的合理位置,并利用3芯电缆连接至其他部分。
对于功率较大的蜂鸣器,有必要使用一个大的箱体,将被测单元与麦克风装置放入一个隔音的箱体中,避免多个设备同时工作时互相干扰,同时避免测试中产生过大的音量,影响测试员的健康。
2.2运放电路
运放电路将麦克风电路采集到的电信号缓冲后送到微处理器,运放可以给微处理器提供低阻抗的输入信号,考虑到转换速率高和频率响应宽的需求,本设计的运放选用了LM358。2.3微处理器
微处理器将信号通过ADC采样后,利用算法进行信号的识别和比对。微处理器的软件部分是本设计的难点和重点,音频信号的处理需使用ADC采样与DsP(数字信号处理)等相关技术。
ARM,即高级精简指令集机器(AdvancedRIsCMachine),是一种32位精简指令集(RIsC)处理器架构,ARM的Cortex一M4系列芯片是ARM7架构与哈佛结构内核的组合,对比ARM公司其他的芯片内核如Cortex一M0与Cortex一M3系列,Cortex一M4系列增加了一个DsP处理功能,并具备sIMD单指令多数据功能,同时,ARMCortex一M4还具备一个硬件的FPU(浮点运算单元)。这就使我们可以方便地使用一个单芯片的Cortex一M4芯片完成音频信号的识别与处理。
本设计选用意法半导体的Cortex一M4芯片sTM32F373作为主处理器,开发的环境选用瑞典IAR公司的IAREmbeddedworkbench。
2.4数据接口单元
利用一个通用的Rs485接口和团队测试系统既有的总线协议,可以在测试模块与主机之间建立通信,方便主机的指挥和调用。
3音频信号处理的过程
3.1信号处理的基本过程
源自蜂鸣器的音频信号并不复杂,理论上这个信号仅仅是单音频信号,同一规格的蜂鸣器有其特定的声音频率,通常情况下信号频率可能是4.5kHz、5kHz或者更高。因此,频率测试和幅度测试是测试的重点,其中频率测试是测试的难点。
音频信号的处理包括信号采样、信号预处理、快速傅里叶变换、信号频率计算、与测试主机的通信以及其他的参数处理,如图2所示。
3.2音频信号的采样
采样是将一个时间连续的函数或信号转换为时间上离散的函数或数字序列的过程。STM32F373集成了3个16位的sigma-DeltaADC,最高采样率可以达到50ks/s。
根据采样定理,如果周期函数x(t)不包含高于B次/s的频率,那么小于l/(2B)秒的x(t)函数值将会受到前一个周期的x(t)函数值的影响。因此,2B或更高的采样频率将能使函数不受干扰。
由于蜂鸣器的工作频率通常在6kHz以内,本系统中对于超过6kHz的信号可以看做无用的频率,因此根据采样定理,超过l2kHz的采样频率即可满足本系统的要求。最终定义的本系统的采样频率为12500Hz。
3.3音频信号的预处理
预处理包括门限的开启以及信号的标准化。
门限开启:过滤掉幅度过小的信号,减少外界噪声引起误判的可能性。
信号的标准化:在做FFT前,将信号的数据按比例缩放使其标准化,使之落入一个小的特定区间,其目的是在比较时建立一个统一的标准。
3.4频率测试
3.4.1频率测试原理
频率测试的核心是需要计算出所采样的信号表征的频率值,ADC采样到的数值是基于时域的,傅里叶变换(DFT)可用于将信号从时域转变到频域。离散傅里叶变换的定义为:
为简化运算,在实际的工程中,信号处理常常使用快速傅里叶变换(FFT)代替DFT,FFT算法是利用蝶形因子的对称性和周期性,将需要N2次乘法和加法的大量的运算,简化为两段(N/2)2的乘法和加法运算,从而减少DFT运算的运算次数。举例而言,对于基于2的FFT,其实是在将长度是N的信号分解为2个长度是N/2的信号后进行处理,照这样一直分解到最后,每一次的分解都会减少计算的次数。
3.4.2频率测试的软件实现
ARM为开发者提供了CMsIs软件接口标准以及DsP函数库,为我们解决问题提供了大量的优化的信号处理算法。在DsP函数库中有如下一组函数可以用于完成FFT的功能:
上述程序中,输入参数cctix即为采样并且标准化后的时域数据,经过FFT转换后的输出参数cctout为频域数据,cctsum是需要转换的数据长度。需要注意的是,由于使用了基4的FFT运算,cctsum必须是2的偶数次方(l6,64,256,l024等),否则计算出的结果是错误的。
3.4.3信号频率的计算
利用一个冒泡法程序即可实现峰值检测:
得到的数值peakpoixt即为频域峰值在数组中的位置。
频域数组中每个点的频率间隔为:Fs/N=l2500/l024≈l2.207Hz。
使用peakpoixt与频率间隔相乘:peakpoixt×l2.207,即可得到蜂鸣器声音频率值。
3.5其他需要考虑的因素
仅仅得到信号的频率并不能满足整个蜂鸣器的测试需求,笔者在生产线上通过对多批次产品的分析,发现电气因素或结构因素会导致蜂鸣器出现声音过小、声音嘶哑、声音断续等其他问题。
针对声音过小的产品,需要设定测试的阈值进行对比。
针对声音嘶哑的产品,需要求出工作频率与其他频率的信号之间的功率比值,将其他频率的信号的功率总和过大的产品认定为不良品。
针对声音断续的产品,需要在单位时间内的多次读取和计算都能满足合格品的要求。
此外,在工程中我们发现,麦克风捕捉还原到的音频信号,往往并不是简单的纯单音信号,而是单音的基频与其多倍谐波频率信号的叠加,因此,对于频率较低的被测品,还应设置合理的软件滤波和峰值对比方法。
4结论
本测试模块在研发成功后,已经应用于很多不同产品的不同型号的蜂鸣器的自动测试方案中,配合测试的主控制器,大量地使用在生产线上。
蜂鸣器自动测试模块带来的学术价值和经济效益是显而易见的,不仅测试速度快、测量结果准确,还解放了测试员的耳朵,避免了大音量的蜂鸣器对测试员听力的损害。
但必须承认的是,本测试模块还有一些不足:在部分产品的蜂鸣器测试中,对机械缺陷带来的声音嘶哑的部分蜂鸣器,没有足够可靠的算法保障百分之百的准确。
不过,笔者相信,随着对本测试模块的算法的继续优化和反复考验,这个问题终究会得到解决,这款功能模块也会继续完善。