基于LPC2292微控制器和CAN控制器实现车辆行驶监控系统的设计

发布者:数据梦想最新更新时间:2023-02-08 来源: elecfans关键字:LPC2292  微控制器  CAN控制器 手机看文章 扫描二维码
随时随地手机看文章

1 终端功能

本监控终端除了具有传统的记录仪所拥有的事故分析功能外,还能在汽车驾驶员超速行驶时发出超速报警声,以提醒驾驶员减速行驶,并详细记录车辆每次的开车时间、行驶里程、行驶时间、最高车速,以及每次最高车速的持续时间,方便交通管理部门根据所记录的有关数据对车辆进行有效的管理;同时,该设备可实现多种信息处理,显示汽车状况,进行自我诊断,对车速、发动机转速、水温、油压、刹车气压、轮胎压力和蓄电池电压等一系列参数进行有效监控;通过控制发光二极管、液晶显示、蜂鸣器等报警手段,为司乘人员提供直接的汽车状况信息并发出各种超限情况的报警等,可有效防范和化解车辆事故的发生。另外,终端具有GPRS和GPS模块,可将各种监测数据实时传至公司管理中心,方便了公司车辆的统一调度和行车监测,利于提高公司管理水平。


2 终端功能模块设计

选用带有ARM7TDMI-S内核的LPC2292微控制器,可实现对车速、转速信号、开关量信号以及水温、刹车气压、轮胎压力等模拟量信号的采集、处理以及数据的实时存储和显示,通过串口、USB接口可以实现与PC机之间的数据通信,通过 CAN和LIN总线接口可实现与汽车上的CAN或LIN节点间的数据通信。该系统的外围接口模块有电源模块、车速等脉冲信号采集模块、水温等模拟信号采集模块、键盘接口模块、存储器模块、GPS定位模块、GPRS通信模块、LCD显示模块、胎压监测以及通信接口模块,系统的组成框图如图1所示。限于篇幅,本文仅就若干特色功能模块设计作详细分析。

基于LPC2292微控制器和CAN控制器实现车辆行驶监控系统的设计

2.1 车速、转速信号采集电路设计

现有运输车辆一般都装有霍尔式集成传感器,车速转换成的电压信号直接送至车速表,信号采集比较方便,具体处理方法是直接从车速表的接线端子取得车速信号。具体接线方式根据车速表信号输出电路来确定。信号出车速表端子后送至光耦4N35高速隔离开关,再送至集成运放LM358D前置差分电路,进一步去除干扰并有效放大,由LM358D输出端(7脚)送至9013进行次级放大,至此车速信号已是占空比为50%的方波信号,并已剔除杂波,可直接送至微控制器定时捕获端口进行计数,具体电路如图2所示。经反复实验优化,本电路抗干扰能力很强,实车测试时无论低速状态或超过110 km/h车速时,均可稳定准确地检测到速度信号。同理,发动机转速信号亦可采取类似方法进行处理(在此不再赘述)。

2.3 CAN总线接口功能设计

CAN正常工作需要具备CAN控制器以及CAN总线驱动器。前者实现网络层次结构中数据链路层和物理层的功能,后者则提供CAN控制器与物理总线之间的接口以及对CAN总线的差动发送和接收功能。LPC2292微控制器包含两个CAN控制器,单个总线上的数据传输速率高达1 Mbps,具有32位寄存器和RAM访问功能,带有全局滤波器和验收滤波器。本系统采用CTM8251D双路带隔离CAN收发器,至少可连接110个节点,通过扩展CAN总线接口,使得串行通信方式的选择更加多样化。当车内仪表也具有CAN总线接口的时候,它们可以直接利用此接口与记录仪通信。CAN总线接口电路如图4所示。

CAN通信与一般的串口通信类似,在数据通信前先要对CAN总线进行初始化操作,包括CAN控制器的选择、数据寄存器的设置、通信波特率的设置等。初始化完成后,需要设置双方的通信协议,建立彼此的连接。只有在同一协议下工作的双方才能正确进行数据的交换。本系统设置的CAN通信协议为:无过滤条件、 bypass模式、波特率可以预先设置。

本系统提供的CAN-BUS通信函数接口如下:

①初始化CAN:int CAN_Init(int cannum,uint32volatile baudset)。

函数入口参数:cannum为CAN控制器的选择标志符,为1选择CAN0控制器,为2选择CAN1控制器;baudset为波特率,可以预先设置。

