历史上的今天
返回首页

历史上的今天

今天是:2025年03月24日(星期一)

正在发生

2021年03月24日 | ARM开发板的车辆检测控制单元设计

2021-03-24 来源:eefocus

由于交通需求的不断增加,有越来越多的环形感应线圈检测器用于交通检测。这些埋设在道路表面下的线圈可以检测到车辆通过时的电磁变化进而精确地算出交通流量。交通流量是交通统计和交通规划的基本数据,通过这些检测结果可以用来计算占用率(表征交通密度),在使用双线圈模式时还可以提供速度、车辆行驶方向、车型分类等数据,这些数据对于交通管理和统计是极为重要的。通常高速公路车辆检测系统由多通道环形检测单元LD4和控制单元CCU组成,本文采用PHILIPS公司最新推出的arm7内核微处理器LPC2114设计实现了车辆检测系统控制单元部分,并且和5个LD4环形检测器一起构成10通道高速公路车辆检测系统。



LPC2114和电子硬盘连线示意图

主程序流程图


总体方案设计


本文设计的控制板系统原理框图如图2所示,以LPC2114为核心控制单元,该芯片是一种支持实时仿真和跟踪的16/32位基于arm7TDMI-S内核的CPU。内部集成了4路10位A/D转换器,两个32位定时器、一个实时时钟和看门狗,多个串行接口,包括两个工业标准的UART、高速和两个SPI总线接口,外部多达46个与TTL电平兼容的通用I/O口,非常适用于作为主控单元。CPLD EPM7128作为微处理器的扩展输入/输出,通过光电耦合和LD4标准定义总线相连,该标准定义的总线基于RS-485总线通信协议。LD4和控制板通过标准总线进行数据交换,控制板每隔10秒扫描并发送一次请求数据的命令,相应LD4通道返回请求数据或者无效信息,arm处理器对获得的各通道数据进行相应的统计运算处理。每隔用户设定的间隔时间就将统计数据存储于静态RAM,供中心站定时获取,同时,以分钟为单位将统计的数据备份至Flash电子硬盘中。中心站可以通过请求备份数据命令获取相应时间段的数据,并存入数据库。中心站和控制板采用RS-232串口方式通信,利用调制解调器实现远程数据传输。为了解决大容量存储问题,系统使用了三星公司提供的K9F2808来作为电子硬盘,16MB的容量能够存储11天备份数据,并且该电子硬盘能够灵活升级。


LPC2114与电子硬盘的接口实现


为了防止传输及中心站故障等问题而导致数据丢失,系统要求对一段时间内的数据进行备份,因此在系统设计的过程中需要考虑大容量存储问题。


设定本系统每分钟需要备份一次统计数据,根据环形检测器LD4的数据格式,一次数据量为1026B,若采用静态RAM作为存储单元,需要多片大容量RAM级联使用,价格昂贵,且存储容量扩展困难。若使用动态RAM作为存储单元,缺点在于控制困难,需要动态RAM控制器辅助操作。Flash作为存储器使用简单,容量大,尽管使用寿命有限,考虑到系统每1分钟存储1026B,就16MB容量而言,11天左右写满一次,那么一个月擦写约3次,以此计算,一年擦写约36次,而Flash寿命一般为擦写10万余次,所以本系统完全可以采用Flash作为电子硬盘用在车辆检测系统中。另外,Flash还具有掉电非易失特性,更适合应用于本系统。


为了便于存储容量的升级扩展,本系统选用K9F2808作为存储器。K9F2808为48脚表面封装器件,芯片内部有(16M+512K)×8 bit的存储空间,可组成32768行,528列,其中后备的16列的列地址编码为513~527,可进行528字节为一页的读、写和32页为一块的擦除操作。此外,K9F2808的特点还在于其命令、地址和数据信息均通过8条I/O总线传输,接口标准统一,易于存储容量升级。


LPC2114和Flash电子硬盘之间的连线如示意图,由于LPC2114没有外部总线,所以对Flash操作只能采用I/O操作方式。K9F2808各种操作具有共同特点,即在I/O端口首先发送操作命令字到命令寄存器,其后的连续3个周期发送需要操作单元的地址,顺序为:A0~A7,A9~A16,A17~A23,其中A8由命令字确定。


下面以页编程操作为例,给出K9F2808的arm驱动程序(基于ADS1.2开发环境),而页读以及块擦除等方法与页编程类似,只是读是由#RE信号来锁存数据,而擦除时只须送两个周期的地址。


row_add为页号,需要左移9位得到行地址。erase_flash()――擦除Flash函数


write_command()――写命令函数


write_address()――写地址函数


write_data()――写数据函数


read_data()――读数据函数


void flash_store(uint32 row_add, uint8 *buffer)


