[原创] 【Atmel SAM R21创意大赛周计划】RSSI测距

义剑仗乾坤   2015-4-2 18:48 楼主
各位大神们已经交作品了,本菜鸟还没做完,表示压力很大。活动虽然已经截止了,但东西还是要做出来,给论坛一个交代。这次作品是想借助【相差测距】测量两个板子之间的距离,并用LCD显示;并且设置距离上限值,超限后协调器端报警,可以应用于贵重物品防盗。 其实一直想等LCD调通之后再发的,但LCD比较老走的三线制spi,不能用例程里的spi,就自己用IO口模拟,时序图都对了,就是不出字,感觉是时间没控制好,目前还在紧张调试中。 关于相差测距:【ATMEL宣布AT86RF233 2.4GHz IEEE 802.15.4 无线电收发器能支持两个无线电设备之间的距离测量,也就是测距(ranging)。这项创新技术使用无线电信号之间的相差(phase difference)以测量,实现了无线网络内的物体追踪,用于工业和消费应用。相位测量相比今天市场上提供的通用距离测量技术,是并不复杂的技术,并且具有相似的测量精度和较低的整体系统成本。】 datasheet上有下面的介绍 40.11 Phase Difference Measurement The Phase Difference Measurement Unit (PMU) is characterized by: Relative phase measurement of received signal 40.11.1 Overview The AT86RF233 performs a phase measurement of a received signal relative to an internal reference. The derived value represents the phase delay of the received signal referenced to an internal reference signal in the receiver low-IF domain, see “Receiver (RX)” on page 974. The measured value is captured in register bits PMU_VALUE (register 0x3B, PHY_PMU_VALUE) and periodically updated. The register bit PMU_IF_INVERSE controls the PMU Intermediate Frequency path. The register bits PMU_VALUE signals the PMU measurement value The register bits PMU_VALUE signals the PMU measurement value..png 基本测距流程 基本测距流程.jpg 细节流程 关于相差测距,研究了很久之后发现是个大坑。一位大神建议把那几个pmu对应的函数内部流程搞清楚,自己写。我表示力不从心啊,只好转到RSSI上。 Received Signal Strength Indication接收的信号强度指示,无线发送层的可选部分,用来判定链接质量,以及是否增大广播发送强度。通过接收到的信号强弱测定信号点与接收点的距离,进而根据相应数据进行定位计算的一种定位技术。 网上查了一些资料,RSSI=-(10*n*lgd+A) n代表传播指数,A代表距离1m时接受信号强度绝对值 单位dBm 根据这个公式的推导距离d 所以d=10^((ABS(RSSI)-A)/(10*n)) 其中A值的最佳范围为45—49,n值最佳范围为3.25—4.5 于是根据公式编了一段计算距离的程序 // 距离dis=10^((ABS(RSSI)-A)/(10*n)) double bbb = abs(msg->rssi); //求出rssi的绝对值 double ccc=(bbb-48.0)/45.0; double dis=exp10(ccc) ; //求出10的ccc次方 反复试了几次,A取了48,n取了4.5,可能不同的环境有差别吧 当然要添加头文件 #include "fastmath.h" 其中用到的两个数学函数 #define abs(x) fast_abs(x) //取绝对值 #define exp10(x) fast_exp10(x) //10的x次方 上视频 3米内,引脚输出低电平; 3-6米,脉冲; 6米以上,输出高电平。 上代码 在wsndemo.c中写的
  1. #if APP_COORDINATOR
  2. appUartSendMessage(ind->data, ind->size);
  3. if (APP_CommandsPending(ind->srcAddr)) {
  4. NWK_SetAckControl(APP_COMMAND_PENDING);
  5. }
  6. // 距离dis=10^((ABS(RSSI)-A)/(10*n))
  7. double bbb = abs(msg->rssi);
  8. double ccc=(bbb-48.0)/45.0;
  9. double dis=exp10(ccc) ;
  10. if(dis<3)
  11. {
  12. port_pin_set_output_level(PIN_PA13,0);
  13. }
  14. else if (dis<6)
  15. {
  16. port_pin_set_output_level(PIN_PA13,1);
  17. delay_ms(50);
  18. port_pin_set_output_level(PIN_PA13,0);
  19. }else
  20. {
  21. port_pin_set_output_level(PIN_PA13,1);
  22. }
  23. #endif
  24. return true;
  25. }
用LCD显示距离的话会直观很多,现在只好用这种笨办法演示一下。 ASF库里给的这几个例程确实很好用,我用的是wsndemo,其中终端通过appSendData()发数据,协调器通过appDataInd()接收数据。 小弟之前只玩过51,没用过库函数,结构体也不太明白。这次能参与到这个活动真挺幸运的,学到了很多东西。我读的是双控,一直在帮导师做PLC相关的项目,玩板子方面实在是菜鸟,以后还多向各位大神请教。 后面调好LCD再补充吧。 本帖最后由 义剑仗乾坤 于 2015-4-2 21:32 编辑

回复评论 (10)

来看看大神的杰作
点赞  2015-4-2 22:47
如果是室外效果会好一些,室内因为障碍物、墙壁造成的多径效应,对精度影响很大。
点赞  2015-4-2 22:52
引用: qq597578205 发表于 2015-4-2 22:47
来看看大神的杰作

别别 其他几位才是大神
我也是刚学 做了个半成品 后面再完善
点赞  2015-4-2 22:53
引用: 义剑仗乾坤 发表于 2015-4-2 22:53
别别 其他几位才是大神
我也是刚学 做了个半成品 后面再完善

我也想学习这块板子。。。没有板子好纠结
点赞  2015-4-2 22:56
引用: dcexpert 发表于 2015-4-2 22:52
如果是室外效果会好一些,室内因为障碍物、墙壁造成的多径效应,对精度影响很大。

是的 站着不动 信号强度也可能会变化
点赞  2015-4-2 22:57
引用: 义剑仗乾坤 发表于 2015-4-2 22:57
是的 站着不动 信号强度也可能会变化

因为R21使用的2.4G频率,也会收到Wifi的影响。虽然频点可能不一样,还是会把模拟信号叠加上去。
点赞  2015-4-2 23:07
引用: dcexpert 发表于 2015-4-2 23:07
因为R21使用的2.4G频率,也会收到Wifi的影响。虽然频点可能不一样,还是会把模拟信号叠加上去。

学习了!
点赞  2015-4-3 08:37
分享一些资料给你,好好研究研究

应该可以搞定的,不是很难,PPT中部分已经添加注释,方便理解

这篇PPT是atmel内部设计PMU的工程师写的,也算是比较专业了,仅此一篇,当然需要做一些实验,才能写好那几个函数,不过也需要一些基本的认识,比如多径效应等等,跳频测量也需要你好好理解下



ranging-with-ieee-802-15-4-narrow-band-phy.rar (53.6 KB)
(下载次数: 29, 2015-4-3 08:40 上传)

电工
点赞  2015-4-3 08:42
你初始化时指令延时时间增加下试试
点赞  2015-4-3 10:23
引用: lyzhangxiang 发表于 2015-4-3 08:42
分享一些资料给你,好好研究研究

应该可以搞定的,不是很难,PPT中部分已经添加注释,方便理解

这篇PPT是atmel内部设计PMU的工程师写的,也算是比较专业了,仅此一篇,当然需要做一些实验,才能写好那几个函数,不过也需要一些基本的认识,比如多径效应等等,跳频测量也需要你好好理解下

多谢!我再研究一下!
点赞  2015-4-4 09:00
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复