《匠人手记》推荐网上购书渠道:
互动出版网(china-pub)购书入口   >>>
当当网(dangdang)购书入口   >>>
卓越亚马逊网 购书入口   >>>
淘宝网(taobao)购书入口   >>>
更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

 匠人观点: 好记性不如烂笔头  
 黑色幽默:三鹿门——后世畅想

分时多任务机制在汽油机电控单元中的应用
程序匠人 发表于 2007-3-31 0:16:00  阅读全文 | 回复(0) | 引用通告 | 编辑

分时多任务机制在汽油机电控单元中的应用

陈杰 郭少平 朱辉

摘 要:汽油机电控系统的程序设计直接关系到控制的精度,控制程序的设计与硬件设计同样重要。探讨了分时多任务机制在汽油机电控系统中的应用,改进了原有的程序设计,提出了一种新型的程序设计结构。
关键词:汽油机 分时多任务 子任务 电控单元 程序设计
分类号:TK401

Application of Time-Sharing Multitask Mechanism
in Electronic Control Unit for Gasoline Engine

  为了满足日益严格的排放法规,进一步提高发动机的动力性与燃油经济性,采用精确、灵活和高效的电控技术是发动机技术的发展方向。随着电控单元的硬件功能逐渐完善,对用于驱动电控单元的控制软件的要求也越来越高。如何在现有的单片机处理速度下实现对更高转速和更多参量的控制,成为汽油机电控的一个研究课题。本文就分时多任务机制在汽油机电控单元中的应用作一些探讨,提出一种控制程序的设计思路。

1 分时多任务机制介绍

  电控单元中的单片机需要完成的许多任务中,有的需要同时处理。在理想情况下应该对这些需要同时处理的任务采取并行处理的方法,但对于只有一个CPU(一般情况下)的电控单元来说,这是不可能实现的。因为它在任何时刻只能完成一个任务,所以绝对的并行处理对于一个电控单元来说是不可能的,即使是通过设置精确复杂的中断逻辑,也只能实现通常意义上的准并行处理。
  在控制系统中,为满足有些任务的实时性要求,一般采用前后台的程序结构,即把计算比较复杂、运行周期较长以及实时性要求较低的程序作为后台程序,而把实时性要求高、处理时间短的程序作为前台程序。后台程序采用顺序执行的方法,前台程序由CPU采用中断的形式完成。CPU在大部分时间内运行后台程序,当中断发生后,CPU暂时挂起后台程序而去响应前台程序;前台程序结束后,再转入后台程序处理。当前台程序设计得较为短小时,就可以实现前后台程序的准并行处理了。在该程序结构中,如果控制任务比较复杂,则前台程序往往有多个中断,发生中断嵌套的概率很大,这可能会使中断响应推迟而影响控制精度;因此需要前台程序正确地设置中断优先级和禁止/允许中断,以保证控制的准确性。
  后台程序在ECU的控制软件中一般被称为主循环(见图1),其中有若干个子程序,分别用于控制发动机的某一个或几个参数。通常在电控单元中,这若干个子程序是按照固定顺序依次执行的,次序不可改变。这些子程序按固定的次序构成一个整体而作为一个任务被执行的是单任务机制。在单任务机制中,这些子程序被执行的频率是相同的,而在实际应用中,各个子程序要求的执行频率往往有很大的差别,如采样大气压力和采样蓄电池电压就有很大的不同。这种不同频率的执行要求在单任务机制系统中是难以被满足的。另外,在单任务的程序结构下,程序一旦建立,各模块的执行顺序即已固定,对于需要在运行时动态改变执行结构的系统,如发动机管理系统,程序需要用很多的条件判断和分支转移语句进行控制,增加了程序的复杂性。虽然电控单元对一些实时性要求高的任务采用了中断的方法进行处理,但由于单片机的中断资源有限,所以除了为数不多的几个中断程序外,其他处于主循环中的各个子程序只能按照单任务的机制执行,缺乏灵活性,在越来越复杂的发动机控制中会逐渐变得难以胜任。

t22-1.gif (6284 bytes)

图1 通常情况下汽油机电控单元主循环的流程

  如果将主程序中的有不同执行频率要求的子程序理解为子任务,并引用分时多任务机制进行管理调度,这就会形成一种新的程序结构(见图2)。此时主程序中只执行那些没有严格的执行频率要求的程序,而其他有执行频率要求的子程序放在分时多任务结构中实现。分时多任务机制是现代操作系统才具有的突出优点,在这种机制下,CPU的运行时间被划分为许多小的时间片,由某种调度算法按照不同的优先级分配给不同的应用程序。多个应用程序分别在自己的时间片内访问CPU,从而造成微观上轮流运行,宏观上并发运行的多任务效果。在发动机管理系统中引入分时多任务机制,可以有效地改善程序结构,满足发动机控制这一复杂系统的要求。

t22-2.gif (13602 bytes)

图2 分时多任务机制应用于汽油机
电控单元后的主循环与分时结构