函数出口参数:初始化成功返回0,失败则返回1。

函数功能:对CAN控制器进行初始化。

②CAN总线发送数据:int CAN_SendData(int can-num,uint32 volatile frameinfo,uint32 volatile senddatal,uint32 volatile senddata2,uint32 volatile canmode)。

函数入口参数:cannum同上;frameinfo为帧信息,用于设置帧信息寄存器;senddata1和senddata2分别为要发送的数据,用于设置数据寄存器A和B;canmode用于设置CAN工作模式。

函数出口参数:数据发送成功返回0,失败则返回1。

函数功能:CAN总线进行数据发送。

③CAN总线接收数据:int CAN_RcvData(int can-num。uint32 volatile *pdatal,uint32 volatile *pdata2)。函数入口参数:cannum同上;pdata1和pdata2为接收数据指针。

函数功能:CAN总线接收数据,并从数据寄存器CANRDA和CANRDB中将数据读进对应的指针中。


2.4 LIN总线接口电路设计

LIN是低成本网络中的汽车通信协议标准,可以提高通信质量、降低成本,将是在汽车中使用汽车分级网络的重要因素。LIN总线是一种简单的单总线系统,其软件协议栈比较简单。一个LIN网络由一个主机节点和一个以上的从机节点组成,所有的节点都包括有从机服务程序,用来发送和接收数据,仅有一个节点包含有主机服务程序。主机程序主要用于发送同步间隔、同步场和ID场(或命令),以控制和协调各个节点的有序通信。


LPC2292微控制器集成有实现LIN总线节点的必要硬件,包括UART、捕获输入和足够的定时器,特别是其捕获输入功能,为LIN的帧头识别、帧同步 &波特率测量提供了极大的便利。LIN总线接口电路如图5所示,主要由LIN物理层接口芯片TJA1020构成,与LPC2292串口2相连,其主要完成MCU通信信号与LIN物理总线信号之间的相互转换,为MCU提供一个与LIN物理总线的接口。

2.5 红外通用接口模块

出于用户统一采集数据需求考虑,本系统设计了通用的红外接口。它能够支持红外遥控和数据通信,支持IrDA协议,能够方便地与各种符合协议标准的设备进行通信。该模块由HSDL7001编解码芯片和HSDL3600红外收发芯片组成。 HSDL7001与MCU串口相连,原理框图如图6所示。

HSDL7001可驱动IrDA兼容的收发器,最高传输速率达11 502 kbps,其内部有1个SIR编码器和1个SIR解码器,支持内部(外接3.* MHz晶振)和外部16XCLK输入两种模式。当使用内部时钟时,波特率可通过A0、A1和A2进行调整。


3 终端软件设计

嵌入式μClinux具有结构小巧、实时性强、稳定性高、可定制性强的特点。在网络通信方面,嵌入式操作系统支持TCP/IP及其他协议并提供通信协议动态挂接技术,以及操作系统内部的进程通信应用接口技术。本设计采用稳定的2.4版本的内核,并对它进行合理的裁减和加载,作为操作平台。μClinux己对本系统采用的主控器有了很好的支持,但在编译本系统的内核前,需要修改 uclinux/linux-2.4.x/arch/armnommu/config.in文件中关于外部存储空间的定义,以满足本系统关于外部 Flash、CH375B和LCD液晶屏等器件的存储空间的划分。


3.1 进程管理

μClinux的进程调度沿用了Linux的传统,系统每隔一定时间挂起进程,同时系统产生快速和周期性的时钟计时中断,并通过调度函数(定时器处理函数)决定进程何时拥有相应的时间片,然后进行相关进程切换,这通过父进程调用:fork函数生成子进程来实现。

本系统中,为每个任务建立数据处理子进程,包括:车速、转速等信号采集处理任务、串口定时通信任务、USB数据传输任务、GPRS数据传输任务、LCD数据显示更新任务等。子进程采用由μClinux内核中的cron组件触发任务机制。系统中的crontab文件记录了终端的定时数据处理任务信息(可由系统前台设定任务执行周期),时间一到即可被cron触发其相应的子进程。由于采用多进程处理,终端可方便地实现多种信号的实时采集以及数据的及时处理、存储和上送。


3.2 设备驱动程序编写

设备驱动程序是内核与硬件之间的唯一接口,也是内核代码的一部分。当硬件设备要与内核进行交互时,就会产生一个中断信号,通过驱动程序预定义的入口点进入内核,入口点将此信号保存在栈中并保存被中断任务的寄存器的值。内核提取保存在栈中的中断信号,再由内核调用相应的中断处理程序。应用程序可以像操作普通文件一样对硬件设备进行操作。


