历史上的今天
返回首页

历史上的今天

今天是:2025年03月01日(星期六)

2021年03月01日 | 基于STM32的语音导览系统的设计方案

2021-03-01 来源:eefocus

景点语音导览主要有以下几种方式:一种是通过全球定位系统(GPS)的用户终端接收工作卫星的导航信息,从而解算出车辆的经纬度信息,进而计算出实时坐标,将其与景点坐标相比较,当车辆驶入景点一定距离范围内时,不用人工干预,系统自动播报景点语音信息;另一种是对车轮轴的转角脉冲进行计数,将计数值和预置值对比,即可确定播放时刻,达到准确播放景点语音信息的目的;第三种方案是利用无线射频识别技术,在每一个景点范围内设置一个具有唯一ID的射频发射器,采用间歇工作方式发射信号,当旅游列车即将到达景点时,车载系统接收到射频发射器信号并解码出景点的ID号,由系统控制自动播放对应编号的景点语音信息。由于景点自然环境的复杂性,第一种方式难以满足系统要求;第二种方式简单可靠,但旅游轨道车辆运行方向存在不确定性,其相对位置往返变化,系统的自动化程度较低且复杂度较高。


本文首先介绍了系统总体结构,然后,给出了系统各主要功能模块的具体设计,并重点研究了基于ARM3核的STM32F103RBT6芯片与语音芯片ISD4004之间的SPI通信控制和实现技术,给出了系统设计实现结果。


最后,给出了有一定工程应用参考价值的结论。


1系统总体设计

本系统结构原理设计如图1所示。本设计利用旅游列车轨道固定的特点,在轨道沿线景点预先安装固定ID的RFID,综合考虑到作用距离、数据通信方式、可靠性、使用寿命和维护成本,选用产品433 MHz有源标签GAO C124061.其存储ID字长32 b.由于在野外自然环境中,出现碰撞的可能性极低,所以,RFID阅读器只需要正确可靠地获得RFID的ID值,与固定景点所对应,用以触发中断,开始播放该景点的语音信息。



图1系统结构原理框图


2主要模块电路设计

2.1 ISD4004控制电路设计

ISD4004系列语音芯片工作电压为+3 V,单片录放时间8~16min,音质好。芯片采用CMOS技术,内含时钟、抗混叠滤波器、平滑滤波器、音频放大器、自动静噪及高密度多电平非易失性存储器阵列。芯片设计是基于所有操作必须由微控制器控制,操作命令可通过串行通信接口(SPI)送入。芯片采用多电平直接模拟量存储技术,每个采样值直接存储在片内非易失性存储器中,因此能够非常真实、自然地再现语音、音乐、音调和效果声,避免了一般固体录音电路因量化和压缩造成的量化噪声和金属声。芯片ISD4004内部结构和主要引脚功能如图2所示。



图2 ISD4004内部结构


ISD4004内部器件控制单元设置非常便于其与STM32序列芯片的SPI进行通信设置。增设STM32多个I/O口来作为对应语音芯片的片选端,即可实现多片ISD4004扩展。STM32与多片ISD4004的接口电路如图3所示。



图3多片ISD4004与STM32的连接


STM32和ISD4004通过SPI模块进行通信,两者MOSI、MISO脚对应相互连接,实现STM32和ISD4004之间数据串行传输(MSB位在前)。通信总是由主设备STM32发起。STM32通过MOSI脚把数据发送给ISD4004,ISD4004通过MISO引脚回传数据给STM32.


全双工通信的数据输出和数据输入是用同一个时钟信号同步的;时钟信号由主设备STM32通过SCK脚提供。


扩展为多片语音芯片后,语音信息的存储空间大大增加,便于扩充景点的语音信息量。


2.2语音录放控制电路设计

语音录放控制电路如图4所示。通过MCU的I/O控制端来控制串联调整管Q3或开关管Q1,实现系统放音或者录音。I/O端输出高电平时实现录音,输出低电平时实现放音。



图4语音录放控制电路


2.3 RFID读卡器接口电路

