基于PXA270与WinCE的分布式地铁车载系统开发

发布者:HeavenlyWonder最新更新时间:2014-11-04 来源: eefocus关键字:pxa270  WinCE  STC89C52  S3C2440A 手机看文章 扫描二维码
随时随地手机看文章

车载信息娱乐系统与报站系统作为地铁列车必不可少的配置显得尤为重要,可以使乘客准确地确定到站站点、缓解乏味的旅途,也可以轻松地获得各站点的换乘路线、乘车指南等有意义的信息。

早期车载多媒体播放器多是传统的磁带收音机、CD播放器、DVD播放器等,磁带机的缺点是音质不好且由于传动机械的故障会出现卡带的现象,现基本已淘汰。车载CD播放器最近几年才应用于车载系统,在音质方面有了很大的提高,但只能读取CD光盘不能下载网络媒体,具有歌曲更换不便的缺点,同时缺少可视效果[1]。DVD是采用MPEG2标准压缩的全数字影音光盘,它的特点是音质高、画质高、容量大,但成本相对较高,同时也具有CD播放器媒体文件更换不便的缺点[2]。现阶段的车载媒体播放系统多采用嵌入式技术,如以三星S3C2440A处理器为核心的车载信息服务系统,可实现信息提示、导航定位、多媒体播放等功能[3]。其中媒体播放多基于嵌入式流媒体技术,如通过GStreamer和RTP/RTCP流媒体协议设计流媒体播放器[4]。但此方式对于列车这种单一源多接收端拓扑结构,其带宽占用高,易造成堵塞。

现有公交报站系统仅是音频广播报站,地铁的报站提示是通过三色LED的颜色变化与音频广播来实现的,报站形式单一,且缺少换乘路线、乘车指南等信息的提示,同时与媒体播放系统相分离。例如通过在站台与列车上分别放置RF无线节点来实现自动报站。其系统使用射频与接收芯片CC1100、语音播放芯片VS1003和单片机控制,通过对每一个车站进行ID编码,利用身份识别技术实现自动报站功能[5]。此外,也有基于ZigBee技术的定位解决方案,通过放置无线节点组成ZigBee网络,根据射频接收信号强度指示计算出所需定位的位置[6],此方法对于实现报站功能成本过高。由于地铁运行于地下,乘客没有可参考的建筑物标识来判断即将到达的站点,因此其报站系统十分重要。而实现地铁的自动报站并非易事,它不能像地面公交系统那样通过GPS定位系统[7]来实现车辆的定位与报站。

针对以上问题,本文开发了一种基于PXA270硬件平台与WinCE嵌入式操作系统的车载媒体报站系统。此系统集媒体播放、站点信息播报与换乘信息提示于一体,媒体文件更换方便快捷。系统采用分布式布局,各车载播放终端通过软件升级后,完全可以作为车载广播中心使用,因此进一步增加了系统的稳定性。系统采用嵌入式技术,专用性强、特色功能易实现,如可根据站点的具体布局提示乘客换乘路线等。同时采用WinCE嵌入式操作系统,具有实时性好的特点。

1 系统硬件平台设计

系统采用Xscale PXA270芯片为核心处理器,主频为520 MHz,SDRAM为64 MB,Flash为32 MB[8-9]。由于报站同步性的需要,通过IP组播的方式将站点信息与媒体文件传输至各节车厢,这样既方便了多媒体文件的更新,同时也减少了系统的成本。系统主体框图如图1所示,采用分布式布局,即在列车的车头放置车载广播中心,实现站点的接收、媒体文件的存储、通过IP组播将到站离站信息与媒体文件传输至各节车厢。在各节车厢放置车载播放终端,负责接收站点信息与媒体文件,并完成多媒体播放与站点信息的广播报站功能。同时各节车厢的车载播放终端也可以作为车载广播中心进行工作,这样系统更加稳定可靠。

 

系统主体框图

1.1 车载广播中心

