基于μCOSⅡ的CAN总线车身控制系统

发布者:Yuexiang888最新更新时间:2013-05-09 来源: 21IC关键字:μCOSⅡ  CAN总线  车身控制系统 手机看文章 扫描二维码
随时随地手机看文章
0 引言
  由于车身系统线路复杂,且很多动作都存在相互的关联性,必须对所有关联性作出非常周密的考虑,才能真正实现汽车车身的全部安全控制功能。随着汽车工业的发展和汽车功能的增强,这种情况将更突出,一方面给电路设计人员带来困难,同时又增加成本和给生产、检修带来麻烦,反过来又限制汽车工业的发展。正是在这种情况下,德国Bosch公司为解决现代汽车中众多的控制与检测仪器之间的数据交换而开发了一种通讯协议即现场总线CAN。在国外,尤其在欧洲,CAN网络已被广泛地应用在汽车上如BENZ,BMW,PORSCHE等车,而在国内CAN在汽车上的研究才刚起步。
  μCOSⅡ操作系统平台一方面具有足够的安全性与稳定性,已得到美国联邦航空管理局对用于商用飞机的,符合RTCA DO—178部标准的认证;另一方面它的多任务运行使CPU的利用率达到最高,并使应用程序模块化,不仅使程序开发人员可以将很复杂的应用程序层次化,更易设计和维护,同时很容易实现汽车功能的扩展和移植到其它型号的汽车上。
1、汽车车身系统的介绍
  某品牌商务车车身系统的控制对象有:4个门锁、两个车窗玻璃升降器、行李箱锁、除霜加热器、电动后视镜,前后大灯、小灯、转向灯、危险灯、雾灯、牌照灯、车内阅读灯、车厢顶灯等。在具备遥控功能的情况下,还包括对遥控信号的接收处理和防盗系统的控制。
1.1 节点分配
  车身系统控制单元按位置可分为左门节点,右门节点,车身前节点,车身后节点,仪表节点,主节点。CAN总线拓扑结构如图1所示:

1.2 节点功能
  左/右门节点检测与控制对象有:集控锁的位置检测与控制,电动后视镜上/下、左/右电机的正反向驱动控制,电动车窗玻璃上/下电机的正反向驱动控制,侧方向灯闪烁驱动控制,各自门锁控制开关及玻璃升降开关位置检测,除以上左右门均有的检测与控制对象外,左门上还有右门车窗玻璃点动/自动控制开关、左右电动后视镜上/下、左/右控制开关位置检测。各个控制对象的故障检测和处理。
  前节点对前大灯、前小灯、前雾灯、前转向灯、冷却风扇电机、前雨刮器电机等对象的控制、驱动、故障检测及对少量开关量的检测和处理。
  后节点对后小灯,后雾灯,后转向灯,制动灯,倒车灯,牌照灯,车厢顶各灯以及除霜加热器等对象的控制、驱动、故障检测及少量开关量的检测和处理。
  主节点是整个车身控制系统的中枢,负责和其它各个节点进行数据通讯并作消息处理。各子节点将检测到的各种量(开关量和模拟量)处理后打包成含有各种所需信息的报文(即消息 )发送给主节点 ,主节点根据报文所含的信息作相应处理(包括逻辑关系处理)后再打包成消息发送给子节点执行。CAN总线通讯采用广播模式,即子节点的报文只有主节点接收(点对点模式),主节点的报文所有子节点均接收。主节点除了作为系统的中枢功能外,还和其他节点一样负责对汽车驾驶台前所有开关的状态进行检测,并对驾驶台的所有背光灯(如开关、仪表等)进行PWM调光驱动。
  仪表节点:该节点不参与汽车车身控制但它是人与车交流的界面。仪表指示各传感器产生的脉冲量(发动机转速传感器、车轮转速传感器)和模拟量(油量传感器、水温传感器)所对应的物理量。还有液晶显示日期、大里程和小里程、转速、油量、倒车雷达的测距等,以及语音提示功能。
2、节点电路设计
  在进行硬件电路的设计时,充分考虑了汽车安全、节能、可靠性的要求。根据当前市场、开发工具和课题的实际需要,系统全部节点均以PHILIP P89C668HFA单片机为核心,它含有8K的RAM,足以保证运行μCOSⅡ操作系统。[page]