2 多任务机制在汽油机控制中的实现

  利用单片机内部的时钟中断,可以方便地实现多任务机制。下面以Intel 196系列单片机80C196KC为例,说明其实现的方法。
  对分时多任务机制必须提供一个系统时钟,80C196KC内部的时钟资源中有两个可内部计数的定时器T1和T2,从中选择T1作为分时信号源。在16 MHz的晶振频率下,经过80C196KC内部的2分频电路,其一个状态周期对应的时间是125 ns,每8个状态周期T1计数器增1,则最长 每 经过65535×125×8=65535000 ns=65.535 ms的时间内,T1将发生一次溢出中断。通过向T1写入初值的方法,可以使溢出中断每隔0~65.535 ms发生,这个时间片的长度是由各个子任务的执行频率综合决定得到的。这样CPU根据系统时钟将运行时间划分为若干个时间片,由系统调度程序分给各个任务模块。定时参数的选择要考虑到系统中的各种定时要求,定时频率一般应设计为各模块要求的执行频率的整数倍频。
  为实现分时多任务,还需构造一个任务查询表并维护一个系统任务指针。任务查询表的表项数等于需要调度的任务模块数,每一表项占4 B,保存各子任务模块的入口地址和访问计数值。访问计数值是一个整数,它的大小与子任务要求的被执行频率有关,要求的被执行频率越高,则此访问数值越小,最小为1。任务查询表指示了各任务的执行顺序和优先级别。在建立程序的时候,可在程序存储器中建立一份缺省的任务查询表并在程序初始化的时候调入系统的RAM中,在程序运行期间可根据实际需要修改RAM中的任务查询表,使各任务的执行程序和优先级别得到动态调整。系统的任务指针为一个1 B的整数,指向当前系统正在执行的任务。由系统任务指针和任务查询表就可以找到相应的任务入口地址。
  多任务机制的具体实现由调度程序完成(见图3)。调度程序在每个时钟的开始取得控制,它将系统任务指针加4,指向下一个任务模块,并根据新的任务指针查阅任务查询表,将任务的访问计数值减1,判断是否为0。不为0则直接返回主循环,为0则跳转到该任务的入口地址处执行。各任务模块执行完毕后将相应的访问计数值置为初值,供调度程序下一次使用。任务指针到达调度表末尾时,由任务调度程序将其复位,使之指向任务查询表开头,重新开始程序周期。

t23-1.gif (10030 bytes)

图3 分时多任务机制下系统调度程序的执行流程

  在汽油机电控单元中实现分时多任务,并不是完全取消主循环,只是对主循环作了一些改动,使得主循环只用来处理那些耗时相对较长而对执行频率又没有特殊要求的任务。由于在分时多任务结构中各个子程序只是按照它们的执行频率要求被执行,一些没有必要被执行的子程序被跳过,而它们所对应的时间片将被主循环所利用,这样会使有不同执行频率要求的任务得到相应的执行频率,提高了时间的利用率,从而加快了主循环中对各种控制参数的计算刷新速度,大大减少了因计算刷新不及时而仍沿用上一次的控制参数的可能性,使得系统对外界的响应速度得到提高。
  实现分时多任务的关键在于合理地将系统的功能分解为各个任务模块,分解系统功能应该注意以下几个问题:
  a) 各个子任务模块应尽量短小精悍,在系统时间片内能得到充分执行。在设计任务模块时应尽量将其中的延时要求转化为对模块执行频率的要求;
  b) 在设计中若不可避免出现某一任务模块过长而不能在系统时间片内执行完毕的情况,可将其放入主循环中;
  c) 各任务模块在功能上应尽量相互独立,以保证程序调试和维护的方便;
  d) 若某些模块必须相互配合工作,可采用公共存储单元进行通讯,完成数据传递,以保持同步。
  理论上,若系统中要求执行频率最高的程序要求每X ms被执行一遍,而系统中有Y个子任务,则系统可将CPU的时间片定为X/Y,这样在通过设定不同的访问计数值就能保证所有的执行频率要求了。在执行时间片程序时,可能发生实时性要求强的中断请求,所以必须作一些处理,否则可能会导致子程序的被执行频率受到影响,从而影响程序的控制精度。针对这种情况,可以增加时间的冗余度,即另外再多配置一些时间片,专用于补偿。例如,主循环中共有40个子任务,其中要求执行频率最高的子任务要求每20 ms被执行一次,按照上面提到过的计算方法,时间片应该为20 ms/40=0.5 ms=500 μs,考虑到补偿需要,可将时间片定为400 μs,这样多了10个时间片,可用于补偿执行频率受到的影响。
  在单片机系统中实现分时多任务机制,要借助于时钟中断,由定时器产生系统时间片,由系统调度程序将时间片分配给各任务模块。各任务模块在时钟中断中执行,很好地满足了各任务对执行频率的不同要求。考虑到单片机调度能力有限,为各个任务模块分配的时间片比实际所需可能富余,而各任务模块作为时钟中断程序执行完毕后都返回主程序,因此,可将某些对执行频率无要求可执行时间比较长的任务模块放入主程序中运行,从而充分利用了各时间片内的富余时间,提高了程序的运行效率。

