From e182f6082db427bf3c130d2459cabd4f2eb35a3e Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期五, 05 一月 2024 15:18:46 +0800
Subject: [PATCH] 版本v1.0

---
 Src/application/dw_app.c |   83 ++++++++++++++++++++++++++++++++++++-----
 1 files changed, 72 insertions(+), 11 deletions(-)

diff --git a/Src/application/dw_app.c b/Src/application/dw_app.c
index 2c58786..6489121 100644
--- a/Src/application/dw_app.c
+++ b/Src/application/dw_app.c
@@ -48,7 +48,7 @@
 #define POLL_TX_TO_RESP_RX_DLY_UUS 150
 /* This is the delay from Frame RX timestamp to TX reply timestamp used for calculating/setting the DW1000's delayed TX function. This includes the
  * frame length of approximately 2.66 ms with above configuration. */
-#define RESP_RX_TO_FINAL_TX_DLY_UUS 410
+#define RESP_RX_TO_FINAL_TX_DLY_UUS 6410
 
 /* Receive response timeout. See NOTE 5 below. */
 #define RESP_RX_TIMEOUT_UUS 600
@@ -78,7 +78,7 @@
     NEARPOLL,
 } tag_state=GETNEARMSG;
 static dwt_config_t config = {
-    5,               /* Channel number. */
+    2,               /* Channel number. */
     DWT_PRF_64M,     /* Pulse repetition frequency. */
     DWT_PLEN_128,    /* Preamble length. */
     DWT_PAC8,        /* Preamble acquisition chunk size. Used in RX only. */
@@ -383,6 +383,42 @@
 		sync_anc_id = ancid;	
 	}
 }
+#define RESP_MSG_POLL_RX_TS_IDX  26
+#define RESP_MSG_RESP_TX_TS_IDX  30
+#define RESP_MSG_ANC_DISTOFFSET  34
+#define FREQ_OFFSET_MULTIPLIER          (998.4e6/2.0/1024.0/131072.0)
+#define FREQ_OFFSET_MULTIPLIER_110KB    (998.4e6/2.0/8192.0/131072.0)
+#define HERTZ_TO_PPM_MULTIPLIER_CHAN_1     (-1.0e6/3494.4e6)
+#define HERTZ_TO_PPM_MULTIPLIER_CHAN_2     (-1.0e6/3993.6e6)
+#define HERTZ_TO_PPM_MULTIPLIER_CHAN_3     (-1.0e6/4492.8e6)
+#define HERTZ_TO_PPM_MULTIPLIER_CHAN_5     (-1.0e6/6489.6e6)
+int32_t test2;
+float clockOffsetRatio;
+double rtd_init, rtd_resp;
+double distance;
+int32_t twociceju;
+uint32_t anc_pollrx1,anc_resptx1,tag_resprx1;
+int16_t anc_distoffset1;
+void CalculateDists_two(uint32_t resprx,uint8_t* resptx,uint8_t* pollrx,uint8_t * distoffset)
+{
+         
+        memcpy(&anc_pollrx1,pollrx,4);
+        memcpy(&anc_resptx1,resptx,4);
+        memcpy(&tag_resprx1,&resprx,4);
+        memcpy(&anc_distoffset1,distoffset,2);
+
+    
+          clockOffsetRatio = test2 * (FREQ_OFFSET_MULTIPLIER * HERTZ_TO_PPM_MULTIPLIER_CHAN_2 / 1.0e6) ;
+          rtd_init = tag_resprx1 - poll_tx_ts;
+          rtd_resp = anc_resptx1 - anc_pollrx1;
+          tof = ((rtd_init - rtd_resp * (1 - clockOffsetRatio)) / 2.0) * DWT_TIME_UNITS;
+          distance = tof * SPEED_OF_LIGHT;
+          if(distance>-1000&&distance<100000)
+          twociceju= distance*100+anc_distoffset1;
+}
+uint8_t acc_buff1[4100];
+uint16_t changdu;
+uint16_t fp1;
 void NearPoll(void)
 {
 
@@ -439,7 +475,7 @@
     flag_getresponse=0;
     start_count=HAL_LPTIM_ReadCounter(&hlptim1);
     recbase_num=0;
-    timeout=ceil((float)nearbase_num*SLOT_SCALE)+3;
+    timeout=ceil((float)nearbase_num*SLOT_SCALE)+13;
     end_count=start_count+(timeout<<5);
     if(end_count>=32768)
     {
@@ -480,6 +516,9 @@
             dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG | SYS_STATUS_TXFRS);//清楚寄存器标志位
             frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFLEN_MASK;	//获得接收到的数据长度
             dwt_readrxdata(rx_buffer, frame_len, 0);   //读取接收数据
+            test2 = dwt_readcarrierintegrator();
+            fp1 = dwt_read16bitoffsetreg(0x15, 5);
+            dwt_readaccdata(acc_buff1,4064,0);
             dwt_setrxtimeout(0);//DELAY_BETWEEN_TWO_FRAME_UUS*(nearbase_num+1-recbase_num)+10);//设定接收超时时间,0位没有超时时间
             dwt_rxenable(0);//打开接收
             if (rx_buffer[MESSAGE_TYPE_IDX] == NEAR_RESPONSE&&!memcmp(&rx_buffer[TAG_ID_IDX],&dev_id,2)&&rx_buffer[GROUP_ID_IDX]==group_id) //判断接收到的数据是否是response数据
@@ -495,6 +534,7 @@
                     nearbase_num=1;
                     memcpy(&tx_near_msg[ANCHOR_ID_IDX],&rec_nearbaseid,2);
                 }