2.1 硬件通讯可靠性的设计
  选用SJA1000作为CAN控制器,其内部具有64位缓冲器,对总线具有一定的缓存能力。使用CAN控制器接口芯片82C250,它最初为汽车的高速通信应用而设计的,该芯片提供CAN总线的差动发送和接收能力,并具有抗汽车环境下的瞬间干扰,保护总线的能力,可以通过调整CAN总线上通信脉冲的斜率来降低射频干扰。
2.2 硬件节能的设计
  在汽车中电路设计首先要考虑各器件的耗电量。驱动芯片选用MOTOROLA系列的汽车专用芯片,它除能够满足汽车上各个设备的需要并具有对短路,断路,过流,过热等故障进行检测、诊断和保护的功能外,而且其芯片静态电流很小,如MC33288静态电流小于10μA。另一方面要充分考虑控制电路板的电源消耗,除了主节点运行外,其余各节点在汽车停放时,通过主节点控制各节点的DC-DC的使能端切断控制电源,在汽车启动时,再通过主节点控制各节点的DC-DC的使能端使其正常运行。
2.3 CAN电源的设计
  汽车车身比较大,CAN电源和通讯的线路都比较长,为防止车身震动和电源电压波动,影响CAN通讯,车身前节点和车身后节点上各通过DC-DC芯片把12V直流电源整流成5V,并联作为CAN电源使用。其节点的硬件设计很相似,图2是前节点的硬件结构图。
2.4 开关量检测电路设计
  汽车所有开关量,通过I2C总线用8574芯片扩展的I/O口进行检测,同时把一个节点上的所有8574芯片的INT引脚和P89C668的INT1(中断1)线相连, CAN总线的中断是利用CPU的INT0(即外部中断0)。


3、系统软件设计
  整个系统的软件可分为编译软件、上位机的软件和系统节点软件三个部分。
3.1 编译软件
  主要是把用汉字书写的汽车上各个器件的逻辑关系(规则式),(例如: [<变光开关:近光]&[<灯光开关:大灯]==[>前照灯:远光] &[Delay:5s]&[>前照灯:灭]),根据具体的CAN协议和μCOSⅡ嵌入式操作系统所定义消息的要求编译成单片机能认识的代码,从而保证了程序的兼容性和有利于汽车功能的扩展,同时也可以移植到其它型号的汽车上。
3.2 上位机的软件
  主要是通过USBCAN适配卡对CAN总线传递的报文进行监听,这样对整个CAN上的设备和装置可以起到较好的监控作用,以便能方便地进行系统调试。
3.3 系统节点软件软件
  主程序基于μCOSⅡ嵌入式操作系统实现多任务实时控制。各节点采集,检测各自的数字量,模拟量,脉冲量,以CAN协议的格式形成报文(即消息)发送到总线上,同时根据需要对多个设备对象进行就地实时控制和监视。通信软件是系统节点软件的关键部分,采用CAN2.0B通讯协议。通信软件有3部分组成:主程序,初始化程序,发送程序和接收程序(即中断0处理程序)。以下是基于μCOSⅡ嵌入式操作系统的简单框架和部分程序。

3.3.1 主函数
  OSInit()和OSStart()是μCOSⅡ操作系统提供的源代码,OSMboxCreate() 和OSTaskCreate()是μCOSⅡ操作系统分别用来产生邮箱和任务的函数[4]。
void main(void)
{
INTInit ();           // 开通CPU的中断;
  CanInit();            //SJA1000的初始化;
OSInit();            //μCOSⅡ操作系统的初始化;
Timer0Init ();          //定时器0的初始化;
MBoxPro=OSMboxCreate((void *)0); //创建存放从CAN上接收到的数据(消息)的邮箱;
MBoxSend=OSMboxCreate((void *)0);  //创建存放所要发送数据(消息)的邮箱;
OSTaskCreate(TaskCanSend, (void *)0, &TaskCanSendSTK[0],7);
//创建发送CAN数据的任务;
OSTaskCreate(TaskMsgPro,(void*)0,&TaskProSTK[0],20);//创建处理消息的任务;
OSStart();             //启动μCOSⅡ操作系统;[page]
}
3.3.2 初始化程序
  初始化程序通过将CAN控制器的寄存器写入控制字,确定CAN的工作方式。用P2.7作为选通信号与SJA1000的CS引脚相连,SJA1000的片内寄存器和P89C668单片机寄存器是重叠编址的,因此SJA1000寄存器寻址时要定义成片外RAM寻址。
