Dying gasp功能详解
标签: dying gasp
- 作者帖子
- Up::1
前一阵子在做dying gasp功能测试,过程中恰好测试到了Linux的响应速度,特来分享一下。
这里的dying gasp是用GPIO(input mode)实现的,在DC掉电的时候,此GPIO会立即被拉低, 而系统的3.3V电压还能维持10ms左右时间,这样在这个时间里便可以做些通知功能告诉外面的设备。
GPIO信号侦测用interrupt方式实现,为了量测方便,在 中断服务程序(isr) 函数里面,对一个LED (gpio output) 进行拉高,用示波器量测发现,GPIO 拉低/LED 拉高之间的间隔只有 10us,这个数据好像还不错。这里面要经历:关中断、保护CPU寄存器、进入中断服务程序、执行LED操作。
一般对类似button功能的GPIO信号侦测,如果没有特别时间要求,会在中断服务程序里面再调用一个schedule_work来实现,这需要任务切换的,一般一个任务切换都需要几十个ms,所以在dying gasp的需求里面是不能满足的。
之后,我在中断服务程序里面,又加了一个发包功能,通过ethernet发出一个数据包,也可以正常工作。
- Up::1
Dying Gasp — 断电告警/致命故障/断电报警功能
Dying Gasp信号功能:在终端设备意外掉电时立即发送信号给局端设备,告知局端设备该终端设备即将断电离线。常用于通信设备,如当ONU离线时,OLT可通过该ONU是否发送过dyinggasp信号来判断ONU是掉电离线还是通信异常导致离线。
- Up::1
dying-gasp放电时间计算
“Dying-gasp” 是指在设备断电时,为确保能够发送最后的状态信息或告警而进行的短暂电源供给。该过程通常利用电容器在断电后瞬间释放电能以维持设备的功能。在计算电容器放电时间时,我们主要考虑电容的放电特性以及负载的大小。
电容器的放电时间可以通过以下公式进行近似计算:
其中:
•是放电时间(秒)。
•是电容器的电容量(法拉,F)。
•是电容器的初始电压(伏特,V)。
•是负载电流(安培,A),即设备在断电时的工作电流。需要注意的是,这个公式假设电容器在恒定的负载电流下以线性方式放电。实际上,放电过程是指数衰减的,尤其是对于RC电路(电阻和电容串联)的情况。更精确的计算需要考虑到指数衰减的特性,使用RC时间常数进行描述:
对于RC电路,电压V(t)在电容器上的变化可以表示为:
t =C.V/I
但是,由于 “dying-gasp” 通常涉及设备在电压跌至某个最小工作电压之前维持工作,实际的放电时间可以通过上述线性近似公式快速估算。
确保在实际应用中,查阅设备的最小工作电压规格,并根据真实负载条件进行调整,以达成对放电时间的准确估计。举例: 12V初始电压,负载电流是6.5A, 放电时间的计算公式如下
在现有的参数下,我们可以进行放电时间的计算:
• 电容器容量: ( C = 3300 , \mu F = 3300 \times 10^{-6} , F )
• 初始电压: ( V_0 = 12 , V )
• 负载电流: ( I = 6.5 , A )所以,电容在这些条件下的放电时间约为 0.0061 秒。需要注意,实际应用中的放电可能会受到其他因素影响,例如负载电压和内阻效应等,因此这个计算结果是一个理想的近似值。
电容放电时间速算
电容值uF 电容数量 延时ms 2200 2 0.0041*2*1000 =8.2 3300 2 0.0061*2*1000=12.2 4700 2 0.0087*2*1000=17.4
- 作者帖子
- 哎呀,回复话题必需登录。