RFID读卡器模块使用了Philips的高集成ISO14443A读卡芯片MFRC500.RFID读卡器是一个相对独立的功能模块,其输出可通过中断状态信息和串口与外部连接。因此,系统利用STM32F103RBT6的SPI2接口实现与RFID读卡器接口之间的数据通信,从而自动获得景点位置信息,以控制选择对应景点导览语音的播放。读卡器中断状态直接与STM32F103的PD口I/O引脚连接;SPI2接口电路形式同图3类似。


3主要功能软件设计

3.1软件初始化

3.1.1外设时钟的使能

本设计中涉及的外设时钟可以通过APB2外设时钟使能寄存器来使能。当外设时钟没有启用时,软件无法读出外设寄存器的值,返回的数值始终为0.设计中用到的PA口、PB口、PD口的时钟分别通过APB2ENR寄存器的第2、3、5位来设置,SPI1的时钟通过APB2ENR的第12位来设置。


3.1.2 I/O口的初始化

本设计涉及的I/O口包括:用于控制片选扩展的PA.3、PB.0口,需设置成开端输出模式;用于实现按键控制的PA.15(录音键)、PA.0(强制停止键)等需设置为上拉输入模式;用于实现SPI通信的PA.5、PA.6、PA.7口,它们分别对应SPI1的SCK、MISO、MOSI口,应由软件设置这三个口为复用I/O口即第二功能;用于检测放音结束时语音芯片INT端低电平输出的PA.8和PD.2设置为上拉输入模式。


3.1.3外部中断的初始化

外部中断初始化中主要完成的工作是设置I/O口与中断线的对应关系、开启与该I/O口对应的线上中断/事件以及设置中断的触发条件、配置中断分组并使能中断。本设计中,将强制停止键连接到的PA.0口对应的中断触发条件设置为上升沿触发,对应的中断优先级最高;其余按键连接的I/O口对应的中断触发条件都设置为下降沿触发。把所有的中断都分配到第二组,把所有按键的次优先级设置成一样,而抢占优先级不同。其中,几个放音键连接的I/O口对应的中断共用一个中断服务程序,也就是多个中断线上的中断共用一个中断服务函数,在该中断服务程序里先对进入中断的信号进行区分(通过中断输入I/O口上的电平判断),再分别处理。


3.1.4 SPI模块的初始化

本设计中,通过对CR1寄存器的设置,将SPI1模块设置成全双工模式、软件NSS管理、主机模式、8 b MSB数据格式,并且把SPI1的波特率设置成了最低(281.25 kHz,为系统时钟的256分频),其中最重要的是SPI模块输出串行同步时钟极性和相位的配置,SPI主模块和与之通信的外设备时钟相位和极性应该一致。最后,发送0xff启动传输。


根据ISD4004不同相位下的SPI总线传输时序和SPI操作时序关系,要想实现STM32和ISD4004之间的SPI通信,须将其控制位CPHA和CPOL都设置为1.


3.2 SPI控制功能软件实现

3.2.1 SPI1读写字节函数

在读数据时,接收到的数据被存放在一个内部的接收缓冲器中;在写数据时,在被发送之前,数据将首先被存放在一个内部的发送缓冲器中。对SPI_DR寄存器的读操作,将返回接收缓冲器的内容;写入SPI_DR寄存器的数据将被写入发送缓冲器中。


SPI_SR是16位状态寄存器,它的最低位为RXNE,该位为0则接收缓冲为空,为1则接收缓冲非空;SPI_SR的次低位为TXE,该位为0说明发送缓冲非空,为1则发送缓冲为空。不断地查询发送/接收缓冲区是否为空,进而实现数据的有序发送和接收。


3.2.2发送指令函数

首先,语音芯片ISD4004有如下操作规则:


(1)串行外设接口,SPI协议设定微控制器的SPI移位寄存器在SCLK下降沿动作,在时钟上升沿锁存MOSI引脚数据,在下降沿将数据送至MISO引脚。


(2)上电顺序,器件延时TPUD(8 kHz采样时,约为25 ms)后才能开始操作。因此,用户发完上电指令后,必须等待TPUD,才能发出下一条操作指令。