本系统用到LPC22292的4路A/D采样接口对水温、刹车气压以及发动机电压状态等参数进行采集。下面以A/D采样驱动程序为例进行分析:

①应用程序只有通过对设备文件的open、close、read/write、ioctl等进行操作才能访问硬件设备,Linux的扩展文件操作结构 file_operations实现了标准的文件操作到硬件设备操作的映射,每个设备驱动程序都要实现这个接口所定义的部分或全部函数。A/D驱动程序的扩展文件操作结构如下:

②在设备驱动程序中使用中断,是提高系统数据处理速率的有效手段。有两项工作要做:

第一,在初始化函数中的register_chrdev()调用之后,使用request_irq()函数安装中断处理程序。request_irq()函数声明如下:

其中的参数irq是驱动程序使用的设备中断号;handler是中断服务函数指针;flags是一个与中断管理有关的各种选项的字节掩码;device在/proc/interrupts中用于显示中断的拥有者;dev_id这个指针用于共享的中断信号线,返回0成功,非0失败。

A/D驱动程序安装如下一个中断处理程序:

结 语

基于ARM核的LPC2292为控制核心的嵌入式车辆行驶监控终端,在现有行车记录仪基础上增加了若干新功能。它具有以下特点:

①以μClinux系统为数据处理平台,通过多任务进程调度机制大大提高了系统处理海量数据的能力,实时性得到很大提高,对于车速、发动机转速、刹车气压等监测频率要求高的参数可以精确监测,增强了车辆行驶安全性。

②先进的通信功能。CAN、LIN总线接口使得终端可以与具备通用总线接口的车辆融为一体,作为车辆的内置诊断装置,可全方位获取车辆参数。USB接口使得监控数据可以方便地保存至系统后台,利于数据分析。

③完善的数据上传与车辆定位跟踪功能。管理者不仅可以实时了解车辆的位置现状,而且可以实时监控车辆的运行状态,通过司机与管理者的双重监控,可以有效保证车辆的安全运行,这对于从事高危运输行业的车辆具有重要意义。

总之,将高性能的ARM微控制器与嵌入式操作系统运用于车辆行驶监控终端中,既能大大提高车辆数据采集与分析的效率和准确性,又可实现对车辆多种性能参数的实时监控,是今后车辆远程实时监控技术的发展趋势。


关键字:LPC2292  微控制器  CAN控制器 引用地址:基于LPC2292微控制器和CAN控制器实现车辆行驶监控系统的设计

上一篇:如何使用ARM7-LPC2148微控制器中的PWM控制LED的亮度
下一篇:将LPC55S16-EVK MCU用于工业应用

推荐阅读最新更新时间:2024-11-02 20:52

