
便携式NaI(Tl)闪烁体环境伽玛射线能谱测量系统
简介
便携式NaI(Tl) 闪烁体能谱测量系统,以NaI(Tl)闪烁晶体为核心。其能精准测量环境中的伽玛射线,统计给出辐射能量分布,帮助识别射线来源和强度。由于其便于携带造价低廉,可为环境辐射监测等提供支持
简介:便携式NaI(Tl) 闪烁体能谱测量系统,以NaI(Tl)闪烁晶体为核心。其能精准测量环境中的伽玛射线,统计给出辐射能量分布,帮助识别射线来源和强度。由于其便于携带造价低廉,可为环境辐射监测等提供支持开源协议
:CC BY-NC-SA 4.0
描述
2.1 NaI(Tl)闪烁探测器
2.2.1 NaI(Tl)闪烁体探头组成及原理
当带电粒子或γ射线进入闪烁体时,会通过电离或激发作用使闪烁体原子/分子受激,退激时发射可见光或紫外光(称为闪烁光),这些光子被光电转换器件(如PMT)捕获并转为电信号,从而实现对粒子的探测。
*能量转换过程:入射粒子在闪烁体中损失能量,产生电子-空穴对(无机闪烁体)或激发分子(有机闪烁体)。这些激发态通过辐射跃迁退激,发射出波长在可见光或近紫外区域的光子。
*注意:电子等带电粒子是直接导致的电离激发,而γ、X等光子辐射是先通过三大效应(光电效应、康普顿散射、电子对效应)转换成电子后再电离激发物质!
目前,闪烁探测器已成为广泛应用的核辐射探测器之一,几乎可以用于核辐射测量的各种场合,这其中 NaI(TI)闪烁体由于成本相对较低、探测效率高以及对射线的阻止本领强,是应用最广泛的闪烁体探测器之一,也是本文所采用的探测器。

上图展示了闪烁体探测器探头的组成结构:
入射窗:透光材料,如石英或透紫玻璃,用于保护光阴极并允许光子通过。
光阴极:光敏材料,如Sb-Cs或双碱阴极,将光子转换为光电子。
电子倍增系统:由多个打拿极(Dynode)组成,每级通过二次电子发射实现电子倍增。
阳极:收集倍增后的电子,输出电流信号。
*工作原理:光子透过入射窗→光阴极发射光电子→电子光学系统聚焦→打拿极逐级倍增(每级增益3-6倍)→阳极收集电子并输出脉冲信号。总增益可达10⁶~108。
当γ射线进入NaI(Tl)晶体后使其发射可见光子,光子经过光耦合被引导进入光电倍增管,在管的光阴极上通过光电效应打出光电子。光阴极后方是多级的金属电极,被称为倍增级或打拿级,它们通过外部的电阻分压网络形成梯度电压,让光电子在行进过程中被电场加速,打到每一级倍增级进行电子倍增,最后在输出时积累到可观的电荷数目。后续经过前端电子学部分转换后交给后端处理。

探头输出的电压脉冲信号经过一系列的模拟信号调理电路以适合ADC的输入范围。调理结束后由高速ADC进行数字化采集,并在FPGA等数字器件中进行算法处理。
本文在FPGA内也实现了数字多道所需的全部算法。数字化后的核脉冲信号最重要的就是提取其脉冲幅度,因为实际核衰变是存在随机性的,所以采集到的信号也可能出现堆积的情况,实际堆积是没法区分两峰值的原始值的,所以需要一些算法逻辑来丢弃这些脉冲,最终再形成不同脉冲幅度的统计直方图(能谱)。

上图描述了本文设计的测量系统的硬件结构图。由光电倍增管输出的电荷信号经电荷灵敏前置放大器后积分为电压脉冲信号,该核脉冲信号为双指数衰减信号。脉冲经过极零相消电路可减小其衰减时间常数,减小了脉冲堆积的可能性,而后小幅度的脉冲经过主放大器、直流偏置调整至-1V~+1V范围后输入ADC进行采集。
本文选择的FPGA为Xilinx ZYNQ7020 SOC芯片,其除了FPGA外还集成了ARM处理核心,提供了非常强的通用处理能力。故将采集、数字成形、堆积丢弃、能谱成形等逻辑置于FPGA中完成,而整机的控制、上下位机的交互便置于ARM端完成,两端各司其职使得仪器的设计更加方便快捷。



























