SPI 接口在车门控制模块中的应用

2010-07-25 07:16陶金陈文鑫王景成
微型电脑应用 2010年4期
关键词:后视镜寄存器车门

陶金, 陈文鑫, 王景成

0 引言

串行外设接口(Serial Peripheral Interface)是MCU与外界联系的重要方式之一。利用SPI既可以实现MCU之间的数据传输,且其速度比通过串行异步通信(SCI)方式快。利用SPI也可以实现MCU与具有SPI接口的芯片进行直接接接,这些芯片包括模数转换器,LED/LCD驱动器,组合开关等。换而言之,SPI可以进行大范围的MCU外设扩展而不受MCU I/O口的限制。

传统的车身控制系统采用继电器来控制需要较大电流驱动电机的部件,例如车窗,后视镜,车锁等。在总线化设计中为了缩小控制单元的体积,增加系统的集成度,采用ST公司的L9950车门执行器驱动芯片来对车门上的锁、童锁、后视镜旋转、后视镜折叠后视镜除霜和脚灯等通过SPI口进行集中控制,不仅完全脱离了继电器控制,节省了I/O口,缩小了单元体积,还可以通过SPI口读取L9950中移位寄存器中的数据来实现故障诊断功能。

本文将对车门控制中 SPI的实现的原理和过程进行阐述,之后给出了演示板的调试过程。

1 SPI工作原理

利用SPI进行MCU和外部设备之间的数据传输时,有主机和从机的概念,MCU必须工作于从机方式,且控制着数据传输,外部设备则处于从机方式。图1是SPI的主从连接示意图,参与数据传的有三个引脚:时钟引脚 SPSCK、主入从出引脚MISO、主出从入引脚MOSI。数据传输过程如下:

移位寄存器为8位,所以每一个过程相互传送8位数据,工作从主机CPU发出启动传输信号开始,此时要传送的数据装入8位移位寄存器,同时产生8个时钟信号从SPSCK引脚依次送出,在SPSCK信号的控制下,主机中8位移位寄存器中的数据依次从 MOSI引脚送出,到从机的 MOSI引脚送入其8位移位寄存器,在此过程中,从机的数据也通过MISO引脚到主机中,从而得以实现全双工的传输功能。

图1 SPI全双工主从连接示意图

2 系统硬件的设计

本文中使用Freescale公司的M68HC908AZ60来控制车门执行器驱动芯片L9950。

如图2所示,在AZ60 MCU中E接口的PTE4~PTE7四个引脚与SPI模块共用,作为SPI的引脚时,分别为SS、MISO、MOSI和SPSCK。L9950中DI、DO和CLK引脚分别与MCU的MOSI、MISO和SPSCK相连接,实现数据传输功能。有两个电源口Vs和Vcc。Vs提供高端和半桥驱动。内部charge pump 用来驱动高端开关。Vcc提供逻辑部分和SPI接口部分的电源,独立的逻辑电源使得在Vs产生异常时,状态和控制信息不会丢失。PWM 1/2口为脉冲宽度调制口,在车门某些部件需要电机平稳驱动或者需要逐渐提高电压以提高部件使用寿命时使用。

L9950驱动电流的输出主要取决于PWM和其内部输入数据寄存器的与逻辑关系,当值为真时,电源Vs通过内置的Charge Pump提高电流来打开高端开关,从而在OUT口输出大电流,驱动电机等部件。所以在一般要求不是很高的情况下,从MCU引出的PWM位始终置1。CM口提供一个电流值的回馈功能,能够回馈指定OUT口高端驱动的电流值的一万分之一,连接到MCU可以更精确的得到负载的状态,而不是只通过 L9950内的数据寄存器得到简单的开路和短路信息。

图2 L9950和MCU的电路图

3 L9950通过SPI口的数据传递

L9950使用标准的SPI口进行通讯,有两个输入寄存器和两个状态寄存器,均为24位。输入寄存器只能写入,状态寄存器只能读出。当 CSN片选信号为高电平时,DO口呈高阻状态。CSN转为低电平后,SPI的串行通讯便开始了,在24位数据在时钟CLK的控制下,经移位寄存器同时发送和接收之后,CSN应恢复为高电平。这一次发送的24位数据便称作L9950的一个通讯帧。

输入寄存器中,bit0是寄存器选择信号(2选 1),bit1~bit17控制相应的OUT口驱动器,bit22为重置模式。状态寄存器中的数据会在输入寄存器接收数据的同时发送给MCU,分为状态寄存器1和状态寄存器2,前者存放寄存器的过流故障信息,后者存放寄存器的断路故障信息。Bit0为bit1~bit22的逻辑“或非”组合,用来判断是否有故障产生。Bit1~bit22则分别对应于各个 OUT口故障以及全局故障。

4 系统软件的设计

4.1 SPI初始化

在本例中对M68HC908AZ60中的SPCR,SPSCR进行设置。具体为:MCU收到数据不产生中断,工作在主机方式、空闲时低电平,CSN下降沿作为移位开始信号、允许SPI、MCU发送数据不产生中断,SPI的传输比特率定为12500。

