From 8f8f5ae1fd0a007e331ac909b4280e1e109df091 Mon Sep 17 00:00:00 2001
From: zhyinch <zhyinch@gmail.com>
Date: 星期五, 29 十月 2021 21:31:28 +0800
Subject: [PATCH] 加速计影响测距

---
 Src/application/dw_app.c |   47 +++++++++++++++++++++--------------------------
 1 files changed, 21 insertions(+), 26 deletions(-)

diff --git a/Src/application/dw_app.c b/Src/application/dw_app.c
index ca2fc8c..4eaa1e7 100644
--- a/Src/application/dw_app.c
+++ b/Src/application/dw_app.c
@@ -81,7 +81,7 @@
     SINGLEPOLL,
 }tag_state=STARTPOLL;
 static dwt_config_t config = {
-	5,               /* Channel number. */
+	2,               /* Channel number. */
 	DWT_PRF_64M,     /* Pulse repetition frequency. */
 	DWT_PLEN_64,    /* Preamble length. */
 	DWT_PAC8,        /* Preamble acquisition chunk size. Used in RX only. */
@@ -624,21 +624,24 @@
 //	mainbase_id=minid;
 //	mainbase_id = 0x4;
 }
-
+#define TAGET_OFFSETTIME 940
 #define MAX_NEARBASE_ANCNUM 11
 u16 rec_maxrangelen,rec_anc_signalpower[MAX_NEARBASE_ANCNUM];
 u8 outrange_times;
 extern u32 synctimer;
 u32 target_time=100;
 u8 pd_i;
-u32 temptime,delaytime,expect_anctime,error_time;
+u32 temptime,delaytime,expect_anctime;
+int32_t error_time;
 u16 delaycount;
-int16_t poll_offsettime=-6900;
+int16_t poll_offsettime=-6900,clockoffset;
 extern u16 slotpos_intoatl, slotpos;
 void NextPollDelay(u32 anchor_time)
 {
-		tagslotpos = 0;
-	//	error_time = anchor_time-expect_anctime;
+	//	tagslotpos = 0;
+		error_time = anchor_time-expect_anctime;
+	if(error_time<2000&&error_time>0)
+		clockoffset += (TAGET_OFFSETTIME-error_time)*0.1;
     for(pd_i=0;pd_i<tag_frequency;pd_i++)
     {
         slotpos_intoatl = pd_i*bigslot_num+tagslotpos;
@@ -646,14 +649,14 @@
         if(anchor_time<temptime-5000)
         { 
 					current_slotnum = pd_i;
-            delaytime = temptime-anchor_time+poll_offsettime;  
-		//				expect_anctime = temptime;
+            delaytime = temptime-anchor_time+poll_offsettime+clockoffset;  
+						expect_anctime = temptime;
             return ;
         }
     }
     temptime = (tagslotpos*SLOTTIME_MS+100+10000)*100;
-	//	expect_anctime = temptime-1000000;
-    delaytime = temptime-anchor_time+poll_offsettime;
+		expect_anctime = temptime-1000000;
+    delaytime = temptime-anchor_time+poll_offsettime+clockoffset;
    return ;
 }
 u16 lpcount,poll_startcount,last_lpcount;
@@ -677,15 +680,7 @@
     __HAL_LPTIM_COMPARE_SET(&hlptim1, lpcount);
 		last_lpcount = lpcount;
 	}
-void DelayOneSlot(void)
-{
-			lpcount+=166;
-			if(lpcount>=32768)
-		{
-		lpcount -=32768;
-		}
-		__HAL_LPTIM_COMPARE_SET(&hlptim1, lpcount);
-}
+
 void NextSlotDelayMs(u16 delayms)
 {
 	current_slotnum++;
@@ -714,7 +709,7 @@
 {
 	u32 start_poll,frame_len;
     u8 nearmsg_i=0;
-	DelayOneSlot();
+	NextSlotDelayMs(0);
     for(nearmsg_i=0;nearmsg_i<20;nearmsg_i++)
     {
         nearbase_distlist[nearmsg_i] = 0x1ffff;
@@ -827,7 +822,7 @@
 			}
 		}
 	dwt_starttx(DWT_START_TX_IMMEDIATE | DWT_RESPONSE_EXPECTED);//开启发送,发送完成后等待一段时间开启接收,等待时间在dwt_setrxaftertxdelay中设置
-	HAL_GPIO_WritePin(LED1_G_GPIO_Port, LED1_G_Pin, GPIO_PIN_SET);
+//	HAL_GPIO_WritePin(LED1_G_GPIO_Port, LED1_G_Pin, GPIO_PIN_SET);
 //    for(i=0;i<nearbase_num+1;i++)
 //    {
 //        nearbase_distlist[i] = 0x1ffff;
@@ -887,7 +882,7 @@
 									final_msg_set_ts(&tx_near_msg[FINAL_MSG_RESP_RX_NEARBASE_IDX+nearbase_num*4], resp_rx_ts);
 									final_msg_set_ts(&tx_near_msg[FINAL_MSG_FINAL_TX_TS_IDX], final_tx_ts);
 									tx_near_msg[MESSAGE_TYPE_IDX]=NEAR_FINAL;
-							
+									rec_remotepara_state=rx_buffer[MOTORSTATE_INDEX]>>4;
 								if(rec_remotepara_state&&!memcmp(&rx_buffer[TAG_ID_IDX],&dev_id,2))
 									{
 										para_update = 1;
@@ -922,7 +917,7 @@
                                          }
                                      }
                                  
-									rec_remotepara_state=rx_buffer[MOTORSTATE_INDEX]>>4;
+									
 									
 									mainbase_lost_count=0;
 									flag_finalsend=1;
@@ -986,7 +981,7 @@
             {flag_finalsend = 2;}
 			dwt_forcetrxoff();
 dwt_write32bitreg(SYS_STATUS_ID,SYS_STATUS_RXFCG| SYS_STATUS_ALL_RX_ERR);
-HAL_GPIO_WritePin(LED1_G_GPIO_Port, LED1_G_Pin, GPIO_PIN_RESET);
+//HAL_GPIO_WritePin(LED1_G_GPIO_Port, LED1_G_Pin, GPIO_PIN_RESET);
 			if(mainbase_lost_count==0)
 			{
 				#ifdef SWITCHBASE_DIST
@@ -1005,7 +1000,7 @@
 			#endif
 			}else if(mainbase_lost_count>5*tag_frequency)
 			{
-			//	tag_state = STARTPOLL;
+				tag_state = STARTPOLL;
 			}	
 			if(mainbase_lost_count!=0)
 			{
@@ -1069,7 +1064,7 @@
 				tagslotpos=TOTAL_SLOTNUM;
 		}
 		//SetNextPollTime(tagslotpos);
-		DelayOneSlot();
+		NextSlotDelayMs(1);
 		
 		dwt_setrxaftertxdelay(POLL_TX_TO_RESP_RX_DLY_UUS);			//设置发送后开启接收,并设定延迟时间
     dwt_setrxtimeout(RESP_RX_TIMEOUT_UUS);		

--
Gitblit v1.9.3