51uwb.cn

 找回密码
 立即注册
楼主: liuchunhui321
打印 上一主题 下一主题

关于UWB定位频率的问题

[复制链接]

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
11#
发表于 2021-12-12 09:59:20 | 只看该作者
关于你的这个问题,我们这边进行了复现。
发现当合入之前的更新后,为了处理多区域干扰问题,无法处理多标签冲突问题了。
具体原因:
  1. //    dwt_setinterrupt(DWT_INT_RFCG , 1);
  2. //    dwt_setautorxreenable(1);
复制代码
这个代码的意思是,只有当接收成功后,上传中断给软件。
而我们软件流程中会处理节点冲突
  1.         if(!(status_reg & SYS_STATUS_RXRFTO))//
  2.             Tag_receive_poll = 1;//
  3.         dwt_write32bitreg(SYS_STATUS_ID, (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR));
复制代码
上面表示,当产生任何接收异常,将认为标签和其他标签产生冲突,产生冲突的原因就是因为同时发送了,而发送是通过定制器控制的,那当产生冲突后,微调一下定制器,让产生冲突的标签延后一点,具体代码
  1.         else
  2.         {
  3.             HAL_TIM_Base_Stop(&htim3);
  4.             TIM3->ARR = TIM3_Delay_Step*((SHORT_ADDR%10)+1);//random delay
  5.             Tag_receive_poll = 0;
  6.         }
复制代码

以上就是多标签冲突避免机制。

之前让你加的更新,导致软件无法收到接收异常(硬件配置后只报告接收正常)。导致冲突处理机制不能工作,相互冲突的标签不做处理,每次都是冲突的。表象就是某些标签一直不更新距离信息,看起来像死机一样。

以上分析,如果多个标签,尽量使用更新以前的代码

  1.     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);
  2. //    dwt_setinterrupt(DWT_INT_RFCG , 1);
  3. //    dwt_setautorxreenable(1);
复制代码
如果是一个标签,多个区域定位,可以加入更新。

另外一个注意的问题是,标签编译地址尽量错开,因为我们的delay是模低地址

  1. TIM3->ARR = TIM3_Delay_Step*((SHORT_ADDR%10)+1);//random delay
复制代码
实际编译地址可以选用1001 1003 1005 依次类推。

我们实际测试效果如下:


另外补充一下,上面也提到了原理部分,冲突避免是一个“自适应”过程,当模块刚刚上电后,可能某些标签会同时发送产生冲突,会相互干扰。这个时候会有一段时间的自适应调整过程,一般根据标签多少会有一定时间消耗。慢慢逐步稳定下来。


通信信息个数统计:
每个标签和每个基站测距一次需要3条信息。6个标签*4个基站*5 = 120,每个信息发送时间槽只有8个ms左右,而信息本身需要几个ms发送,相互之间空闲时间槽其实已经非常小了。 这个配置基本算是TWR的极限了。











回复

使用道具 举报

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
12#
发表于 2021-12-12 10:01:11 | 只看该作者
蓝点无限 发表于 2021-10-27 23:05
http://51uwb.cn/forum.php?mod=viewthread&tid=365&highlight=%B8%FC%D0%C2
这里有个重要更新,看你的 ...

这个更新暂时不要合入
回复

使用道具 举报

2

主题

13

帖子

36

积分

新手上路

Rank: 1

积分
36
13#
 楼主| 发表于 2021-12-14 08:50:19 | 只看该作者
我把之前的更新取消了,tx_main_c中有定时器3中断回调函数中包含   
else
        {
            HAL_TIM_Base_Stop(&htim3);
            TIM3->ARR = TIM3_Delay_Step*((SHORT_ADDR%10)+1);//random delay
            Tag_receive_poll = 0;
        }

这一段不需要修改吧
回复

使用道具 举报

2

主题

13

帖子

36

积分

新手上路

Rank: 1

积分
36
14#
 楼主| 发表于 2021-12-15 16:47:44 | 只看该作者
蓝点无限 发表于 2021-12-12 10:01
这个更新暂时不要合入

请回复我一下谢谢
回复

使用道具 举报

2

主题

13

帖子

36

积分

新手上路

Rank: 1

积分
36
15#
 楼主| 发表于 2021-12-15 16:50:30 | 只看该作者
liuchunhui321 发表于 2021-12-14 08:50
我把之前的更新取消了,tx_main_c中有定时器3中断回调函数中包含   
else
        {

我改成之前的还是有标签不刷新的情况
回复

使用道具 举报

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
16#
发表于 2021-12-15 22:34:44 | 只看该作者
liuchunhui321 发表于 2021-12-14 08:50
我把之前的更新取消了,tx_main_c中有定时器3中断回调函数中包含   
else
        {

这个部分不能注释掉
这个功能是当标签发送信息发现数据冲突后,重新对定时器做微调,以达到避免冲突
回复

使用道具 举报

2

主题

13

帖子

36

积分

新手上路

Rank: 1

积分
36
17#
 楼主| 发表于 2021-12-17 09:23:35 | 只看该作者
蓝点无限 发表于 2021-12-15 22:34
这个部分不能注释掉
这个功能是当标签发送信息发现数据冲突后,重新对定时器做微调,以达到避免冲突

我没有注释掉,现在我改成四基站四标签,2HZ的频率,还是有不稳定,不刷新的现象
回复

使用道具 举报

2

主题

13

帖子

36

积分

新手上路

Rank: 1

积分
36
18#
 楼主| 发表于 2021-12-17 18:37:50 | 只看该作者
蓝点无限 发表于 2021-12-15 22:34
这个部分不能注释掉
这个功能是当标签发送信息发现数据冲突后,重新对定时器做微调,以达到避免冲突

而且我不太理解我一个标签数据貌似不太对ANC0 range靠近880000,程序本身没有错

微信图片_20211217183338.png (11.32 KB, 下载次数: 3859)

微信图片_20211217183338.png
回复

使用道具 举报

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
19#
发表于 2021-12-19 19:45:07 | 只看该作者
liuchunhui321 发表于 2021-12-17 18:37
而且我不太理解我一个标签数据貌似不太对ANC0 range靠近880000,程序本身没有错

为何你的图片,tag 都是tag5,你的标签id配置有问题吗?
回复

使用道具 举报

2

主题

13

帖子

36

积分

新手上路

Rank: 1

积分
36
20#
 楼主| 发表于 2021-12-21 17:59:58 | 只看该作者
蓝点无限 发表于 2021-12-19 19:45
为何你的图片,tag 都是tag5,你的标签id配置有问题吗?

我的tagID为0x0025,0x0015,0x0035,0x0045,0x0055,0x0065,所以显示都是5
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

bphero Inc.  

GMT+8, 2024-11-23 15:18 , Processed in 0.019129 second(s), 5 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表