我们的51uwb 开源框架推出也有一段时间了,近期优化TWR定位,实现了TWR高容量高频率定位。
测试发现,目前代码算是TWR的极限了。
主要有以下几个特点
1 高频率,实际测试结果
A .一标签对一基站,点对点测距频率可以达到400Hz
B 一标签对三基站,TWR定位频率可以达到130Hz
从数据上可以看出,基本就是1s内可以实现400次测距,基站相当于一个分母,如果1标签+10个基站,基本应该可以到40hz。
修改定位频率代码非常简单,只需要改一个宏即可。例如下面,最大频率为130hz。
#define MAX_FREQ_HZ 130 #define MAX_TX_Node 20 #define TIM3_ReLoad (int)(10000/(MAX_FREQ_HZ*MAX_ANTHOR))
2 大容量
为了实现大容量,我们用定时器方法,控制标签发送。 标签以固定间隔和每个基站测距。 为了解决标签冲突,我们代码增加了冲突处理机制,当发现冲突后,标签进行随机延时,重新启动定时器,让冲突节点错开,以减小冲突。
主要代码
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == htim3.Instance) { HAL_TIM_Base_Stop(&htim3); /* Toggle LED */ if( Tag_receive_poll == 0) { if(Dest_Address == DEST_BEGIN_ADDR) { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4); } time_count = portGetTickCnt(); dwt_forcetrxoff(); BPhero_Distance_Measure_Specail_TAG(); HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8); TIM3->ARR = TIM3_ReLoad; } else { HAL_TIM_Base_Stop(&htim3); TIM3->ARR = TIM3_Delay_Step*((SHORT_ADDR%10)+1);//random delay Tag_receive_poll = 0; } HAL_TIM_Base_Start(&htim3); } }
更多完整代码,参考51uwb.cn论坛