CanInit(void)
  {  MODE = 0x09; //进入复位模式,对SJA1000进行初始化;
    CDR =0x88;  //选择PeliCan;
    CMR = 0x0C; //清除数据溢出和释放接收缓冲器;
    IER = 0x03;  //开放接收中断和发送中断;
    ACR0 = 0x66; //根据具体的协议定义;
    ACR1 = 0x66; //根据具体的协议定义;
    ACR2 = 0x66; //根据具体的协议定义;
    ACR3 =0x66; //根据具体的协议定义;
    AMR0 = 0x00; //根据具体的协议定义;
    AMR1 = 0x00; //根据具体的协议定义;
    AMR2 = 0x00; //根据具体的协议定义;
    AMR3 = 0x07; //低三位SJA1000是保留位,设置为无关;
    BTR0 = 0x02; //12MHz晶振下,设置波特率为100kbps;
    BTR1 =0x2F;      
    OCR=0XAA;   
    EWLR =0x60;   
RBSA = 0x00; //RX缓存器起始地址寄存器设置为0;
    TXERR= 0x00; 
  ECC =0x00;  
MODE= 0x08; //单向滤波方式,进入正常模式;
}
3.3.3 发送任务程序
  要发送的报文的数据为两个字节。
void TaskCansend(void *scddata) reentrant
{   INT8U err;
unsigned char xdata *ptbuf;//SJA1000的寄存器定义成片外RAM;
unsigned char i,status;
StrYz *MesNeedSend; //邮箱接收报文的格式,为结构体;
scddata=scddata;
for(;;){
//不断等待发送邮箱MboxCanSend是否有要发送的报文,若有报文则执行发送任务。
    MesNeedSend=(StrYz *)OSMboxPend(MBoxSend,0,&err);
ptbuf=0x7f10;
status=SR;
if ((status&0x10)==0x10)  return ;
if ((status&0x08)==0x0)  return ;
if ((status&0x04)==0x0)  return ;
  for(i=0;i<=4;i++)
    {
   *ptbuf=SjaTran[i];  //发送1个字节的报文帧信息和4字节的报文ID码;
     ptbuf++;
    }
*ptbuf=Val ;      //发送的消息即报文:第一个字节;
 ptbuf++;
   *ptbuf= ID;      //发送的消息即报文:第二个字节;
   CMR=0x01;
    return ; } }
3.3.4 接收中断服务子程序
  SJA1000报文的接收有两种方式:中断接收方式和查询接收方式。鉴于对汽车通讯的实时性要求很强,因此采用中断接收方式.当SJA1000接收缓存器满时,其内部接收中断标志位置位,并使得CPU的外部中断INT0为高电平,产生中断。因中断比μCOSⅡ操作系统的其它任务优先级高,则μCOSⅡ操作系统立即响应并进行保护现场和任务调度,进入下面的CAN中断接收程序,当执行完后,恢复现场,进行任务切换。鉴于每次发送一个帧数据(含有消息),为了防止一个开关动作而发送几个消息(非连续发送),根据SJA1000的机理,每接收一次释放一次,如果当前的消息没有及时地发送到要处理消息的邮箱MsgPro,从而造成当前的消息被后来的消息覆盖,因此在CPU开辟一段RAM空间作为缓存区即StrYz StrCanRE[10],来保存要处理的消息,这也是实现可靠通讯的需要。
StrYz StrCanRE[10];
INT8U IStrCanRE=0;
    void TaskCanRec(void) reentrant
{  unsigned char status;
unsigned char xdata * prbuf; //定义指向SJA1000寄存器的指针;
  status=SR;      //读状态并去SJA1000的中断标志位;
  status=status&0xC3;  
if(status!=0)      
  { if((status&0x80)==0x80)   { MODE=0x00;return;}
    if((status&0x2)==0x02)    {CMR=0x0C;return; }  
    if((status&0x01)==0x01 )
{ if((*prbuf & 0x40)==0x40)   CMR=0x04; //是否远程祯;
        else { ptbuf=0x7f15;  //接收后两个字节的数据(消息);
      StrCanRE[IStrCanRE].Val=*ptbuf; //接收第一个字节数据;
          ptbuf++;
          StrCanRE[IStrCanRE].ID=*ptbuf;  //接收第二个字节数据;
          CMR=0x04;
//把从CAN总线上接收到的消息发送到要处理消息的邮箱MsgPro;
          OSQPost(MBoxPro,(void * )&StrCanRE[IStrCanRE]);
        IStrCanRE++;
        if( IStrCanRE >= 10 ) IStrCanRE = 0;
      }} }
return;
}
4、结束语
  总之,就像汽车电子技术在20世纪70年代引入集成电路、80年代引入微处理器一样,90年代直到21世纪初总线技术在汽车电子技术中将是一个重要的里程碑。目前国内还没有自主产权的CAN总线技术在汽车工业中应用,但是许多高校和科研单位都在加紧这方面的研究和开发。本文在这一领域做了有益的探索和大胆的尝试,实践证明,CAN技术是成功的。它必将以其低成本,高可靠性及灵活的通讯方式推动我国汽车工业的发展。

