在使用LoRa模組的過程中,對于依賴電池供電的設備而言,載波活動檢測(CAD)是極為重要的。然而,在實際應用CAD檢測時,用戶可能會遭遇若干典型的問題。本文旨在對這些問題進行詳細解析,以期幫助模組用戶更加高效且準確地運用CAD檢測功能。
過程
01
喚醒包
喚醒包就是一個數據包,只是和普通的數據包有些差異。
如下是一個普通數據包的配置:
G_LoRaConfig.PreambleLength = 0x0008; //前導碼長度
G_LoRaConfig.PayloadLength = 190; //數據包長度
即該普通數據包的前導碼長度為8,數包長度為190。
把這個普通數據包的配置改一下,如下:
G_LoRaConfig.PreambleLength = 0x00FF; //前導碼長度
G_LoRaConfig.PayloadLength = 4; //數據包長度
即該普通數據包的前導碼長度為255,數包長度為4。這也是一個數據包,但是這個數據包就可以作為喚醒包了。
所以需要知道喚醒包就是一個數據包,只是和常規的數據包的差別是喚醒包的前導碼長度很長有效數據負載部分很短,而普通數據包的前導碼長度很短有效數據負載部分可以長些也可以短些。
02
接收端CAD檢測時檢測的不只是前導碼
接收端CAD檢測時檢測的是LoRa信號,而不是只檢測前導碼。
先看發送端的數據包配置:
G_LoRaConfig.PreambleLength = 0x0008; //前導碼長度
G_LoRaConfig.PayloadLength = 190; //數據包長度
發送的是一個普通數據包。
前導碼長度為8,數據負載長度為190,每1.35秒發射一次(MX_TIM3_Init_Ms(1350);//定時器初始化)
電流波形如下:
可見:數據包占用時長約1300秒,中間空余時間約50ms。
然后再看在發送端沒有開啟時接收端的CAD檢測的配置:每給檢測周期大概155ms,每個周期中睡眠時間大概100ms,檢測窗口大概35ms。
然后把發送端上電,在看接收端,給檢測周期大概155ms,每個周期中睡眠時間大概100ms,檢測窗口大概35ms,和沒啟動發送端時基本相同。
按照如如上測試結果,如果接收端CAD檢測時只檢測的是前導碼,則CAD每次檢測中CADDONE和CADACTIVITY的比值將遠遠大于1(比如50:1),如果CAD檢測時檢測的是LoRa信號,則CADDONE和CADACTIVITY的比值將非常接近大1(比如50:49),實測時如下圖(141:140),非常接近于1。所以這就可以回答使用者的一個疑問,就是CAD檢測時檢測的確實時LoRa信號,而不是只檢測前導碼。
03
CADDONE和CADACTIVITY的觸發關系
每次啟動CAD檢測后,CADDONE中斷一定會觸發,該中斷表示CAD檢測完畢了,但是是否檢測到了LoRa信號無法確定。
是否檢測到了LoRa信號了還要看CADACTIVITY是否被觸發了,如果CADACTIVITY也被觸發了,才說明確實檢測到了LoRa信號。
就是說CADDONE中斷產生了CADACTIVITY中斷未必產生,但是我們的例程中如果CADACTIVITY中斷產生了則CADDONE中斷一定會產生。
這里只需要看下如下了一個有問題大代碼,就清楚了,如下是應用中的一個錯誤。
如上這段代碼跑起來的話,會有一個現象:每次啟動CAD檢測后,CADDONE中斷總能檢測到,但是CADACTIVITY中斷永遠檢測不到。
這里錯誤的原因是使用的是使用了如下邏輯:
if( xxxx)
{xxxx}
else if(判斷CADDONE)
{xxxx}
else if(判斷CADACTIVITY)
{xxxx}
如上邏輯錯誤的地方就是沒有理解清楚如上說的CADDONE和CADACTIVITY的觸發關系。
正確的邏輯應該是:
if( xxxx)
{xxxx}
if(判斷CADDONE)
{
if(判斷CADACTIVITY)
{xxxx}
}
04
CADACTIVITY誤檢測
實際使用中,常常會發現主機端沒有上電或者沒有發送喚醒包,但是從機端依然會觸發CADACTIVITY標志。
這種現象常常被稱作誤檢測。
例如用我司的實例代碼的配置直接測試如上代碼,并且關閉發送端,此時誤檢測率達到20%(如下圖41:202)
改善誤檢測的方法主要有如下:
(1)換個頻點
(2)改變參數配置中的極性參數:
G_LoRaConfig.InvertIQ = LORA_IQ_NORMAL; //IQ信號格式,
LORA_IQ_NORMAL:標準模式,
LORA_IQ_INVERTED:反轉模式;
(3)改用等效波特率更高的參數配置
(4)最顯著的是改變CAD檢測的符號個數
比如如上測到的誤檢測率達到20%(如下圖41:202)就是在該值使用2時的結果,該值越大越不容易產生誤檢測。
如下把改制改成8。
再做如上測試的結果如下:
誤檢測率降低為0.43%(2:462)。需要說明的是該值用的的比較小的話(比如使用1或者2等),想把誤檢測率降低到1%以下是不太現實的。
該值使用比較大的值的話可以降低誤檢測率,但是檢測窗口時間長度就會加大。所以這里只能平衡的考慮選用那個值。
05
喚醒包和常規數據包的切換
結論
1、喚醒包就是比較特殊的數據包。
2、接收端CAD檢測時檢測的是LoRa信號,而不是只檢測前導碼。
3、CADDONE中斷產生了CADACTIVITY中斷未必產生,但是我們的例程中如果CADACTIVITY中斷產生了則CADDONE中斷一定會產生。
4、處理CADDONE中斷和CADACTIVITY中斷的軟件邏輯注意不要錯誤。
5、CADACTIVITY誤檢測要想明顯降低需要CAD檢測窗口時間長度做一定的犧牲。
-
檢測
+關注
關注
5文章
4436瀏覽量
91367 -
CAD
+關注
關注
17文章
1079瀏覽量
72350 -
LoRa
+關注
關注
349文章
1672瀏覽量
231787
發布評論請先 登錄
相關推薦
評論