0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于MC9S12DP256芯片和μC/OS-II实现CCP软件的设计

电子设计 来源:‘微计算机信息 作者:作者:陈剑 2021-04-12 09:57 次阅读

CCP 协议是一种CAN 总线标定匹配协议。本文简单介绍该协议的基本原理,以及一种基于该协议的汽车ECU 标定系统的实现方法。最后,结合MC9S12DP256 芯片以及μC/OS-II操作系统,详细讨论了此标定系统的CCP 软件实现方法。

1 前言

标定是指根据整车的各种性能要求(如动力性、经济性、排放及辅助功能等),来调整、优化和确定整车上各ECU(包括发动机和各子系统 ECU)的运行及控制参数的控制算法。通过标定系统,能够很方便的读取 ECU 中的标定变量数据到标定平台,并可以对这些数据进行编辑修改,编辑后的数据又可以写入 ECU,从而达到修改 ECU 中标定参数的目的。功能完善且灵活方便的标定软件对整个汽车ECU 控制系统的开发起到事半功倍的效果。目前,一般的标定系统都是采用基于串行口的点对点的通信方式,这种通信方式具有很大的局限性,而且通信协议都不一样。在这个ECU 系统中,将采用 CAN 总线的通信方式和CCP(CAN Calibration Protocol)协议。

2 CCP 协议简介

1996 年6 月,欧洲ASAP 项目组发布了现行的2.0 版,它采用CAN 2.0B(11 位或29位ID)进行MCS(measurement and calibration system)与ECU 之间的通信。该协议具有通用性强,适用范围广的特点,无论对8 位低速带CAN 的控制器,还是32 位高速带CAN 的控制器,均可满足工作要求。基于CCP 协议的ECU 标定采用主-从通信方式,主设备通过CAN 总线与多个从设备相连,其中主设备是测量标定系统MCS(Measurement CalibrationSystem),从设备是需要标定的ECU。根据CCP 协议,主设备首先与其中一个从设备建立逻辑链接, 建立逻辑连接后,主、从机之间所有的数据传递均由主机控制,从机执行主机命令后返回包含命令响应值或错误代码等信息的报文。

3 标定系统的实现

3.1 上位机部分

友好的人机页面对于标定工作的顺利进行是起决定性作用的,此标定系统的设计克服了以往大多数标定系统只能通过键盘对标定数据进行修改的局限性,在标定系统中除了表格编辑方式外,还将引入图形编辑方式。将标定变量数据转换成图形,将使标定员对于标定变量数据比如说修正曲线和 MAP 图有一个更直观了解,并且可以通过鼠标拖动对图形进行编辑修改,从而达到编辑修改标定变量数据的目的,这样大大方便了对于修正曲线和 MAP图类型标定变量的编辑。

在这里我们是采用 Visual C++完成标定页面的设计以及与下位机的通信。该标定系统除了具有对 ECU 的标定功能外,还引入了实时监测功能,从而可以很快得到标定操作的返回信息。如图所示,监测界面主要完成各种监测量数据的实时接收和显示功能。测量得到的数据以数字和图形两种方式显示出来,数据可以存储。历史数据可以从文件中读出来,进行离线分析。标定界面则是完成标定变量数据的显示、编辑修改以及上传下载功能。根据变量的不同类型,变量数据分别以参量、二维、三维的形式表示。

基于MC9S12DP256芯片和μC/OS-II实现CCP软件的设计

图 1 标定系统实现图

3.2 底层ECU 部分

而底层 ECU 部分,标定系统在这里采用的是Freescale 公司的MC9S12DP256,这是一款16 位CPU 及0.25 微米、高速、高性能5.0V FLASH 存储器技术的中档芯片。它具有25MHz的主频、256K 字节的FLASH 存储器、16 通道的8 位A/D 转换器以及多达5 个的高速CAN 控制器。其较高的性能价格比使其非常适合用于一些中高档汽车电子系列相关产品。同时其较简单的背景开发模式(BDM)使得开发成本进一步降低,也使得现场开发与系统升级变得更加方便。

