视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
基于CH375多通道USB接口与PC机通信的实现
2025-09-23 15:42:18 责编:小OO
文档

基于CH375多通道USB接口与PC机通信的实现

作者:杨全玖 张… 文章来源:微计算机信息 点击数:29 更新时间:2007-6-11 16:39:07 

摘要:利用USB接口技术,采用USB模块CH375,在加速器核辐射监测系统中实现了多个探测通道USB接口与计算机通信。给出了CH375与单片机接口电路的原理简图,并详细介绍了实现多通道USB数据传输的上、下位机的程序设计。 

关键词:USB接口,加速器,核辐射监测系统,多通道 

    正离子静电加速器在运转过程中会产生能量较高的γ﹑X和快中子等多种放射性辐射,对周围的环境造成污染,对生命造成危害[1]。由于其体积庞大,辐射范围广,需设计一个多探测端的多通道同步核辐射监测系统,针对加速器周围环境进行辐射防护监测。每个探测端属于一个探测通道,它们相互。各通道将采集到的数据传输给上位机(主控计算机)。上位机进行数据处理并显示各个探测端的辐射强度及吸收剂量。

    若采用串口(RS232)实现多通道传输,各通道每次向上位机传输的数据容量大(16K),而串口传输速度慢,花费的时间长。在通信过程中,相应通道进入中断服务程序后,不能够再采集新的信号,更加严重地影响了系统的探测效率。于是就采用CH375构成的USB接口进行数据传输。速率可提高到1Mbit/s以上。同时USB所具有的即插即用、通用性强、易扩展、可靠性好等优点[2,3]也极大地改善了接口的使用性能。