- 电压灵敏放大器
- 电荷灵敏放大器
- 电流灵敏放大器
*对于电压灵敏放大器:电压放大器直接连接在探测器输出端、探测器输出电流信号对输出回路的总电容充电,相应的,信
号电荷量转变为电压幅度。但由于PMT、电路的杂散电容的存在容易分走部分电荷,这种测量方法的稳定性较差。但通常在输入端并联一个大电容可以很好的改善,不过会造成信噪比变差。该方法其的等效电路如下图:

一般而言,都将探测器视为一个电流源。其中CA是运放的输入电容、CS是杂散电容、CD是探测器电容(如果是半导体探测器,其CD会随工作条件变化,导致稳定性更差)
*对于电流灵敏放大器:电流放大器具有很小的输入阻抗和很大的输出阻抗。正是因为其输入电阻小,电流泄放快,杂散电容影响小,保留了电流形状。所以相比电压需要一定的时间进行充放电,电流前放应用于快速时间测量、高计数率场合或探测器必须远离测量仪器的场合。其等效电路如下图:

*电荷灵敏前置放大器:是能谱测量中最常用的放大器电路,本文也是采用本电路设计的前放。电荷灵敏放大器具有很大的等效输入电容,导致探测器输出电容和杂散电容对信号电压幅度的影响可以忽略,可以获得较大和稳定的增益,因此具有很好的稳定性和很高的信噪比。其等效电路见下图:

如果假设放大倍数为K,那么可以推导输入输出电压的差值,也即反馈电容两边的压差:

反馈电容两端的电荷量(C=Q/U):
一般而言,K都是远大于1的,此时反馈电容对放大器输入的影响相当于在输入端接了一个容量为(1+K)Cf的大电容!进一步可将输入电压表示为:

易知则输出电压可表示为:

在这也可以看出,输出电压是与输入电荷量成正比的(为了稳定性,Cf反馈电容建议使用高品质NP0电容),而从射线光子到相互作用产生的荧光在到最终输出的电荷数量都是与能量成正比的,所以在电路上,脉冲的幅度也就是与入射射线能量成正比了,这就是射线能谱测量系统的基础物理原理。
如果还还想进一步深入了解电荷灵敏前放的物理原理及过程,请转到:https://www.bilibili.com/video/BV1S44y1u7Kc/?vd_source=817cd67fd12cc8c79d28007400d43c00
所以依据上述原理和参考设计,前置放大电路如下图:

图中U1组成的即为电荷灵敏前置放大器,运放使用AD8038电压反馈运放,其中R1为反馈电容的泄放电容,那么很容易知道输出脉冲都RC常数。所以后续的PZC电路其实不需要焊接R4的可调电位器,直接焊接C7和R6即可(RC常数一致即可)。经过PZC后信号脉冲的衰减时间将减小为(120R//499R)*10nF。
在PZC后紧跟的是反相放大器,标准电路,就没什么可以解释的了。由于前放输出脉冲是负向的,所以经过反相后变成正向电压以便后续处理。此处放大倍数需要根据后续能谱结果进行调整,对于CR125而言,个人测试在2~3KR之间可以覆盖几十keV到3MeV的射线能量范围,完全可以满足自然环境的天然放射性核素的测量。前置放大部分PCB实物如下:










FPGA算法部分基于Z变换法推导的梯形成形实现。首先ADC采入的数据进行多级寄存器同步后经过FIR低通滤波器输出降噪后的核脉冲信号,对信号脉冲进行梯形及三角混合成形,利用三角成型便于寻找峰顶的特性可以更准确的确认核脉冲到达时间。而梯形成形用于提取脉冲的幅值。后根据脉冲起始信号将梯形脉冲用于提取基线和幅值,之后根据堆积判弃的结果确认当前计算的幅值是否可用于最终的能谱成形,并将谱数据通过DMA搬运到PS端DDR3存储器中。
混合成形算法中存在大量的小数和有符号数的运算,在后文代码编写中统一采用固定小数位为16Bit表示。
梯形三角混合成形算法采用Z变换推导的梯形成形算法实现。根据梯形成形公式将整个成形过程分为四个模块实现:模块1实现输入信号延时nb并相减、模块2、3实现积分求和、模块4实现信na延时并相减。
模块1将输入的原始脉冲信号进行延时nb时钟周期的操作,在FPGA中延时可以使用一定存储深度的寄存器进行移位操作实现,并动态选择输出位置:


代码时序满足式y3 = y3(n-1)+y2(n-1) 。
模块4与模块1类似,但由于道址并不存在小数,所以需在最终输出加入逻辑解决四舍五入与饱和溢出:




上述代码结合前文的脉冲起始判断计算两脉冲的间隔,当两者间隔小于nb时输出一个单时钟周期脉冲。



上述为OUT状态处理逻辑,是主要的输出判断,当脉冲到来时将判断当前是否发生堆积以及前一脉冲是否发生堆积,由此判断是否该输出前一脉冲峰值,两条件均满足即可输出,否则丢弃。
DELAY部分使用计数器进行延迟,延迟周期由用户输入参数“peakext_delay_time”决定。
上述代码是求取累加的逻辑,累加点数由参数“PEAK_AVR_POINT”决定,默认16点求和。当累加至设定值后,通过左移求解平顶均值,从而得到原始峰值数据。该数据将在CALC状态与基线值相减获得真实峰值数据。
PILE_UP状态用于处理随时产生的堆积,该部分将复位所有过程寄存器,并记录下堆积状态用于下一脉冲到达时的判断。
以上逻辑便实现了堆积丢弃和峰值计算及输出。在经过上述逻辑运算后,模块将直接输出脉冲对应的幅度信息,这些幅度与输出脉冲电压相对应的、是与射线能量相对应的、也是与ADC采用位数相对应的。本文所采用的AD9245为14Bit、80MSPS的ADC芯片,故对应着16384个道址,能谱便是在对应道址上的累积,即探测到某个道址后在对应道址累积加一操作。
所以这里可以使用一个存储深度为16384的RAM实现能谱成形及存储,首先需要执行读取、加一、写回的操作,其次还需要顺序读出数据转换到AXI4-Stream总线并传输到PS端,最后还需要有RAM复位逻辑。这样考虑,使用真双端口RAM实现是最为方便的。故这里使用了真双端口RAM的模板代码(具体见代码),在综合时将被综合器动识别并使用片上BRAM资源实现。
同样的为了简化实现,这里使用了三段式状态机。状态机逻辑由前文逻辑输出的峰值及触发脉冲激活,激活后将使能RAM的端口A,并将WE=0(读模式),地址则是输入峰值,所有信号给定后,RAM将在下一时钟读取并取出地址值,而后状态机部分将在再下一个时钟读取到RAM值,所以实际设计中需要有两个时钟的延迟后才能读取到真是存储值。读取后将WE=1,改为写模式,在下一时钟值将被写回RAM,此时可回到IDLE并失能端口A。逻辑便完成了一次峰值记录。
上述代码为状态机的逻辑转换部分,当“peak_value_ok”触发时状态机将进入一个新的读加写周期。
除此以外,代码还需要实现RAM读取和复位,RAM的读取逻辑由总线转换部分生成,该部分内容在后续解释,复位逻辑如下:

在“ram_reset_flag”有效时,端口B被置为写模式,addrb为对于地址,依次递增,对RAM进行整体的写0操作。结束后“ram_reset_flag”将被置0,且将模式永久置为读模式,而使能也将一直开启。
由于读出部分在其他逻辑中实现,故需将两个地址同时输入端口B,这里使用多路选择器的方式实现:
在复位时使用addrb作为地址输入,而正常成谱状态下使用总线转换部分的读指针信号。
最后就是前文所述的RAM转AXI4-Stream总线接口逻辑,ram2axis_skid一个高效无气泡的RAM到AXI Stream数据流转换器,通过三级流水线地址指针(s_read_pointer、d0、d1)同步RAM读取时序,并在tx_en(由下游就绪或缓冲状态控制)使能下递增地址,确保地址与ram_data对齐传输至AXI接口;为实现零气泡传输,模块采用Skid缓冲机制:当主输出(m_axis_tdata_reg)因下游反压阻塞时,新数据暂存至临时缓冲(temp_m_axis_tdata_reg),一旦下游恢复就绪则优先输出临时缓冲数据,否则直接更新主寄存器;同时在地址达到DEPTH-1时自动生成帧结束标志m_axis_tlast,整个设计以两级缓冲实现连续流控,适用于视频或ADC等需稳定高速数据流的场景。



使用Matlab产生量化位数10Bit,深度1024点的理想指数衰减(叠加高斯噪声),通过上述代码读入寄存器数组“coe_data”中供算法模块使用。
由于实际ADC输出的是补码信号(-8192~8191),故在输入待测模块之前,进行依次有符号数减法模拟、并扩大一定倍数模拟真实操作,仿真结果如下:


















上图是数据传输的头尾部分(拼凑),这里将RAM的复位改为0~16383的自增且切断数据输入,综合实现后上板测试,数据流从0~16383结束,符合时序逻辑。












设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论