车载广播中心放置在车头,负责站点信息与媒体文件的广播,其框图如图2所示。U盘负责存储媒体文件,触摸屏用于播放列表的制作与更换,按键则用于离站的信号触发,网络控制器则负责将站点信息与媒体文件传输至各车载播放终端。

 

车载广播中心


1.2 车载播放终端

车载播放终端负责媒体文件与报站信息的接收和播放,其框图如图3所示。网络控制器用于接收报站信息与媒体文件,U盘用于存储各站点的报站音频与信息提示文件,LCD则用于视频与站点信息的显示,喇叭用于音频的播放。

1.3 站台节点与车载节点

站台节点采用STC89C52单片机为微处理器,通过其P0口连接8位拨码开关,实现对各站点的编码标识。NRF905模块与STC89C52单片机之间通过SPI串行外设接口通信,STC89C52 P1.4~P1.7引脚分别与NRF905模块的MISO、MOSI、SCK和CSN引脚相连,通过C程序模拟SPI时序完成数据的传输。站点的标识通过NRF905模块发送。站台节点原理图如图4所示。
 

站台节点原理图

 

车载节点上的NRF905模块负责接收站点标识,并通过串口将站点标识数据传输至车载广播中心。NRF905模块的连接方式同站台节点。车载节点原理图如图5所示。


车载节点原理图



2 系统软件构建

2.1 操作系统的选择与定制

WinCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的嵌入式操作系统[10]。WinCE是从整体上为有限资源平台设计的多线程、完整优先权、多任务的操作系统,模块化的设计使WinCE系统可大可小,具有很好的稳定性与移植性;支持多种外围硬件与设备,图形界面出色,其强大的图形界面开发能力是其他嵌入式操作系统所不具备的,因此很适合作为车载平台的操作系统。[page]

利用WinCE进行嵌入式系统开发的首要工作是操作系统的定制,即根据实际需要进行裁剪、添加所需的组件与驱动,以及配置文件的修改。系统定制[11]的主要步骤如下:

(1)创建新工程

通过微软提供的Platform Builder5.0新建工程,在选择BSP包时,选择开发板提供的XSBASE270:ARMV4I。由于此系统的主要功能是多媒体的解码播放,因此设计模板选择为Digital Media Receiver。之后根据实际需要选择相应的组件完成工程的创建。
 

(2)配置平台

此过程主要是添加相关组件,是整个定制车载多媒体系统过程中的重点。其中主要有Usb Activesync(File Sync)、USB Mass Storage、中文字体(Chinese[Simplifiled])、Fat File System、键盘驱动(用于按键触发)、网卡驱动(用于网络传输)、触摸屏驱动(用于多功能操作)、DirectShow组件以及mp3、MPEG-1的解码Filter(用于媒体播放)等。通过Platform Builder 5.0编译生成的NK.bin文件下载至开发平台。

(3)导出SDK

导出的车载多媒体系统SDK用于在PC宿主机上通过Visual Studio 2005开发车载广播中心端MyNetSend以及车载播放终端MyNetPlayer应用程序。首先Configure SDK对SDK进行相应的配置,之后Build SDK等待完成后将生成的SDK安装于PC宿主机。

2.2 软件工作流程

车载广播中心完成媒体文件的IP组播发送、播放列表制作、站点信息接收和按键触发报站功能。具体流程如图6所示。


MyNetSend软件流程图


MyNetSend发送端程序启动后首先进行页面的初始化、播放列表的加载,之后启动发送线程,将列表中的文件依次组播发送。当接收到到站信号后将发送线程挂起,之后调用进站信息发送函数,等待报站音频播放结束后恢复发送线程。当有按键按下时产生WM_KEYDOWN消息,再将发送线程挂起,之后调用离站信息发送函数,等待报站音频播放结束后恢复发送线程。如此往复循环。

 