+//             CalculateDists_two(resp_rx_ts,&rx_buffer[RESP_MSG_RESP_TX_TS_IDX],&rx_buffer[RESP_MSG_POLL_RX_TS_IDX],&rx_buffer[RESP_MSG_ANC_DISTOFFSET]);
                 if(rec_nearbaseid==nearbaseid_list[0])
                 {
                     //////////////////////////////////时间同步
@@ -618,6 +658,20 @@
         }
         //	dwt_write32bitreg(SYS_STATUS_ID,SYS_STATUS_RXFCG| SYS_STATUS_ALL_RX_ERR);
     }
+    CalculateDists_two(resp_rx_ts,&rx_buffer[RESP_MSG_RESP_TX_TS_IDX],&rx_buffer[RESP_MSG_POLL_RX_TS_IDX],&rx_buffer[RESP_MSG_ANC_DISTOFFSET]);
+    usart_send[0] = 0x55;
+    usart_send[1] = 0xAA;
+    usart_send[2] = 1;//正常模式
+    changdu=1+2+2+4+2+10+4064;
+    memcpy(&usart_send[3],&changdu,2);
+    memcpy(&usart_send[5],&dev_id,2);
+    memcpy(&usart_send[7],&twociceju,4);
+    memcpy(&usart_send[11],&fp1,2);
+    USART_puts(usart_send,23);
+    USART_puts(acc_buff1,4064);
+    usart_send[0] = 0x55;
+    usart_send[1] = 0xBB;
+    USART_puts(usart_send,2);
     if(mainbase_lost_count>tag_frequency*BASELOST_STOPMOTOR_TIME)
     {
         motor_state=0;
@@ -682,13 +736,13 @@
         }
     }
 #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);
+//    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
 
     for(i=0; i<MAX_NEARBASE_NUM; i++)
@@ -757,8 +811,13 @@
     {
         id =  dwt_readdevid() ;
     }
-
     g_Resttimer=0;
+		if(bat_percent>15)
+			{
+				LED_TB_ON;
+			} else {
+				LED_TR_ON;
+			}
 //	tag_state=DISCPOLL;
     switch(tag_state)
     {
@@ -777,4 +836,6 @@
         break;
     }
     dwt_entersleep();
+		LED_TB_OFF;
+		LED_TR_OFF;
 }

--
Gitblit v1.9.3