1 CH375模块[4]简介

    USB模块CH375是一个USB总线的通用设备接口芯片,用户无需编写驱动程序,内置有USB通讯中的底层协议,完全满足USB1.1标准。具有8位数据总线(D0~D7)、地址输入(A0)、读(RD#)、 写(WR#)、片选控制线(CS#)以及中断输出(INT#),可以方便地挂接到单片机的数据总线上。当A0为低电平时选择数据端口,单片机通过8位并口对CH375进行读写数据;为高电平时选择命令端口,可以向其写入命令。

    在本地端,单片机对CH375的操作是采用命令加数据的I/O操作方式,任何操作都是先发命令(其命令格式参考文献3)给CH375,然后执行数据输入输出。CH375接收到上位机发送的数据或者发送完给上位机的数据后,以中断方式通知单片机。

    将CH375芯片的驱动程序、动态链接库拷贝到上位机中,利用CH375动态链接库DLL提供的API函数对其进行操作,对USB设备的通信就几乎和访问本地硬盘中的文件差不多了。

2 具有多个USB接口的多通道数据采集系统

    图1是加速器的核辐射监测系统。是个具有多个USB接口的多通道数据采集系统。该系统可安装连接多个探测端(最多128个)。监测不同的放射性辐射时,装配相应的探测器。每个探测通道的工作原理及电子线路都相同,分别连接到USB扩展卡上。多道分析器采用高性能AVR单片机ATmega128作为控制器。ATmega128运用Harvard结构概念,具有预取指令功能,机器周期为1个时钟周期,绝大多数指令为单周期指令,工作频率为16MHz时可达到16MIPS的性能[5]。用其控制高速模数转换电路,把探测器输出的模拟量转换成计算机可接收的数字量,进行存储,等待上位机的读取。

图1加速器多通道核辐射监测系统结构图

    单一探测通道,用CH375构成的USB接口电路原理如图2所示。各通道接收到上位机发出读取数据命令后,由ATmega128控制将所有探测数据通过USB接口电路传输给上位机。

图2  CH375构成的USB接口电路原理图

3 多个通道USB接口的软件设计

    各通道的USB模块CH375在计算机应用层与其本地端单片机ATmega128之间提供了端对端的连接。统一采用数据加应答方式进行通信,所有的通信都由计算机应用层发起,然后以接收到单片机的应答结束。单一通道完整的通信过程包括:

① 计算机应用层按事先约定的格式将数据请求发送给CH375;

② CH375以中断方式通知单片机。

③ 单片机进入中断服务程序,获取CH375的中断状态并分析;

④ 如果是上传(上传缓冲区的数据被计算机成功读取),则释放当前USB缓冲区,然后退出中断程序;

⑤ 如果是下传(下传缓冲区成功接收到计算机发送的数据),则从数据下传缓冲区读取数据块;

⑥ 分析接收到的数据块,如果是数据请求上传命令,准备应答数据(采集数据);

⑦ 单片机将采集数据写入数据上传缓冲区中,然后退出中断程序;

⑧ CH375将采集数据返回给计算机;

⑨ 计算机应用层接收到应答数据,传输结束; 

    该通讯方式具有数据自动同步、程序设计简单、较好的交互性和可控性等优点。计算机定时以此方式顺次访问各通道,获取各通道采集到的数据。

3.1 单片机端的程序设计

   各通道单片机端程序设计相同。ATmega128中断1(INT1)作为USB的中断入口(参考图2),采用数据加应答方式,其中断1服务处理程序设计流程图如图3所示。

图3 单片机端ATmega128中断服务处理程序流程图

    采用C语言编程,编写单片机端ATmega128中断1服务处理程序的基本框架如下所示:

void int1_isr (void)         //USB中断入口程序

{

CH375_WR_CMD_PORT(CMD_GET_STATUS); //向CH375发送中断状态获取命令

InterruptStatus = CH375_RD_DAT_PORT();//获取中断状态,并通知CH375取消中断请求

// 分析中断状态,并做相应处理                

if ( InterruptStatus= =USB_INT_EP2_OUT) // 数据下传

{

CH375_WR_CMD_PORT( CMD_RD_USB_DATA );// 向CH375发送读数据命令

RD_Data =CH375_RD_DAT_PORT( );//从CH375下传缓冲区读取数据块

……… //分析接收到的数据块

CH375_WR_CMD_PORT(CMD_WR_USB_DATA7); // 向CH375发送写数据命令

CH375_WR_DAT_PORT( DATA);// 将采集数据DATA写入CH375数据上传缓冲区

return;

}

If(InterruptStatus= = USB_INT_EP2_IN) // 数据上传

{

CH375_WR_CMD_PORT( CMD_UNLOCK_USB );// 释放当前USB缓冲区

    return;

}

}

3.2 计算机端的程序设计

    采用Visual C++作为计算机端应用软件的开发平台,以实现两通道USB数据传输为例,计算机端程序设计流程图如图4所示。USB设备1即指通道1;USB设备2即指通道2。

图4 计算机端两通道USB数据传输程序设计流程图

    利用MFC(微软基础类)定时器函数[6],计算机定时顺序访问两通道,获取采集数据。编写计算机端定时中断处理程序的基本框架如下所示:

OnTimer(UINT nIDEvent)  //定时函数入口

{

if (CH375OpenDevice(0 )= =INVALID_HANDLE_VALUE) // 打开USB设备1(通道1 USB模块CH375),返回句柄,出错无效

………

if (CH375OpenDevice(1 )= =INVALID_HANDLE_VALUE) //打开USB设备2 

………

if ( CH375WriteData( 0, WriteBuf, &length) ) //发送数据请求命令给USB设备1,成功发送后返回真。WriteBuf指向放置准备写出数据的缓冲区。Length指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度。

………

if ( CH375ReadData( 0, ReadBuf, & length) ) //从USB设备1读取采集数据,成功读取后返回真。ReadBuf为指向用于保存读取数据的缓冲区。Length指向长度单元,输入时为准备读取得长度,返回后为实际读取得长度。

………

CH375CloseDevice( 0 ); //关闭USB设备1

if ( CH375WriteData( 1, WriteBuf, &length) ) //发送数据请求命令给USB设备2

………

if ( CH375ReadData( 1, ReadBuf, & length) ) //从USB设备2读取采集数据

………

CH375CloseDevice( 1 ); //关闭USB设备2

}

4 结束语

    采用CH375进行USB数据传输速率高,达到1Mbit/s以上。而且无需编写复杂的USB驱动程序,利用其动态链接库即可实现多通道USB接口与PC机通信。研发简单,易于实现,可以使数据传输系统非常方便的从RS232总线转向USB总线,弥补其速度慢的缺点,进行系统升级。并且USB所具有的各种优越性能,也必将使这种接口电路在数据传输中得到更广泛的应用。

参考文献

[1]谢一冈,陈昌,王曼,等. 粒子探测器与数据获取[M]. 北京:科学出版社, 2003. 529-532. 

[2]周建斌,黄锦华. USB接口技术在核谱测量系统中的应用研究[J]. 核电子学与探测技术. 2004, 24(5). -506 -510 

[3]胡荣强,郝艳杰. USB接口在数据采集系统中的应用[J]. 微计算机信息. 2005,21(1).-51-52

[4]南京沁恒电子有限公司. USB总线接口芯片CH375. http://www.Winchiphead.com, 2005

[5]宋建国. AVR单片机原理及应用[M]. 北京:北京航空航天大学出版社, 2000. 22-26

[6]David Simon, 周瑜萍,等. Visual C++ 6编程宝典[M].

电子工业出版社, 2005.314-317

下载本文
显示全文
专题