例如,


从00处放音,应遵循如下时序:


①发POWER UP命令;


②等待TPUD(上电延时);


③发地址值为00的SET PLAY命令;


④发PLAY命令。


器件会从00地址开始放音,当出现EOM时,立即中断,停止放音。


如果从00处录音,则按以下时序:


①发POWER UP指令;


②等待TPUD(上电延时);


③发POWER UP命令;


④等待2倍TPUD;


⑤发地址值为00的SET REC命令;


⑥发REC命令。


器件便从00地址开始录音,一直到出现OVF(存储器末尾)时,录音停止。


3.3中断服务程序

录音中断服务程序流程如图5所示。它实现的功能是在一次长按录音键时,将一个景点的语音信息录入ISD4004中以预先设定的起始地址存储空间中,松开录音键后,本景点语音内容录音停止。每个景点的导览语音存储的位置,以其起始地址为标示。起始地址的安排根据每段语音的长度决定。每个景点语音录音时需保持录音按键锁下不松开,直至本段景点语音录音结束。


景点语音播放中断服务程序流程如图6所示。系统在获得RFID读卡器的中断申请之后,根据读卡器接口协议,MCU经SPI2接口接收到读卡器传来的数据信息,分析出RFID所含的ID信息内容,并根据ID所对应的景点位置,即原设置的景点语音首地址,将此首地址发送到ISD4004芯片组,并发送放音命令,即可实现对应景点事先录制好的导览语音自动播放。开始播放语音信息期间,ISD4004的I-N-T-端连接到了STM32的I/O口上,不断查询它的状态。当这段语音信息放完时,语音芯片ISD4004的I-N-T-端会置低,由此发送停止播放指令,则实现播音结束,并等待下一个RFID信息的输入和读卡器中断申请。



图5录音流程



图6放音流程图


4系统调试测试结果

4.1录放音模块调试

对于录音模块功能的测试,采用如下的办法:对着麦克风进行放音,用示波器观察语音芯片的输入引脚是否有信号。在语音芯片输入引脚检测到信号,如图7(a)所示。


在成功录入语音后,发送放音指令在语音芯片输出引脚得到如图7(b)所示波形。




图7录放音调试试验波形


4.2 SPI模块调试

在录音电路正确后,发送放音指令,在芯片对应SPI1模块功能的引脚端,可以在示波器上看到正确的时序,如图8所示。


图8(a)是片选和时钟信号输出;图8(b)和(c)分别是不停地发送0×55,在STM32 SPI1的数据发送端MOSI和数据接收端MISO得到的波形,与实际相符。



图8 SPI1接口调试试验时序波形


5结论

本文提出的系统结构简单、实用可靠,特别适用于山区自然景点的有轨旅游列车项目等,因而该系统具有很好的实用价值。可用于复杂环境下的语音导览系统实现结构,详细介绍了系统主要功能模块的实现技术和调试实验结果。


推荐阅读

史海拾趣

Advanced Detector Corp公司的发展小趣事

随着全球市场的不断开放和经济的全球化,ADC开始将业务拓展至全球范围。公司在全球各地设立了分支机构,并建立了完善的销售和服务网络。通过全球化布局,ADC成功打开了新的市场,提升了品牌影响力,实现了业务的快速增长。

Digital Voice Systems Inc公司的发展小趣事

Digital Voice Systems, Inc.(DVSI)于1988年成立,当时正值数字通信技术的兴起阶段。公司创始人凭借对语音编解码技术的深刻理解和前瞻性的市场洞察力,决定投身于这一领域。他们开发出了具有专利保护的基于鲁棒性多带激励模型(MBE Model)的低码率语音压缩算法,如IMBE和AMBE编解码系统。这些算法在当时的市场上独树一帜,为DVSI赢得了第一桶金。

在创立初期,DVSI面临着资金、技术、市场等多方面的挑战。然而,他们凭借着坚定的信念和不懈的努力,逐步克服了这些困难。他们不断投入研发,优化算法,提高产品的性能和稳定性;同时,他们积极开拓市场,与各大通信设备制造商建立合作关系,将产品推向市场。