关键字:μCOSⅡ  CAN总线  车身控制系统 引用地址:基于μCOSⅡ的CAN总线车身控制系统

上一篇:基于现场总线的炼油企业罐区远程监控系统
下一篇:圆网印花机分传动现场总线控制系统

推荐阅读最新更新时间:2024-05-02 22:39

基于CAN总线的智能照明控制系统
随着经济建设的日益发展和社会物质文化水平的不断提高,人们开始追求灯光艺术带来的美的享受,注重照明和其他相关设备、系统的整体控制效果。照明控制系统的安装便捷性、可靠性和经济性已经成为关注的热点。智能大厦内需大量的灯光照明设备,传统的控制方法是将被控制的设备用连线引入控制室,这样不仅造成电力电缆铺设过多,增加了投资成本,而且还大大增加了灯回路的辐射干扰,对空间电磁环境造成了污染。智能照明控制系统为智能办公大厦的照明提供了新途径。   随着微机控制技术的发展,出现了微机型灯光控制系统。它采用网络控制技术,使得照明灯的电力线路可以不再经过控制室,而直接引入顶棚或马道。这种控制方法不仅可以方便地控制灯光的亮度,还减少了电力线路及相应设施投资,
[工业控制]
基于<font color='red'>CAN总线</font>的智能照明<font color='red'>控制系统</font>
基于CAN总线的电动车控制系统设计
当前全球汽车工业面临金融危机和能源环境问题的巨大挑战,实现汽车能源动力系统的电气化,已经成为汽车产业的趋势。提高电动汽车上的各个控制单元间通信的可靠性和实现高传输速率,选择CAN总线协议。CAN总线为多主工作方式,网络上任何节点均可在任意时刻向其他节点发送信息。它采用非破坏性的基于优先权的总线仲裁技术,可靠性高。CAN总线通信距离长达10 km,通信速率最高可达1 Mb/s。CAN通信系统抗干扰性好,工作稳定。某个节点出现故障,不会导致整个系统通信的不正常。由于采用短帧的报文结构,数据传输时间短,具有很强的抗干扰性,具有高效的非破坏总线仲裁,出错检测和故障自动关闭等优点。 1 控制系统整体结构 电动车控制系统由电池管理、充电机
[单片机]
基于<font color='red'>CAN总线</font>的电动车<font color='red'>控制系统</font>设计
基于嵌入式MPU和CAN总线的测控系统设计
  绪论   随着网络技术的不断发展,Internet把世界上分散的计算机系统、通信系统实现了互连,形成了共用数据网络,成功的实现了网络资源共享。而CAN总线技术使得控制系统向着分散化、网络化、智能化的方向发展,使控制技术与计算机以及网络技术更为紧密的结合在一起。随着CAN总线控制网络的进一步发展,控制网络与因特信息网络的结合,方便了对设备的远程监控、诊断和维护。   2 系统模型概述   本设计采用在CAN总线控制网络和因特网之间加入一个转换接口。这种方式是通过硬件来实现的,即在底层网络与中间监控层之间加入中继器、网桥、路由器等专门的硬件设备,使控制网络作为信息网络的扩展与之紧密集成。硬件设备可以是一台专门的计算机,依靠其中