51单片机:电脑向串口发送数据并控制LED灯
电脑向串口发送数据后,控制LED灯,并返回发送的数据 程序如下 #include regx52.h #include intrins.h unsigned int num; //建立全局变量 void Delay1000ms() //@11.0592MHz { unsigned char i, j, k; _nop_(); i = 8; j = 1; k = 243; do { do { while (--k); } while (--j); } while (--i); } void UartInit(void) //480
[单片机]
51<font color='red'>单片机</font>:电脑向串口发送数据并控制LED灯
51单片机红外遥控解码
红外遥控发射芯片采用PPM编码方式,当发射器按键按下后,将发射一组108ms的编码脉冲。遥控编码脉冲由前导码、8位用户码、8位用户码的反码、8位操作码以及8位操作码的反码组成。通过对用户码的检验,每个遥控器只能控制一个设备动作,这样可以有效地防止多个设备之间的干扰。编码后面还要有编码的反码,用来检验编码接收的正确性,防止误操作,增强系统的可靠性。前导码是一个遥控码的起始部分,由一个9ms的低电平(起始码)和一个4. 5ms的高电平(结果码)组成,作为接受数据的准备脉冲。以脉宽为0. 56ms、周期为1. 12ms的组合表示二进制的“0”;以脉宽为1. 68ms、周期为2. 24ms的组合表示二进制的“1”。如果按键按下超过108m
[单片机]
单片机写串口上位机时的一点心得
开门见山地说,要注意的就是.net中无论String型还是Char型数据,字符均使用Unicode编码而非ASCII编码,而单片机通常只支持ASCII编码。这就导致在电脑与单片机串口通信过程中,出现无法被识别或被错误识别的情况。 前一阵做星火杯的时候,由于考虑到一些性能和功能上的需求,我决定用.net做上位机,具体是用vb.net。因为以前接触过VB,有点基础,所以学起来应该不回花太多时间。在编程的时候边编边学,进展速度还算可以,最关键的数据库查询和操作的部分一个晚上也就搞定了。 但最后做好后,与单片机通信时始终无法发送正确的数据,表面上看好像是数据发送的顺序不对,导致我硬件上的1286
[单片机]
AVR单片机-数码管2(动态扫描)
前面说了数码管的静态扫描,但是在大多数场合下都是动态扫描。动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。 本程序的原理图: 源程序: /* * shumaguan1.c * * Created: 2011-6-24 20:45:16 * Author: ZYIN *
[单片机]
AVR<font color='red'>单片机</font>-数码管2(动态扫描)
STM32单片机的通用定时器
STM32中的定时器有多种,按功能分成2个高级控制器定时器,4个普通定时器,2个基本定时器,2个看门狗定时器,1个系统滴答定时器SysTick。 定时器的关键是定时时间的计算。比如用定时器控制继电器的开关的时候,需要延时一段时间才关闭或者开启,这时候离不开定时器定时。 通用定时器定时时间计算。1秒中断的基本实现: 通用定时器模块的入口时钟经过分频得到计数器的时钟,用CK_CNT表示,预分频器的系数为:TIMx_PSC,当TIMx_PSC=0时,表示不分频,=1时,2分频。以此类推。 公式为:CK_CNT=fclk_PSC/(PSC +1),其中PSC最大为65535. 其次是TIM5计数器的计数值的设置,TIM
[单片机]
全自动洗衣机控制器设计的单片机代码
基于单片机的洗衣机控制器 采用两位数码管显示洗衣时间,采用驱动芯片控制电机转动 全自动洗衣机课程设计 基于51单片机,C语言实现。 基本要求 模拟全自动洗衣机工作过程。以电机替代洗衣机电机。显示洗衣机工作的状态(进水、浸泡、洗衣、脱水、结束)。显示工作剩余时间(洗衣程序可自定义,时间精度:秒)。 洗衣时交替正、反转。 扩展要求 洗衣和脱水时电机转速不同。增加水位传感器输入。故障报警。增加声音提示。其它自定义功能。 设计用Preteus仿真: 0.png (203.38 KB, 下载次数: 13) 下载附件 保存到相册 2018-6-25 06:57 上传 仿真图如下: #include reg51.h //*
[单片机]
全自动洗衣机<font color='red'>控制器</font>设计的<font color='red'>单片机</font>代码
单片机延时程序图解分析
我们已经知道,程序中的符号R7、R6是代表了一个个的RAM单元,是用来放一些数据的,下面我们再来看一下其它符号的含义。 DELAY: MOV R7,#250   ;(6) D1: MOV R6,#250   ;(7) D2: DJNZ R6,D2    ;(8) DJNZ R7,D1   ;(9)    RET        ;(10) 〈单片机延时程序〉 MOV:这是一条指令,意思是传递数据。说到传递,我们都很清楚,传东西要从一本人的手上传到另一本人的手上,也就是说要有一个接受者,一个传递者和一样东西。从指令MOV R7,#250中来分析,R7是一个接受者,250是被传递的数,传递者在这
[单片机]
<font color='red'>单片机</font>延时程序图解分析
基于MSP430G2微控制器闪烁LED:使用数字读/写引脚
这是一系列教程的第二篇教程,我们正在使用Energia IDE学习德州仪器的MSP430G2 LaunchPad开发板。在上一篇 闪烁LED 教程中,我们将介绍了使用Energia IDE开发LaunchPad开发板,同时我们还上传了第一个程序,在固定的时间周期内闪烁板上的LED。 在本教程中,我们将学习如何使用数字读取和数字写入选项读取输入设备(如开关)的状态,并控制LED等多个输出。在本教程结束时,您将学会如何使用数字输入和输出,这些输入可用于连接诸如红外传感器、PIR传感器等许多数字传感器,以及点亮或熄灭LED、蜂鸣器等输出。听起来很有趣,对不对!!?让我们开始吧。 所需材料 ● MSP430G2 Launc
[单片机]
基于MSP430G2<font color='red'>微控制器</font>闪烁LED:使用数字读/写引脚
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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