基于MC33993的车用多功能开关检测设计的实现
扫描二维码
随时随地手机看文章
1 引言
随着汽车电子技术的飞速发展,汽车内部所用到的开关元件也日益复杂而繁多,因此,可靠实时地对这些开关量进行检测已成为汽车电子硬件设计必须解决的问题。传统的开关检测接口电路设计多采用电阻、电容等分立元件与单片机直接相连,这样往往有如下弊端:
整个开关系统的可靠性得不到保证,给汽车安全带来隐患:
由分立元件设计的开关触点容易发生氧化,缩短了开关的使用寿命:
过多使用分立元件,浪费大量的单片机I/O资源,降低了CPU的利用率。
针对上述问题,本文采用飞思卡尔公司生产的多路开关检测器件MC33993设计了一款车用多路开关检测接口电路。实验证明其工作性能良好。安全性高。
2 MC33993介绍
MC33993是一款可编程多路开关检测接口器件,可检测22路开关量输入信号,并将检测到的开关状态通过SPI(串行外围接口)发送给单片机。MC33993还具有22路模拟多路开关功能,用以读取多路模拟输入信号,模拟输入信号经缓冲器由模拟多路开关输入以供微处理器读取。除此之外,MC33993还可为传感器提供电源。作为模拟传感器的输入、控制管理系统电源等。
MC33993的主要特性如下:
与单片机的通信接口:采用3.3V/5 v SPI接口协议:
8路可编程输入SPO~SP7:开关可接电源正极,也可接地;
14路接地输入SGO~SGl3:开关只能接地;
自动唤醒功能:开关状态的变化可将其从睡眠状态中随时唤醒;
中断:开关状态变化引起中断;
可编程湿性电流:16 mA或20 mA。湿性电流可以防止触点氧化。
MC33993的基本功能是检测多路开关的状态和作为多路模拟开关,微处理器通过与MC33993的SPI接口通信,向MC33993发送控制命令字,开关状态的变化引起中断,微处理器又通过SPI接口读取开关状态。
MC33993有正常和休眠两种工作模式。休眠模式可以降低系统的能耗,只有当给器件发送休眠控制字时,它才由正常模式进入休眠模式。休眠模式中,开关状态发生变化、中断信号下降沿、片选信号下降沿、唤醒信号下降沿和定时器中断均可以使MC33993进入正常工作模式。正常模式在作为监测开关状态之用时,单片机可经SPI接口与MC33993通信对其进行编程设定。
3 多路开关检测接口电路设计
3.1 硬件电路设计
笔者设计的多功能开关节点中将开关状态的检测和节点通讯在一个模块中实现,微处理器采用PIC18F2480单片机,这是一款PIC18系列高性能MCU,采用先进的RISC架构,具有增强型内核,32级堆栈和多种内部和外部中断源,内部带有CAN控制器,可以方便的实现CAN通讯[2]。多路开关中,22路按键开关分别与MC33993的SP0~SP7和SG0~SG13共22个输入引脚相连,其中与SPn相连的开关闭合时接电源正端(通过编程实现),与SGn相连的开关闭合时接地,所有开关闭合时状态为1,断开时状态为0。PIC18F2480单片机通过SPI通信读取MC33993的开关状态量,这两个器件均有专门的SPI接口,因此他们之间的SPI通信实现起来很容易;MC33993的SO、SI、CS、SCLK和INT引脚分别与PIC18F2480的RC4/SDI、RC5/SDO、RC2/CCP1、RC3/SCK和RB1/NT1四个引脚相连。
MC33993与PIC18F2480单片机的连接电路如图1所示。
3.2 工作原理
首先PIC18F2480通过SPI接口对MC33993进行初始化设置,设定MC33993的工作方式,当开关被按下或断开时,MC33993的输入口状态发生变化,使之从睡眠模式中被唤醒,并立刻向处理器PIC18F2480发送读取开关状态量的中断请求,处理器识别中断并通过SPI接口读取开关状态的变化,然后执行相应的操作。
3.3 开关检测接口电路软件的设计
开关检测软件设计包括初始化程序和读取开关状态的程序两部分。
初始化程序主要完成对MC33993内部几个相关寄存器的命令字的设置,例如复位寄存器、湿性电流控制寄存器、SPn设置寄存器等。
读取开关状态是在中断服务子程序中实现。当开关状态变化时,MC33993产生中断。PIC18F2480进人中断服务程序,通过SPI接口读取。MC33993开关状态。
在软件设计过程中,MC33993读写函数在初始化程序和开关状态读取程序中都会被调用,是整个开关检测软件设计的关键。下面给出整个多路开关检测接口电路软件设计的流程图和MC33993读写函数void RW33993()的代码。软件设计流程图如图2所示。
读写函数void RW33993()源代码如下:
4 结束语
文中介绍了基于MC33993的车用多功能开关检测设计的实现,电路简单,运行良好,安全、可靠性高,避免了基于分立元件设计的开关检测电路的不足,而且降低了系统的功耗,具有较强的应用价值。