[单片机]
基于嵌入式MPU和<font color='red'>CAN总线</font>的测控系统设计
CAN总线冷知识-边沿台阶是怎么来的?
你了解 CAN 总线波形吗?你知道是什么因素造成 CAN 信号不稳定的吗?本文将带你探究影响 CAN 波形稳定的罪魁祸首——边沿台阶。 阻抗匹配是指信号源或者传输线跟负载之间达到一种适合的搭配,阻抗匹配主要为了调整负载功率和抑制信号反射;然而,阻抗不匹配的现象在CAN总线网络中随处可见;如图1所示,阻抗不匹配的将造成7个现象,其中最受关注的为上升沿和下降沿的台阶;下文将针对边沿台阶的现象做详细介绍。 图1 阻抗不匹配波形 解释边沿台阶是怎么出现的,如何消除,对总线有何影响; 一、边沿台阶的源头 在CAN总线的网络布局中,手牵手直线型拓扑是最理想最常规的布局;但是在实际现场中,经常会出现分支的现象。这里重点提一下,在计算CAN总
[汽车电子]
<font color='red'>CAN总线</font>冷知识-边沿台阶是怎么来的?
地铁屏蔽门CAN总线故障排查流程
摘要:地铁是人们出行的重要交通工具,随着地铁线路全面铺设,人们对于地铁的安全性能越来越关注,尤其是地铁屏蔽门的可靠性,那么在复杂的地铁控制系统中,如何进行地铁屏蔽门CAN总线故障排查呢?本文将做详细介绍。 地铁屏蔽门控制系统——CAN总线的应用 目前地铁采用了自动化的技术来实现全方位的控制,地铁综合控制系统包括ATC(列车自动控制)、SCADA(电力监控系统)、BAS(环境监控系统)、FAS(火灾报警系统)、PSD(屏蔽门/安全门系统)等,这些系统在全线形成网络,由控制中心统一分级控制。 其中,地铁屏蔽门系统PSD是基于CAN总线实现的,如图1所示该系统包括以下子单元: 图 1 地铁屏蔽门控制系统示意图
[测试测量]
地铁屏蔽门<font color='red'>CAN总线</font>故障排查流程
基于ARM的在线更新机制的设计实现
0 引言 分散型控制系统中的现场终端一般由控制器和各检测模块构成,它们之间通过一定的通信网络建立数据的交换链路。这种系统具有高可靠、开放性、灵活性、协调性、易维护等优点。然而,该分散型系统也具有终端数量多、分布范围广的特点。一旦终端系统软件存在缺陷或用户提出新的功能和指标要求时,其升级、维护的工作量和成本都非常大。本文针对上述情况,设计了一种方便、灵活、快速及稳定地对MCU节点进行在线更新的机制。基于LPC11C24微控制器组成的CAN网络,采用IAP编程技术(In Application Programming),实现了对目标节点MCU的软件更新功能。 1 LPC11C24单片机和CAN总线 恩智浦半导体(NXP)推出业界首款内嵌
[单片机]
基于ARM的在线更新机制的设计实现
华为自研HUAWElxMotion车身协同控制系统介绍
HUAWElxMotion 系统是华为自研的智能车身协同控制系统,为新能源汽车提供了纵向、横向、垂向一体化协同控制的解决方案。 扭矩矢量控制(TVC),是HUAWEI xMotion系统中针对车辆过弯时的转弯特性,在入弯和出弯时动态感知路面,进行扭矩自适应调节,帮助提升侧向力,降低甩尾风险,也能进一步提升车辆的可操控性和安全性,驾乘感受更安心。 老司机们的圈子里,流传着这样一句话“前驱车容易推头,后驱车容易甩尾”,尤其是到了雨雪天气的时候,这个现象就更加明显,雪地上可能轻轻打个方向,就出现“转不过去”、“甩尾失控”等严重的问题。 为了探寻这一问题的背后的根因,小编专门打开了尘封多年的车辆工程专业课本,下面就来给大家做一
[嵌入式]
华为自研HUAWElxMotion<font color='red'>车身</font>协同<font color='red'>控制系统</font>介绍
STM32 CAN总线传输波特率的计算
本人用的单片机是STM32F407,其它型号的单片机类似,可做参考! 一、标准CAN协议位时序概念 由于CAN属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间使用约定好的波特率进行通讯。 同时,CAN还使用“位同步”的方式来抗干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。 为了实现这个位同步,CAN协议将每个位的时序分解为四段:SS段、PTS段、PSB1段、PBS2段。同时定义最小的时间单位:Tq,四个段的长度用x个Tq表示,加起来就是一个位的时序。 用一个图来表示可能会形象一点,如图一个位的时序就是19Tq。 以上就是CAN标准协议定义的位时序,而S
[单片机]
STM32 <font color='red'>CAN总线</font>传输波特率的计算
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved