《基于CAN总线的车门控制.doc》由会员分享,可在线阅读,更多相关《基于CAN总线的车门控制.doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于CAN总线的车门锁控制摘 要 随着现代汽车的日益发展,汽车电子设备不断增加和改新,进而使得汽车控制系统中出现大量的控制信号需实时交换的问题,传统线束已远远不能满足要求,汽车局域网应运而生。CAN总线是一种多主方式的串行通讯总线,现实中CAN总线运用在汽车领域非常多,这里我用现在最常用的无线装置PT2262和PT2272运用在车门锁中将其与CAN总线一起运用达到很好的人机对话功能。再结合ARM2103完成整个自动控制。 关键词: ARM2103 CAN PT2262 PT2272 SJA1000 CTM8251 目 录第1章 概述4第2章 总体设计5第3章 系统硬件设计63.11SJA100
2、0模块63.2CTM8251收发模块73.3PT2262,PT2272模块73.4ARM2103模块9第3章系统软件设计104.1 主程序设计图104.2 SJA1000程序模块114.3 ARM控制程序模块14第5章 调试和总结15参考文献16 第一章 概述在当今的社会生活中,电子科学技术的运用越来越深入到各行各业之中,并得到了长足的发展和进步,现场总线是应用于工业现场,采用总线方式连接多个设备,用于传输工业现场各种数据的一类通信系统。 CAN是目前应用最广泛的车载网络,解决了现代汽车中众多的控制与仪器之间的数据交换。CAN是一种多主方式的串行通讯总线,其设计的规范要求有很高的位速率,高的抗
3、电磁干扰性,并且能够检测出产生的任何错误。而现实当中CAN总线运用在汽车领域非常多的,这里我用现在最常用的无线装置PT2262和PT2272运用在车门锁中将其与CAN总线一起运用达到很好的人机对话功能。这里我想用一块ARM2103当成车上的总MCU,通过PT2262人为按闭键发送信号到PT2272再经过CAN收发器CTM8251通过CANH和CANL再与SJA1000 CAN控制器连接,再由ARM2103接收SJA1000的报文控制车锁,当检测到车窗没关上,先关窗户,再关上车门后喇叭响3声。当按上开键时,只需开门,再延时20秒当车门无人操作时自动关门上锁。 第二章 总体设计这里说到CAN总线就
4、先让我想到了UART,都是异步通信串口,虽然对CAN还有很多不懂,只是有个初步模型吧,我觉得他就是一个调配各个分支模块与总控制的联系及相互的联系,或者说给它们提供一个中转站也可以叫排序的电路吧,再让总控制器去处理吧。先以ARM2103为控制器,通过PT2262人为按键发送信号到PT2272再用CAN收发器传送到总线上,由CAN收发器接收CANH和CANL,这里选用CTM8251收发器,再传送到CAN总线控制器SJA1000来处理接受和储存来自车门及车窗节点的反馈信号,检测开关是否开还是关,而后ARM2103作为微控制器处理接收到的报文作出相应的处理。其设计方框图如下图1所示:图表 1总设计电路
5、图 第三章 系统硬件设计3.1 1SJA1000模块SJA1000用于汽车及一般工业的独立CAN总线控制器,使用了并行总线接口与MCU连接,ARM板通过地址线,数据线和控制线与SJA1000连接的,访问时,SJA1000的片选信号必须有效。以下是SJA1000的结构图;图表2SJA1000结构图CAN总线定义了四种不同的信息帧:(1) 数据帧:将数据从发送器传输到接收器;,用下面的图可以了解了;(2) 远程帧:从某个节点发出,请求发送具有同样标识符的数据帧; 远程帧由6个不同的位场组成:帧起始、仲裁场、控制场、数据场、CRC校验场、ACK应答场和帧结束。与数据帧相反,远程帧的RTR位是隐性的。
6、它没有数据域,所以数据长度代码的数值没有意义(可以标注为0-8范围里的任何值)o RTR位的极性表示了所发送的帧是一数据帧(RTR位显性)还是远程帧(RTR位隐性)。(3) 错误帧:当有任何节点检测到总线错误时就发出错误帧.错误帧是由两个场组成第一个场是由来自各站的错误标志叠加得到的。第二个是出错界定符。一个节点有两种形式的错误标志,即主动错误标志和被动错误标志。 一个是主动错误标志由6个连续的显性位组成;另一个是被动错误标志由6个连续的隐性位组成,除非被其他节点的显性位重写。发生错误时,检测到错误条件的站通过发送主动错误标志指示错误。所有其他的站由此检测到错误条件,并与此同时开始发送错误标志
7、。显性位序列导致个别站发送的不同的错误标志被叠加在一起。错误标志发出以后,每站就发送隐性位,并一直监视总线直到检测出一个隐性位为止。接着开始发送其余7个隐性位,这8个隐性位标志一个错误信令过程的结束。(4) 过载帧:为了在先行的和后续的数据帧或远程帧之间附加一定的延时;以下两种过载条件会导致过载标志的传送:1) 接收器的内部条件(此接收器对十下一数据帧或远程帧需要有一延时;2) 间歇场期间检测到一显性位。由过载条件1 fn引发的过载帧,只允许起始十所期望的间歇场的第一个位时间。fn由过载条件2引发的过载帧,应起始十所检测到显性位之后的位。通常为了延时下一个数据帧或远程帧,两个过载帧都会产生。3
8、.2 CTM8251收发模块CTM8251是一款带隔离的通用CAN 收发器芯片,该芯片内部集成了所有必需的CAN隔离及CAN 收、发器件,这些都被集成在不到3 平方厘米的芯片上。芯片的主要功能是将CAN 控制器的逻辑电平转换为CAN 总线的差分电平并且具有DC 2500V 的隔离功能。CTM8251芯片主要功能:具有将CAN控制器逻辑电平转换为CAN总线的差动电平的功能,另外CTM8251还具有对CAN控制器与CAN总线之间的隔离作用。图表 3CTM8251连接图3.3 PT2262,PT2272模块车门的无线开锁键就是用到了PT2262/2272,实际运用中 厂商都帮我们弄好了相互配对解锁地
9、址,所以不需要我们去设置相应的地址,PT2262/2272是一对带地址、数据编码功能的无线遥控发射/接收芯片。其中发射芯片PT2262-IR将载波振荡器、编码器和发射单元集成于一身,使发射电路变得非常简洁。编码芯片PT2262发出的编码信号由:地址码、数据码、同步码组成一个完整的码字。当发射机没有按键按下时,PT2262不接通电源,其17脚为低电平,所以315MHz的高频发射电路不工作,当有按键按下时,PT2262得电工作,其第17脚输出经调制的串行数据信号,当17脚为高电平期间315MHz的高频发射电路起振并发射等幅高频信号,当17脚为低平期间315MHz的高频发射电路停止振荡,所以高频发射
10、电路完全收控于PT2262的17脚输出的数字信号,从而对高频电路完成幅度键控(ASK调制)相当于调制度为100的调幅。图表 4PT2262结构图PT2272-M4则表示数据输出为4位的暂存型无线遥控接收芯片,解码芯片PT2272接收到信号后,其地址码经过两次比较核对后,VT脚才输出高电平,与此同时相应的数据脚也输出高电平,如果发送端一直按住按键,编码芯片也会连续发射。图表 5 PT2272结构图PT22723.4 ARM2103模块ARM2103是接触最多的了,它是一个基于支持实时仿真的16/32位ARM7 TDMI-S CPU的微控制器,并带有32kB的嵌入高速Flash存储器,128位宽度
11、的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行由于内置了宽范围的串行通信接口(2个UART、SPI、SSP和2个I2C)和8KB的片内SRAM,LPC2103也适合用在通信网关和协议转换器中。32/16位定时器、增强型10位ADC、定时器输出匹配PWM特性、多达13个边沿、电平触发的外部中断、32条高速GPIO,与此,它具有满足很多的项目的需求。在这里,我用到ARM2103接收SJA1000发过来的报文,处理车窗锁和车门(模拟是用LED1亮为车窗关,LED2亮为车门关,KEY1按下代表车门有人操作)。数据D0:7与SJA1000数据口相连,如图1总设计的一样显示的一样,以下是
12、ARM板灯键图:图表 6ARM板灯键图第四章 系统软件设计4.1 主程序设计图其中检测信号Flag1为1时表示所有开关闭合,反之Flag=0,则断开;Flag2时表示SJA1000的中断标志变量,Flag2=1表示SJA1000有中断.图表 7主程序设计图4.2 SJA1000程序模块1.SJA1000初始化流程:SJA程序初始化程序: void SJA1000_Init(unsigned char btr0,unsigned char btr1,unsigned char *filter)SetBitMask (REG_CAN_MOD, RM_RR_BIT);/ 进入复位模式WriteSJA
13、Reg(REG_CAN_MOD, 0x05);/ 配置模式寄存器, / 选择双滤波、自发自收模式 WriteSJAReg(REG_CAN_CDR, 0xC8);/ 配置时钟分频寄存器,选择PeliCAN模式WriteSJARegBlock(REG_CAN_ACR0, filter, 8); / 配置验收代码/屏蔽寄存器WriteSJAReg(REG_CAN_BTR0, btr0);/ 配置总线定时器0WriteSJAReg(REG_CAN_BTR1, btr1);/ 配置总线定时器1WriteSJAReg(REG_CAN_OCR, 0x1A);/ 配置输出管脚为TX0与RX0,推挽输出Clea
14、rBitMask(REG_CAN_MOD, RM_RR_BIT); / 退出复位模式,进入工作模式SJA1000发送程序char SJASengData(unsigned char*databuf,unsigned char cmd)char status=1;unsigned char len;unsigned char dlc;if(ReadSJAReg(REG_CAN_SR)&(TBS_BIT|TCS_BIT)!=(TBS_BIT|TCS_BIT)status=0;elsedlc=(*databuf&0x0f);if(dlc8)dlc=8;switch(*databuf&0xC0)cas
15、e 0x00: len=STD_FRAMEID_LENTH+dlc; break;case 0x40: len=STD_FRAMID_LENTH;case 0x80: len=EXT_FRAMEID_LENTH+dlc; break;case 0xC0: len=EXT_FRAMEID_LENTH;defalut: len=0; status=0; break;if(len0)WriteSJARegBlock(REG_CAN_TXFMINFO,databuf,len);SetSJASendCmd(cmd);status=1;return(status);SJA1000接收程序char SJAR
16、cvData(unsigned char *databuf)char status=1;unsigned char len;unsigned char dlc;if(ReadSJAeg(REG_CAN_SR)&RBS_BIT)=0) status=0;else*databuf=ReadSJAReg(REG_CAN_RXFMINFO);dlc=(*databuf&0x0f);if(dlc8)dlc=8;switch(*databuf&0xC0)case 0x00: len=STD_FRAMEID_LENTH+dlc; break;case 0x40: len=STD_FRAMID_LENTH;c
17、ase 0x80: len=EXT_FRAMEID_LENTH+dlc; break;case 0xC0: len=EXT_FRAMEID_LENTH;defalut: len=0; status=0; break;if(len0)ReadSJARegBlock(REG_CAN_BXBUF1,databuf+1,len);status=SetBitMask(REG_CAN_CMR,RRB_BIT);return(status);SJA1000滤波器设置函数void SJA1000ConfigFilter(char mode,*Filter)SetBitMask(REG_CAN_MOD,RM_R
18、R_BIT);if(mode0)SetBitMask(REG_CAN_MOD,AFM_BIT);elseClearBitMask(REG_CAN_MOD,AFM_BIT);WriteSJARegBlock(REG_CAN_ACR0,Filter,8);ClearBitMask(REG_CAN_MOD,RM_RR_BIT);4.3 ARM控制程序模块首先是中断模块,这里我用到的是ARM2103定时器0中断及计时count表示1S中断后+!,以下是中断函数,还有一些控制程序像KEY1,LED1和LED2的控制就是按图表7主程序设计图那样编译在调控。void Timer0_IntExt(void)
19、T0TC = 0; T0PR = 0; T0MCR = 0x03; T0MR0 = Fpclk/400; T0TCR = 0x01;void _irq IRQ_Timer0(void) T0Flag = 1; count+; /这里是当车门开后用来计20S时间的 T0IR = 0x01; VICVectAddr = 0;void IRQ_Init(void) VICIntSelect = 0x00; VICVectCntl0 = 0x20|4; VICVectAddr0 = (uint32)IRQ_Timer0; VICIntEnable = 14; 第5章 总结CAN自诞生以来,以其独特的设计思想、优良的性能和极高的可靠性越来越受到工业界的青睐。随着企业对CAN总线技术要求的不断提高,CAN总线技术将不断完善,各种更先进的通讯技术方案将被提出,在现有技术条件下从可靠性、经济性、可扩展性等方面尽量做出了最优化设计,希望以后有时间我继续研究探讨。参考文献1,周立功ARM嵌入式系统基础教程 北京航空大学出版社2,铃木雅臣晶体管电路设计 科学出版社3,周立功嵌入式接口技术4,石磊基于CAN总线的车门控制系统研制 吉林大学
限制150内