需要标定的变量称为标定参数,标定定义也就是修改驻扎在ECU 内存中的变量的内容。根据标定参数所在不同地址空间( RAM、FLASH 或EEPROM) , 这里也就有了不同的标定方法。RAM EEPROM 标定的速度较块,但RAM 和EEPROM 空间有限,所需的标定参数的数目也就受到了限制,而FLASH 空间较大,但标定的速度相对较慢。这里考虑选择芯片的实际情况,选择了FLASH 标定的方法。当标定参数需要存放在FLASH 中时, 在ECU 上电初始化后, 程序首先将标定参数的初始值复制到RAM 中, 在标定软件中该段用来存放标定参数的RAM 称为Calibration RAM。标定过程中, 标定软件修改Calibration RAM 中的参数值。标定全部结束后, 再将该段RAM 中的内容复制回FLASH 中。

4 软件设计

标定系统的软件设计主要分为二个部分:CAN Driver 和CCP Driver,而这二个部分都是基于μC/OS-II 这种实时操作系统上运行。由于ECU 这里采用飞思卡尔的MC9S12DP256,因此可以直接应用芯片CAN 模块提供的接口,发送CAN 数据。CCP Driver 是标定系统的核心部分,它主要是通过调用CAN Driver 实现与上位机标定软件的通信,从而进行对ECU的在线标定。

4.1 CAN Driver

在这里我们采用的是μC/OS-II 这种实时操作系统,但在标定过程中,我们处理的数据量很大,通信速度也很快,CAN 接收到一条消息就产生一次中断,中断服务子程序,每次中断都要引起一次任务调度。CPU 大量的时间花在任务切换上,若CPU 还需处理其他事件,则可能出现接收缓冲寄存器接收溢出的错误,造成数据丢失。因此,在这里采用一种基于环形缓冲区的方式来实现CAN Driver。整个CAN Driver 由中断处理程序和底层驱动模块组成。中断处理程序在每次CAN 控制器完成收发时,唤醒驱动程序,进行下一步工作,设备相关程序通过对CAN 控制器寄存器的读写,完成对CAN 端口的配置和状态检测等工作,同时为设备无关软件和用户程序提供接口。而底层驱动模块则主要任务是结合收发消息缓冲区,为应用程序提供了接收和发送消息的接口函数。

(1)中断处理程序

中断级程序的程序流程图如图 2 所示。首先根据不同的中断类别进入不同的中断级程序。若为接收完成中断,则清除中断源,将接收到的消息放入接收缓冲区;将该消息存入接收缓冲区存入指针所指向的地址,将该指针向下移动,接收缓冲区计数器加1,并发出信号量通知应用程序有新的消息已经接收到,若有任务正在等待CAN 上的新消息,则该任务进入就绪状态等待OS 的调度。

图2 中断级程序的程序流程图

若为发送完成中断,则将发送缓冲区的待发送消息读出;将有待发送消息且优先级最高的一个中读取最旧的消息,发送缓冲区计数器减1,发出信号量通知应用程序有一个消息被发出,并汇报当前发送缓冲区的状态;还应判断是否为最后一个待发送的消息,若不是,则清除中断源并将消息发送到总线上,若是最后一个,则禁止发送完成中断后发送该消息,将这个发送完成中断保留到应用程序下一次发送消息的时候允许并产生。

(2)底层驱动模块

底层驱动模块主要是为应用程序提供了接收和发送消息的接口函数。当接收消息时,如图3 实线所示,应用程序在信号量处等待;收到一个消息后,ISR从串行端口读入消息,将其存入环状缓冲区。然后ISR 发出信号量,通知在等待串口数据的任务已收到一个消息。等待任务收到信号量后,进入就绪状态,准备被OS 调度器激活。当内核调度该任务运行时,该任务从环状缓冲区中取出消息,完成接收消息的过程。

图3 缓冲区接收发送消息

发送消息的方法如图3 虚线所示。当发送环状缓冲区已满时,信号量作为指示,暂停发送任务。为发送消息,任务等待信号量。如果环状缓冲区未满,则任务继续向环状缓冲区存储欲发送的消息。如果存储的消息是缓冲区的第一个字节,则发送中断允许,中断程序准备启动。CAN 发送ISR 从环行缓冲区中取出最旧的消息,同时发送信号量,通知发送任务,表明环状缓冲区有空间接收另外的消息。接着ISR 将消息从CAN 端口发送到总线上。

