| | |
| | | uint32_t g_UWB_com_interval = 0; |
| | | float dis_after_filter; //å½åè·ç¦»å¼ |
| | | LPFilter_Frac* p_Dis_Filter; //æµè·ç¨çä½éæ»¤æ³¢å¨ |
| | | uint16_t g_Tagdist[TAG_NUM_IN_SYS]; |
| | | int32_t g_Tagdist[TAG_NUM_IN_SYS]; |
| | | uint8_t g_flag_Taggetdist[256]; |
| | | |
| | | static uint64_t get_tx_timestamp_u64(void) |
| | |
| | | g_flag_Taggetdist[i]++; |
| | | if(g_flag_Taggetdist[i]>=2) |
| | | { |
| | | g_Tagdist[i]=0xffff; |
| | | g_Tagdist[i]=0x1ffff; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | extern int16_t g_commap_antdelay; |
| | | void Dw1000_Init(void) |
| | | { |
| | | /* Reset and initialise DW1000. |
| | |
| | | |
| | | /* Apply default antenna delay value. See NOTE 1 below. */ |
| | | dwt_setrxantennadelay(RX_ANT_DLY); //è®¾ç½®æ¥æ¶å¤©çº¿å»¶è¿ |
| | | dwt_settxantennadelay(TX_ANT_DLY); //设置åå°å¤©çº¿å»¶è¿ |
| | | dwt_settxantennadelay(0); //设置åå°å¤©çº¿å»¶è¿ |
| | | |
| | | /* Set expected response's delay and timeout. See NOTE 4 and 5 below. |
| | | * As this example only handles one incoming frame with always the same delay and timeout, those values can be set here once for all. */ |
| | |
| | | memcpy(&tx_nearpoll_msg[NEARBASEID_INDEX],&nearbaseid_list,nearbase_num*2); |
| | | for(i=0;i<nearbase_num;i++) |
| | | { memcpy(&tx_nearpoll_msg[NEARBASEID_INDEX+nearbase_num*2+i*2],&nearbase_distlist[i],2);} |
| | | |
| | | |
| | | memcpy(&tx_nearpoll_msg[NEARBASEID_INDEX+nearbase_num*4],&g_commap_antdelay,2); |
| | | |
| | | for(i=0;i<MAX_NEARBASE_NUM;i++) |
| | | { |
| | | nearbase_distlist[i]=0x1ffff; |
| | | } |
| | | tx_nearpoll_msg[MESSAGE_TYPE_IDX] = NEAR_POLL; |
| | | memcpy(&tx_nearpoll_msg[ANCHOR_ID_IDX],&mainbase_id,2); |
| | | dwt_writetxdata(13+4*nearbase_num, tx_nearpoll_msg, 0);//å°Pollå
æ°æ®ä¼ ç»DW1000ï¼å°å¨å¼å¯åéæ¶ä¼ åºå» |
| | | dwt_writetxfctrl(13+4*nearbase_num, 0);//设置è¶
宽带åéæ°æ®é¿åº¦ |
| | | dwt_writetxdata(15+4*nearbase_num, tx_nearpoll_msg, 0);//å°Pollå
æ°æ®ä¼ ç»DW1000ï¼å°å¨å¼å¯åéæ¶ä¼ åºå» |
| | | dwt_writetxfctrl(15+4*nearbase_num, 0);//设置è¶
宽带åéæ°æ®é¿åº¦ |
| | | dwt_starttx(DWT_START_TX_IMMEDIATE | DWT_RESPONSE_EXPECTED);//å¼å¯åéï¼åé宿åçå¾
䏿®µæ¶é´å¼å¯æ¥æ¶ï¼çå¾
æ¶é´å¨dwt_setrxaftertxdelayä¸è®¾ç½® |
| | | |
| | | flag_finalsend=0; |
| | |
| | | dwt_writetxdata(28+nearbase_num*4, tx_nearfinal_msg, 0);//å°åéæ°æ®åå
¥DW1000 |
| | | dwt_writetxfctrl(28+nearbase_num*4, 0);//设å®åéæ°æ®é¿åº¦ |
| | | memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4); |
| | | if(temp_dist!=0x1ffff) |
| | | if(temp_dist!=0x1ffff&&g_com_map[ALARM_DISTANCE1] == 1) |
| | | { |
| | | g_Resttimer=0; |
| | | IWDG_Feed(); |
| | |
| | | LED0_BLINK; |
| | | // memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4); |
| | | // tagslotpos=GetRandomSlotPos(rec_tagpos_binary); |
| | | if(temp_dist!=0x1ffff) |
| | | if(temp_dist!=0x1ffff&&g_com_map[ALARM_DISTANCE1] == 1) |
| | | { |
| | | #ifdef USART_SINGLE_OUTPUT |
| | | usart_send[2] = 1;//æ£å¸¸æ¨¡å¼ |
| | |
| | | uint32_t frame_len; |
| | | uint32_t resp_tx_time; |
| | | uint8_t rec_nearbase_num,anc_report_num; |
| | | int16_t rec_antdelay; |
| | | void Anchor_RecPoll(void) |
| | | { |
| | | tmp_time=TIM3->CNT; |
| | |
| | | |
| | | battary = rx_buffer[BATTARY_IDX]; |
| | | button = rx_buffer[BUTTON_IDX]; |
| | | |
| | | |
| | | frame_seq_nb2 = rx_buffer[SEQUENCE_IDX]; |
| | | if(result==0) |
| | | { |
| | |
| | | dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR); |
| | | } |
| | | } |
| | | u16 smallcar_idlist[10]={0x4052,0x4032,0x4055,0x4034,0x4016,0x4010,0x4036,0x4027,0x4024,0x4047}; |
| | | extern u16 dist_threshold; |
| | | u8 misdist_num[TAG_NUM_IN_SYS],seize_anchor,getrange_success=0; |
| | | int32_t filter_dist,filter_speed; |
| | | u8 newmeasure,recpoll_len; |
| | | u8 Anchor_RecNearPoll(u8 ancrec_nearbasepos) //0 mainbase 1 first near_base |
| | | { |
| | | u8 motorstate; |
| | |
| | | uint32_t poll_rx_ts_32, resp_tx_ts_32, final_rx_ts_32; |
| | | double Ra, Rb, Da, Db; |
| | | int64_t tof_dtu; |
| | | u8 si; |
| | | resp_tx_ts = get_tx_timestamp_u64();//è·å¾responseåéæ¶é´T3 |
| | | final_rx_ts = get_rx_timestamp_u64();//è·å¾finalæ¥æ¶æ¶é´T6 |
| | | final_msg_get_ts(&rx_buffer[FINAL_MSG_POLL_TX_TS_IDX], &poll_tx_ts);//仿¥æ¶æ°æ®ä¸è¯»åT1ï¼T4ï¼T5 |
| | |
| | | LED0_BLINK; //æ¯æå䏿¬¡é讯åéªç䏿¬¡ |
| | | dis_after_filter=dist_cm; |
| | | hex_dist = dist_cm+(int16_t)g_com_map[DIST_OFFSET]*10; |
| | | |
| | | if(recpoll_len==rec_nearbase_num*4+15) |
| | | { |
| | | hex_dist = dist_cm+(int16_t)g_com_map[DIST_OFFSET]*10-rec_antdelay*10; |
| | | } |
| | | |
| | | g_flag_Taggetdist[taglist_pos]=0; |
| | | if(hex_dist>-1000&&hex_dist<2000000) |
| | | |
| | | if(hex_dist>-100000&&hex_dist<2000000) |
| | | { |
| | | if(abs(hex_dist-his_dist[taglist_pos])<dist_threshold||misdist_num[taglist_pos]>3) |
| | | { |
| | | int32_t filter_dist; |
| | | |
| | | g_Resttimer=0; |
| | | IWDG_Feed(); |
| | | #ifdef TDFILTER |
| | | NewTrackingDiffUpdate(taglist_pos, (float)hex_dist); |
| | | filter_dist=pos_predict[taglist_pos]/10; |
| | | filter_dist = pos_predict[taglist_pos]/10; |
| | | filter_speed = vel_predict[taglist_pos]/10; |
| | | newmeasure = 1; |
| | | #else |
| | | filter_dist=hex_dist/10; |
| | | #endif |
| | | misdist_num[taglist_pos]=0; |
| | | tagdist_list[taglist_pos] = filter_dist; |
| | | his_dist[taglist_pos]=hex_dist; |
| | | g_Tagdist[taglist_pos]=filter_dist; |
| | | if(hex_dist>0) |
| | | { |
| | | g_Tagdist[taglist_pos]=hex_dist/10; |
| | | }else{ |
| | | g_Tagdist[taglist_pos]= 1; |
| | | } |
| | | #ifdef USART_SINGLE_OUTPUT |
| | | usart_send[2] = 1;//æ£å¸¸æ¨¡å¼ |
| | | usart_send[3] = 17;//æ°æ®æ®µé¿åº¦ |
| | |
| | | |
| | | dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG);//æ¸
餿 å¿ä½ |
| | | frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFL_MASK_1023;//è·å¾æ¥æ¶æ°æ®é¿åº¦ |
| | | recpoll_len = frame_len; |
| | | dwt_readrxdata(rx_buffer, frame_len, 0);//è¯»åæ¥æ¶æ°æ® |
| | | memcpy(&anc_id_recv,&rx_buffer[ANCHOR_ID_IDX],2); |
| | | //å°æ¶å°çtag_idåå«åå
¥å次é讯çå
ä¸ï¼ä¸ºå¤æ ç¾é讯æå¡ï¼é²æ¢ä¸æ¬¡éè®¯ä¸æ¥æ¶å°ä¸åIDæ ç¾çæ°æ® |
| | |
| | | memcpy(&tag_id_recv,&rx_buffer[TAG_ID_IDX],2); |
| | | memcpy(&rec_ancidlist,&rx_buffer[NEARBASEID_INDEX],2*rec_nearbase_num); |
| | | memcpy(&rec_ancdistlist,&rx_buffer[NEARBASEID_INDEX+2*rec_nearbase_num],2*rec_nearbase_num); |
| | | memcpy(&rec_antdelay,&rx_buffer[NEARBASEID_INDEX+nearbase_num*4],2); |
| | | #ifdef USART_ALL_OUTPUT |
| | | usart_send[2] = 0x0c;//æ£å¸¸æ¨¡å¼ |
| | | usart_send[3] = 8+rec_nearbase_num*4;//æ°æ®æ®µé¿åº¦ |