基于STC单片机的超低功耗LoRa发射机设计
2022-09-23王先武何纯静
王先武,何纯静
(空军通信士官学校,辽宁大连,116600)
1 STC单片机的低功耗模式
STC系列单片机工作电压较宽,加密能力较强, 不需任何外围器件,串口下载调试方便。片内FLASH ROM、EEPROM、ADC、PWM、SPI、UART、时钟、复位等资源丰富。本设计选用的STC15子系列支持的工作电压范围为5.5~3.8V,可与La-01射频模组(典型工作电压3.3V)相匹配,采用两节电池(3V)供电。
STC系列单片机支持三种省电模式,分别是低速模式、空闲模式和掉电模式。其中的低速模式通过对主时钟进行分频,降低时钟频率的方式实现,不常采用。这两种方式常用于实现低功耗设计。
1.1 空闲模式
空闲模式是指主时钟和CPU停止工作的状态。此时外部中断、外部低压检测电路、定时器、A/D转换、串行口等仍正常运行。在空闲模式下,RAM、堆栈指针(SP)、程序计数器(PC)、程序状态字(PSW)、累加器(A)等寄存器都保持原有数据。I/O口保持着空闲模式被激活前那一刻的逻辑状态,所有的外围设备都能正常运行。STC15系列单片机芯片手册给出的空闲模式的静态电流是1.8mA。
1.2 掉电模式
当单片机进入掉电模式时,外部晶振停振、CPU、定时器、串行口全部停止工作,只有外部中断继续工作。使单片机进入休眠模式的指令将成为休眠前单片机执行的最后一条指令,进入休眠模式后,芯片中程序未涉及的数据存储器和特殊功能寄存器中的数据都将保持原值。
掉电模式可由外部中断或者硬件复位等方式唤醒。需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。STC15系列单片机芯片手册给出的掉电模式的静态电流为小于0.1μA,与实测值相当。
1.3 低功耗设置
控制单片机进入空闲模式和休眠模式的是电源管理寄存器PCON。这个寄存器的最低两位IDL和PD分别用来设定是否使单片机进入空闲模式和掉电模式。将IDL/PCON.0位置1,单片机进入空闲(IDLE)模式。将PD/PCON.1位置1,单片机进入掉电(Power Down)模式。
STC系列单片机的省电模式可通过外部中断、CCP中断、内部掉电唤醒计时器、串口输入等方式唤醒。本设计通过使发射机在短时发射后,即时进入掉电模式的策略,最大程度地降低静态功耗,并采用外部中断方式唤醒,重新启动发射。
可将CPU从休眠模式唤醒的外部管脚有:外部中断0、外部中断1、定时器0、定时器1、RxD、PWM0/PCA0/P3.7、PWM2/PCA2/P2.0、PWM3/PCA3/P2.4。各中断可独立唤醒单片机。唤醒后,CPU将继续执行进入空闲模式语句的下一条指令。外部RST引脚复位时,单片机也可唤醒,从用户程序的0000H处开始正常工作。本机通过外部中断1,以下降沿触发方式实现唤醒。
2 LoRa射频模组的低功耗模式
LoRa技术指的是SEMTECH公司的LoRa专利扩频调制技术。借助基于LoRa专利扩频调制技术的LoRa调制解调器,LoRa射频芯片的灵敏度可达-148dBm,功率输出可达+22dBm,具有超高灵敏度和极低功耗,同时具有良好的选择性和抗阻塞特性,在解决通信距离与功耗的矛盾方面实现了突破。用于长距离通信,能够最大限度降低系统中可移动终端的功耗。
LoRa射频芯片一般支持的工作频率范围为137~ 1020MHz,最大带宽为500Kbps,支持的调制方式包括FSK/ MSK /OOK/LoRa,其中LoRa模式下的接收灵敏度最高可达-148dbm。
2.1 LoRa射频芯片
LoRa射频芯片主要分为节点芯片和网关芯片两类。节点芯片包括SX127x/6x、SX128x和 LLCC68三个系列。其中LLCC68支持的速率较高,但传输距离较小,主要针对室内定位等应用。SX128x系列工作于2.4G频段,与WiFi等的应用场景类似。
SX127x/6x系列则面向长距离、低功耗应用,可最大程度地发挥LoRa扩频技术的优势。其中SX126x是SX127x的升级产品,其速率更高、功率更大、功耗更低、尺寸更小。两代芯片可以互相通信,但二者软件、硬件均不完全兼容,尤其是软件代码,需要较大修改才可实现移植。
网关芯片也可分为SX1301、SX1302两个系列。其中1301(1308)为第一代,提供8个上行信道和1个下行信道。SX1302为第二代,提供16个上行信道(含8个模拟信道)和2个下行信道。
需要注意的是,SX1301本身并不具备射频收发功能,所以一般还要外接一个以上SX1257(或SX1255)射频前端芯片,共同构成网关。
本设计采用SX1278芯片,其可在3.3V供电的条件下,实现最大+20dbm(100mW) 的输出功率,此时的工作电流小于125mA。
2.2 LoRa射频模组
本设计所采用的 LoRa模组(Ra-01)由安信可科技设计开发的纯射频模组。工作频段 410MHz~525MHz,调 制 方 式 FSK、GFSK、MSK、GMSK、LoRa及 OOK,工作电压为 3.3V,最大输出功率+20dBm,最大工作电流为 125mA。接收状态下具有低功耗特性,接收电流为 12.15mA,待机电流为 1.6mA,接收灵敏度优于-140dBm。
该模组支持SPI 接口,半双工方式,带 CRC的256 字节的数据包引擎,采用小体积双列邮票孔贴片封装,带屏蔽,焊接天线。
2.3 LoRa射频模组的低功耗设置
LoRa射频模块的工作模式有8种,分别是休眠模式、待机模式、FSTx模式、FSRx模式、TX模式、RX链接模式、RX单一模式和CAD模式。通过变更RegOpMode寄存器的值,就可以在各种模式之间进行切换。本机LoRa射频单元的功耗高低主要与TX模式的工作电流和休眠模式下的静态电流有关。
TX模式即发射模式。此模式激活后,射频模块先后打开发送所需要的各个单元,打开功率放大器(PA),发送数据包,发送结束后自动切换回待机模式。SX1278射频芯片最大功率发射时的电流约为125mA。
休眠模式为低功耗模式,在这种模式下,仅SPI和配置寄存器可以访问,而LoRa FIFO则不能访问。休眠模式下的工作电流小于0.1μA。
3 超低功耗LoRa发射机实现策略
LoRa终端的功耗决定于各单元的静态功耗。降低功耗的策略主要是通过软件编程,使各单元工作于第一时间进入静态功耗低的工作模式。其中,接收端的省电策略主要是CAD前导码检测、定时接收和短时窗口接收三种方式;发射端的省电策略是降低占空比,终端MCU通过“中断+定时器超时”方式控制射频模组,发射后即进入掉电模式;收发一体终端则综合运用上述两种省电策略。
3.1 工作模式优化
LoRaWan推荐的LoRa终端工作模式共分为三种,第一种叫Class A,A可理解为All,是所有LoRaWAN节点都必须支持该工作方式。第二种叫Class B,B可理解为Beacon,周期性地接收数据。第三种叫Class C,C可理解为Continuously,Class C工作方式的节点几乎是持续不断地打开接收窗口。其中,功耗最低的是Class A模式,特点是一次启动工作流程包括一次发射和两个接收窗口。然后进入省电模式,直至两次启动。
本文所实现的超低功耗LoRa发射机除了采用类似LoRaWan推荐的Class A类终端工作模式外,但根据工作场景需要,没有开启接收窗口,并对硬件设计进行了极限优化,进一步降低了功耗。
3.2 硬件设计优化
典型的LoRa终端的应用电路由射频模组、LDO供电电路、主控MCU、输入输出电路以及电源滤波电容等组成。在典型电路在基础上,本机主要进行了以下几方面优化。
3.2.1 选用低功耗器件
首先是采用纯射频模组。纯射频模组的好处可自选主控MCU,且支持二次开发。其次是选用低功耗MCU。如前所述,STC单片机具有较低的掉电电流,同时还可根据需要,确定FLASH和片内EEPROM空间,无需扩展外部存储设备,进一步降低功耗。此外,还要选用优质电容,用于各单元电源滤波和退耦。
3.2.2 减少供电电路和外设器件
为进一步降低功耗,可去除LDO供电电路,以3~3.7V电池供电;也可去除射频模组侧的电源滤波电容。本机的外部设备只有两个功能指示灯和一只用于唤醒并启动发射的按键。优化后的LoRa发射终端电路如图1所示。
图1 LoRa发射终端电路
3.3 软件设计优化
3.3.1 配置MCU端口
LoRa终端主控MCU的I/O端口模式需要进行动态切换。在MCU进入低功耗时,应将主控MCU的端口设置为省电模式;而在退出低功耗时,再将其配置成所需模式。一般来说,输出和输入端口应分别配置成输出上拉和输入悬浮模式。
由于动态切换需要一定时间,所以只适用于占空比较小的情况,不适合快速切换。复杂应用开发还应注意采用合适的数据结构,便于通过修改数据来改变MCU端口模式。
本机涉及的P1和P3端口工作模式寄存器无需动态切换,保持0X00即可。
3.3.2 进入休眠或掉电模式
对于射频单元,在进入低功耗模式时,应该确保LoRa芯片进入休眠模式。如果忘记关闭RF开关,通常会有百微安量级的漏电。如果LoRa芯片采用有源晶振,需要拉低有源晶振的供电引脚。
对于主控MCU,则应该关闭所有外设,包括串口、ADC、定时器等,然后再使MCU进入掉电模式。
本机相关代码及说明如下:
P11 =1;P34=0;//设置端口电平降低功耗
SX1276LoRaSetOpMode(Sleep_mode);//LoRa模组进入休眠模式
PCON |= 0x02; //MCU进入掉电模式
_nop_();_nop_(); //唤醒后,首先执行此语句,然后再进入中断服务程序
进入休眠或掉电模式,对降低功耗有不同的贡献。以下给出了几种情况下的实测结果。
图2为静态工作电流(LoRa模组及MCU均不休眠或掉电),其平均值为24.23 mA。
图2 LoRa终端静态工作电流(无休眠)
图3 为LoRa模组进入休眠模式时的工作电流,其平均值为19.85 mA,与无休眠相比降低4.38mA。
图3 LoRa休眠状态下的工作电流
图4为MCU进入掉电模式的工作电流,其平均值为11.77 mA,与无休眠相比降低12.46mA。
图4 MCU休眠状态下的工作电流
3.3.3 提高算法效率
在各种单片机控制系统中,MCU一般都要持续耗能。因此相应的省电策略就是通过软件设计优化,使MCU尽早进入省电模式。有效的做法是在发送完成后,直接令MCU进入掉电模式。需要再次发射时,再通过外部中断或RTC中断实现唤醒。此外,对于CRC16计算等的代码段要充分优化,减少运行时间。本机通过查表简化了CRC16计算。
提高代码效率可使整机工作电流显著降低。图5显示MCU零代码情况下的工作电流的9.33mA,与静态工作电流24.23 mA相比,降低14.9mA。由于不同工程的代码复杂度差异,提高代码效率对静态工作电流的贡献也有较大差异。
图5 MCU零代码情况下的静态工作电流
4 仿真计算与实测结果分析
4.1 系统广播时间
系统的广播时间(Time on Air,TOA)用Tpacket表示,可根据Semtech给出的公式计算。这里将其整合为以下两式:
为了实现较高灵敏度并降低功耗,本机采用信号带宽BW=125kHz,最小载荷 PL=3,最大扩频因子SF=12,隐式报头IH=1,最快数据率 CR= 4/5,启用检验CRC=1,最短前导码npreamble=2,并根据数据手册开启低速优化DE=1。
由此计算得出的TOA为:
这与实测结果(使用EK850低功耗测试仪测量,发射机供电电压为3V,下同)相接近(见图1)。
其中,图6 记录了两次发射过程。图中峰值为115mA,对应于发射电流。其持续时间对应于系统的广播时间Tpacket,实测值与理论值相近。最小电流为0.74μA,对应于待机电流。
图6 发射机实时功耗
4.2 平均功耗与待机时间
根据上述TOA计算与实测结果,按照最大发射功率为+20 dBm、发射频度为每小时发射一次进行仿真计算,得出的功耗如图7所示。
图7 发射机平均功耗
图中给出的发射时工作电流为115mA(图中蓝线),每小时发射一次的平均电流为16.31μA(图中红线)。对于发射时长占比更低的系统,若按照每天发射一次测算,则可计算出平均工作电流为0.78μA(含MCU掉电电流0.1μA),低于电池的自放电电流。
系统的待机时间可根据电池容量和平均工作电流来测算。采用容量500mAh的碱性电池供电时,若每小时发射一次,系统的待机时间为3.10年。若每天发射一次,待机时间为77.94年。而按照每天发射一次的发射频度和0.74μA的实测待机电流计算,系统的待机时间也超过了优质电池10年的保存期限。因此可以认为,在这样的使用频度下,基本可以保证10年的待机时间。
5 结论
LoRa终端可以实现极低的静态功耗。采用ST系列低功耗单片机加LoRa模组构成的LoRa终端待机电流一般不低于3μA本机采用STC单片机加Ra-01模组构成LoRa发射终端,工作于LoRaWan ClassA类终端模式以控制功耗,并通过对工作场景、硬件和软件等的极限优化设计,进一步降低静态功耗,最终实现的静态电流在1μA以下,从而使得LoRa终端的长时间工作甚至全生命周期免维护运行成为可能。