From 3dc93e0626cf3dcf3c265f902da8a7de5070f083 Mon Sep 17 00:00:00 2001 From: yincheng.zhong <634916154@qq.com> Date: 星期一, 13 五月 2024 17:31:42 +0800 Subject: [PATCH] Merge branch '免布线基站' of http://47.108.70.204:60062/r/XRange_Tag into 免布线基站 --- Src/application/dw_app.c | 119 +++++++++++++++++++++++++++++++---------------------------- 1 files changed, 62 insertions(+), 57 deletions(-) diff --git a/Src/application/dw_app.c b/Src/application/dw_app.c index 18de589..c8086cd 100644 --- a/Src/application/dw_app.c +++ b/Src/application/dw_app.c @@ -70,8 +70,15 @@ #define FINAL_MSG_RESP_RX_TS_IDX 14 #define FINAL_MSG_FINAL_TX_TS_IDX 18 #define FINAL_MSG_TS_LEN 4 + +//#define _UWB_4G + static dwt_config_t config = { - 5, /* Channel number. */ +#ifdef _UWB_4G + 2, /* Channel number. */ +#else + 5, +#endif DWT_PRF_64M, /* Pulse repetition frequency. */ DWT_PLEN_64, /* Preamble length. */ DWT_PAC8, /* Preamble acquisition chunk size. Used in RX only. */ @@ -321,7 +328,7 @@ int32_t test2; uint16_t u16_nearbase_distlist[MAX_NEARBASE_NUM]; uint8_t get_newdist,notenoughdist_count; -void SetANCTimestap(uint8_t i,uint8_t* pollrx,uint8_t* resptx,uint32_t resprx,uint8_t* distoffset) +void SetANCTimestap(uint8_t i,uint8_t* pollrx,uint8_t* resptx,uint32_t resprx,uint8_t* distoffset) //写入时间戳信息 { memcpy(&anc_pollrx[i],pollrx,4); memcpy(&anc_resptx[i],resptx,4); @@ -329,7 +336,7 @@ memcpy(&anc_distoffset[i],distoffset,2); anc_clockoffset[i] = test2; } -void CalculateDists(void) +void CalculateDists(void) //计算距离 { for(int i=0;i<MAX_NEARBASE_NUM;i++) { @@ -338,7 +345,11 @@ { // exsistbase_list[i]--; - clockOffsetRatio = anc_clockoffset[i] * (FREQ_OFFSET_MULTIPLIER * HERTZ_TO_PPM_MULTIPLIER_CHAN_5 / 1.0e6) ; +#ifdef _UWB_4G + clockOffsetRatio = anc_clockoffset[i] * (FREQ_OFFSET_MULTIPLIER * HERTZ_TO_PPM_MULTIPLIER_CHAN_2 / 1.0e6) ; +#else + clockOffsetRatio = anc_clockoffset[i] * (FREQ_OFFSET_MULTIPLIER * HERTZ_TO_PPM_MULTIPLIER_CHAN_5 / 1.0e6) ; +#endif rtd_init = tag_resprx[i] - poll_tx_ts; rtd_resp = anc_resptx[i] - anc_pollrx[i]; tof = ((rtd_init - rtd_resp * (1 - clockOffsetRatio)) / 2.0) * DWT_TIME_UNITS; @@ -346,10 +357,39 @@ if(distance>-10&&distance<1000) nearbase_distlist[i] = distance*100+anc_distoffset[i]; }else{ - // nearbase_distlist[i] = 0x1ffff; + nearbase_distlist[i] = 0x1ffff; } } +} +extern uint8_t module_power,imu_enable,motor_enable; +void Registor_Poll(void) +{ + static u8 regpoll_count=0; + u8 timeout; + + tx_near_msg[MESSAGE_TYPE_IDX] = MBX_REG; + tx_near_msg[REGP_TAGSTATE_INDEX] = !GET_USERKEY<<2|imu_enable<<1|motor_enable; + tx_near_msg[REGP_FREQUENCY_INDEX] = bat_percent; + tx_near_msg[REGP_POWER_INDEX] = module_power; + memcpy(&tx_near_msg[REGP_VERSION_INDEX],&g_com_map[VERSION],2); + memcpy(&tx_near_msg[REGP_IMUTHRES_INDEX],&g_com_map[GROUP_ID],2); + memcpy(&tx_near_msg[REGP_NOMOVESLEEPTIME_INDEX],&g_com_map[DIST_OFFSET],2); + memcpy(&tx_near_msg[REGP_HEIGHTOFFSET_INDEX],&g_com_map[MAX_REPORT_ANC_NUM],2); + dwt_writetxdata(23, tx_near_msg, 0);//将Poll包数据传给DW1000,将在开启发送时传出去 + dwt_writetxfctrl(23, 0);//设置超宽带发送数据长度 + dwt_starttx(DWT_START_TX_IMMEDIATE);//开启发送,发送完成后等待一段时间开启接收,等待时间在dwt_setrxaftertxdelay中设置 + start_count=HAL_LPTIM_ReadCounter(&hlptim1); + timeout=50; + end_count=start_count+(timeout<<2); + while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_TXFRS)))//不断查询芯片状态直到成功接收或者发生错误 + { + current_count=HAL_LPTIM_ReadCounter(&hlptim1); + if(current_count>=end_count&¤t_count<end_count+15000) + break; + + }; + } float range_lost_time = 0; u16 rec_nearbaseid,rec_nearbasepos; @@ -369,12 +409,8 @@ { nearbase_num = MAX_NEARBASE_NUM-1; } -// HAL_GPIO_WritePin(LED0_GPIO, GPIO_PIN_9, GPIO_PIN_SET); -// last_nearbase_num=next_nearbase_num; -// nearbase_num=next_nearbase_num; recbase_num=0; -// motor_state=0; - for(uint8_t i=0;i<nearbase_num;i++) + for(uint8_t i=0;i<nearbase_num;i++) //标签距离32位转成16位 { u16_nearbase_distlist[i] = nearbase_distlist[i]; } @@ -419,7 +455,7 @@ dwt_forcetrxoff(); flag_rxon=0; - if(flag_ancreadpara) + if(flag_ancreadpara) //只有在读取参数的时候需要回复 { u16 calCRC; tx_near_msg[MESSAGE_TYPE_IDX] = MBX_PRAAREPLY; @@ -494,11 +530,6 @@ if(sync_timer>=1010) {sync_timer=0;} } - // TIM3->CNT=tmp_time; -// if(tagslotpos>max_slotpos) -// tagslotpos=tagslotpos%(max_slotpos+1); -// tyncpoll_time=(tagslotpos-1)*slottime; - //////////////////////////// rec_nearbasepos=0; exsistbase_list[rec_nearbasepos]=KEEP_TIMES; @@ -524,28 +555,6 @@ dwt_writetxfctrl(28+nearbase_num*4, 0);//设定发送数据长度 flag_getresponse=1; memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4); - - - //时间同步 -// ancsync_time=((sync_timer)*1000+tmp_time); -// last_slotnum=current_slotnum; -// current_slotnum=((float)sync_timer/g_com_map[COM_INTERVAL])+1; -// if(current_slotnum==last_slotnum-1) -// {flag_getresponse=1;} -// lastsync_timer=sync_timer; -// offsettimeus=ancsync_time-current_count*LPTIMER_LSB+offset; -// SetNextPollTime(tyncpoll_time); -// if(rec_remotepara_state==1) -// { -// memcpy(rec_remotepara,&rx_buffer[REMOTEPARA_INDEX],REMOTEPARA_LEN); -// memcpy(&g_com_map[COM_INTERVAL],&rec_remotepara[0],8); -// memcpy(&g_com_map[POWER],&rec_remotepara[8],10); -// if(g_com_map[COM_INTERVAL]>0&&g_com_map[COM_INTERVAL]<1000&&g_com_map[POWER]<67&&g_com_map[POWER]>0) -// {save_com_map_to_flash(); -// delay_ms(100); -// } -// NVIC_SystemReset(); -// } }else{ rec_nearbasepos=FindNearBasePos(rec_nearbaseid); SetANCTimestap(rec_nearbasepos,&rx_buffer[RESP_MSG_POLL_RX_TS_IDX],&rx_buffer[RESP_MSG_RESP_TX_TS_IDX],resp_rx_ts,&rx_buffer[RESP_MSG_ANC_DISTOFFSET]); @@ -569,11 +578,6 @@ dwt_writetxdata(28+nearbase_num*4, tx_near_msg, 0);//将发送数据写入DW1000 dwt_writetxfctrl(28+nearbase_num*4, 0);//设定发送数据长度 - - - //dwt_setdelayedtrxtime(final_tx_time);//设置final包发送时间T5 - // result=dwt_starttx(DWT_START_TX_DELAYED);//设定为延迟发送 - //dwt_writetxdata(4,&tx_near_msg[FINAL_MSG_RESP_RX_NEARBASE_IDX+(rec_nearbasepos+1)*4], FINAL_MSG_RESP_RX_NEARBASE_IDX+(rec_nearbasepos+1)*4);//将发送数据写入DW1000 } } }else{ @@ -629,25 +633,12 @@ } report_num=0; -// if(last_nearbase_num>4) -// { -// last_nearbase_num = 5; -// } for (i=0;i<last_nearbase_num;i++) { nearbaseid_list[i]=true_nearbase_idlist[i]; nearbase_distlist[i]=true_nearbase_distlist[i]; exsistbase_list[i] = true_exsistbase_list[i]; } -// #ifdef USART_INTEGRATE_OUTPUT -// usart_send[0] = 0x55; -// usart_send[1] = 0xAA; -// usart_send[2] = 4;//正常模式 -// usart_send[3] = report_num*6+2;//正常模式 -// checksum = Checksum_u16(&usart_send[2],report_num*6+2); -// memcpy(&usart_send[4+report_num*6],&checksum,2); -// USART_puts(usart_send,6+report_num*6); -// #endif dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR| SYS_STATUS_TXFRS |SYS_STATUS_RXFCG); //HAL_GPIO_WritePin(LED0_GPIO, GPIO_PIN_9, GPIO_PIN_RESET); @@ -689,7 +680,7 @@ } } } - +u8 regpoll_count; u32 id; void Tag_App(void)//发送模式(TAG标签) { @@ -708,6 +699,20 @@ } delay_us(100); g_Resttimer=0; + if(freqlost_count>FREQ_LOST_TIME) + { + if(regpoll_count++>11) //待机状态1分钟上传一次基站状态 + { + regpoll_count = 0; + Registor_Poll(); + } + }else{ + if(regpoll_count++>59)//测距状态1分钟上传一次基站状态 + { + regpoll_count = 0; + Registor_Poll(); + } + } NearPoll(); dwt_entersleep(); bat_percent=Get_VDDVlotage(); -- Gitblit v1.9.3