1. 项目概述用树莓派Pico 2打造你的个人伽马能谱仪如果你对核物理、环境监测或者仅仅是电子DIY感兴趣那么自己动手制作一台伽马能谱仪绝对是一个令人兴奋的挑战。传统的DIY能谱仪方案比如利用电脑声卡采集信号的“Theremino”项目往往需要依赖外部高压电源、笨重的光电倍增管PMT和一台完整的电脑。这不仅让设备变得庞大、复杂还存在高压操作的安全隐患。今天要分享的这个项目彻底颠覆了这种模式。它基于一块小巧的自制PCB、一颗树莓派Pico 2微控制器、一个闪烁体通常是碘化钠和一个硅光电倍增管SiPM将所有必要的信号处理和能谱分析功能都集成在了一块板子上。这意味着你得到的是一台真正意义上的“一体化”伽马能谱仪无需任何外部部件仅用一根USB线供电就能独立工作并保存数据。这个项目的核心优势在于其极简与安全的设计哲学。用SiPM替代传统的PMT是关键一步。SiPM工作在几十伏的低压下彻底告别了动辄上千伏的危险高压使得整个装置的安全性大大提升尺寸也得以大幅缩小。树莓派Pico 2作为主控不仅价格低廉其双核处理器、高性能ADC和充足的存储空间完全足以胜任实时脉冲处理和多道分析器MCA的任务。你可以通过Arduino IDE轻松编程甚至直接拖拽固件文件进行更新门槛非常低。无论是想测量环境本底辐射鉴别放射性矿物还是作为教学演示工具这个开源项目都提供了一个绝佳的起点。接下来我将从设计思路、硬件解析、软件实现到实操调试为你完整拆解如何复现这台精巧的设备。2. 核心硬件设计与选型解析2.1 主控芯片为何选择树莓派Pico 2在众多微控制器中选定树莓派Pico 2是经过深思熟虑的。首先性价比是决定性因素。Pico 2的价格极具竞争力但性能却毫不含糊RP2350双核ARM Cortex-M33处理器主频高达200MHz以上为实时处理高速脉冲提供了充足的算力。其次其模拟数字转换器ADC质量上乘。Pico 2的ADC具有12位分辨率在项目中通过过采样等技术等效实现了高达4096道的分析能力。内置的3V电压基准源为ADC提供了稳定的参考这是获得精确能谱的基础省去了外接精密基准源的成本和复杂度。最后开发生态的友好性不容忽视。虽然Pico原生支持MicroPython和C/C SDK但项目选择了兼容Arduino IDE的路径。这极大地降低了学习曲线让熟悉Arduino的爱好者能够快速上手。通过USB线即可完成编程和调试同时USB接口也承担了供电和数据通信串口的双重职责进一步简化了系统连接。这种“一块板子解决所有问题”的思路贯穿了整个硬件设计。2.2 探测核心SiPM与闪烁体的搭配艺术探测器的核心是将不可见的伽马光子转换成可测量电信号的部分这里采用了“闪烁体 SiPM”的方案。闪烁体通常选用掺铊的碘化钠晶体NaI(Tl)。当伽马射线进入晶体时会与物质相互作用主要是光电效应、康普顿散射损失能量并激发晶体中的原子退激时便会发出可见光光子波长约415nm的蓝光。NaI(Tl)因其光输出高、能量线性好是伽马能谱测量的经典选择。晶体尺寸越大探测效率越高但成本和体积也相应增加。对于DIY项目Φ20mm x 20mm左右的小晶体是平衡性能与成本的常见选择。硅光电倍增管SiPM是本项目的亮点。它是一个由成百上千个“微单元”组成的半导体器件每个微单元都是一个工作在盖革模式下的雪崩光电二极管APD。当有光子击中时对应的微单元会产生一个雪崩电流所有微单元的电流汇总起来就形成了一个与入射光子数成正比的宏观电信号。相比于需要上千伏高压、体积庞大且易碎的PMTSiPM只需27.5V至33.8V的工作电压体积小巧如一个芯片抗震动性强且对磁场不敏感。选择SiPM时需要关注其光子探测效率PDE与闪烁体发光波长的匹配度以及增益和暗计数率。通常针对NaI(Tl)的蓝光选择PDE在蓝光波段较高的SiPM型号如来自Onsemi、Hamamatsu的特定型号。注意SiPM对温度非常敏感其增益和暗噪声会随温度变化而漂移。在精密能谱测量中可能需要考虑温度补偿电路或进行定期能量刻度校准。对于一般应用在室温稳定环境下工作即可。2.3 定制PCB一体化设计的关键项目的所有电子部分都集成在了一块120mm x 50mm的定制PCB上。这块板子可以清晰地划分为几个功能区电源管理区负责从USB的5V输入生成系统所需的各路电压。最核心的是为SiPM提供可调的27.5-33.8V偏置电压的升压电路。该电路通常基于一个开关稳压器芯片通过精密电阻分压反馈来稳定输出电压。板上还会包含为Pico和运放供电的3.3V/5V LDO线性稳压器确保模拟电路的纯净。前端模拟电路区这是信号的“起跑线”。SiPM输出的电流脉冲信号非常微弱纳安到微安级且快速纳秒级。首先会经过一个跨阻放大器TIA将电流脉冲转换为电压脉冲。TIA的设计至关重要其反馈电阻和电容决定了增益和带宽需要与SiPM的输出特性匹配以保持信号形状并实现低噪声放大。随后信号可能再经过一级或两级电压放大器进行整形和放大以达到Pico的ADC最佳输入范围0-3V。数字处理与接口区以Pico 2为中心其ADC引脚连接前端放大后的信号。板载的闪存用于存储能谱数据。此外PCB还贴心地将多余的I/O口通过排针引出包括I2C、SPI、UART方便用户外接OLED显示屏、MicroSD卡模块、GPS模块等极大地扩展了设备功能。一个简单的蜂鸣器也被集成用于在“盖革模式”下提供 audible 的计数率反馈。机械与布局PCB布局严格遵循了模拟与数字分离的原则模拟地AGND与数字地DGND在一点连接防止数字噪声串扰微弱的前端模拟信号。SiPM和闪烁体安装区域额外的49.5mm x 50mm空间被单独规划便于光密封结构的安装。所有设计文件原理图、PCB布局、Gerber文件均在GitHub仓库开源你可以使用EasyEDA直接导入查看或修改也可以直接将Gerber文件发给PCB制造商进行打样。3. 固件原理与软件实现详解3.1 信号处理流程从脉冲到能谱当伽马射线被探测到时硬件电路会输出一个电压脉冲。固件的核心任务就是实时捕获、分析这些脉冲并将其归类到对应的能量道址中最终形成能谱。整个过程需要在微秒级内完成对代码效率要求极高。脉冲检测固件持续采样ADC。通常采用阈值触发方式。设置一个略高于噪声水平的电压阈值当ADC读数超过该阈值时判定为一个有效脉冲的开始。为了提高抗噪声能力可以采用“持续多个采样点超过阈值”才触发的逻辑。峰值保持与能量提取触发后固件会记录接下来一段时间内ADC读数的最大值这个最大值就代表了该脉冲的幅度与伽马射线的能量成正比。这就是“峰值保持”算法。为了精确捕获峰值ADC的采样率必须足够高Pico的ADC在过采样模式下可以满足要求。死时间处理在处理一个脉冲时系统无法处理下一个脉冲这段时间称为“死时间”。本项目有两种模式“能量模式”下需要进行完整的峰值采集和数据处理死时间约10微秒“盖革模式”下仅进行计数死时间可缩短至约1微秒。固件会记录死时间并在计算计数率时进行校正这对于活度定量测量非常重要。多道分析MCA提取出的脉冲幅度一个0-4095之间的数字被用作“道址”。固件中维护一个包含4096个元素的数组作为能谱存储器。每个脉冲到来就在对应道址的计数上加一。例如一个Cs-137源发出的662keV伽马射线经过系统校准后可能会稳定地落在第2500道左右。长时间累积后就能看到在2500道处出现一个明显的峰。数据存储与输出累积的能谱数据可以定期保存到Pico的内部闪存中。通过USB虚拟的串口Serial-over-USB用户可以实时读取能谱数据、计数率或向设备发送命令如开始/停止测量、调整SiPM偏压等。3.2 关键代码模块剖析固件采用模块化设计主要包含以下部分ADC驱动与采样配置Pico的ADC以最高效的方式工作。可能使用硬件FIFO和DMA直接存储器访问来搬运采样数据以减轻CPU负担确保不丢失高速脉冲。脉冲处理算法这是核心算法模块。一个高效的状态机是实现实时处理的关键。状态机可能包含IDLE等待、TRIGGERED已触发、SAMPLING采样峰值、PROCESSING处理数据等状态。// 简化的脉冲处理状态机逻辑示意 enum PulseState { IDLE, FOUND_PEAK, MEASURING }; PulseState state IDLE; uint16_t currentPulseHeight 0; void processADC(uint16_t adcValue) { switch(state) { case IDLE: if (adcValue TRIGGER_THRESHOLD) { state FOUND_PEAK; currentPulseHeight adcValue; } break; case FOUND_PEAK: // 继续寻找峰值 if (adcValue currentPulseHeight) { currentPulseHeight adcValue; } else if (adcValue currentPulseHeight - FALL_DELTA) { // 信号开始下降认为峰值已过 spectrum[currentPulseHeight]; // 能谱加一 state IDLE; // 此处可插入死时间等待 } break; } }能谱管理管理4096道的数组提供能谱清零、读取、设置等功能。考虑到长时间测量可能溢出计数变量应使用32位无符号整数uint32_t。命令解释器解析通过串口接收到的ASCII命令例如“SPECTRUM”返回能谱“HV 300”设置偏压为30.0V等。文件系统如果使用内部Flash存储实现一个简单的磨损均衡的日志系统将能谱数据以文本或二进制格式保存。3.3 能量刻度与分辨率优化原始的“道址”只是ADC的读数需要将其转换为标准的能量单位keV这个过程称为能量刻度。刻度方法你需要至少两个已知能量的放射源最常用的是Cs-137662 keV和Co-601173 keV和1332 keV。分别测量这些源记录下特征峰所在的道址。假设测得Cs-137峰在道址Ch_CsCo-60的1332 keV峰在道址Ch_Co。拟合刻度曲线在大多数情况下道址与能量之间存在良好的线性关系。可以使用线性拟合公式Energy(keV) a * Channel b。通过两个已知点解出斜率a和截距b。a (E_Co - E_Cs) / (Ch_Co - Ch_Cs) b E_Cs - a * Ch_Cs将a和b存入固件后续测量到的任何道址都可以通过此公式换算成能量。能量分辨率分辨率是衡量能谱仪区分两个靠近能量峰能力的关键指标通常用某个特征峰如Cs-137的662 keV峰的半高宽FWHM与峰位能量的百分比来表示。项目提到可达7% 662 keV。分辨率主要受限于闪烁体NaI(Tl)晶体的自身分辨率。SiPM光子探测效率、噪声、单元一致性。电子学噪声前端放大电路的噪声。光学耦合闪烁体与SiPM之间耦合剂的透明度和均匀性。 优化分辨率需要从以上几点入手选择高质量晶体和SiPM精心设计低噪声前放确保光学耦合良好使用高折射率硅油排除气泡。4. 组装、校准与实测全流程4.1 硬件组装步骤与要点PCB焊接首先焊接除SiPM和连接器之外的所有元件。建议使用恒温烙铁并注意静电防护ESD尤其是焊接运放等敏感芯片时。先焊接高度低的元件电阻、电容、芯片座再焊接高的元件电解电容、接插件。电源部分焊接完成后可以先上电测试各路输出电压SiPM高压先不接负载是否正常。SiPM安装与光耦合这是最需要耐心和技巧的一步。SiPM非常静电敏感操作时务必佩戴防静电手环。在PCB的SiPM预留位置上涂抹少量导电胶或焊锡膏然后将SiPM小心对齐焊盘用热风枪或预热台以合适的温度曲线焊接。绝对避免直接用烙铁头长时间接触SiPM。 焊接好后进行光耦合。在SiPM感光面和闪烁体的一端均匀涂上一层光学硅脂折射率匹配液。然后将闪烁体轻轻压上并缓慢旋转以挤出气泡确保耦合层均匀且无气泡。最后使用不透光的材料如黑色电工胶带、铝箔将闪烁体和SiPM紧密包裹起来隔绝一切外界光线。任何漏光都会导致巨大的噪声。整体装配将焊接好的主板、电池如果需要移动使用、以及包裹好的探测器部分安装到一个合适的屏蔽盒中。盒子最好使用金属如铝材质并良好接地以屏蔽外部电磁干扰。为USB口、蜂鸣器、扩展接口等开出孔位。4.2 固件烧录与初次上电环境搭建在电脑上安装Arduino IDE。你需要添加对树莓派Pico 2的支持。通常可以通过Arduino的“开发板管理器”添加相应的板卡支持包例如由社区维护的“Raspberry Pi Pico/RP2040”包。获取并编译代码从项目的GitHub仓库克隆或下载最新固件源代码。用Arduino IDE打开主工程文件通常是.ino文件。在“工具”菜单中正确选择开发板为“Raspberry Pi Pico 2”并选择正确的端口。烧录按住Pico 2板上的“BOOTSEL”按钮然后插入USB线将其进入USB大容量存储模式。在Arduino IDE中点击上传IDE会自动编译并将.uf2文件拖入出现的Pico盘符中。烧录完成后Pico会自动重启运行新固件。初次测试打开串口监视器波特率通常为115200。上电后设备可能会打印启动信息、当前固件版本、本底计数率等。用一根USB线连接设备和电脑设备应能正常工作。你可以尝试发送“RATE”命令查看实时计数率应该能看到高于纯电子学噪声的本底计数每分钟几十到上百次取决于环境和探测器大小。4.3 能量刻度实操与标准源使用安全第一操作放射源必须遵守当地法规佩戴个人剂量计在指定区域操作并使用镊子等工具避免用手直接接触源。用完立即放回铅罐。准备标准源获取一个Cs-137点源或面源。确保其活度适中如37 kBq即1微居里左右既能有足够的计数率缩短测量时间又不会造成过高的辐射剂量。测量本底能谱在远离放射源的环境中采集一段时间的能谱例如10-30分钟保存为“本底谱”。后续测量标准源时可以减去本底以获得更干净的净谱。测量Cs-137能谱将Cs-137源放置在探测器前方固定距离例如5-10厘米采集足够长时间的能谱直到662 keV光电峰清晰可见峰下计数足够多峰形光滑。记录下这个峰位所在的道址Ch_Cs。可选测量Co-60能谱如果有Co-60源重复步骤3记录下1173 keV和1332 keV两个峰的道址。通常使用更高的1332 keV峰进行刻度更准确。计算刻度系数如果你只有Cs-137源可以假设零道对应0 keV那么能量刻度就是简单的线性关系Energy 662 / Ch_Cs * Channel。如果你有Cs-137和Co-60则用前面介绍的线性拟合公式计算a和b。更新固件或软件刻度将计算出的a和b系数通过串口命令写入设备的EEPROM如果固件支持或者在后期数据处理软件如Python脚本中进行换算。4.4 性能测试与典型应用完成刻度后你的能谱仪就可以投入使用了。能量分辨率测试测量Cs-137源的能谱用软件如ROOT, Origin, 甚至Excel对662 keV峰进行高斯拟合。读取拟合出的标准差σ则半高宽FWHM 2.355 * σ。分辨率 FWHM / 662 keV * 100%。对比项目标称的7%评估自己组装的效果。稳定性测试长时间如24小时测量一个固定源观察峰位道址的漂移情况。漂移主要来自SiPM增益的温度漂移。好的系统在恒温环境下峰位漂移应小于1%。典型应用场景环境监测测量室内外、建材、食品等的本底辐射了解环境辐射水平。矿物鉴别识别含铀、钍、钾的矿物如铀矿、独居石、钾盐。不同的核素具有特征伽马峰如K-40的1460 keV峰。教学演示直观展示放射性衰变的统计性、指数衰减规律、不同物质的屏蔽效果等。5. 常见问题排查与进阶技巧5.1 硬件故障排查速查表现象可能原因排查步骤与解决方案上电无反应USB无连接1. 电源短路。2. Pico焊接不良或损坏。3. 5V转3.3V LDO故障。1. 断电用万用表蜂鸣档检查5V与GND之间是否短路。2. 检查USB接口、Pico的电源引脚VSYS, 3V3_EN电压是否正常5V和3.3V。3. 重新焊接或更换Pico。串口能连接但无数据或乱码1. 波特率设置错误。2. 固件未正常运行。3. 串口引脚UART连接错误。1. 确认Arduino IDE或串口工具波特率与固件设置一致通常115200。2. 尝试重新烧录固件。3. 检查PCB上UART到USB芯片的连接。本底计数率异常高1.光泄露最常见2. SiPM偏压过高。3. 前端电路自激或噪声大。1.重点检查在完全黑暗环境中用黑色胶带密封所有可能漏光缝隙。探测器部分应完全不见光。2. 通过串口命令逐步降低SiPM偏压观察计数率变化找到最佳工作点拐点附近。3. 用示波器观察前置放大器输出看是否有高频振荡。检查运放电源去耦电容。能谱上无峰只有连续分布1. 信号幅度太小未超过触发阈值。2. 能量刻度严重错误。3. 闪烁体或SiPM损坏。1. 用示波器探头高阻测量TIA输出用放射源靠近看是否有脉冲信号。调整固件中的触发阈值。2. 重新进行能量刻度操作。3. 检查SiPM是否有物理损坏闪烁体是否破裂。能量分辨率很差峰很宽1. 光学耦合不良有气泡。2. SiPM与闪烁体匹配不佳PDE低。3. 电子学噪声大。4. 电源噪声。1. 重新进行光学耦合务必排除气泡。2. 确认所用SiPM型号是否适用于NaI(Tl)的蓝光。3. 检查前端运放电路使用低噪声运放优化布局布线。4. 为模拟电路部分使用更干净的线性稳压电源加大电源滤波电容。5.2 软件与调试技巧优化死时间校正对于高计数率测量死时间校正至关重要。固件中实现的死时间模型如 paralyzable 或 non-paralyzable需要准确。可以通过测量两个已知活度且死时间可忽略的弱源然后同时测量它们对比计数率来验证校正算法的准确性。扩展存储与显示板载的I2C接口可以轻松连接一个0.96英寸的OLED显示屏SSD1306驱动实时显示计数率、能谱简图或电池电量。通过SPI接口连接一个MicroSD卡模块可以实现海量能谱数据的离线存储。利用内置真随机数发生器TRNGPico 2的硬件TRNG是一个有趣的功能。在高计数率下放射性衰变事件的间隔本身具有随机性。你可以编写代码将脉冲到达的时间间隔作为熵源与硬件TRNG结合生成质量更高的随机数用于加密或模拟实验。Python上位机开发虽然设备可以独立工作但一个功能强大的上位机软件能极大提升体验。你可以用Python的pyserial库读取串口数据用matplotlib实时绘制能谱曲线用scipy进行峰拟合和能量刻度计算甚至开发自动核素识别功能。5.3 安全与伦理注意事项重要提示放射性测量涉及电离辐射安全永远是第一位的。辐射防护遵循ALARA原则尽可能低。尽量缩短接触时间增大与源的距离必要时使用铅屏蔽。永远不要将放射源对准自己或他人。源的管理购买、持有和使用放射源必须符合国家法律法规。通常需要向相关监管部门申请许可。对于DIY爱好者强烈建议使用豁免源活度低于国家规定豁免水平的源如一些旧的烟雾探测器中的镅-241源或在专业机构指导下使用标准源。设备用途本设备为教育和科研目的设计。请勿将其用于非法或可能引起公众恐慌的监测活动。测量结果应理性解读环境本底辐射是正常现象远低于有害剂量。静电与电气安全SiPM对静电放电极其敏感。整个组装和操作过程需做好防静电措施。虽然工作电压低于36V安全特低电压SELV但SiPM偏压电路输出端仍可能存储电荷调试时避免短路。组装调试这样一台设备的过程本身就是一次对核探测技术、模拟电路、嵌入式编程和数据处理的全方位学习。从看到第一个微弱的脉冲信号到屏幕上清晰地显示出特征能量峰那种成就感是无可比拟的。这个开源项目提供了一个极其优秀的平台你不仅可以按图索骥完成复现更可以在此基础上进行魔改比如尝试不同的闪烁体塑料闪烁体用于测β溴化镧晶体用于高分辨率增加GPS模块制作移动测绘仪或者利用机器学习算法在边缘端实现简单的核素识别。硬件的边界和软件的可能性都等待着你来探索。