# 盖革管的检测原理
盖革管(Geiger-Muller管),又称GM管,是一种常用的辐射探测器,主要用于检测和测量各种类型的辐射,如α粒子、β粒子和γ射线。它的结构简单,由一个金属外壳(现在的盖革管使用镀有金属膜的玻璃管制作而成)和内部填充气体的管道组成。通常,金属外壳是圆筒形的,通常由金属或合金制成,具有较好的导电性和屏蔽性能,以防止外界干扰。管内填充的气体通常是一种低压惰性气体,如氮气和氩气的混合物。这种气体具有良好的电离特性和能量传递特性,可以产生有效的电离效应。

盖革管的工作原理是基于**气体电离效应**。
盖革管结构简单,通常是在金属圆筒中央固定一根细金属丝。在金属丝和外壁之间施加有直流电压,大多是要求大于300V。容器内充有用于产生电离的气体(比如氩气)和用于淬火的气体(比如丁烷)。

当有离子经过盖革管激发了某一气体原子产生电离。激发出的电子被金属丝正电压吸引运动过程中又会撞击其它气体分子产生雪崩电离,此过程也会通过激发出的紫外线光子引发更大范围的电离雪崩,最终形成一股多大100亿个电子组成的电流脉冲。电离后的正电粒子由于质量比较大,运动比较慢,电子雪崩后它们停留在Geiger管中间形成正电电子云,扰乱了管内的电场,会阻碍电子雪崩进一步加大。再通过限流电阻和淬火气体的共同作用,雪崩电流很快终止。一般经过100~500微妙的恢复死区时间,盖革管会恢复正常,为下一次粒子检测做好准备。**简单来说,就是当检测到离子经过盖革管时,就会产生一个脉冲。**
# 主要电路设计
要实现的基本功能有
* 手持便携;
* 蜂鸣提醒;
* 辐射检测显示;
## 充电升压二合一电路
手持便携,那么就需要电池供电;
正常情况下通过电池电压BAT+进行供电;当type-c接入后VCCIN有电,则给电池充电,RED充电指示灯亮起;VOUT为输出电池电压升压后的5V电压;具体请参考TP5400数据手册。

## **盖革管工作电路**
通过盖革管检测辐射,就要有使盖革管可以正常工作的升压电路。根据购买的盖格管说明书,知道工作电压至少在280V以上,推荐的380V的工作电压;

原理图中Q2/Q4需要使用耐压高的型号,R60采用3296封装的电位器进行输出电压调整;