车载播放终端负责媒体文件的接收与播放、语音报站以及到站与换乘信息提示。具体流程如图7所示。MyNetPlayer接收端程序启动后创建DirectShow的滤波器链表FilterGraph,启动接收线程,解析接收到的组播报的报头,如果是DATA_MEDIA则将数据报通过DirectShow技术解码播放;如果是ARRIVE**则向窗口类发送WM_ARRIVE**消息,窗口类接收到对应的到站消息后则调用对应的到站处理函数,即播放到站提示音频与显示到站与换乘提示信息;如果是LEAVE**则向窗口类发送WM_LEAVE**消息,窗口类接收到对应的出站消息后则调用相应的出站处理函数,即播放出站提示音频与下一站的换乘提示信息。


MyNetPlayer软件流程图

2.3 功能实现

2.3.1 媒体文件的IP组播与接收

IP组播是通过使用特定的IP组播地址,将IP数据报传输到一个组播群组,所有加入该组的网络接收者均可以收到这份数据,这样极大地减小了网络负载。媒体文件的组播是通过CMulticastAdmin类来实现的,具体过程如下:


 (1)发送端
 ①创建组播组
 mMulticaster->CreateMulticaster();
 ②获取媒体路径名
 SourceFile=mProgramListCtrl.GetItemText(NowListNum,1);
 ③打开媒体文件
 m_objFile.Open(m_strSourceFile,CFile::modeRead|CFile::typeBinary)
 ④读取媒体文件数据
 nRead=m_objFile.Read(pBuf+sizeof(MSG_HEADER),MPEG1_PACK);
 ⑤设置数据报报头
 pMsg->nMsgType=DATA_MEDIA;
 ⑥组播
 Multicast(pBuf,nMsgSize);


 (2)接收端
 ①开启接收线程
 m_pReceiver->StartReceiving();
 ②接收数据
 nret=Receive(buff,nMsgSize);
 ③解析报头
 PMSG_HEADER pMsg=(PMSG_HEADER)buff;
 nMsgType=pMsg->nMsgType;

2.3.2 DirectShow解码播放

DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM的流媒体处理的开发包[12]。DirectShow使用Filter Graph的模型来管理整个数据流的处理过程,各个Filter在Filter Graph中按一定的顺序连接成一条“流水线”协同工作。按照功能划分,Filter大致分为三类:Source Filters、Transform Filters和Rendering Filters。首先通过Source Filters负责取得网络组播数据,然后将数据往下传输,之后经Transform Filters进行数据的格式转换、传输,最后Rendering Filters将数据传送给显示与音频设备进行多媒体的演示。接收端MyNetPlayer进行解码播放的过程如下:

 (1)创建滤波器链表管理器m_pGB
 HRESULT hr=CoCreateInstance(CLSID_FilterGraph,
 NULL,
 CLSCTX_INPROC,
 IID_IGraphBuilder,
 (void**)&m_pGB);
 (2)查询媒体控制接口
 hr=m_pGB->QueryInterface(IID_IMediaControl,(void**)&m_pMC);
 (3)添加自己制作的接收网络数据的SourceFilter
 hr=m_pGB->AddFilter(m_pSourceReader, NULL);
 (4)构建滤波器链表,渲染媒体文件
 HRESULT hr=m_pGB->Render(m_pSourceReader->GetPin(0));
 (5)进行播放
 hr=m_pMC->Run();

2.3.3 自动报站

自动报站是通过向窗口类发送自定义的到站与离站消息来实现的。当窗口类接收到到站或离站消息后再调用相应的消息处理函数,从而实现自动报站。下面是WM_MESSAGE_ARRIVE1站点1的到站消息处理函数,其他消息处理函数与其类似。

