基于语音识别汽车空调控制系统设计
现在汽车上使用的电器越来越多 , 驾驶员需要手动操作的电器开关也越来越多 , 不但增加了驾驶员的负担 , 还影响了行车安全 。本文以STM32F103VET6(以下简称STM32)芯片为控制核心 , 采用高性能LD3320语音识别芯片 , 设计基于语音识别的汽车空调控制系统 。该系统可以用语音有效控制汽车空调 , 减轻了驾驶员的操作负担 , 保证行车过程中的安全 。
【基于语音识别汽车空调控制系统设计】1 系统硬件设计
运用语音识别技术 , 结合各种传感器对车身内外的环境(如气温、阳光强度等)以及制冷压缩机的状态等多种参数进行实时检测 , 与设定参数相比较 , 微控制器经过运算处理做出判断 , 输出相应的调节和控制信号 。执行机构经过实时调整和修正 , 实现对车厢内空气环境全方位、多功能的调节和控制 。系统的执行机构主要包括温度风门电机、模式风门电机、循环风门电机、鼓风机、压缩机、除霜控制继电器等 。图1为系统结构框图 。
1.1 主控制器
主控制器为基于ARM Cortex—M3内核的32位微控制器STM32F103VET6 , 内置64 KB RAM、512 KBFlash , 以及丰富的增强I/O端口和联接到两条APB总线的外设 , 主要控制传感器模拟信号的采集、语音信号的收发和汽车空调控制信号的输出 。
1.2 语音识别模块
语音识别芯片选用的是ICRoute公司的LD3320芯片 。该芯片集成了语音识别处理器和一些外部电路 , 包括A/D转化器、D/A转换器、麦克风接口、声音输出接口等 。本芯片在设计上注重节能与高效 , 不需要外接任何的辅助芯片(如Flash、RAM等) , 直接集成在现有的产品中即可以实现语音识别功能 。识别的关键词语列表是可以任意动态编辑的 。
参照LD3320数据手册 , 语音识别控制电路采用LD3320与STM32通过SPI串行方式进行连接 。语音识别模块控制电路如图2所示 。首先 , 要将MD接高电平 , 芯片时钟信号CLK连接到STM32时钟信号输出引脚MCO(PA8)上 。引脚MBS是麦克风偏置 , 接了一个RC电路 , 保证能输出一个浮动电压给麦克风 。
1.3 SD卡存储模块
要实现具有人机交互功能的语音识别控制系统 , 需要存放大量的MP3音频文件 。本系统中 , MP3音频播放文件存放在SD卡上 , 语音识别关键词也存放在SD卡上 , 这样可以很方便地更改要识别的关键词 , 而不需要更改程序内容 。主控STM32将MP3数据依次从SD卡读出来 , 送入LD33 20芯片内部 , 这样就可以从芯片的相应的引脚输出声音 。SD卡硬件连接如图3所示 。SD卡与STM32通过SPI方式进行通信 。将SD卡片选信号CS、数据输入信号DI、数据输出信号DO、时钟信号SCLK分别与STM32的PC11、PD2、PC8、PC12引脚连接 。
1.4 传感器模拟信号输入模块
传感器模拟信号是控制系统的输入信号源 。传感器把非电量的物理量变成电量后并不一定适合A/D转换器直接应用 , 还必须经过放大、滤波、隔离及保护措施 , 才能送给单片机 。单片机通过检测这些传感器信号来判断系统的温度、湿度等是否满足用户的要求 。以车内温度传感器为例分析 , 温度信号采集硬件连接图如图4所示 。本系统采用NTC公司的高精度车内温度传感器Rntc , Rntc和电阻R0分压后输入到单片机 。Rntc电阻值可以近似地用如下公式表达:
其中 , R1为绝对温度下T1时的电阻值 , T为要检测的温度 , Rntc为该温度下的电阻值 , B值反映了温度变化与阻值变化的关系 。单片机信号输入端得到的电压为:
根据公式(2)电压计算出当前温度传感器的电阻 , 再由公式(1)计算出要检测的温度 。
1.5 压缩机驱动模块
压缩机的动力是由发动机提供的 , 连接发动机和压缩机的重要电子部件是电磁离合器 。根据汽车空调运行情况和压缩机开关的工作电压 , 单片机控制继电器吸合或断开 , 以此控制压塑机电磁离合器的吸合与断开 。当蒸发器温度一旦低于设定值 , 压缩机就停止工作;反之 , 压塑机保持正常工作 , 开始制冷 。汽车空调蒸发器就是一个热交换器 , 通过热交换将进入蒸发器的气体变为冷风 , 从而达到制冷的目的 。控制蒸发器温度是空调自动控制系统的重要任务 。
1.6 风门电动机驱动模块
汽车空调伺服电机选用直流电动机 。伺服电机根据功能分为内外循环电动机、混合风门电动机、模式风门电动机 。电机采用两个TA8083F系列芯片驱动 , 每个芯片可以驱动两个伺服电机 。该芯片的输入端口可以直接和单片机连接 , STM32单片机的PE0~PE3引脚分别与驱动芯片DI1A、DI2A、DI1B、DI2B引脚相连接 。其硬件电路如图5所示 。
根据输入信号的不同 , 电机工作状况也不同 , 具体的工作情况如表1所列 。
1.7 鼓风机驱动模块
鼓风机驱动电路如图6所示 。用四合一集成运算放大器LM2902将单片机的PWM输出信号T050放大 , 经放大后的信号Blwc传送给风机调速模块 , 从而调节鼓风机的转速 。单片机输出信号Blowoff control作为控制鼓风机的开关信号 。2SC2412作为控制鼓风机运转的开关 。当单片机输出高电平时 , 2SC2412导通 , 鼓风机停止运转;当单片机输出低电平时 , 2SC2412反向截止 , 鼓风机正常运转 。
1.8 后除霜驱动模块
前、侧挡风玻璃上的霜层通常是通过在汽车空调系统的风道中 , 调整模式风门的位置 , 利用空调系统中产生的暖气(或流动的空气) , 达到清除结霜的目的 。对后挡风玻璃的除霜 , 常采用除霜热线 。除霜热线是把数条电热线(镍铬丝)均匀地粘在后窗玻璃内部 , 各线两端相接 , 形成并联电路 。当两端加上电压后 , 电热线就会升温而加热玻璃 , 从而达到防止或清除霜层的目的 。后除霜控制电路如图7所示 。IG2为汽车空调电源 , 单片机输出信号Defr通过三极管NIF5002N来控制继电器的通断 , 从而控制除霜热线的通断 , 来达到后除霜的目的 。
2 系统软件设计
本系统软件设计采用C语言开发 , 用Keil uVision4软件进行编译 。开发过程按照模块化分块进行 , 系统的主要模块包括语音识别模块、语音播放模块、SD卡模块以及空调控制模块 。
2.1 语音识别模块
语音识别模块采用中断的方式进行工作 , 其工作流程大致为芯片初始化、写入识别列表、开始识别、中断响应并获取识别结果 。语音识别流程如图8所示 。在初始化程序里 , 主要完成软复位、模式设定、时钟频率设定和FIFO设定 。在写入识别列表之前 , 首先要读取寄存器B2的值 , 检查LD3320是否处于空闲状态;然后 , 把识别语音列表信息写入LD3320的05和B9寄存器中 , 每个识别条目是标准普通话的汉语拼音(小写) , 每两个汉语拼音之间用一个空格间隔 。在完成添加语音识别列表后 , 设定寄存器35的值为45H 。此处设定的值越大 , 代表麦克的音量越大 , 识别距离也越远 , 但是可能产生较多的误识别;值越小代表麦克的音量越小 , 需要近距离说话才能启动语音识别功能 , 识别率也高 。设定寄存器37值为06H , 启动语音识别 , 即可开始语音识别 。如果麦克风采集到声音 , 不管是否识别出正常结果 , 都会产生一个中断信号 。进入中断函数后 , 首先清零寄存器29和寄存器02;然后 , 检查B2寄存器是否为0x21 。若值为0x21 , 表示闲 , 可以检测2B的值;若为1 , 表示语音识别有结果产生 。寄存器BF读到数值为0x35 , 可以确定是一次语音识别流程正常结束 。寄存器BA表示语音识别有几个识别候选结果 。最后 , 可以读取寄存器C5 , 获取识别结果 。
2.2 语音播放模块
语音播放的软件设计流程包括通用初始化、MP3播放初始化、播放音量调节、开始播放声音以及中断响应 。通用初始化时 , 首先连续读取寄存器06 , 相当于激活了芯片;然后 , 按顺序设置相关寄存器的值 。MP3播放初始化时 , 首先要设置寄存器BD的值为02H , 启动MP3播放模块;然后 , 向寄存器17写入48H , 激活DSP 。语音播放模块的音量分为16级 , 用4位二进制表示 , 这里需要设置寄存器8E的第2~5位的值来调节播放音量 。当播放语音时 , 首先需要清零 , 开始播放位置 。将寄存器1B的第3位设为1 , 然后执行循环 。当播放条件为真时 , 顺序将MP3数据放入寄存器01(每次1个字节) , 播放位置值增加1 。当寄存器06的第3位等于0或者播放位置小于MP3文件的总长度时 , 就跳出循环 。等到芯片播放该段后会发出中断请求 , 而中断函数会不断接收数据 , 直到FIFO-DA-TA装满或声音数据结束 。
2.3 SD卡模块
此模块分为SD卡初始化和SD卡数据读取 。SD卡初始化时 , 在发送CMD命令之前 , 在片选有效的情况下 , 首先要发送至少74个时钟 , 否则将有可能出现SD卡不能初始化的问题 。然后 , 就可以发送复位命令CMD0 。发送复位命令后等待8个时钟周期 , 进入SPI总线模式 , 接着发送CMD1命令 。如果正确接收响应信号 , 表示SD卡初始化完成 , 可以接受后续读写命令 。初始化完成后 , 发送CMD17读命令 。判断响应值是否全为0 , 然后 , 判断接收数据开始令牌是否为0xfe , 如果是 , 就可以接收正式数据和CRC码 。
2.4 空调控制模块
空调控制模块主要包括信号采集模块、风门电机控制模块、鼓风机控制模块、压塑机控制模块、后除霜控制模块5个子模块 。空调控制流程如图9所示 。首先 , 进行系统的初始化 。若点火开关正常启动 , 信号采集模块开始采集传感器数据 , 根据采集到的数据 , 判断是否满足风机启动条件 。若满足条件 , 则设置风机PWM占空比 , 进而调节风量的大小 。当风量大小满足要求时 , 接下来就要判断是否满足压缩机的启动条件 。若满足条件 , 启动压缩机;如果不满足条件 , 则判断风门位置是否满足条件 。如果不满足条件 , 则调节风门电机转动 , 直到满足条件 。最后 , 判断是否满足除霜条件 , 若满足则启动后除霜继电器 。
在软件设计上 , 采用了指令冗余、软件陷阱和重复设置各种工作方式控制字等方法 , 消除干扰 。使用“Watchdog”定时器 , 实时监测程序的运行;运用CPU运算与控制功能 , 采用算术平均法 , 实现数字滤波 , 消除传感器通道的千扰信号 。
结语
本文介绍了基于语音识别的汽车空调控制系统 , 分别对硬件电路和软件设计进行了详细的介绍 。本系统开发成本低、性能优越 , 系统测试表明 , 本系统具有一定的应用价值 , 可以用于中低档汽车 。
推荐阅读
- 基于XC164CM的车灯控制系统的设计与实现
- 解读无人驾驶汽车工作过程 用语音即可控制
- 基于CAN总线的分布式嵌入式系统升级方案
- 基于LabVIEW测试系统的便携式汽车仪表检测系统的研制
- 基于FlexRay协议的媒体接入控制的设计
- 基于三星S3C2410的ARM-Linux电子控制油门设计
- 金钱龟怎么识别?如何在室内养殖金钱龟呢?
- 基于Cyclone FPGA的远程信息处理系统简介
- 基于LIN2.1协议的车窗控制系统的应用
- QNX推出全新“善解人意”的车载语音识别架构