树莓派0降低功耗实践

树莓派功耗

    根据官网数据,树莓派0不接摄像头、不播放视频,不打开桌面(LXDE)的电流(idling)是100mA,电压5V,也就是功耗0.5W,下文一律以电流来代表功耗。

降低功耗的几个途径

  1. 安装lite版本的系统,不带图形界面;
  2. 最小化安装各种库,减少运行的进程数量;
  3. 关掉mini HDMI输出,大约可以节省20-25mA;
  4. 关掉板载LED,大约可以节省5-10mA;
  5. 降低CPU的频率,这个我没试。

    通过1~4,在没有负载的情况下,树莓派0的功耗可以降低到70mA左右。(一篇参考

负载功耗

    我用的max31865模块、噪声模块运行功耗都在20mA左右,lora模块文档上是发射时110、接收时11mA、休眠时2μA。负载功耗取决于运行的时间占比,4、5个负载同时连续运行功耗可能超过100mA,因此降低负载功耗关键是降低负载的运行时间,即:

  1. 降低传感器模块的采样频率;

  2. 降低通讯模块的收发频率,没有收发时使模块处于休眠状态。

使用功耗

    使用树莓派经常要用到 pyserial 库,通过树莓派的uart口接串口设备(如lora)。通讯一般包括收、发两部分,为了避免丢数据,服务器编程时一般会用单独的线程持续不断接收报文,代码类似:

while self.alive:
    msg = uart.read_all()
    if msg:#收到新报文
    
    else:#超时收到空报文

    这样的代码会给树莓派0增加 40mA 左右的稳定功耗!

    还有一个库 pigpio,用来实现软串口和PWM脉冲通讯,我在其他几篇博客中测试过,如果用到也需要注意使用方法。

通讯规约设计

    考虑到通讯是影响功耗的重头,一是lora模块本身,一是pyserial库,因此要针对性的设计通讯规约,原则上通讯由lora模块发起,而不是服务器发起lora监听。由于lora模块之间缺乏协调,相同信道同时发送会出现信号在空中碰撞,因此lora模块要根据自己的地址计算发送时间,比如地址偏差1发射间隔偏差5秒。同时,为了统一装置的时钟,服务器在收到数据后应该反馈带有时间的报文,装置收到报文后矫正时钟,这样就可以实现通讯的串行了。

降低功耗效果

    在树莓派0加2块max31865、1块噪声、1块TTL转485、1块lora的情况下,安装 lite 系统、最小化安装库,首测功耗170mA!

    关掉板载LED和HDMI输出,功耗为140mA;

    将 pyserial 和 pigpio 的调用修改为1小时一次,用之前打开、用完后关闭,lora模块不用时置为休眠状态,功耗降低到74mA!

猜你喜欢

转载自blog.csdn.net/xhydongda/article/details/111941075
今日推荐