4.2 CCP Driver

基于实时操作系统的CCP Driver,标定系统在这里是通过Command 处理机和DAQ 处理机两部分来实现的。

Command 处理机由一个系统任务来完成。该任务在OS 初始化后就启动运行,识别CAN 网络上的CCP 主设备发送给该从设备的会话命令。根据命令做相应动作,并回送命令应答,完成会话。DAQ 处理机由1~n 个系统任务来完成。本项目支持对不同时间要求的监视参数设定不同的DAQ 周期,不同时间要求的监视参数填入不同的DAQ_List,每个DAQ_List 由一个任务完成周期发送。

Command 处理机在收到主设备要求启动某DAQ_List 命令时, 调用OS 函数OSTaskCreate()启动相应的任务,该任务每完成一次发送就调用OS 函数OSTimeDlyHMSM( )挂起一定的时间,这个时间就是主设备对这个DAQ_List 要求的发送周期。在收到主设备要求停止某DAQ_List 命令时,调用OS 函数OSTaskDel( )函数删除该任务。

(1)Command 处理机

Command 处理机主要是获取并解读主设备的CCP 命令,并执行该命令;命令执行完成后,向主设备发送应答;若执行时出错,应答中向主设备报错;若主设备命令要求对DAQ进行操作,则将该操作传达给DAQ 处理机,由DAQ 处理机完成DAQ 操作。

Command 处理机由一个RTOS 任务来完成,其示意性代码如下,GetMsg 函数为CAN 驱动程序的接收消息函数,调用此函数则等待获取CAN 端口接收到的消息帧。一旦接收到新的消息帧则函数返回,用户可通过&msg_command 获取该消息帧的内容。

void task (void * data) {

for( ; ; ) {

GetMsg(&msg_command); //等待并获取一个CCP 命令

CCP_Command (&msg_command); //将命令送给CCP 命令处理函数

}

}

(2)DAQ 处理机

DAQ 处理机的任务是根据主设备的需要,定时向CAN 总线上发送DAQ 数据。它由启动从设备的DAQ 发送、停止从设备的DAQ 发送、执行DAQ 循环发送的任务3 个部分构成。

启动或停止从设备的 DAQ 发送,由Command 处理机调用函数Start_DAQ (DAQ List

number ,)和Stop_DAQ (DAQ List number)来完成,该函数启动或停止相应的DAQ 发送任务,

其示意性代码如下:

Start_DAQ(INT8U DAQ_List_num) { //启动第n 个DAQ_List

DAQ_List[n].Started = 1;

DAQ_List[n].Prepared = 1;

OSTaskCreate (第n 个DAQ_List 的任务); //调用系统函数,创建DAQ 发送任务,

并使任务进入调度

}}

Stop_DAQ(INT8U DAQ_List_num) { //停止第n 个DAQ_List

DAQ_List[n].Started = 0;

DAQ_List[n].Prepared = 0;

OSTaskDel (第n 个DAQ_List 的任务); //调用系统函数,删除DAQ 发送任务

}

执行DAQ 循环发送的任务,需要按照ODT 设置把DAQ 数据发送到CAN 总线上,同时需要按照DAQ 周期要求循环执行,该任务示意性代码如下:

void DAQ_task ( ) {

for( ; ; ) {

CCP.Upload(0); //根据ODT 设置把DAQ 数据发送到CAN 总线上

OSTimeDlyHMSM(Period); //调用RTOS 函数,等待一个周期的时间

}

}

5 结束语

经过多次反复不断的实际调试,此 CCP 软件程序在系统上运行稳定可靠,实现了基于MC9S12DP256 上的FLASH 区的标定。

这种采用环形缓冲区以及结合实时操作系统的 CCP 软件程序设计,有效的避免在ECU标定过程中数据的丢失,并可以对多个ECU 同时进行在线标定,具有很强的实用价值。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    446

    文章

    47758

    浏览量

    409050
  • 控制器
    +关注

    关注

    112

    文章

    15209

    浏览量

    171122
  • 操作系统
    +关注

    关注

    37

    文章

    6280

    浏览量

    121868
