我是靠谱客的博主 落后奇迹,最近开发中收集的这篇文章主要介绍zigbee提取RSSI值,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.

  当接收到数据包后,数据包中就有RSSI信息,可以用 afIncomingMSGPacket_t结构体提取,里面有 byte LinkQuality

RSSI反映接收信号强度,LQI反映信号的连接质量,两者都可以通过读取芯片的寄存器得到。
RSSI:信号强度值
LQI:连接质量

在协议栈中中,LQI是可以直接从接收数据后的结构体中得到,例如接收数据使用的结构定义为pkt:LQI = pkt->LinkQuality;
RSSI是通过读取max_rx.c文件中的数组rxBuf的第一位得到的,这里得到的信号强度值是以2进制补码的形式体现,具体使用可以参看2430 或者1110/2510的Data Sheet。
  RSSI = rxBuf[0];
2.RSSI与LQI之间的转换关系如下:
  RSSI =  -(81-(LQI*91)/255)
3.补充
RSSI反映接收信号强度,LQI反映信号的连接质量,两者都可以通过读取芯片的寄存器得到。LQI虽然能够判断连接质量,但会因调制方式的不同而不同。RSSI是判断两个节点距离的很好的参数。在从RSSI寄存器中读到数值后我们需要进行一系列转化,才能得到接收强度值.

 

 

以“C51RF-3演示程序菜单综合测试程序”为例。

       printRSSI(receiveBuffer[length]);   //这个函数显示出RSSI值。


为什么RSSI寄存器值需要减去45?

CC2430有一个内置的接收信号强度指示器(RSSI),其数字值为8 位有符号的二进制补码,可以从寄存器位RSSIL.RSSI_VAI读出。


RSSI值总是通过8个符号周期内(128μs)取平均值得到。RSSI 寄存器值RSSI.RSSI_VAI在RF引脚上涉及电能P,由下式表示:

P = RSSI_VAL + RSSI_OFFSET [dBm]


式中:RSSI_OFFSET是一个系统开发期间得到的来自前端增益的经验值。RSSI_OFFSET近似值为-45。例如,从RSSI寄存器中读到的值是-20,那么RF的输入功率大约是-65dBm。


典型的作为输入功率功能的RSSI_VAI 如图所示。从图中可以看到,从CC2430中读出的RSSI 值线性极好,且具有大约100dB的动态范围。

在系统开发RSSI_OFFSET期间,被发现前端增益RSSI_OFFSET约为-45。


例如: 如果读值-20从接收信号强度指示登记,射频输入功率约为-65dBm的。

LinkQuality其实就是LQI值,通过这个公式RSSI = -(81-(LQI*91)/255)转换成了RSSI值,RSSI值再通过这个公式d=10^((ABS(RSSI)-A)/(10*n))得到距离了,至于精确度可以自己做实验测得对应曲线图,环境不一样精确度都会不一样的。

从程序包上看:

typedef struct
{
osal_event_hdr_t hdr;
uint16 groupId;
uint16 clusterId;
afAddrType_t srcAddr;
byte endPoint;
byte wasBroadcast;
byte LinkQuality;
byte SecurityUse;
uint32 timestamp;
afMSGCommandFormat_t cmd;
} afIncomingMSGPacket_t;

每个接收到的数据包里面都有byte LinkQuality;这个参数,只需要取出来就可以了!

最后

以上就是落后奇迹为你收集整理的zigbee提取RSSI值的全部内容,希望文章能够帮你解决zigbee提取RSSI值所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部