4G模組PSM+超低功耗,手把手教你!

电子老师傅發表於2024-10-15

合宙4G-Cat.1模組支援三種功耗模式:

  • 常規模式

  • 低功耗模式

  • PSM+模式

使用者可以根據不同的應用場景,按需選擇不同的合宙4G-Cat.1模組功耗模式,以及三種功耗模式之間的相互轉換。

合宙4G-Cat.1模組優異的低功耗表現,既有來自硬體設計的加持,也有軟體協議演算法的幫助。除實驗室資料外,合宙更關注實網環境下的功耗表現,呈現給使用者的效果更多以實網線上表現為準。

圖片

4G模組PSM+超低功耗,手把手教你!

圖片

4G模組PSM+超低功耗,手把手教你!

很多客戶的實際應用場景,是不需要和伺服器保持長連線的,一天甚至一週上傳一兩次資料,就能滿足實際的專案需求了。

如果用合宙推薦的第二種低功耗模式,有些大材小用,針對這種情況——可以使用PSM+模式。

今天,帶大家過過PSM+模式下——LuatOS開發程式碼。

一、主要硬體準備

這裡大致說下需要準備的硬體條件:

  • 合宙Air780E全IO開發板一塊:
    測試前需要將開發板上端USB下方的C2處ESD吹掉,要不會有大約20微安的漏電流。

  • 支援資料傳輸的USB線一根;

  • 一個可調電源:
    可調電源最好是能精確的捕捉到μA電流的電源,本次筆者使用的是合宙自研的Air9000P手持可調電源。

圖片

4G模組PSM+超低功耗,手把手教你!

二、PSM+超低功耗示例原始碼下載

本文示例中用到的程式碼,可以在這裡gitee.com/openLuat/LuatOS-Air780E/tree/master/demo/pm

需要用的程式碼在“780E_Lowpower”資料夾目錄下:

圖片

4G模組PSM+超低功耗,手把手教你!

如果您手上是其他模組,如Air780EP或者Air780EPS,則可以檢視Air780EP/Air780EPS對應倉庫下的pm資料夾

三、PSM+超低功耗示例原始碼

接下來,我們開始進行PSM+超低功耗示例原始碼的大致講解。

3.1 main.lua

LuatOS中,程式碼的起始位置是從main.lua第一行開始的,本文使用的是PSM+模式,所以開啟第12行的註釋,遮蔽第11行的程式碼。

圖片

4G模組PSM+超低功耗,手把手教你!

3.2 psm_plus.lua

1)設定伺服器

進入psm_plus.lua可以看到:

圖片

4G模組PSM+超低功耗,手把手教你!

在這裡,改成使用者自己使用的伺服器的IP/域名以及埠號;如果僅作測試,也可以使用合宙提供的測試伺服器。

進入後選擇開啟TCP/UDP,根據使用者伺服器型別自行選擇。

圖片

4G模組PSM+超低功耗,手把手教你!

開啟後,如下圖紅框所示位置即是IP和埠號:

圖片

4G模組PSM+超低功耗,手把手教你!

local period = 3*60*60*1000 --3小時喚醒一次

這一句是喚醒時間的設定,時間設定喚醒的時間單位為ms。所以如果你有更長時間的喚醒需求,如一天喚醒一次,可以改動最前面的3為24。

特別提醒:
這個TCP伺服器僅能當作測試來用,重新整理一下網頁或者你電腦網路有波動斷網一下,就會斷開,重新開啟TCP埠就會變。

2)獲取喚醒原因

圖片

4G模組PSM+超低功耗,手把手教你!

上面兩句是獲取了一下當前喚醒的原因,是正常開機,還是設定的定時器啟動,或是串列埠/AGPIO喚醒。

3)testTask函式

直接拉到psm_plus.lua最後一行;其實上面所有的函式都是基於最後一行的task跑的:

圖片

4G模組PSM+超低功耗,手把手教你!

本句的意思是啟動一個task,在task裡執行第14行的testTask函式,並傳入了d1Name這個變數,傳入了netCB這個回撥函式,以及給testTask傳入了server_ip和server_port這兩個引數。

接下來,我們看看testTask這個函式的前一小段:

圖片

4G模組PSM+超低功耗,手把手教你!

先判斷了一下當前喚醒是什麼原因喚醒的,並將對應原因賦值給了一個叫做txData的變數,並且判斷了下是上電開機還是休眠喚醒。

如果是休眠喚醒,則主動退出飛航模式(因為模組在休眠的時候會進入飛航模式,減小因為可能的網路波動引起的功耗增大等異常)。

下面這一段就是與TCP伺服器連結的全過程,如果連結失敗會重連3次:

圖片

4G模組PSM+超低功耗,手把手教你!

圖片

4G模組PSM+超低功耗,手把手教你!

接下來這段配置了uart1的波特率為9600,方便外部串列埠裝置從串列埠喚醒模組(注:9600狀態下喚醒模組比較方便,如果是115200或其他波特率,可能需要傳送多次資料才能走串列埠喚醒模組)。

如果不影響產品功能,需要將所有AGPIO在休眠狀態下的高電平輸出關閉,可以進一步節省耗電,比如本示例中對GPIO32的操作就是這一原因。

關於AGPIO和GPIO對應編號,如下圖所示:

圖片

4G模組PSM+超低功耗,手把手教你!

圖片

4G模組PSM+超低功耗,手把手教你!

最後這段程式碼,啟動了深度休眠也就是PSM+模式的定時器:

圖片

4G模組PSM+超低功耗,手把手教你!

後面的period引數,就是指令碼最上面我們設定的定時休眠喚醒時間;後面進入飛航模式,是避免因為基站網路波動導致的異常功耗;然後,才真正進入了PSM+模式。如果進入不成功,15秒後會重啟模組。

  • 如果是串列埠喚醒,那麼伺服器會收到”uart1 wakeup“的資料;

  • 如果是GPIO喚醒,那麼伺服器會收到"pad wakeup";

  • 如果是定時器喚醒,那麼伺服器會收到"timer wakeup";

  • 如果當前是上電開機去連結伺服器,那麼伺服器會收到"normal wakeup"。

在沒有資料傳送的時候,模組實測待機功耗為下圖的3μA:

圖片

4G模組PSM+超低功耗,手把手教你!

今天的內容就分享到這裡啦,你學會了嗎?

相關文章