基于一个支持实时仿真和跟踪的16/32ARM7TDMI-SCPU

摘要:设计了一种CAN-USB转换器can上位机软件,实现CAN总线与上位机的实时通信,完成CAN总线通信的实时信息获取。

关键词:USB;CAN总线;LPC2119

介绍

在ABS(Anti-lock Braking System)ECU(Electronic Control Unit)开发过程中,为了实时确定其行驶参数和控制参数,通常采用标定技术。标定技术是通过一定的命令将控制算法上传并读取到ECU。参数实现实时修改,寻求最优工艺。对于车辆电控单元,通常只有CAN总线通讯接口。为了实现上位机与ECU之间的直接通信,并实现利用标定技术开发ABS ECU,我们设计了一个CAN转USB数据。转换器。CAN通信协议是车内测量和执行部件之间使用的数据通信协议。USB具有即插即用的优点,具有更高的通信速率,非常方便上位机和下位机之间的通信校准。我们设计的数据转换器采用NXP公司的LPC2119 ARM7处理器,成功实现了上位机与ECU的可靠通信以及下位机的标定。

系统硬件设计

LPC2119 ARM7处理器

LPC2119 是一款基于 16/32 ARM7TDMI-S CPU 的微控制器,支持实时仿真和跟踪,具有 128/256kB 嵌入式高速闪存。128 位宽的存储器接口和独特的加速结构使 32 位代码能够以最大时钟速率运行。

USB转换芯片CH372

CH372是USB总线通用设备接口芯片。在本地端,CH372有8位数据总线和读、写、片选控制线和中断输出,可以方便地连接到控制器的系统总线上;CH372 内置了 USB 通信中的底层协议,在内置固件模式下,CH372 自动处理默认端点 0 的所有事务。

系统设计

转换器直接使用USB的5V电源,使用LM1117将5V电源转换成3.3V和1.8V供ARM处理器及其外围模块使用,并供逻辑电平使用CAN 控制器输出 将TJA1050 转换成差分电平输出CH372 设计非常重要。外接电容用于CH372的内部和外部电源节点去耦。LPC2119的每个电压管脚都连接了0.01mf电容进行滤波。在USB转换芯片的设计中,选用了可选的4.7kW电阻,在断电后及时释放电解电容中的电能,使VCC及时降到0V,保证下次上电时CH372能可靠接地。电气复位。为了使CH372可靠复位can上位机软件,电源电压从0V上升到5V的上升时间应小于100ms,因此电容的容量和电阻的阻值不宜过大。CH372的时钟振荡电路采用15pF单片或高频陶瓷电容作为启动电容。

系统硬件设计框图如图1所示。

图 1 转换器框图

系统软件设计

系统程序主要包括CAN控制器驱动、USB控制芯片CH372驱动、数据读写缓冲区设计,以及如何调用CAN和USB读写函数更好的同步数据通信。

CAN驱动

根据LPC2119微处理器CAN控制器的特点,将CAN驱动分为三个层次: 1.硬件抽象层:用数据类型抽象出CAN控制器的硬件特性,提供CAN控制器硬件操作接口。寄存器和物理层对应的地址映射定义了CAN控制器寄存器的数据类型和寄存器的操作方法。2.函数功能层:CAN控制器各种功能的实现函数,该层的功能利用硬件抽象层中寄存器操作的接口访问CAN控制器,实现各种CAN控制器提供的功能. 3.应用程序接口层:

CH372驱动

CH372芯片在本端提供了一个通用的无源并行接口。CH372芯片的读写时序主要要求读写使能信号的持续时间为2~10ms,a0=1时写命令,a0=0时读写数据。本设计中,LPC2119的IO口用于表示CH372的各个信号,需要严格按照其时序要求,用软件模拟其读写时序。一个典型的写数据子函数如下:

USBWriteData(uint32 数据)

{

……………………

IO0CLR=0x00000010;//a0=0,表示如下

作为数据写入

IO0PIN=数据;//向数据端口写入数据

IO0SET=0x00000020;//rd=1,读信号无效

IO0CLR=0x00000040;//wr=0,写使能

Delay8us(1); //延迟8us,表示写信号

有效宽度

IO0SET=0x00000060;

……………………

}

上述程序中,每个端口的操作代表CH372的读写时序信号的顺序,适当的延迟代表有效的写/读选通WR/RD的宽度,典型值为90到10000ns,我们选择25 毫秒。同理可以得到写命令和读数据子函数:USBWriteCMD(uint32 CMD)、USBReadData()。调用上述子函数提供了发送和接收数据的函数:IRQ_CH372(void)、UploadUSBData(unint32 Length, uint32 Data[])。

环形缓冲区

在本设计中,设计了两个环形缓冲区分别存储USB和CAN的数据,使它们可以同步发送。一个典型的缓冲区数据结构如下:

结构 CANRecRinBuf

{

Uint32 CANBuf[MAX];

Uint32 写入指针;

Uint32 读取指针;

}

数据元素是一个无符号的 32 位整数,MAX 是环形缓冲区的最大长度,WritePtr 是读指针,ReadPtr 是写指针。读写指针初始化为WritePtr = ReadPtr = 0。CAN控制器接收到的数据存储在环形缓冲区CANRecRinBuf中,然后从USB端读出数据并输出,保证了数据通信的可靠性.

上位机监控接口

安装CH372的上位机驱动程序后,上位机就可以识别基于CH372的USB设备。调用CH372提供的动态链接库CH372.dll及其对应的LIB文件CH372.Lib和头文件CH372.h建立上位机进程并调用提供的库通过 CH372 函数 CH375OpenDevice() 和 CH375CloseDevice() 用于打开和关闭设备,并调用 CH375WriteData();CH375ReadData()通过CH372接收下位机发送的数据,并按照CAN总线数据格式封装成CAN格式数据,提供CANDownload()、CANUpload()发送和接收CAN数据。用C++设计了相应的图形界面,实现与下位机的通讯。

结语

在ABS ECU的研发项目中,我们使用该转换器将ECU的CAN数据转换为USB数据并与上位机通信。ECU上传要监测的参数,上位机下载标定参数。其硬件采用ARM7内核的LPC2119作为控制器,底层软件的设计保证了转换器在实际ECU开发的CCP标定项目中传输大量数据的过程中具有良好的可靠性。

参考:

1. 秦恒电子.CH372 Datasheet[EB/OL].,2006

2. Philips.LPC2119 数据表[EB/OL].,2006

C++相关文章:C++教程

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论