## 蜂鸣提醒与显示
蜂鸣器采用4000Hz的无源蜂鸣器;屏幕采用1.69寸SPI16位彩屏,屏幕购买链接:[1.69寸TFT显示屏彩色高清IPS LCD裸屏240*280 SPI接口ST7789驱动\(选择焊接型\)](https://item.taobao.com/item.htm?spm=a21n57.1.0.0.585c523cA0Dovf&id=675394124720&ns=1&abbucket=8#detail)

## **说明**
原理图中还预留有NBIOT部分和2.4G无线通信部分,这两个模块不是必须品,可以不焊接或者直接删除即可;
# 主要软件设计
代码中最重要的部分是秒判断与中断函数。将盖格管检测引脚PE6设置为外部中断下降沿触发方式(当测量到盖格管上的脉冲时,Q3导通使PE6为低电平)。
```
//获取计数值
uint32_t get_Geiger_count(void)
{
return Geiger_count;
}
//清除计数值
void set_Geiger_count(uint32_t count)
{
Geiger_count = count;
}
//外部中断服务函数
void EXTI5_9_IRQHandler(void)
{
//检测到下降沿
if(exti_interrupt_flag_get(EXTI_6) == SET)
{
//确定PE6为低电平
if( gpio_input_bit_get(GEIGER_GPIO_PORT, GEIGER_GPIO_PIN) == RESET )
{
//蜂鸣器响
beep(100);
//计数值累加
Geiger_count++;
}
//清除中断标志位
exti_interrupt_flag_clear(EXTI_6);
}
}
```
每隔一秒判断一次当前计数值与之前计数值的变化,如有不同,则记录它们之间的差,这个差就是一秒内的计数值;将差保存到数组 COUNTS\_buff 中,累加10次,那么COUNTS\_buff里存放的就是过去10秒的测量10个结果,将数组 COUNTS\_buff 中的所有数字相加并乘以 6 以在显示屏上显示 CPM 值(CPM=每分钟计数率)。
而以 µSv/hr 表示的剂量当量是通过 CPM 值除以 210(K) 计算得出的(该值可在文献中找到)。
```
//一秒时间到
if( get_sec_timer_flag() == 1 )
{
//清除秒标志
set_sec_timer_flag(0);
//关闭定时器
timer_disable(BSP_TIMER);
//获取当前盖格管计数值
new_geiger = get_Geiger_count();
//如果当前计数值和之前计数值不一样
if( new_geiger != again_geiger )
{
//保存当前与之前的计数差
COUNTS_buff[t] = new_geiger - again_geiger;
//更新之前计数值
again_geiger = new_geiger;
}
else
{
//如果没有计数变化
COUNTS_buff[t] = 0;
}
//累加10次
for( i = 0; i < 10; i++ )
{
TenSecCPS = TenSecCPS + COUNTS_buff[i];
}
//*6得到CPM
CPM = 6 * TenSecCPS;
//计算瞬时值
CPM = CPM / K;
//清除CPS
TenSecCPS = 0;
//累加数组限制
t++ ;
if (t > 9) { t = 0 ;}
//保存瞬时值
CPM_buff[AVGCPM_num] = CPM;
//累加60次
for( i = 0; i < 60; i++ )
{
AVGCPM = AVGCPM + CPM_buff[i];
}
//换算平均值
AVGCPM = AVGCPM/60.0;
//平均值累加数组限制
AVGCPM_num++;
if( AVGCPM_num >= 60 ) AVGCPM_num = 0;
//显示瞬时危险程度
//警告
if( CPM >= 0.5 && CPM < 1.0 )
{
new_level=1;
beep_open(50);//控制蜂鸣器鸣叫频率一般
}
//危险
else if( CPM >= 1.0 )
{
new_level=2;
beep_open(100);//控制蜂鸣器鸣叫频率加快
}
else//正常
{
new_level=0;
beep_close();//关闭蜂鸣器
}
//如果危险等级与之前不一样
if( new_level != again_level )
{
//更新之前的危险等级
again_level = new_level;
//更新瞬时值背景色参数
widget_moment_frame.color = color_buf[new_level];
widget_moment_value.color = color_buf[new_level];
widget_moment_units.color = color_buf[new_level];
widget_moment_slogan.color = color_buf[new_level];
tli_show_button(widget_moment_frame.x,widget_moment_frame.y,widget_moment_frame.w,widget_moment_frame.h,widget_moment_frame.value,widget_moment_frame.color);
LCD_ShowChinese(widget_moment_slogan.x,widget_moment_slogan.y,widget_moment_slogan.string,WHITE,widget_moment_slogan.color,widget_moment_slogan.value,0);
LCD_ShowString(widget_moment_units.x,widget_moment_units.y,(const uint8_t*)widget_moment_units.string,WHITE,widget_moment_units.color,widget_moment_units.value,0);
}
//显示瞬时值
sprintf((char*)widget_moment_value.string,"%.4f", CPM );
LCD_ShowString(widget_moment_value.x,widget_moment_value.y,(const uint8_t*)widget_moment_value.string,WHITE,widget_moment_value.color,widget_moment_value.value,0);
//显示平均值
sprintf((char*)widget_average_value.string,"%.4f", AVGCPM );
LCD_ShowString(widget_average_value.x,widget_average_value.y,(const uint8_t*)widget_average_value.string,WHITE,widget_average_value.color,widget_average_value.value,0);
//显示累计值
sprintf((char*)widget_aggregate_value.string,"%d", new_geiger );
LCD_ShowString(280/2-(strlen((const char*)widget_aggregate_value.string)*(3*8)/2),widget_aggregate_value.y,(const uint8_t*)widget_aggregate_value.string,WHITE,widget_aggregate_value.color,widget_aggregate_value.value,0);
//开启定时器
timer_counter_value_config(BSP_TIMER,0);
timer_enable(BSP_TIMER);
}
```
<iframe src="//player.bilibili.com/player.html?aid=533111091&bvid=BV1iu411P7Uz&cid=1257221641&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
76
102
收藏到专辑