#define uchar unsigned char
#define uint unsigned int
sbit DIO=P3^0
sbit SCLK=P3^1
/*从SPI总线上读入一个字节*/
uchar read(void)
{
uchar data i,inData
for(i=0i<8i++) // 移8次
{
SCLK = 0 // 拉低时钟线
inData <<= 1// Most Significant Bit First
inData |= DIO // 从SPI总线的数据输出线SO上读入一位
SCLK = 1 // 拉高时钟线
}
return(inData)
}
/*输出一个字节到SPI总线上*/
void write(uchar outData)
{
uchar data i
for(i=0i<8i++) // 移8次
{
SCLK = 0
outData <<= 1
DIO = CY // 移出一位,送出至SPI总线的数据输入线SI上
SCLK = 1
}
}
void do_n_byte(uint length,uint* pSend)
{
while(length--)
{
write(*pSend)
pSend++
}
// PORTB |= (1<<ADS1255_CS)
}
long int read_data(void)
{
uchar i,send[]={0x01,0xff,0xff,0xff}
long int date
do_n_byte(sizeof(send),send)
// strncpy((uchar*)&data,send+1,3)
for(i=0i<24i++)
{
SCLK = 0 // 拉低时钟线
date <<= 1 // Most Significant Bit First
date |= DIO // 从SPI总线的数据输出线SO上读入一位
SCLK = 1 // 拉高时钟线
}
// _NOP()
//send[1]=read()
//send[2]=read()
//send[3]=read()
//date = send[1]*65536 + send[2]*256 +send[1]
return date
}
/*
long int read_data_c(uchar num)
{
uchar send[]={0x03,0xff,0xff,0xff}
long int date[]
long int j=0
do_n_byte(sizeof(send),send)
date[0] = send[1]*65536 + send[2]*256 +send[1]
for(j<numj++)
{
uchar send[]={0xff,0xff,0xff}
do_n_byte(sizeof(send),send)
date[j+1] = send[1]*65536 + send[2]*256 +send[1]
}
return date
}
*/
long int read_standby(void)
{
uchar send[]={0x01,0xff,0xff,0xff,0xfd}
long int date
do_n_byte(sizeof(send),send)
strncpy((uchar*)&date,send+1,3)
return date
}
void set_selfcal(void)
{
//PORTB &= ~(1<<ADS1255_CS)
write(0xf0)// lfcal command byte(in order to get the best performance)
// PORTB |= (1<<ADS1255_CS)
}
void set_wakeup(void)
{
//PORTB &= ~(1<<ADS1255_CS)
write(0x00)//wakeup command byte(0xff can too)
//PORTB |= (1<<ADS1255_CS)
}
void set_standby(void)
{
//PORTB &= ~(1<<ADS1255_CS)
write(0xfd)//standby command byte
//PORTB |= (1<<ADS1255_CS)
}
void set_sync(void)
{
//PORTB &= ~(1<<ADS1255_CS)
write(0xfc)//sync command byte
//PORTB |= (1<<ADS1255_CS)
}
void write_register(uchar addr,uchar date)
{
uchar send[] = {0x50,0x00,0x00}//write 1 register(as used 0x00)
send[0] |= addr//starting from register addr(as used 0101 "addr"b)
send[2] |= date//data writed
do_n_byte(sizeof(send),send)
}
uchar read_register(uchar addr)
{
uchar send[] = {0x10,0x00,0xff}//read 1 register(as used 0x00)
send[0] |= addr//starting from register addr(as used 0001 "addr"b)
do_n_byte(sizeof(send),send)
send[2]=read()
return send[2]//content saved in the send[2]
}
void init_spi(void)
{
}
void main()
{
while(1)
}
射线穿过物体时会被吸收,其吸收强度与物体的密度、厚度等物 理特性有关,辐射成像系统利用这一物理原理进行成像。在辐射成像系统中,探测器将包含有被测物信息的射线信号转化 成易于处理的电信号,经过后续的放大、成形等处理,并进行模数转换,变成数字信号,传输到计算机;图像处理分系统将这些数据处理, 可以重建出检测的透视图像。探测器信号包含被测物的信息,为得到这些信息,要做相应的后 续处理,包括进行放大滤波成形,降低噪声,提高信噪比,进行A/D 变换等。由于这些信息是图像处理分系统进行图像重建的信息来源, 因此釆集的准确性(信噪比的好坏、数字量化的精度等)对图像质量 有直接影响。传统的探测器前放电路基本上釆用阻容反馈前放,模拟信号传输一定距离后进行A/D变换,实现数据采集。这种数据釆集的方式的测 量误差主要表现在以下几点阻容反馈前放的反馈电阻噪声;成形电 路的d道亏损;采样保持电路不能准确在脉冲峰顶釆样,从而带来的 测量误差;前放信号模拟传输会带来传输干扰。另外,传统的数据采集系统釆用的是16位A/D,当模拟电路的信噪比高于16位时,A/D的 量化噪声也将成为影响系统总体信噪比的主要因素。实用新型内容本实用新型的目的是为了克服上述现有技术中存在的缺陷,提供一种用于辐射成像的数字化探测器模块及数据获取模块。为了实现上述实用新型目的,本实用新型釆用如下技术方案 一种辐射成像数据采集设备,包括探测器装置、主控装置和通用 计算机,所述探测器装置包括至少一探测器,用于将X射线转换为 电流信号,至少一开关积分前放模块,用于将所述电流信号进行积分 前置放大,至少一差值滤波模块,用于在所述开关积分前放模块将所 述电流信号积分放大的同时使用差值滤波模块减小开关电荷的噪声, 至少一A/D转换模块,用于将经开关积分前放模块和差值滤波模块放 大、滤波后的模拟信号变换为数字信号,至少一数据缓存模块,用于 存储A/D变换后的数字信号;所述主控装置通过接口电路与所述探测 器装置相连,并且通过以太网接口与通用计算机进行通信,将数据传 送给图像处理软件,由图像处理软件根据这些与探测器相关的数据进 行图像重建。优选的,所述探测器装置还具有时序、控制电路,使用FPGA产 生前放的开关控制时序、A/D变换时序、各模块之间的通讯协议,并 同时使用FPGA内部的双口 RAM作为数据缓存。优选的,所述开关积分前放模块中包括八个相同的前放通道电 路,每个前放通道电路分别由一开关积分前放芯片、两个相同的釆样 保持电路和一差分放大器组成。优选的,多个所述探测器装置可以通过串行接口级连起来,最后 与一个主控模块连接,将数据传送到主控装置,通过以太网接口与通 用计算机进行通信和数据传输。优选的,所述开关积分前放模块可以釆用IVC102或ACF2101 芯片。优选的,所述A/D转换模块中的A/D芯片可以是ADS1251、 ADS1252、 ADS1254或ADS1256等24位A/D芯片。优选的,所述的主控装置中也具有一时序、控制电路,通过FPGA产生接口通讯时序,接收来自探测器装置的数据、实现数据缓存,并 产生同步控制时序。优选的,在所述接口电路中,控制信号和数据信号釆用不同的接 口进行数据传输。优选的,在所述接口电路中,使用RS485进行控制信号的传输, 使用LVDS进行数据信号的传输。优选的,在所述主控装置中釆用单片机网络模块RCM3200来进 行数据的获取和与通用计算机的通讯。本实用新型具有以下优点1. 釆用开关积分放大器作为探测器的前置放大器,解决了传统 阻容反馈前放的反馈电阻噪声、成形电路的d道亏损的问题;同时, 采用差值滤波的方法减小开关积分放大器带来的开关噪声的负面影 响,因此,具有测量准确、噪声低的优点。2. 采用24位的A/D进行模数转换,具有精度高、动态范围大的优点。3. 使用FPGA产生前放的开关控制时序、A/D变换时序、各模块 之间的通讯协议、并同时使用FPGA内部的双口RAM做数据缓存,具 有电路简化、集成度高、可扩展性强的优点。4. 使用RS485差分信号进行控制信号的传输、使用LVDS差分信 号进行数据信号的传输,具有抗干扰能力强、数据传输率高的优点。5. 使用单片机网络模块进行数据获取和与计算机通讯,具有通 讯协议简单、使用方便的优点。
图l为本实用新型的工作原理图; 图2为探测器装置中前放子电路板工作原理图; 图3为探测器装置中开关积分前放和差值滤波电路结构图; 图4为探测器装置中A/D主电路板工作原理图5为探测器装置中24位A/D电路结构图;图6为探测器装置中FPGA和接口电路结构图;图7为主控装置的工作原理图;图8为主控装置的FPGA和接口电路结构图;图9为主控装置单片机网络模块RCM3200电路结构图;图10为本实用新型的使用框图。
具体实施方式
以下实施例用于说明本实用新型,但不用来限制本实用新型的范围。本实用新型提出的用于辐射成像的数字化探测器模块及数据获 取模块结合附图和实施例说明如下。为方便理解,在以下的表述中, 探测器装置又可称为前放-A/D模块,主控装置又被称为主控模块。参看图l,虚线部分为实现本实用新型的数字化探测器模块和数 据获取模块的电路,包括实现前置放大及模数变换的前放-A/D模 块、实现数据获取和控制的主控模块,对应的电路有对探测器信号进 行开关积分放大及差值滤波的电路、模数转换电路、数据缓存和控制 电路、接口电路、控制及网络传输电路。前放-A/D模块由前放电路子板和A/D主电路板构成,通过插针 实现电气连接。图2为前放-A/D模块中前放电路子板的工作原理图。如图2所 示, 一块前放电路子板中包括八个相同的前放通道电路,分别连接到 探测器信号的八个输入端和前放信号的八个输出端。每个前放通道电 路由一开关积分前放电路、两个相同的采样保持电路和一差分放大器 组成。探测器的信号输入到开关积分前放进行前置放大后,送到两个 相同的采样保持电路,分别是在探测器信号到来之前和之后进行保持 后,再将这两路信号送到差分放大器去相减,从而保留了信号幅度的 大小,同时又减去了由于开关积分前放开关过程中带来的有涨落的本
底,进而达到减小噪声的目的。前放电路子板每个前放通道电路的具体实现电路如图3所示。其 中开关积分前放芯片可以是IVC102、 ACF2101,釆样保持芯片可以是 LF298或其他模拟开关,在本实施例中,开关积分前放使用的是 IVC102,采样保存芯片使用的是LF298。探测器信号IN经过芯片U1 (IVC102)放大,输入到芯片U2、 U3 (LF298)进行采样保持,再 送到差分放大器U4 (INA133)进行差分放大后成为输出信号OUT输 入到A/D主电路板。控制开关前放和釆样保存的控制信号RESET、 SHO、 SH1也由A/D主电路板提供。 一块前放电路子板中有八个相同 功能的上述前放通道电路。图4为前放-A/D模块中A/D主电路板的工作原理图,其中的A/D 部分、FPGA和接口电路部分的具体实现电路分别如图5和图6所示。 在图4中, 一个A/D主电路板使用四个四通道的A/D芯片,可以接两个 前放电路子板。前放子电路输出的放大成形的信号输入到24位A/D进 行模数转换,变换完的数据送到FPGA的A/D数据缓存RAM中进行缓 存,再通过接口电路传输出去,FPGA同时还完成开关积分前放、A/D 变换等时序控制信号的产生。图5为A/D主电路板中A/D部分的具体实现电路,其中A/D芯片可 以是ADS1251、 ADS1252、 ADS1254、 ADS1256等24位A/D芯片,在 本实施例中,使用的是ADS1254,四通道的A/D,可以对来自前放子 电路板的四个通道信号进行模数变换。前放子电路板的各通道信号输 出OUT分别连接到A/D的输入VO0~VO3,变换完的数据在SCLKO的 控制下,由DO一RD信号输出。U2为基准电压源,为A/D芯片提供参 考电压。 一块A/D主电路板中有四个相同功能的A/D,从而实现十六 个信号通道的模数变换,变换好的数据送到FPGA。A/D主电路板中FPGA和接口电路部分的具体实现电路如图6所 示。在本实施例中,FPGA使用的是XC2S50,连接各个A/D的DO—RD
信号,接收A/D变换好的数据,并将其存储,实现数据缓存的功能, 同时还产生开关前放控制信号RESET、 SH0、 SH1以及A/D变换时序 的控制信号SCLKO等。接口电路由U14( MAX3096 )、U15( MAX9112 )、 U16 (MAX9113)构成,分别实现RS485控制信号的接收和LVDS数 据信号的输入和输出。其中U14 (MAX3096)为RS485接收器,接收 从主控模块经电缆传输来的差分控制信号(RS、 HS等),转换成TTL 电平,送到FPGA中,控制FPGA产生前放-A/D模块的复位、同步等 时序;U16 (MAX9113)是LVDS接收器,接收从前一个前放-A/D 模块经电缆传输来的差分串行数据信号SDI和相应差分时钟信号 SDCLKI,转换成TTL电平,送到FPGA中,并由此得到前一个前放-A/D模块的数据,在FPGA中缓存;U15 (MAX9112)是LVDS发送器, 将FPGA需要发送的数据信号SDO和相应差分时钟信号SDCLKO转换 成LVDS差分信号,通过电缆将数据传送到下一个前放-A/D模块或 主控模块。图7为主控模块的工作原理图,通过接口电路主控模块实现与前 放- A/D模块的通讯。通讯时序和控制时序由主控模块中的FPGA产 生,并将输入的数据保存在FPGA内部的数据缓存RAM中;FPGA再 将数据传送到单片机网络模块RCM3200,并通过以太网最终将数据 传送到计算机;另外,FPGA中产生同步控制信号,同步源可以是外 同步信号,也可以是内同步信号,同步输出信号用于级连更多的主控 模块,实现协同工作。图8为主控模块中FPGA和接口电路部分的具体实现电路。在本实 施例中,FPGA使用的是XC2S50,产生接口通讯时序,接收来自前放 -A/D的数据、实现数据缓存,并产生同步控制时序,接口电路由U6(MAX3096)、 U7 ( MAX3032E )、 U8 ( MAX9113 )构成,分别实现 RS485控制信号的接收和输出以及LVDS数据信号的输入。其中U7(MAX3032E)为RS485发送器,将FPGA产生的对前放-A/D模块的
控制信号(RS、 HS等),转换成RS485差分电平传送出去;U8 (MAX9113)是LVDS接收器,接收从前放-A/D模块经电缆传输来 的差分串行数据信号SDI和相应差分时钟信号SDCLKI,转换成TTL 电平,送到FPGA中,并由此得到前放-A/D模块的数据;U6 (MAX3096)为RS485接收器,当该主控模块作为从模块时,可以接 收主模块的同步信号。由于主控模块和前放-A/D模块之间的控制信 号使用RS485差分信号进行传输、数据信号使用LVDS差分信号进行 传输,因而具有抗干扰能力强、数据传输率高的特点。图9为主控模块中单片机网络模块RCM3200接口的具体实现电 路,RCM3200的PA、 PB、 PE等端口与FPGA相连,实现对FPGA的寄 存器读写、工作方式的控制、数据的读出等等。图10为本实用新型的使用框图。在本实施例中,图10所示为一个 MxNxl6通道的系统组成框图,总共有M个主控模块,每个主控模 块带有N个前放-A/D模块(共16 x N个通道),其中O号主控模块为主 模块,其他为从模块,以保证数据的同步。主模块接收外同步信号, 并由此产生同步输出,从模块接收主模块的同步输出,从而实现各模 块间的数据同步。前放-A/D模块之间通过多芯电缆串行连接,最后 一个模块和主控模块相连。所有的主控模块和计算机都通过网线连接 的交换机,组成一个局域网,实现数据通讯。以上实施方式仅用于说明本实用新型,而并非对本实用新型的限 制,虽然本实施例表述的是辐射检测技术,但本领域技术人员可以将 其应用到其它领域以解决辐射成像数据采集问题,有关技术领域的普 通技术人员,在不脱离本实用新型的精神和范围的情况下,还可以做 出各种变化和变型,因此本领域技术人员在本实施例的基础上进行的 所有相关的扩展和应用都应落入本申请的保护范围。
权利要求1、一种辐射成像数据采集设备,包括探测器装置、主控装置和通用计算机,其特征在于,所述探测器装置包括至少一探测器,用于将X射线转换为电流信号,至少一开关积分前放模块,用于将所述电流信号进行积分前置放大,至少一差值滤波模块,用于在所述开关积分前放模块将所述电流信号积分放大的同时使用差值滤波模块减小开关电荷的噪声,至少一A/D转换模块,用于将经开关积分前放模块和差值滤波模块放大、滤波后的模拟信号变换为数字信号,至少一数据缓存模块,用于存储A/D变换后的数字信号;所述主控装置通过接口电路与所述探测器装置相连,并且通过以太网接口与通用计算机进行通信和数据传输。
2、 如权利要求1所述的辐射成像数据釆集设备,其特征在于所 述探测器装置还具有时序、控制电路,使用FPGA产生前放的开关控 制时序、A/D变换时序、各模块之间的通讯协议,并同时使用FPGA 内部的双口 RAM作为数据缓存。
3、 如权利要求1所述的辐射成像数据釆集设备,其特征在于 所述开关积分前放模块中包括八个相同的前放通道电路,每个前放通 道电路分别由一开关积分前放芯片、两个相同的釆样保持电路和一差 分放大器组成。
4、 如权利要求1至3之一所述的辐射成像数据釆集设备,其特 征在于多个所述探测器装置可以通过串行接口级连起来,最后与 一个 主控模块连接,将数据传送到主控装置,通过以太网接口与通用计算 机进行通信和数据传输。
5、 如权利要求4所述的辐射成像数据釆集设备,其特征在于所 述开关积分前放模块可以釆用IVC102或ACF2101芯片。
6、 如权利要求4所述的辐射成像数据釆集设备,其特征在于所 述A/D转换模块中的A/D芯片釆用24位A/D芯片。
7、 如权利要求4所述的辐射成像数据采集设备,其特征在于所 述A/D转换模块中的A/D芯片可以是ADS1251、ADS1252、ADS1254 或ADS1256。
8、 如权利要求4所述的辐射成像数据采集设备,其特征在于所 述的主控装置中也具有一时序、控制电路,通过FPGA产生接口通讯 时序,接收来自探测器装置的数据、实现数据缓存,并产生同步控制 时序。
9、 如权利要求5-8之一所述的辐射成像数据采集设备,其特征 在于在所述接口电路中,控制信号和数据信号釆用不同的接口进行 数据传输。
10、 如权利要求9所述的辐射成像数据釆集设备,其特征在于 在所述接口电路中,使用RS485进行控制信号的传输,使用LVDS 进行数据信号的传输。
11、 如权利要求IO所述的辐射成像数据采集设备,其特征在于 在所述主控装置中釆用单片机网络模块来进行数据的获取和与通用 计算机的通讯。
专利摘要本实用新型涉及辐射检测技术领域。一种辐射成像数据采集设备,所述设备包括探测器装置、主控装置和通用计算机,所述探测器装置包括至少一用于将X射线转换为电流信号的探测器,至少一用于将所述电流信号进行积分前置放大的开关积分前放模块,至少一用于减小开关电荷的噪声的差值滤波模块,至少一A/D转换模块,和至少一数据缓存模块;所述主控装置通过接口电路与所述探测器装置相连,并且通过以太网接口与通用计算机进行通信和数据传输。本实用新型具有测量准确、噪声低、精度高、动态范围大、电路简化、集成度高、可扩展性强、抗干扰能力强、数据传输率高、通讯协议简单、使用方便的优点。
我不是神人,但我希望可以帮你解决问题,呵呵……首先,我有个小问题,你要求算的是2+4+8+……+100,是不是2的1次方,2次方,3次方?如果是,那应该是2+4+8+16+32+64,怎么有还加100呢?或者你笔误,应该是2—100之间的偶数相加呢?
好,下面来解决你的问题:
1.用ADS1.2运行你的加法程序,要注意一点就是ADS不能直链接运行C遍出来的程序,要用汇编代码启动。下面是启动代码startup.s文件(我空间有关于这个代码的分析,你可以去看看):
IMPORT |Image$$RO$$Limit|
IMPORT |Image$$RW$$Base|
IMPORT |Image$$ZI$$Base|
IMPORT |Image$$ZI$$Limit|
IMPORT Main 声明C程序中的Main()函数
AREA Start,CODE,READONLY 声明代码段Start
ENTRY标识程序入口
CODE32声明32位ARM指令
Reset LDR SP,=0x40003F00
初始化C程序的运行环境
LDR R0,=|Image$$RO$$Limit|
LDR R1,=|Image$$RW$$Base|
LDR R3,=|Image$$ZI$$Base|
CMP R0,R1
BEQ LOOP1
LOOP0 CMP R1,R3
LDRCC R2,[R0],#4
STRCC R2,[R1],#4
BCC LOOP0
LOOP1 LDR R1,=|Image$$ZI$$Limit|
MOV R2,#0
LOOP2 CMP R3,R1
STRCC R2,[R3],#4
BCC LOOP2
B Main 跳转到C程序代码Main()函数
END
2. 启动代码写好后,再编写C代码,运行你的程序(按你的意思算)
#define uint8 unsigned char //这两个宏定义是ADS里面防止数据溢出带的
#define uint32 unsigned int
#define N 100
uint32 sum
// 使用加法运算来计算2+4+8+……+N的值。
void Main(void)
{ uint32 i
sum = 0
for(i=0i<=Ni=i*2)
{ sum += i
}
while(1)
}
3. 这两个程序合在一起才是是完整的ADS实现程序,希望可以解决你的困惑。
祝你进步!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)