4.2 故障检测和具体控制功能的实现

本例采用4个三元一维数组来存放L9950的控制和状态反馈字,初始状态均为 0,这里值得注意的是,在 CSN信号启动一帧24位的发送和接收时,均从寄存器的第0位开始。所以数组的第0项、第1项、第2项应经由MCU寄存器SPDR的过渡分别存放一帧的bit0~bit7、bit8~bit15和bit16~bit23。

下面以控制车门后视镜为例,详述控制过程。硬件连接方案如上原理图所示,后视镜由OUT1~3口进行控制,实现X-Y方向旋转功能。OUT1口连接电机的公共端,OUT2口连接X轴电机,OUT3口连接Y轴电机。具体的相关寄存器位的设置由表1给出:

表1 寄存器相关位的设置

以后视镜Y轴水平旋转为例,OUT1高端(High Side)和OUT2低端(Low Side)置1,电流由前者流向后者,电机左转。相反,OUT1低端(High Side)和OUT2高端(Low Side)置1,电流由后者流向前者,电机右转。这一段的寄存器位位于SPISend0[0]中,相关代码如下:

L9950在接受一帧24位的控制字的同时,发送一个24位的状态反馈帧。这样在完成一个控制过程的同时,将会有2个状态反馈帧,每个反馈帧的bit18~bit23含义相同,各位中包含了Vs过压欠压,热关闭等芯片的全局故障。剩下的位中,第0帧(即状态寄存器0的数据)存放各个OUT口的短路故障信息。第1帧(即状态寄存器1的数据)存放各个OUT口的断路故障信息。在本例中这些数据通过串口收发函数发送到上位机进行数据处理及显示。

4.3 代码流程的描述

SPI控制字发送函数L9950Send首先拉底CSN电平,启动一帧的开始,数组从低位开始送入 8位数据寄存器SPDR,然后判断接受满、发送空标志位,置位后循环跳出,将SPDR中收到的数据存在相应数组中,这样循环三次,发送接收满24位一帧为止。流程图如图3所示。

图3 L9950Send()执行流程

整个车门控制系统程序执行前,首先要对SPI进行初始化工作。然后进入全局扫描循环阶段。在该过程中,相应的按键或来自上位机的命令将会对相应的控制功能函数进行调用,该函数的形式基本相同,区别仅在于写入SPISend控制字的不同。软件流程图见图4。

值得注意的是,在功能函数中对 L9950Send控制字发送函数进行调用时,返回的将是之前一次调用该函数的反馈状态,即上一次发送控制字时所产生的状态控制字。所以要得到当前的状态,进行故障诊断,必须在输入变量相同的情况下调用该函数两次。

5 系统的调试

主测试界面采用VB提供的串口通信等多种控件,开发了虚拟的实验台面板,提供接受数据位的显示和状态文本显示。如图5所示。

在图6和图7所示的电路演示板的运行模式下,当有组合开关按下时,相应的函数将会被调用,执行SPI操作来控制和检测门上设备。反馈的车门部件状态数据通过SCI口发送至上位机。数据经由测试程序处理,通过文本的方式显示在屏幕上,直观可以看出运行状态。如果系统运行正常,相应的部件便会执行操作命令,运行正常的信息会显示于主测试界面上。 如果系统部件出现故障则立即会显示故障信息,判断其为短路还是开路。经测试系统达到相关性能要求。

图4 SPI函数执行流程

图5 主测试界面

图6 演示电路板

图7 连接于车门上的演示电路板

6 结束语

本文中将小体积带 SPI口的驱动芯片代替了大体积的继电器来实现控制功能,且MCU中SPI接口的应用有效降低车身控制模块(BCM)的体积,和总线型车身控制设计理念相一致。

另外,除了在车门部件控制中可以得到应用以外,车身控制中的遥控,车灯系统的控制和按键系统均可通过 SPI实现,而且可以复用,有效降低了车身控制中MCU中I/O口使用较紧张的局面,同时不影响传输速度。随着代替继电器的各类驱动芯片的普及,SPI控制技术将会得到越来越广泛的应用。

[1]王宜怀,刘晓升,嵌入式系统基础教程[M].北京:清华大学出版社, 2005.

[2]刘慧银,程建平,龚光华等.微控制器MC68 HC08原理及其嵌入式的应用[M].2001

[3]L9950 Door Actuator Driver Datasheet[S].ST Microelectronics,2004.

[4]MC68HC908AZ60A,Rev.6[S].Freescale Semi conductor Inc,1998.

猜你喜欢
后视镜寄存器车门
STM32和51单片机寄存器映射原理异同分析
车门气密性对风噪的影响分析
Lite寄存器模型的设计与实现
臂戴后视镜
人机工程仿真技术在车门装焊工序中的应用
创新的摄像监视系统取代车外和车内后视镜
别克君威车门自动落锁
荣威350车右前车门异响
汽车的复眼 后视镜及侧视镜的由来
中型客车后视镜抖动的分析与改进