蓝点无限 发表于 2021-6-2 08:47:18

[重要更新]51uwb_base code中断更新

在我们的51uwb base code中使用了帧过滤和中断功能,但是有客户反映,如果同一个区域单纯使用PANID区分网络,偶尔会出现相互干扰问题。
这个更新主要解决这个问题。

推荐更新    :同一个区域内存在多套设备的客户。
更新优先级:高


在我们的代码中,当正确接收到信息,或者接收到错误信息,都会到中断函数中由软件处理。 这里有个地方就是,如果错误的信息纯让硬件彻底过滤掉,从而减少软件负担。
之前的UWB中断配置部分代码
dwt_setinterrupt(DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO /*| DWT_INT_RXPTO*/), 1);除了配置正确接收到信息以外,其它ERROR 情况,也会触发中断。

改进版本中断配置
dwt_setinterrupt(DWT_INT_RFCG , 1);改进后的版本,只有接收到信息正确后才触发中断。
----------------------------------------------------------------------------------------------------------
修改测试,发现如果接收到数据包有问题,接收器就关闭了,导致多个PANID依然干扰。这个干扰不是距离异常波动,而是接收器异常会关闭。

解决办法有两个,
1 当接收器异常关闭,软件检测,重新下一轮测试。这个方法大大降低了测距效率。
2 当接收器侦测到异常关闭后重新打开。--> 查找DW1000 用户手册,发现可以通过设置RXAUTR 解决这个问题。



于是bphero_uwb.c uwb初始化代码改成如下
// dwt_setinterrupt(DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO /*| DWT_INT_RXPTO*/), 1);
dwt_setinterrupt(DWT_INT_RFCG , 1);
dwt_setautorxreenable(1);




藏丶宝 发表于 2021-6-9 12:54:02

手册是真的难啃

szmcumcu 发表于 2021-9-30 13:53:49

非常有效,谢谢楼主的严谨与分析,赞一个

桂冠vivi 发表于 2021-11-25 18:08:15


感谢楼主的分享
页: [1]
查看完整版本: [重要更新]51uwb_base code中断更新