|  | 
 
| 对于使用三边定位原理实现的算法而言,定位实质就是一个三对一测距(2D),在之前帖子中已经贴出了如何实现测距 http://51uwb.cn/forum.php?mod=viewthread&tid=188&extra=page%3D1
 
 这里简单实现TWR定位,这个代码在之前测距基础上除了实现三对一测距以外,还增加了对于PA的支持(目前我们这里有一款模块,增加了PA,距离可以达到400-500m)。
 
 具体上代码
 1 定时器周期发送测距请求,在定时器的回调函数中调用BPhero_Distance_Measure_Specail_TAG();
 
 用定时器周期调用测距请求,在调频率的时候就非常好调了,只需要改如下标红的8400即可复制代码void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == htim3.Instance)
    {
        /* Toggle LED */
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4);
        dwt_forcetrxoff();
        BPhero_Distance_Measure_Specail_TAG();
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8);
    }
}
 复制代码TIM_HandleTypeDef  htim3;
static void MX_TIM3_Init(void)
{
    TIM_ClockConfigTypeDef sClockSourceConfig;
    TIM_MasterConfigTypeDef sMasterConfig;
    htim3.Instance = TIM3;
    htim3.Init.Prescaler = 8400-1;
    htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim3.Init.Period = 500-1;
    htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
 在发送请求部分,轮训三个地址,0x0001 到 0x0003,基站必须配置为这三个地址
 
 复制代码uint16 Dest_Address =  0x0000;
void BPhero_Distance_Measure_Specail_TAG(void)
{
    msg_f_send.destAddr[0] =(Dest_Address+1) &0xFF;
    msg_f_send.destAddr[1] =  ((Dest_Address+1)>>8) &0xFF;
    msg_f_send.seqNum = distance_seqnum;
    msg_f_send.messageData[0]='P';//Poll message
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, !GPIO_PIN_RESET);
    dwt_writetxdata(psduLength,(uint8 *)&msg_f_send, 0) ;  // write the frame data
    dwt_writetxfctrl(psduLength, 0);
    dwt_starttx(DWT_START_TX_IMMEDIATE);
 其他部分大体与TWR测距一致,特别一点,我们这里增加了kalman滤波,在最后计算出距离之后用kalman滤波
 
 复制代码distance = tof * SPEED_OF_LIGHT;
                    distance = distance - dwt_getrangebias(config.chan,(float)distance, config.prf);//距离减去矫正系数
                    //kalman filter
                    distance = KalMan(distance);
                    //send distance message to tag
                    int temp = (int)(distance*100);
 更多代码请直接拉git上的完整工程吧,欢迎一起讨论
 
 复制代码https://bitbucket.org/tuzhuke/twr_location_v1/src/master/
 
 
 
 
 | 
 |