巧用示波器探查4G移动通信模块供电问题
前不久,由我亲自操刀设计的4G移动通信模块终于小批量制作了几十片样品。
该4G模块主要是跟现有的 采用WiFi连接的中文可编程控制器系列产品对接,提供更加便捷、稳定而且免维护的远程连接方式。
一如研发的其它产品,我对样品作了详细的电性能测试,‘
主要侧重于电源相关电气性能的测试;
同时,根据测试例做了完整的软件软件;
软件测试比较简单,控制器通过UART接口与4G模块对接,再与云服务器上的TCP服务端建立TCP长链接。
在服务器上用poython创建了一个TCP客户端,随机发送测试的数据给4G模块,由4G模块转发给控制器,控制做出应答,由4G模块发送给TCP服务端,由TCP服务器转给python编写的TCP客户端。
由python脚本统计数据收发的延时、丢包率、长期工作稳定性等等。
之后,就是采用高低温箱的一些环境试验,一切都很顺利。
最后的试验是由移动网络切换到电信网络的测试;
当把流量卡由移动改为电信时,出现了问题:
4G模块概率性重启,模块重启不外乎以下几种情况:
1)瞬间工作电流大,电源发生了跌落,瞬间降至其工作电压3.4V以下。
2)串入了干扰信号,使得模块发生了复位。
3)程序有bug,发生了访问越界,非法访问,除零等错误;
试验时的空间环境应该比较纯净,附件也没有什么大的电器工作,应该不至于有干扰信号使得4G模块复位。
虽然我并没有选择通过AT指令控制的4G模块,而是选用支持二次开发的版本并做了复杂的二次开发,把所有联网功能的代码都实现在了模块上。
但是,程序已经通过了长时间的自动测试,没有出现问题,而且从trace的log来看,没有看到程序崩溃的现象。
于是,我聚焦到了第一个可能性上。
4G模块的供电电路是这样的:
4G模块供电电路
最大电流为2A的DC-DC经过2A的LDO输出4.0V的电压给4G模块供电。
为了保证在发射信号时提供足够的burst电容,C32特意选了比较大的电容。
难道是因为控制板上的5v到4G模块的导线比较细长,导致5V的DC-DC给LDO供电的阻抗比较高。
不能及时给模块供电?
那为什么移动网络没有问题,而电信网络刚开始测试就碰到问题?
难道是因为电信网络的信号比较差,导致4G模块发射信号的功率增加,所需要的电流更大?
在我的大脑的高速运算之后,我拿出了电子工程师必备的利器-示波器。
第一步,测试4V和5V电源的纹波,将通道设置为交流耦合,幅度调整到mV级。
看到如下的波形,并没有看到明显会引起模块复位的波形,所看到尖端应该是示波器探头所引入的干扰。
4.0V电源的纹波
第二步,利用示波器非常重要的功能-触发功能捕捉跌落的电平。
示波器触发功能的设置
1) 触发的信源设置为测试所用的通道(比如CH1);
2) 触发电平调节到3.5V左右;
3) 斜率设置为“下降沿”;
4) 触发方式设置为“正常”。
启用python的TCP客户端,每隔几秒向控制器发送查询命令,使得4G模块定时发送数据。
最后,泡上一杯小茶,慢慢等待凶手的出现。
不一会,果然抓到了凶手,示波器捕捉下了如下的波形,4V的电源突然发生了跌落,并且跌落至模块工作电压3.4V 以下,导致了复位。
4V电压跌落波形
我把4V电源的储能电容C32再一步增加,药到病除,示波器不再捕捉到异常跌落的波形。
生活又恢复了往日的宁静,
4G模块又开始通过电信网络欢快地闪烁着通信正常的指示灯向服务器发送数据,
我又投身到了其它新产品的研发。