3 应用实例

  以一个用80C196KC作核心处理器的汽油机电控单元为例,讲述分时多任务机制在汽油机管理系统中的实际应用。
  在该汽油机的控制程序中,主程序要完成蓄电池电压采集、冷却水温度采集、氧传感器信号采集和大气压力采集等许多任务,取其中几个比较典型的、执行频率有明显不同的子任务作为例子,主程序共要完成40个有不同执行频率要求的子任务,40这个数是经过在多任务结构与主循环之间仔细权衡,并充分考虑了各个子任务的执行时间后确定的。
  子任务P1:蓄电池电压要求每60 ms采集一次;
  子任务P2:冷却水温度要求每60 s采样一次;
  子任务P3:空调请求开关的状态要求每1 s查询一次;
  子任务P4:大气压力(用于海拔高度修正)要求每10 min采样一次;
  并且这40个子程序中执行频率最高的要求每20 ms执行一次,将该子程序标记为P5;考虑补偿后,将时间片长度定为400 μs。
  设计的任务查询表见表1。

表1 任务查询表

子任务代号 P1 P2 P3 P4 P5 P6 P40
入口地址 Add1 Add2 Add3 Add4 Add5
访问计数值 2 300 50 3 000 1
  初始化程序中,将系统任务指针指向P1,程序运行的时候,当一个时间片来到,系统调度程序判断子任务P1的访问计数值,将该值减1并发现结果不为0。则将系统任务指针指向P2后直接返回主循环中。当下一个时间片到来,发现P2子任务也不用执行,则将系统任务指针指向P3后也返回主循环中,如此往下,直到时间片到来的时候,系统任务指针指向的是P5,系统调度程序将P5的访问计数值减1后,发现其值为0,表示要执行此子任务,就从任务查询表中取得P5的入口地址并执行,执行完后恢复P5的访问计数值,再将系统任务指针指向P6并返回主循环。此时P1、P2、P3、P4和P5的访问计数值分别为1、299、49、2 999和1。如果在执行子任务P5时发生了实时性要求强的中断请求,则系统调度程序会放弃对P5子任务的执行,而去响应中断请求,并保持系统任务指针的指向,使得下一个时间片到来的时候仍去执行P5了任务。由于在划分系统时间片的时候已经考虑到了这种情况,并且多划出了若干个(在这个控制程序中是10个)时间片,所以P5子任务的执行频率的要求仍会得到满足。

4 结论

  由于将控制程序中的子任务按照执行频率的要求作了不同的处理,不但满足了各个任务的执行频率要求,还可以动态调整各个子任务的执行频率,从而加快了主循环中对控制参数的计算刷新速度,提高了电控单元对发动机控制的响应速度。这种程序结构模块清晰,调度灵活,尤其适用于定时要求复杂,需要动态改变程序结构的程序设计。在汽油机电控单元的控制功能日趋复杂的情况下,具有较高的实用价值。

编辑:赵成伟■

基金项目:本文系国家自然科学基金资助项目(批准号:59806007)
作者简介:陈杰,男,1975年生,硕士研究生,100084,清华大学汽车工程系。
作者单位:陈杰(清华大学汽车安全与节能重点实验室)
     郭少平(清华大学汽车安全与节能重点实验室)
     朱辉(清华大学汽车安全与节能重点实验室)

参考文献:

[1]马克达姆克.微型计算机操作系统,武强译.北京:电子工业出版社,1986
[2]诺莱斯D.汽车计算机控制系统,钱志鸿译.北京:机械工业出版社,1998

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    往日酷贴

     
     
     

    大千八卦

    友情连接

    新浪新闻:
    新浪财经:
    AK58新闻:
    新浪股票:
    新浪股票:
    证券之星:

     [更多酷站连接]

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [柔月阁]

    [八楼的呼吸]

    [hotpower 的水潭]

    [xwj的文君阁]

    [所长的BLOG]

    [阿摆手记]

    [电子伙伴]

    [unaided的笔记]

    [小飞的笔记]

    [单片机开发联盟]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [数字电视之家]

    [SMARTCODE电子书斋]

    [软件开发之窗]

    [Armoric]

    [我爱研发网]

    [infernal的笔记]

    [雄鹰的空中加油站]

    [SunK]

    [逍遥电子]

    [ningpanda的博客]

    [C-Design]

    [一网见天下]

    [海边淘沙]

    [嵌入式365]

    [水牛的仓库]

    [股剩是怎样炼成的]

    [PIC论坛]

    [ICC AVR开发网]

    [中国高校自动化网]

     

     

     

    MCU博客-中国电子工程师博客网 

    大学生电子网 

     

     

     

     

     

    !!! 《匠人的百宝箱》 !!!