{ uint16 i;


uint32 statue,address;


//变量定义


IO0DIR |= 0x00ff0000;


//设定IO方向


if((row_add== 0)||((row_add%32)==0))


{address = row_add《9;


address 0x00fffe00;


erase_flash(address);}


//擦除Flash


write_command(0x80);


//写命令80H


address = row_add《9;


address 0x00fffe00;


write_address(address);


//写地址


statue = IO0PIN;


//获取状态


while((statue


{statue = IO0PIN;}


//忙,等待


for(i=0;i<528;i++)


//写528字节


{write_data(*(buffer+i));}


//写入数据


write_command(0x10);


//写命令10H


statue = IO0PIN;


//获取状态


while((statue&fr_b)==0)


{statue = IO0PIN;}


//忙,等待


write_command(0x70);


//写命令70H


statue = read_data();


//获取状态


if(statue&0x01)


{IO0SET |= errorled;}


//操作失败


}


LPC2114串口通信实现


控制系统通过LPC2114的两个UART实现和LD4以及中心站的数据交换,两个UART具备触发点可调的16B收发FIFO.其中,UART1比UART0增加了调制解调器接口。UART的基本操作方法和传统51内核单片机相似。


首先,设置I/O连接到UART;然后设置串口波特率(如U0DLM、U0DLL);接着设置串口工作模式(如U0LCR、U0FCR);这时就可以通过寄存器U0THR和U0RBR发送/接收数据了,发送/接收模块的状态信息可以通过U0LSR寄存器读取。


系统通过RS-485总线和LD4板卡通信,采用MAX3485作为RS-485总线控制器和LPC2114的UART1通信。MAX3485是3.3V供电的半双工收发芯片,将差分RS-485总线信号转换成arm核能够接受的串口信号。为了实现和PC机通信,系统采用3.3V工作电压的MAX3232作为RS-232电平转换芯片。


LPC2114设计注意事项


LPC2114在开发的过程中有一些需要特殊注意的问题,总结如下:


(1)当用户程序写入Flash后不能运行时,首先,需要考虑中断向量表是否正确,中断向量表累加和必须为0.其次,需要考虑向量表的定位,向量表是否已经定位在0x00000000地址。然后,需要考虑MEMMAP寄存器的设置是否正确,否则中断无法执行。此外,还需要考虑ISP硬件条件是否满足,LPC2114的P0.14脚在#RESET为低时,该引脚线上的低电平将强制芯片进入ISP状态,硬件设计时必须在该引脚加10KW上拉电阻,否则,该引脚不稳定,对设备启动将会有影响。


(2)LPC2114共有46个GPIO,这些I/O可以任意配置,但是个别引脚开漏输出(P0.2、P0.3),需加上拉电阻。另外,Flash存储器K9F2808状态输出引脚R/#B开漏输出,需加10KW的上拉电阻。


(3)LPC2114芯片加密后,只能通过ISP对芯片全局擦除后才能恢复JTAG调试以及下载等功能。当#RESET为低时,P1.26的低电平使P1.26~P1.31复位后作为调试端口,注意在P1.26引脚和地之间需接一个弱偏置电阻。


系统软件设计思想及注意事项


车辆检测系统arm软件采用分层设计思想,整个软件由驱动程序和应用软件两部分构成。驱动程序部分封装了Flash操作、RS-485操作、实时时钟(RTC)操作、RS-232操作和I/O等操作。应用软件分成基本函数库和主程序。


在32位arm核应用系统中,为了进行系统初始化,往往采用一个汇编文件作为启动代码,来实现堆栈、中断、系统变量、I/O初始化以及地址重映射等操作。开发平台ADS的策略是不提供完整的启动代码,不足部分需要开发人员自己编写。


系统设计的启动代码包含中断向量表、堆栈初始化以及相应的中断服务程序与C语言的接口。对LPC2114而言,为了使向量表中所有数据32位累加和为0 ,向量表中设置保留向量值,将中断向量表中的32个字节数累加,其中,保留向量值不用累加,然后取累加值的补码,这个补码的低32位就是保留向量的值。该保留向量值将被BOOT装载程序用作有效的用户程序关键字。当向量表中所有数据累加和为0时,且ISP外部硬件条件不满足时,BOOT装载程序将执行用户程序。


结语


本文基于PHILIPS公司最新的arm7内核微处理器LPC2114实现了高速公路车辆检测系统的控制单元部分的设计。LPC2114使用简单、开发容易、具有较高的性价比,非常适用于嵌入式系统中。目前本系统已经推向市场,并取得了较好经济效益。


推荐阅读

史海拾趣

Daito Communication Apparatus Co Ltd公司的发展小趣事

随着微电子学的快速发展,电子设备对元器件的要求也越来越高。Daito公司敏锐地捕捉到了这一市场趋势,决定对保险丝进行进一步的创新。在1995年,他们成功开发出了适用于电路板安装的高精度小型报警保险丝。这一产品的推出,不仅满足了市场对小型化、高精度保险丝的需求,也进一步巩固了Daito公司在电子行业中的领先地位。

随后,Daito公司又针对微电子学的进一步发展,推出了可以连续自动安装的方形微型保险丝。这一产品的推出,大大提高了生产效率,降低了成本,同时也为客户提供了更加便捷的使用体验。近年来,随着面安装技术的兴起,Daito公司又迅速推出了适用于面安装技术的片状保险丝,再次展示了他们在电子行业中的创新实力。

请注意,由于篇幅限制,以上仅为两个故事示例。如果需要更多故事,可以进一步深入研究和探索Daito公司在电子行业中的发展历程和创新实践。

General Industrial Controls ( GIC )公司的发展小趣事
Q值反映了电感器的品质因数,直流电阻则会影响电路的效率。一般来说Q值越高、直流电阻越小则性能越好但成本也越高。因此需要根据具体需求和预算来选择合适的电感器。
ERNI Electronics公司的发展小趣事

随着公司规模的扩大和产品线的丰富,ERNI Electronics开始积极拓展全球市场。1980年,公司在美国建立了分公司,为后续成为全球供应商打下了坚实的基础。此后,ERNI在新加坡建立了亚洲区总部,并在中国、台湾、韩国、泰国、马来西亚和印度等地设立了销售办事处。这一系列举措使得ERNI的产品能够覆盖更广泛的市场,满足了全球客户的需求。

ENOCEAN公司的发展小趣事

自推出第一代产品以来,EnOcean凭借其卓越的性能和独特的优势,在欧洲市场上取得了良好的销售业绩。随后,随着公司不断推出新产品和技术,其产品的应用领域也逐渐扩大至全球范围。如今,EnOcean的无线模块已被全球100多家制造商选中,用于实现他们的建筑和工业系统理念。无线组件已经在超过20万栋建筑中使用,为节能建筑和创新产业提供了重要支持。

American Power Devices Inc公司的发展小趣事

在电子行业的初期,APD公司凭借其卓越的技术研发团队,成功开发出了一款高效能的电源管理芯片。这款芯片以其低能耗、高稳定性等特点迅速获得了市场的认可。随着技术的不断迭代和更新,APD持续投入研发,推出了一系列具有竞争力的产品,逐渐在电源管理领域树立了领先地位。

HellermannTyton公司的发展小趣事

进入21世纪后,Heimann Optoelectronics Gmbh意识到全球化合作的重要性。公司积极寻求与国际知名企业的合作机会,与美国一家领先的半导体制造商共同研发了新一代的光电集成芯片。这一合作不仅提升了产品的技术水平和市场竞争力,还借助合作伙伴的全球销售网络,将Heimann的产品迅速推向国际市场。同时,公司也在亚洲设立了研发中心和生产基地,进一步提升了生产效率和供应链管理能力。

问答坊 | AI 解惑

**** 如果你在EVC中用过浏览网页的控件的话请进来帮帮我?(很简单的,得到答案后立即赠分) ****

我在EVC下用到了浏览网页的控件 HWND  m_hCtlHtml = ::CreateWindow(TEXT(\"DISPLAYCLASS\"), NULL, WS_VISIBLE, 0, 0, 100, 100, m_hWnd, NULL, g_hInst, NULL); 网页已经可以打开了,但是我现在想实现的功能是,不通过拖动滚动条, 而 ...…

查看全部问答>

2005年电子竞赛文集

本帖最后由 paulhyde 于 2014-9-15 09:42 编辑   好资料  …

查看全部问答>

你们在使用IAR时有没有觉得它内存泄漏了?

我总感觉它有内存泄漏,然后过不了多久,资源就耗尽了……有时编辑器还出现文字丢失,开始是注释全没了,然后是其它文字也没了,再滚动几下,可能就死掉了,我晕……难道是我的系统有问题…………………

查看全部问答>

高效免费的ST7专用16KC编译器

此帖内容为2年前所发,二姨打扫卫生时把旧货全扔了,我跑到千里之外把它捡回来了。ST7的C编译器主要是COSMIC 和HIWARE(现在叫METROWERKS)。这两种C编译器的早期免费版本功能太弱(1~2k的程序量),基本没甚么实用价值。 COSMIC最 ...…

查看全部问答>

STM32用SWD调试时要烧写FLASH是不是一定要接RESET?

一直在核心板上玩 103ZE 都是些小程序  都是在RAM中调试的 而且只接三根线GND SWDIO SWCLK (VCC 直接接JLINK内部的) 很爽利 不过今天要试IIS 要放一个大的数据进去 于是要烧到FLASH中去  发现很快进度条走完 & ...…

查看全部问答>

430串口通讯问题

//两块电路板,单片机都是MSP430F427,一块通过串口发送,另一块通过串口接收,现在问题是 //发送板一直没有发出信号,测量输出端口(TX),一直保持高电平,通过硬件仿真跟踪发现只要 //将该串口引脚设置为串口功能该引脚(TX)就一直处于高电平 ...…

查看全部问答>

帮帮忙 程序进不了中断

#include \"msp430x14x.h\" void  main (void){ WDTCTL = WDTPW + WDTHOLD; //unsigned char i;  /*------选择系统主时钟为8MHz-------*/    /*BCSCTL1 &= ~XT2OFF;     &nb ...…

查看全部问答>

直线位移传感器原理与使用要求

  直线位移传感器是通过电位器元件将机械位移转换成与之成线性或任意函数关系的电阻或电压输出的装置。普通直线电位器和圆形电位器都可以分别用作直线位移和角位移传感器。但是,为实现测量位移目的而设计的电位器,就一定要要求在位移变化和电 ...…

查看全部问答>