随着时间的推移,DVSI的产品逐渐在市场上获得了认可。他们的编解码系统被广泛应用于移动通信、卫星通信、军事通信等领域,为客户提供了高效、稳定的语音通信解决方案。DVSI也因此逐渐崭露头角,成为了电子行业中一颗耀眼的明星。

故事二至五框架概述

  1. 技术创新与突破:DVSI在语音编解码技术方面的持续创新,如推出新一代的高效压缩算法,进一步提升了产品的竞争力。
  2. 市场拓展与国际化:随着公司实力的增强,DVSI开始拓展国际市场,与全球多家知名企业建立合作关系,实现了国际化发展。
  3. 合作与竞争:在电子行业中,DVSI与其他企业的合作与竞争并存。他们通过合作共赢的方式,共同推动行业的发展;同时,也面临着来自竞争对手的挑战和竞争压力。
  4. 企业文化与团队建设:DVSI注重企业文化建设,倡导创新、协作、共赢的价值观。他们注重团队建设,吸引了一批优秀人才加入公司,为公司的发展提供了有力的人才保障。

以上故事和框架概述仅供参考,您可以根据这些线索进一步挖掘和编写关于DVSI公司的故事。

Amulet Technologies公司的发展小趣事

Amulet Technologies 是一家位于美国佛罗里达州坦帕的公司,专注于嵌入式系统和触摸屏技术。以下是该公司发展的五个相关故事:

  1. 公司成立与初期发展:Amulet Technologies成立于1998年,由一群有经验的电子工程师创立。公司初期的主要目标是开发具有低功耗、高性能和易于集成的嵌入式系统解决方案。他们迅速建立了一支专业团队,并开始研发新技术以满足市场需求。

  2. 触摸屏技术的突破:随着智能手机和平板电脑等设备的普及,触摸屏技术成为了电子行业的热门话题。Amulet Technologies在2006年推出了其首个触摸屏控制器产品,为用户提供了更加直观、灵活的操作体验。这一技术突破使得公司在市场上获得了更多的关注和认可。

  3. 拓展产品线:除了触摸屏技术,Amulet Technologies还不断拓展其产品线,涵盖了嵌入式图形处理器、开发工具和软件库等领域。公司致力于提供全面的解决方案,帮助客户快速开发和部署嵌入式系统。

  4. 合作伙伴关系:为了加强自身实力并扩大市场份额,Amulet Technologies积极与其他公司建立合作伙伴关系。公司与硬件制造商、软件开发商和系统集成商等各个领域的企业合作,共同推动产品创新和市场拓展。

  5. 持续创新与未来展望:Amulet Technologies一直致力于不断创新,满足客户不断变化的需求。公司不断投入研发,开发新技术,并与客户紧密合作,持续改进和优化产品。未来,公司将继续致力于嵌入式系统和触摸屏技术的研究与开发,为客户提供更加优质的产品和服务。

Bombardier Inc公司的发展小趣事

除了航空领域,庞巴迪公司在铁路运输方面也取得了重要进展。其生产的CITYFLO系列自动列车控制系统在全球范围内得到了广泛应用。该系统采用了先进的电子技术和算法,实现了列车的自动驾驶和精确控制,大大提高了铁路运输的安全性和效率。此外,庞巴迪还生产了各种铁路车辆和相关电子设备,为全球铁路运输业的发展做出了重要贡献。

以上五个故事展示了庞巴迪公司在电子行业发展中的关键历程和成就。从水上飞机到现代商用喷气客机,从航空电子系统到铁路运输控制系统,庞巴迪凭借其卓越的技术实力和创新能力,在电子行业中树立了杰出的品牌形象。

Herrmann Kg公司的发展小趣事