收藏 人收藏

    评论

    相关推荐

    嵌入式实时操作系统μC/OS-IIS12单片机上的移植

    实现了μC/OS-II操作系统在MC9S12DG128上的移植。通过μC/OS-II
    发表于 03-08 13:44

    uC/OS-II简介

    u C / O S 是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。μC/OS-II 的前身是μC/
    发表于 10-20 09:35

    uC/OS-II简介

    u C / O S 是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。μC/OS-II 的前身是μC/
    发表于 10-27 09:29

    怎么将μC/OS-II移植到MOTOROLA MC68K系列CPU上

    、数据区、系统区、用户区等存储空间,有7级中断。要实现μC/OS-IIMC68K的移值,需要有MC68K的
    发表于 06-24 08:09

    基于MC9S12DP256微控制器的发动机高能直接点火控制系统开发

    [2]。本文针对六缸车用发动机高能直接点火控制系统的开发,进行了以MC9S12DP256微控制器为核心的电子控制单元的软硬件系统设计。
    发表于 07-17 07:40

    μC/OS-II的中断按键怎么处理?

    μC/OS-II是一个完整的、可移植、可裁减的占先式实时多任务内核。本文主要讨论了μC/OS-II环境下中断按键消抖处理及LCD多级菜单显示的实现
    发表于 03-23 08:13

    μC/OS-II是什么?μC/OS-II有哪些应用?

    μC/OS-II的原理是什么?如何去改进μC/OS-II的调度算法?μC/OS-II有哪些应用?
    发表于 04-26 07:17

    如何实现μC/OS-II系统的移植?

    如何实现μC/OS-II系统的移植?
    发表于 04-28 06:01

    MC9S12DP256具有哪些功能特点应用?

    MC9S12DP256的功能特点是什么?MC9S12DP256在汽车电子中的应用是什么?
    发表于 05-17 06:48

    汽车ECU标定系统CCP 软件实现

    摘要:CCP 协议是一种CAN 总线标定匹配协议。本文简单介绍该协议的基本原理,以及一种基于该协议的汽车ECU 标定系统的实现方法。最后,结合MC9S12DP256 芯片以及μC/
    发表于 05-16 20:10 45次下载
    汽车ECU标定系统<b class='flag-5'>CCP</b> <b class='flag-5'>软件</b>的<b class='flag-5'>实现</b>

    μC/OS-II在PC机上移植的设计与实现

    本文介绍了μC/OS-II移植到PC机上的过程,使μC/OS-II应用系统程序在PC机上脱离DOS或Windows环境运行。着重介绍了Bootloader引导程序和EXE程序启动代码的设计与实现,以及μC/
    发表于 09-02 08:51 14次下载

    HCS12微控制器MC9S12DP256使用指南 ppt

    HCS12微控制器MC9S12DP256 第一步: 1) HCS12 技术概述2) Operating Modes工作模式3) Resource  Mapping资源映射4) External Bus Interf
    发表于 01-11 18:00 79次下载

    基于MC9S12DP256的AMT系统的设计

    AMT(机械式自动变速器)是在机械式变速器的基础上发展起来的一种自动变速器,文章对其工作原理及结构组成进行了简要介绍,并且完成了以MC9S12DP256微控制器为核心的电子控
    发表于 07-13 17:44 45次下载

    基于MC9S12DP256的轿车ABS/ASR集成控制系统

    ]摘 要:介绍了基于Motorola公司新一代HSC12系列16位MCU——MC9S12DP256微处理器开发的轿车ABS/ASR集成
    发表于 04-15 16:35 664次阅读
    基于<b class='flag-5'>MC9S12DP256</b>的轿车ABS/ASR集成控制系统

    摩托罗拉MC9S12DP256单片机结构、功能特点及在汽车领域的应用分析

    介绍了摩托罗拉16位单片机MC9S12DP256的结构、特点及其区别于其它单片机的优势。通过MC0S12DP256在汽车电子门控汽车电子系统的应用实例,简单介绍了MC9S12DP256单片机在汽车电子领域的应用方法。
    发表于 04-06 10:37 3293次阅读
    摩托罗拉<b class='flag-5'>MC9S12DP256</b>单片机结构、功能特点及在汽车领域的应用分析