基于16位控制器的汽车车身电子控制系统解决方案(一)
扫描二维码
随时随地手机看文章
随着汽车车身控制应用复杂性的提高,对16位微控制器(MCU)的性能要求也越来越高。以前曾用机械方法实现的门控、座椅调节、车内照明和空调系统现在都改成了电子控制。这样一个电子化汽车车身控制系统包括电源系统、CAN收发器、多开关检测接口、输出系统、电子马达控制、嵌入式仿真以及内存编程等几个主要部分,本文不仅介绍了一系列芯片,而且将使设计工程师对汽车电子控制系统有一个比较概要和全面的认识。
随着汽车车身控制应用复杂性的提高,对16位微控制器(MCU)的性能要求也越来越高。以前曾用机械方法控制的门控、座椅调节、车内照明和空调系统现在都改成了电子控制。许多半导体厂商包括摩托罗拉公司所提供的大量专用半导体解决方案使这些新的电子控制应用成为可能。这些新的解决方案不仅提供了必要的控制功能,还提供了旧机械系统所不能提供的高级诊断能力。消费者希望新型汽车中的控制系统能及时对车内发生的任何系统工作故障发出报警信息。
本文介绍摩托罗拉公司的MC9S12DP256 16位MCU和若干个外围IC产品,这些产品专为适应汽车系统中常见的恶劣环境而设计,此外,还详细讨论这些产品提供的高级诊断功能。图1给出了所用方案的方框图。
电源系统
电源系统是任何汽车系统设计中最重要的子系统之一。整体功耗、电池反极保护、汽车跳启、车辆噪声和汽车休眠功率都是必须考虑的因素。如果电源设计比较糟糕的话再好的系统也不能正常发挥作用。摩托罗拉公司提供的智能化电源半导体产品能很好地管理电源子系统的所有方面。
摩托罗拉公司的系统级芯片(SBC)MC33989具有二个电源整流器,专为MCU和外围器件提供电源。片上还提供1个速度为1兆波特的CAN接口、4个高压唤醒输入端以及系统保护功能。这个智能化的半导体器件可以提供所有必需的系统电压,它内部有一个低噪声的200mA整流器用来给MCU子系统供电。另外,还有一个控制外部导通晶体管的装置用来给外围设备供电。这个外部导通晶体管允许调整二次电源,使之满足每种特殊应用所需的功耗极限要求。二次供电电源还能根据要求切断所选外围设备的供电,并以此达到降低功耗的目的。
输入电源直接来自车载电池。只需加一个外部二极管就能达到电池极性保护的目的。SBC可以在所有过压条件下完成保护动作。功率MOSFET工艺技术的应用也使本器件在电池电压低至4.5V时还能正常工作,当电池电压低至3V时能输出电池故障告警信号。该电源系统还有过温保护功能,温度到160摄氏度时将进行内部热关断处理,温度在130摄氏度时会输出一个告警信号。另外,SBC还能提供低功耗的休眠模式,该模式下系统的电流能减小至40μA。
CAN收发器
除了提供系统电源外,SBC内部还集成了一个1兆波特的CAN收发器。该收发器具有主控状态超时检测、内部热保护以及CAN+和CAN-输入端短路保护等功能。收发器内部还对CAN+和CAN-输入端进行了跳启、电池反接以及短接至电源或地的保护。
4个高压唤醒输入端使器件具备了强大的唤醒功能。这些唤醒输入端的最大耐压能达40V。输入端的上拉源能在芯片上产生。由于只需用上拉源就能随时检测开关输入的变化,因此能较好地降低功耗。该器件还具有周期性唤醒功能。另外,SBC还提供了针对MCU的复位调节与低压检测功能。
多开关检测接口
由于需要特殊的触点湿性电流(wetting currents)和电路故障检测功能,汽车电子设备需要高复杂度的输入传感电路来检测开关状态。摩托罗拉公司的多开关检测接口(MSDI)器件MC33993正是为此而设计的。
需要大量开关接口的系统具有许多分立元件,而这些分立元件会占用标准印刷线路板上的大量空间,并且必须进行焊点连接完整性检测。而集成化方案能减少焊点数量,占用的空间也少,并能提供更宽的工作电压,因此具有更大的灵活性。MSDI器件执行的就是开关检测功能,最多能检测22个开关触点的开闭状态,这些检测到的开闭状态再通过一条高速串行链路传送给MCU。在输入端只需加一个合适的静电放电电容就能实现对瞬态干扰的保护。同样,所有输入端都具备电池反接、跳启和负载拆卸保护功能。
MSDI还具有可选的湿性电流。这些内部电流源极大地减少了系统部件数量,并使金属或橡胶开关的使用成为可能。用于检测金属开关的大湿性电流能在检测过程中有选择的使用,从而达到降低功耗的目的。利用内部电流源可以将输入端作为轻型负载的供电电源使用,如传感器、LED或MOSFET门等负载。这种方法进一步增强了系统的设计性能,使这些输入端在不需要开关检测的情况下能作其它用途。
高阻抗的模拟电路特别容易受到来自电路板上其它信号噪声的影响。缩短模拟信号路径,并允许器件对信号进行缓冲可以减少这种影响。MC33993具有强大的模拟接口功能。与传统系统相比,这种方法能减少系统布线和故障模式。另外MC33993还集成了22比1的模拟复接器来提升器件性能。通道选择是通过一条高速串行链路实现的。该器件不仅能提供先进的开关诊断功能,还允许使用模拟传感器接口和梯形阻抗接口。
MCU输出电路不能直接驱动汽车负载,还需要灯、继电器、马达、量程表和LED驱动器等集成电路。这些特殊的输入接口器件同样也提供保护与错误检测功能。
输出系统
在电源系统与输入调整确认后就必须考虑输出系统。许多汽车负载不能被MCU或低电流接口器件直接驱动,包括马达和灯。继电器或机械式开关是当今汽车车身控制结构中主要的大电流开关器件。由于电磁系统成本低,设计成熟,不少系统结构师仍乐于选用。然而使用电磁系统会产生很多问题,例如:
1. 机械触点的有限寿命限制了继电器的开关频率。由于触点在打开或闭合的时候具有一定的惯性,在稳定到下一个状态前会有一定程度的跳动。这一跳动限制了最大的工作频率,如果超过这一频率继电器的寿命将大大缩短。
2. 电磁系统不具备诊断功能。在恶劣的汽车环境中,这些器件的可靠性是个大问题。
利用专为这类负载设计的驱动器可以方便地把这些负载集成到系统中去。摩托罗拉公司提供的具有4个高端与8个低端的MC33888开关就是专为驱动汽车负载设计的。这种器件能直接控制4个功率达60W的高端负载和8个小电流(2.5W)的低端负载。MC33888器件还内建了处理与白炽灯有关的浪涌电流的功能。从图2可以看出由白炽灯引起的浪涌电流能达到正常工作电流的10到15倍,这会给没有这些大浪涌电流处理电路的系统带来很大的问题。对这类负载的最常见措施是触发过流保护电路来切断这些负载。
MC33888很好地解决了这个问题,它采用了一个启动定时器,允许白炽灯在过流保护电路工作前进行预热。过流保护电路的启动需要检测调节输出驱动器到器件可接受电平的状态和脉宽信号。图3给出了过流保护的动作波形。完整的电池反极保护、负载倾卸保护和低功耗特性都有助于降低系统的复杂性,并减少外部元器件的数量。诊断功能包括负载开路检测、短路检测和过温检测。作为附加的保护功能,该器件还内建了一个看门狗定时器,当器件与MCU之间的通信发生中断时可以用来关闭器件。对该器件的控制是通过一个高速串行接口实现的,因此大大减少了所需的MCU引脚数量。
电子马达控制
最后一个需要考虑的问题是电子马达控制。MC33887马达驱动器能很好地完成这一任务,它是一个完整的H型桥式驱动器。该器件具有大于5A的连续电流驱动能力,因此非常适合用于锁定马达、天线马达或雨刷泵。MC33887还具有高端电流传感反馈功能。高端电流传感反馈功能可根据实时的马达电流反馈修正马达的驱动频率和负载循环。就象灯驱动器那样,当检测到过流状态时它能自动对输出进行脉宽调制。
MC33887器件能够完全控制H桥激活方向和负载的中断控制。
嵌入式仿真器
专门设计用于复杂的汽车电子应用的MC33993、MC33887和MC33888器件提供了具有先进性能和诊断功能的解决方案。
复杂的多引脚MCU常会引起开发问题。MC9S12DP256提供了一个单线的后台调试接口,可以方便地在汽车环境中实现广泛的调试工作,并且不会遇到使用传统电路嵌入式仿真器时常见的困难。这一接口还能用来在生产线末端进行主要闪存的编程,甚至可以用来在车内执行再编程操作。
现代的汽车微控制器常采用闪存来存储主操作程序。编程闪存的最佳方法是在最终组装后把主程序编程进完整的电子控制模块中,与在模块组装前通过第三方把主程序编程进MCU相比,这种方法能有效地避免风险和延时。通过简单的串行接口将主程序编程进MCU是在模块组装后完成的,一般是在最终测试过程中执行的。一些制造商采用便宜的独立编程器完成这一操作,而另外一些厂商则将编程操作集成在生产线末端的测试设备中。
摩托罗拉的相关器件则提供一个单线的后台调试接口用来实现闪存编程、检验和一般的调试操作。在设备正常工作时,串行通信引脚在复位时是被拉高的,因此后台系统不被激活。当有编程器或调试系统连接到这个引脚时,该引脚在复位时会被拉到低电平,从而迫使MCU进入激活的后台模式,而不是去启动应用程序。为了方便调试,可以在设备正常工作时将一个主机系统连接到目标MCU系统,从而在不干扰设备运行的条件下实现对闪存或寄存器内容的监测。所连接的调试系统也能取代MCU的控制来读写CPU寄存器、设置硬件断点或跟踪单条指令。
传统的电路嵌入式仿真器与目标系统之间通常需要30到40个连接,而上述后台调试接口只需要2到4个连接。单根BKGD通信信号和公共地是必须的。增加复位信号能使主机更容易地强迫和控制系统复位,在某些情况下增加VDD能允许调试夹具从目标系统中“窃取”电源。这种简单的接口为汽车电子设计师提供了对安装在运动汽车电子控制模块中的MCU的调试访问能力。当汽车在正常路况下行进时许多问题只能经过调试才能发现。
内存编程
与闪存编程相关的最重要因素是速度与方便性。编程速度取决于闪存单元的编程时间以及从编程器到目标MCU的数据传输速度,当然还有一些其它因素,如编程前擦除阵列的时间,用于验证编程操作成功与否的时间。MC9S12DP256编程任意16位字的时间是45ms,但一个突发编程操作允许对同一排32字闪存中的任意附加字以20ms的速度编程。理论上采用单线后台调试接口可以在27ms内传送一个字的信息,这要比闪存的实际编程时间稍微慢一些。实际编程还需要额外的任务开销,如验证开销。独立编程器工具SCBDMPGMR12能在稍少于10s的时间内完成256KB闪存的擦除、编程和验证操作。
验证是产生开销的重要因素之一。重传所有的数据以实现字对字的验证将使编程时间加倍。一个快速的办法是在数据编程进闪存时进行CRC计算,然后在整个闪存编程完成后重读闪存内容来验证CRC值。这一操作完全能以总线速度进行,而且无需重传数据。
将数据到目标的传送分离出来,使它在数据编程进闪存前完成也会使编程时间加倍。较好的方法是数据传送与编程操作并行展开。一般来说,要先把编程算法发送到目标MCU,从而便于管理收到的数据并把数据送入RAM缓冲器,然后控制擦除与编程操作。该编程算法利用二个数据缓冲器来接收将被编程进闪存的数据。当第一个缓冲器装满数据后,编程算法就开始把这些数据编程进闪存,同时新的数据被装载到第二个缓冲器。后台接口可以用来接收数据并把它们写入RAM,这一操作不会干扰目标CPU的工作,因为CPU是从另外一个缓冲器读取数据并编程进闪存的。
MC9S12DP256中的闪存被分成4个独立的64KB块,因此可以独立地对这4个块执行擦除与编程操作。在基于后台调试的闪存编程情况下,由于数据传送速度要稍慢于闪存的平均字编程速度,因此试图交织进行独立阵列的编程操作是不切实际的,不过对所有4个块并行执行批量擦除操作则是可行的。
后台访问给首次闪存编程提供了极其便利的途径,但一些用户仍希望采用其它系统总线如CAN总线、J1850总线或串行接口总线来完成所有的现场再编程操作。在主应用程序中包含合适的启动装载(bootloader)程序能方便地做到这一点。为了对来自于成品汽车中某根总线的某些特殊代码作出响应,启动装载程序应能擦除闪存并接受新的编程数据。