Herrmann Kg深知不同客户对超声波焊接个性化需求,因此推出了模块化系统解决方案。这些模块化组件可以很容易地集成到现有的生产流程中,确保成功的焊接过程和出色的结果。无论是电子制造、汽车工业还是其他行业,Herrmann Kg都能根据客户的具体需求提供定制化的焊接解决方案。这种灵活性和定制化服务使得Herrmann Kg在市场上具有独特的竞争优势。

Fillfactory Nv公司的发展小趣事

FIDELIX公司成立于1990年,是一家专注于存储芯片研发与销售的韩国企业。在公司成立初期,FIDELIX凭借对技术的深入研究和对市场的敏锐洞察,成功推出了多款性能优越的NAND FLASH(闪存)和SDR/DDR(单/双数率同步动态存储器)等存储芯片产品。这些产品不仅在韩国市场上获得了良好的口碑,同时也开始逐步进入国际市场。

随着技术的不断进步和市场的不断扩大,FIDELIX逐渐在韩国存储芯片领域崭露头角。公司不断投入研发资金,加强技术创新,努力提升产品的性能和品质。同时,FIDELIX也积极拓展销售渠道,与多家国内外知名厂商建立了合作关系,为公司的持续发展奠定了坚实的基础。

问答坊 | AI 解惑

嵌入式Linux软件工程师—高级培训班

嵌入式Linux软件工程师—高级培训班 中嵌学院欢迎你 >>> 课程目标 通过该培训班培训后,可从事ARM、MIPS等多款平台下的嵌入式Linux系统移植、驱动开发、应用开发、嵌入式系统测试等多方面工作。我们还会在培训中根据个人的特点,建议学员定 ...…

查看全部问答>

MINI2440开发板的液晶板电路图

元旦放假,我在家用了一下MINI2440的开发板,只是作了一些简单的测试,发现没有液晶板的电路图,屏是统宝的,屏贴在一块PCB上,这块PCB上也有很多元件,但是给我们的资料中却没有找到这块板的图. 找到了将这块板的原理图,与大家分享下…

查看全部问答>

笑话:抠门的老板

新年伊始,经理透露过去一年公司赚了很多钱。员工们一听,强烈要求加薪。经理一向刻薄,但又怕不加薪员工会怠工,于是说:“以前迟到,扣100元,从现在开始,变相加薪,迟到只扣50元”。…

查看全部问答>

地震无情,人间有爱,保佑玉树,散分

上天保佑玉树人民渡过难关。。。…

查看全部问答>

怎样用PCI卡控制计算机重启或蓝屏?

我现在要做这样一个东西,硬件是PCI控制芯片+单片机,将这张卡放在PCI插槽上,计算机启动后单片机通过PCI控制芯片向主机发中断请求,如果得不到响应就让计算机重启或蓝屏。 问题是:问题是怎样通过PCI卡让主机重启或者蓝屏? 大家帮忙想想办法吧 ...…

查看全部问答>

高分紧急求助--如何在生成cab文件时指定程序的快捷方式的参数??

RT,如何在********_WCE4.inf文件修改[Shortcuts]节,以达到给某个程序的快捷方式添加参数的目的?在某个老外的博客上看到一种方法,于是按以下格式修改(/后面为参数):test,0,text.exe /1,%CE11% 但是生成cab文件时出错了: Error: Section [ ...…

查看全部问答>

ce的串口为什么会死机

每发送一组字符或一个字符,pc机仅能收到一个字符,而且开发板还死机,若发送不成功,开发板不死机.开发板还不能接受,一接收就死机.不知道怎么回事,请大家指点指点,是驱动程序问题还是系统程学问题还是应用程序问题?…

查看全部问答>

各位帮忙看看为什么进不去中断,谢谢

P1.3一直在输入2.8V的脉冲,周期10MS   #include <msp430x14x.h> #define uint unsigned int#define uchar unsigned char uchar BACKFLAG=0;uint i,n,n1,n2=0; void Delay_ms(unsigned long nValue){  unsigned long nCount;&nb ...…

查看全部问答>

用汇编如何将多个8位数据累加到16位R寄存器中

用汇编语言如何实现多个8位数据累加到16位R寄存器中的操作?谢谢!…

查看全部问答>