LONG CMyNetPlayerDlg::OnMessageARRIVE1(WPARAM wParam, LPARAM lParam)
{
    m_pGraph->m_pVW->put_Visible(OAFALSE);
//将视频画面屏蔽
    InitMyGraph();
//初始化用于播放mp3音频文件的GraphFilter
bmp.LoadBitmap(IDB_BITMAP1);//加载到站位图
drawbitmap();//显示位图
        m_StaText.SetWindowText(L"十三号街站到了");
//显示到站信息
        HRESULT hr;
        long evCode;
        hr=pGraph->RenderFile(L"/硬盘/stationin/1.mp3",NULL);//构建滤波器链表,渲染报站音频文件
        hr=pControl->Run();//播放
        pEvent->WaitForCompletion(INFINITE,&evCode);
//等待音频播放完毕
        pControl->Release();//释放资源
        pEvent->Release();
        pGraph->Release();
        CoUninitialize();
        bmp.DeleteObject();
        m_pGraph->m_pVW->put_Visible(OATRUE);
//显示原视频画面
        return 0;
}

3 系统测试实验

在实验室内模拟列车运行流程进行测试,通过三个开发平台完成实验,其中之一运行MyNetSend程序作为车载广播中心,其余两个运行MyNetPlayer程序,模拟为车载播放终端。[page]

3.1 车载广播中心的媒体文件发送

车载广播中心通过车载节点接收站台信息实现到站与离站信息的提示。发送终端软件界面如图8所示,可通过添加与删除按钮进行媒体文件的添加删除,从而完成媒体文件列表的制作,车载广播中心软件则根据该文件列表顺序循环广播。其主要特点是根据站台节点发送的站台信息报站,报站准确无误,且当有多次按键触发时不乱报。

 

车载广播中心联机调试界面



3.2 车载播放终端的媒体播放与自动报站


车载播放终端完成了将接收的媒体文件解码播放,到站与离站信息的播报。图9为模拟列车运行中(无偶次按键触发、无站台节点信息)播放媒体文件时的显示界面,此时终端界面底部循环显示日期、时间、下一站信息和换乘信息,上部播放接收到的媒体文件,界面简洁人性化。

 

车载播放终端媒体文件的播放界面


车载播放终端离站信息提示界面


本文提出了基于PXA270微处理器与WinCE嵌入式操作系统的地铁媒体报站系统实现方案,系统能够充分完成媒体文件的传输播放与到站、离站信息的准确提示。车载广播中心可通过更改播放列表完成媒体文件的更新,既方便快捷又经济。车载播放终端界面简洁人性化。同时通过软件升级可支持更多种媒体文件的播放。

关键字:pxa270  WinCE  STC89C52  S3C2440A 引用地址:基于PXA270与WinCE的分布式地铁车载系统开发

上一篇:基于ARM和ADIS16355的汽车二自由度数据采集系统
下一篇:LPC2000系列32位ARM微控制器内嵌的CAN总线验收滤波器应用

推荐阅读最新更新时间:2024-03-16 13:44

STC89C52单片机定时器/计数器详解(含程序和定时器2)
89C51和89C52还是有一些区别的,首先我们要明确,89C51有两个计数器T0和T1,89C52还有一个T2。   PS—串行口中断优先级控制位   PT1—TC1中断优先级控制位   PX1—外部中断1优先级控制位   PT0—TC0中断优先级控制位   PX0—外部中断0优先级控制位   同优先级的中断请求,按默认顺序响应。   【说明】   1. 本文里类似的x均可取值为0或1。   2. TC指TImer/Counter,即定时器/计数器。   3. 机器周期是单片机的基本操作周期,一个机器周期内单片机完成一项基本操作,如取指等。一个机器周期包含12个时钟周期。时钟周期是时钟频率的倒数。   4. T
[单片机]
<font color='red'>STC89C52</font>单片机定时器/计数器详解(含程序和定时器2)
51单片机STC89C52控制LED闪烁(使用for语句实现延时)
/*-----------------------包含头文件区域-------------------------*/ #include reg52.h //单片机头文件 /*-----------------------端口/引脚定义区域----------------------*/ sbit LED=P2^0; //位定义P2.0引脚名为LED /*-----------------------主函数区域-----------------------------*/ void main() { unsigned int i; //定义无符号整形变量i(范围为0~65535) while(1)
[单片机]
stc89c52引脚图及引脚功能说明
  本文为您带来单片机STC89C52引脚图,及STC89C52各个具体的引脚功能说明,详情请看如下全文内容。   单片机STC89C52引脚图,如下图所示:      STC89C52功能简述:   STC89C52引脚说明:   VCC(40引脚):电源电压   VSS(20引脚):接地   P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上
