基于CGI Studio 的汽车液晶仪表显示系统的设计与实现
2021-03-23郭健忠廖许苇刘小容
郭健忠,廖许苇,谢 斌,闵 锐,耿 屹,刘小容
(1.武汉科技大学汽车与交通工程学院,湖北 武汉430065;2.武汉保华显示科技有限公司,湖北 武汉430082)
近年来,中国汽车电子市场保持着较高增长速度,相应的汽车电子产品市场规模已经超过万亿。激烈的竞争对汽车的环保性、安全性、经济性以及智能化提出了很高的要求[1]。 特别伴随着电动汽车在市场的占比越来越重,所需要显示的参数复杂,远远超出传统燃油汽车仪表的显示范围[2-3]。 因此,汽车全液晶仪表已经成为了汽车电子中极其重要的一部分。 伴随着液晶仪表的发展,也带来了一系列的问题。 例如可移植性较差、开发生产成本高、二次开发性较低等一系列缺点,这些在一定程度上阻碍了其技术创新,阻碍了虚拟仪表的应用推广[4]。 汽车液晶仪表作为驾驶员直观掌握汽车行驶状态的平台,是汽车整个系统中十分重要的部分[5-6]。 近年来随着纯电汽车的发展使得仪表所需包含的信息量逐年增多和市场消费者对乘用车仪表显示效果的更高要求,传统的液晶仪表开发方式已无法满足当前的开发需求,所以有必要设计一种提高液晶仪表开发效率的方式。
1 传统汽车液晶仪表的开发方法
汽车液晶仪表的开发经历过几个阶段,从最初裸机开发(不搭载操作系统),到目前QT 嵌入式开发,开发流程和难度越发简化,但是随着当前HMI(人机交互界面)所含信息密度的逐渐提高和ADAS(高级驾驶辅助系统)的加入,造成产品开发难度的急剧上升和修改困难,故需要一种快速简单的工具简化流程,缩短开发成本和开发时间。
1.1 裸机开发方法
传统的裸机开发,内部不搭载操作系统,图片的显示过程是将图形库数据通过图形管理单元的显示接口在显示屏上显示[7]。 开发者先设计好需要显示的图像文件,并将该文件烧录进入开发板的FLASH 中。 当需要显示时通过图形管理模块调用对应图片进行显示。 该方法工作量巨大并且无法进行复杂动画的显示。 例如,如果开发者需要使表盘指针旋转,需要准备多达100 个指针图片,显示时依次调用,大量占用了芯片内存。
1.2 QT 嵌入式开发
QT 是基于C/C++语言的跨平台GUI(图形交互界面)应用程序框架,由于其跨平台的特性,开发者可以在传统x86 平台上通过可视化UI 设计工具QT Creator 完成应用程序的开发后移植至目标嵌入式平台,从而大幅提升应用程序开发效率。 其应用程序运行依赖嵌入式Linux 操作系统,因此对仪表硬件平台提出了较高要求。 开发人员将事先准备好的UI 图片资源文件导入至QT Creator 中,通过可视化UI 设计软件QT Designer 将所需资源文件移动至设计界面,对每个界面元素构建代码以控制其缩放旋转、显示方式及运动轨迹。 但是由于QT 自带动画引擎功能比较单一,如果界面中动效元素过多或过于复杂,开发人员则需要动用大量代码来设计每个元素的动效,对于矢量路径动画这类复杂运动效果的开发非常困难,且不支持多层图层的遮罩、模糊效果运算,因此QT无法满足现代全液晶汽车仪表中HMI 设计美观、动效丰富和界面层级多的设计需求。
2 CGI Studio 的HMI 显示系统设计与实现
2.1 显示系统的硬件设计
传统的汽车液晶仪表经由一个高性能的芯片同时对图形资源和数据信号进行处理,但是由于液晶显示所需要运行的图片资源极其庞大,单一的处理器无法很好地兼顾,造成了极大的内存占用和浪费。采用高性能芯片时,为了规避EMC(电磁干扰)和EMI(电磁兼容)相关问题[8],电路板内部布线极其复杂,开发板在印板时成本居高不下,再加上高性能芯片的高昂价格,造成生产成本无法达到预期效果。因此,本文采用底板和核心板分开处理的方式,不同模块分工合作,根据分割的功能选择低成本,性价比高的芯片。 同时,开发者将芯片分开布置的方式可以使其更加从容地考虑开发板内部走线的问题。 如图1 所示,底板接受外部CAN 信号和数据IO 采集到的汽车实时信息,经由底板MCU 进行处理后,由I2C 传输给核心板,核心板通过传输来的数据解析后加载图片资源控制汽车液晶仪表的正常显示。
图1 硬件结构框图
液晶显示屏幕的正常显示需要通过背光电路和显示驱动电路两个方面的结合才能如期运行。 液晶显示屏幕本身不具备发光的特性,使用时必须借助背光源才能达到显示效果[9]。 显示驱动电路通过控制液晶层像素来达到显示效果。 传统的单芯片仪表将背光电路和显示驱动电路集合电路板上,本文采取底板和核心板分离的方式,核心板只负责加载图片资源控制液晶屏显示,故相较于传统设计方式,本文需要对硬件进行重设计来控制仪表的正常显示。 如图2 所示,为设计的背光电路,背光电路位于底板上,选择MP2481 背光芯片,输入12V 电源使能该芯片,MCU 给予PWM 电平信号,经过背光芯片处理后,输出PWM 波形经过核心板控制屏幕亮灭。
图2 背光电路
本文选用i.MX6Q 芯片作为图形处理芯片,该芯片内部集成了显示驱动电路,无需进行额外的电路设计,如图3 所示。
图3 显示驱动电路
2.2 显示系统的软件设计
2.2.1 CGI Studio 技术简介
本文采用的是CGI Studio 进行设计开发,CGI Studio 是富士通公司基于OpenGL ES 进行一层封装后提供的可进行可视化设计的显示图形界面开发框架[10]。 OpenGL ES 是个定义了跨编程语言、跨平台的业界标准应用程序编程接口(API),引入了对可编程管线的支持,大大提高了不同消费电子设备的3D 图形渲染速度,在嵌入式系统上实现了全面可编程的3D 图形[11-12]。 可通过可视化界面配置汽车液晶仪表的显示界面,并通过自身携带的控件对显示元素进行相应的动画配置,以实现简单到复杂的动画显示效果。 对比传统的开发方式和使用QT 进行液晶仪表的开发,CGI Studio 有着前者所不能比拟的优点。 本文采用使用CGI Studio 分别在Windows平台和Linux 平台进行开发和移植。
2.2.2 平台搭建和开发
CGI Studio 作为可视化显示图形界面的开发框架,软件内包含了大量便捷的使用工具。 获取显示界面的原始图像后,将其导入系统内部的显示界面中,可将图片在显示界面上随意拖动以达到设计过程中最完美的显示效果。 CGI Studio 基于OpenGL ES 进行的封装会在显示界面上定义坐标原点,导入的图像会基于该坐标原点定义出所处的位置从而生成相应的代码。 CGI Studio 的控件与图片进行绑定,赋予图片各种各样的属性,可达到旋转、平滑移动等一系列动画效果。 图片与控件绑定生成的各个部件需要对其进行命名以方便在Linux 进行绑定。在搭建过程中,动画编辑器可对独立或者整体的显示动画进行编辑,动画在首尾由两个关键帧构成,中间由空白帧构成,整个动画由无数的关键帧联系在一起;动画编辑器可对其中任意一处的关键帧进行修改、修饰和删除。 相比传统的开发方法可构建出复杂和精美的显示效果,并可以极大地节约人力物力。 具体开发流程如图4 所示。
图4 Windows 平台开发流程框图
对比传统仪表开发方法,CGI Studio 开发HMI界面方便快捷,减少了开发者图片资源的使用量和研发效率,极大地简化了开发流程。 本文使用CGI Studio 开发效果图如图5 所示。
图5 显示效果图
Windows 平台的开发完成后生成了相应的BIN文件,将其上传至开发板i.MX6 搭载的Linux 系统中。 在搭载的Linux 系统中建立接收数据的应用程序,根据CGI Studio 中各个部件的命名来建立相同名字的变量,编译后生成对应的Taget 文件,将生成的Target 文件与CGI Studio 生成的BIN 文件通过交叉编译来进行绑定,达到点对点进行传输的功能。仪表根据各个变量的数据来决定仪表的显示状态。具体开发流程如图6 所示。
图6 开发板实现流程
3 系统二次开发和移植
传统的液晶仪表开发在修改HMI 界面过程中,需对原本的图片资源进行大量修改才能达到二次开发效果,例如对图片显示资源坐标的平移,动画效果逻辑修改等;同时,根据移植目标板内核的不同也会增加二次开发和移植的难度,开发者需要根据移植目标板的内核来对原程序进行相应的修改才能保证在新的架构上的正常运行。 在原产品上的维护和二次开发极为困难,传统开发方式和QT 开发方式都需要极大的工作量和大量的代码才能保证二次开发的顺利进行。
本文采用的CGI Studio 开发过程中,HMI 显示程序和显示驱动程序互相独立,分别位于Windows平台下和Linux 平台下完成。 传统的开发方式基于所设计的开发板,在系统级芯片内完成,开发者的一切操作都脱离不开该芯片,芯片能力的强弱直接限制了开发者的能力。 CGI Studio 开发在Windows 平台下,软件内部有官方提供的各种各样便利的插件,资源极其丰富。 研发者在二次开发和移植过程中,HMI 显示界面可直接在Windows 平台下进行修改,不受芯片环境的限制,同时,便利的可视化操作和简易的动画制作过程在研发者修改过程中提供了极大的便利。 如图7 所示,研发者在跨平台移植过程中除了对适应该系统架构的修改外,只需在程序内部搭载与外部显示信号进行数据通信的程序变量,再通过交叉编译的方式与CGI Studio 生成的BIN 文件进行变量绑定,即可直接移植进开发板。
图7 CGI Studio 移植开发流程
4 显示系统测试与优点分析
根据通信协议制定测试数据库,将车速信号、报警信号等录入BusMaster 数据库中,通过CAN 总线不停循环发送模拟实车运行环境。 仪表预留高低电平硬线接口,将12 V 高电平接入对应接口可点亮仪表对应信号显示。 测试实物图如图8 所示。
图8 测试实物图
经过24 h 的测试验证,本文基于CGI Studio 所设计的汽车仪表,在高频率和低频率CAN 报文循环发送下,能流畅显示车速、里程、转速、文字报警和图标报警等各种信息。 经过模拟仪表死机也可触发看门狗进行仪表重启。 测试结果表明,仪表运行状态良好,显示流畅,不卡顿。
通过设计开发板,在程序中搭载帧率计算模块将每秒显示图片打印在仪表特定部位,同时将三种开发方式的HMI 资源文件分别烧录进入对应仪表中以进行性能测试。 仪表通过12 V 稳压电源供电,以录制的CAN 报文在BusMaster 上进行不间断的报文回放,测试过程中不定时地向三台测试仪表发送大量报文数据以验证仪表响应速度等相关性能,同时观察大量数据涌入情况下仪表稳定性是否符合使用要求。 经过4 h 不间断测试,测试结果如表1 所示,裸机开发方式和QT 开发方式在仪表运行过程中可达到预期显示效果,但打印出的显示帧率较低,远远低于CGI Studio 开发方式下的60 frame/s 显示帧率,在跨度较大的动画显示效果中可明显看到卡顿;在数据大量涌入的情况下,裸机开发方式和QT开发方式下的图片资源加载较慢,无法在较短时间内将对应图标显示在仪表上方,CGI Studio 开发方式下显示流畅,响应速度快,不卡顿;在长时间测试过程中,大量数据交互情况下,传统开发方式下仪表死机重启频率较高,QT 开发方式和CGI Studio 开发方式下仪表死机频率较低。 因此,CGI Studio 在运行性能上优于传统开发方式和QT 开发方式。
表1 不同开发方式运行性能对比
传统开发方式在HMI 的界面绘制和驱动程序的制作必须由一人来完成,否则会因为程序的不同而产生干涉,在开发过程中也因为传统的开发流程过于繁琐复杂而需耗费大量的时间。 传统的开发方式需准备大量的图片资源来进行显示,对图片资源的需求和CPU 的资源占用极大;高性能的芯片和开发板内部的布线也使得开发板成本居高不下;因为芯片架构的不同和HMI 界面的修改使得移植和二次开发困难。
使用CGI Studio 可将HMI 界面绘制和驱动程序的制作分离开来,加快开发效率。 同时CGI Studio 的可视化界面绘制流程也让界面布局制作和动画制作极其方便。 底板和核心板分离的方式让芯片性能得到充足的利用。 HMI 显示界面的开发也不会因为目标芯片架构的不同,影响二次开发和移植。 如表2 所示,相较于传统开发方式和QT 开发方式,本方法在HMI 开发难度,开发流程,可移植性等方面相较于传统开发方式有了极大改善。
表2 CGI Studio 与传统开发方式对比
5 结语
本文以CGI Studio 为核心设计了一款纯电客车的汽车液晶仪表。 创新之处在于通过设计双板结构合理降低了开发成本;说明传统的开发方式越发不适应当前环境下繁荣的汽车市场,指出了使用CGI Studio 进行开发的优点,提高了人机交互性能;通过跨平台开发和交叉编译绑定数据的方式增加了系统的可移植性;最后通过对成品仪表进行测试验证,符合当前液晶仪表应用需求;该方案为当下HMI 开发市场提出了一种便捷的方案。