[单片机]
<font color='red'>stc89c52</font>引脚图及引脚功能说明
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
相较单倒计时器对timer0初值的设定, 此处将中断处理程序触发时间间隔改为5ms, 目的是给人在视觉上以更好的体验(设定为10ms会明显感觉到闪烁). #include STC89C5xRC.H unsigned char code DIG_CODE = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};//对应数码管显示0~9 int tcount = 0;//记录经过的5ms区间段个数 int sec1 = 15, sec2 = 25;//倒计时初始值 void T0_INT() interrupt 1 //timer0中断, 每5m
[单片机]
8051单片机(<font color='red'>STC89C52</font>)以定时器中断模式实现两倒计时器异步计时
S3C2440A的UART
UART(Universal Asynchronous Receiver/Transmitter),通用异步收发器,是常用于开发调试的RS-232C串口的核心器件。在百度百科( http://baike.baidu.com/view/245027.htm )上可以找到对它的详细介绍。 虽然这段时间实验定时器、键盘、LED操作时都使用了UART串口输出功能,但那是用开发板提供的示例程序中已有的代码的,想要自己写代码正确实现串口读写操作,还不是那么容易的。昨天花了整整一天时间才稍微弄得明白了点,主要是涉及的寄存器和可选操作方式多,包括收发方式、边沿触发中断与电平触发中断、是否使用自动流控制、是否使用FIFO以及FIFO触发
[单片机]
<font color='red'>S3C2440A</font>的UART
基于S3C2440A芯片Linux系统实现MJPEG网络摄像机的搭建
1 、系统硬件组成与网络架构 摄像机硬件核心采用三星公司推出的基于ARM9架构的S3C2440A芯片,该处理器主频达到400 MHz可以满足实时压缩,MJPEG视频流可以达到320×240分辨率25 fps的性能要求。外围搭配64 MB SDRAM、256 MB NAND Flash,网络功能由DM9000以太网MAC控制芯片负责,摄像头模块由USB控制器控制,系统供电由3片LM71117组成,分别输出3.3 V、1.8 V、1.25 V电压,辅助外围接口构成摄像机硬件结构。S3C2440A系统硬件框图如图1所示。 图1 S3C2440A系统硬件框图 网络摄像机是互联网上的TCP/IP设备,系统网络拓扑图如图2所示。其中在家庭
[单片机]
基于<font color='red'>S3C2440A</font>芯片Linux系统实现MJPEG网络摄像机的搭建
二极管(STC89C52): 编写程序控制二极管花样流水灯
一. 硬件设计 二. 软件设计 1. 程序功能 编写程序控制二极管花样流水灯. 2. 程序源码 #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int uchar code a_ledTable = { 0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xf
[单片机]
二极管(<font color='red'>STC89C52</font>): 编写程序控制二极管花样流水灯
基于STC89C52的程控恒流源的设计
高精度的程控恒流电源在仪器仪表、传感器技术和测试领域中有着广泛的应用。以往程控恒流源电路大都采用PWM脉冲方式,虽便于控制和调节,但精度难以保证,并且PWM方式的波形占空比调节范围有限,难以满足连续可调大电流的要求。本文介绍一种采用STC89C52单片机控制压控恒流源并通过扩流电路来实现恒流源程序控制的方案,其输出电流值可达2A。 程控恒流源的构成和工作原理 程控恒流源电路由压控电路、扩流电路和数控电路组成,结构如图1所示。 图1 程控恒流源电路的组成框图 本恒流源电路采用STC89C52控制D/A转换电路产生电压控制信号,通过1个精密线性压控电流源和扩流电路输出所需的电流值;取样电路采样后经A/D转换由数控电路读出,然
[工业控制]
基于<font color='red'>STC89C52</font>的程控恒流源的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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