Kaynağa Gözat

不使用机械噪声自标定, 读取加速度值超时3秒后,重启设备

guoqiang 1 yıl önce
ebeveyn
işleme
c2e7f28349
12 değiştirilmiş dosya ile 3578 ekleme ve 3787 silme
  1. 25 15
      Device/adxl312.c
  2. 1 1
      Device/adxl312.h
  3. 3 0
      Device/gpio.c
  4. 7 0
      Device/gpio.h
  5. 5 0
      Device/uart.c
  6. 27 3
      Project/BVACS.uvoptx
  7. 1 1
      Project/BVACS.uvprojx
  8. 2297 2589
      Project/JLinkLog.txt
  9. 1184 1165
      Project/Listings/BVACS_20240130.map
  10. 23 8
      User/process.c
  11. 4 4
      User/process.h
  12. 1 1
      User/protocol.c

+ 25 - 15
Device/adxl312.c

@@ -106,16 +106,22 @@ uint8_t ReadCmd2(uint8_t cmd, uint8_t* data)
 		g_adxTxBuff[4] = 0x00;
 		g_adxTxBuff[5] = 0x00;
 		g_adxTxBuff[6] = 0x00;
-		SPI_DRV_MasterTransferBlocking(ADXL_SPI_INSTANCE, g_adxTxBuff, g_adxRxBuff, 7, ADXL_SPI_TIMEOUT);
 	
-		data[0] = g_adxRxBuff[1];
-		data[1] = g_adxRxBuff[2];
-		data[2] = g_adxRxBuff[3];
-		data[3] = g_adxRxBuff[4];
-		data[4] = g_adxRxBuff[5];
-		data[5] = g_adxRxBuff[6];
+		if(STATUS_SUCCESS == SPI_DRV_MasterTransferBlocking(ADXL_SPI_INSTANCE, g_adxTxBuff, g_adxRxBuff, 7, ADXL_SPI_TIMEOUT))
+		{
+				data[0] = g_adxRxBuff[1];
+				data[1] = g_adxRxBuff[2];
+				data[2] = g_adxRxBuff[3];
+				data[3] = g_adxRxBuff[4];
+				data[4] = g_adxRxBuff[5];
+				data[5] = g_adxRxBuff[6];
+			
+				return 0;
+		}else{
+				return 1;
+		}
 	
-		return 0;
+
 }
 
 
@@ -180,12 +186,16 @@ uint8_t ADXL312_ReadAcc(int16_t* pAcc_x, int16_t* pAcc_y,int16_t* pAcc_z)
 	uint8_t tmp[6];
 	
 	
-	ReadCmd2(0xF2, tmp);
+	if( 0 == ReadCmd2(0xF2, tmp)){
+		
+		*pAcc_x = ((tmp[1]<<8)|tmp[0]);
+		*pAcc_y = ((tmp[3]<<8)|tmp[2]);
+		*pAcc_z = ((tmp[5]<<8)|tmp[4]);
+		
+		return 0;
+		
+	}else{
+		return 1;
+	}
 
-	*pAcc_x = ((tmp[1]<<8)|tmp[0]);
-	*pAcc_y = ((tmp[3]<<8)|tmp[2]);
-	*pAcc_z = ((tmp[5]<<8)|tmp[4]);
-	
-	return 0;
-	
 }

+ 1 - 1
Device/adxl312.h

@@ -45,7 +45,7 @@ extern "C" {
 #include "ac7840x.h"
 
 /* ===========================================   Define    ========================================== */
-#define ADXL_SPI_TIMEOUT 		20U
+#define ADXL_SPI_TIMEOUT 		5U
 #define ADXL_SPI_INSTANCE        (1U)
 #define ADXL_SPI_IRQ             (SPI1_IRQn)
 #define ADXL_SPI_SCK        (PORTD)

+ 3 - 0
Device/gpio.c

@@ -69,6 +69,9 @@ void GPIO_LedInit(void)
     GPIO_DRV_SetMuxModeSel(LED3_PORT, LED3_PIN, PORT_MUX_AS_GPIO); /*功能复用选择*/
     GPIO_DRV_SetMuxModeSel(LED4_PORT, LED4_PIN, PORT_MUX_AS_GPIO);
 	
+		GPIO_DRV_SetMuxModeSel(RS485CTRL_PORT, RS485CTRL_PIN, PORT_MUX_AS_GPIO);
+	  GPIO_DRV_SetPinDirection(RS485CTRL_GPIO, RS485CTRL_PIN, 1); /*设置GPIO为输出*/
+	
 	
 		GPIO_DRV_SetMuxModeSel(K0_PORT, K0_PIN, PORT_MUX_AS_GPIO);
 		GPIO_DRV_SetMuxModeSel(K1_PORT, K1_PIN, PORT_MUX_AS_GPIO);

+ 7 - 0
Device/gpio.h

@@ -129,6 +129,13 @@ extern "C" {
 #define LED4_TOGGLE    do{GPIO_DRV_TogglePins(LED4_GPIO, (1<<LED4_PIN));}while(0)
 
 
+#define RS485CTRL_PORT (PORTE)
+#define RS485CTRL_GPIO (GPIOE)
+#define RS485CTRL_PIN  (6)
+
+#define RS485_TX_EN				do{GPIO_DRV_WritePin(RS485CTRL_GPIO, RS485CTRL_PIN, 1);}while(0)
+#define RS485_RX_EN			do{GPIO_DRV_WritePin(RS485CTRL_GPIO, RS485CTRL_PIN, 0);}while(0)
+
 
 #define GET_K3_STS()   (GPIO_DRV_ReadPins(KEY3_GPIO)& (1<<KEY3_PIN))
 //#define GET_K4_STS()   (GPIO_DRV_ReadPins(KEY4_GPIO)& (1<<KEY4_PIN))

+ 5 - 0
Device/uart.c

@@ -46,6 +46,7 @@
 #include "dma_drv.h"
 #include "dma_hw.h"
 #include "cfg.h"
+#include "gpio.h"
 
 #define UART1_RX_DMA_CHANNEL   0
 #define UART1_TX_DMA_CHANNEL   1
@@ -271,6 +272,7 @@ void Uart1_Initialize(void)
 		uart1_info.recv_len = 0;
 		uart1_info.send_len = 0;
 		
+		RS485_RX_EN;
 		UART_DRV_ReceiveData(UART1_INSTANCE_ID, uart1_info.recv_buffer, UART1_RECV_DATA_POOL_COUNT); /*接收数据*/
 	
 }
@@ -279,6 +281,7 @@ void Uart1_Initialize(void)
 int Uart1_TransmitData(uint8_t *pdata, uint16_t length)
 {
 		//UART_DRV_SendData(UART1_INSTANCE_ID, pdata, length);
+		RS485_TX_EN;
 		UART_DRV_SendDataBlocking(UART1_INSTANCE_ID, pdata, length, 50);
 		return 0;
 }
@@ -290,6 +293,7 @@ void Uart1_RecvData(void)
 		//UART_Type * uart_type = UART_DRV_GetBase(UART1_INSTANCE_ID);
 		//UART_SetIdleFunc(uart_type, true);
 		//UART_SetIdleInterrupt(uart_type, true);
+		RS485_RX_EN;
 		UART_DRV_ReceiveData(1, uart1_info.recv_buffer, UART1_RECV_DATA_POOL_COUNT); /*接收数据*/
 }
 
@@ -345,6 +349,7 @@ void UART1_Init(void)
 		uart1_info.recv_len = 0;
 		uart1_info.send_len = 0;
 		
+		RS485_RX_EN;
 		UART_DRV_ReceiveData(UART1_INSTANCE_ID, uart1_info.recv_buffer, UART1_RECV_DATA_POOL_COUNT); /*接收数据*/
 }
 

+ 27 - 3
Project/BVACS.uvoptx

@@ -140,7 +140,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>JL2CM3</Key>
-          <Name>-U59518874 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO23 -FD1FFF0000 -FC1000 -FN1 -FF0AC7840X_P1024KB.FLM -FS00 -FL080000 -FP0($$Device:AC78406HGLA$Flash\AC7840X_P1024KB.FLM)</Name>
+          <Name>-U59518874 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO31 -FD1FFF0000 -FC1000 -FN1 -FF0AC7840X_P1024KB.FLM -FS00 -FL080000 -FP0($$Device:AC78406HGLA$Flash\AC7840X_P1024KB.FLM)</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
@@ -148,7 +148,31 @@
           <Name>UL2CM3(-S0 -C0 -P0 -FD1FFF0000 -FC1000 -FN1 -FF0AC7840X_P1024KB -FS00 -FL0100000 -FP0($$Device:AC78406HGLA$Flash\AC7840X_P1024KB.FLM))</Name>
         </SetRegEntry>
       </TargetDriverDllRegistry>
-      <Breakpoint/>
+      <Breakpoint>
+        <Bp>
+          <Number>0</Number>
+          <Type>0</Type>
+          <LineNumber>54</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>21482</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>1</BreakIfRCount>
+          <Filename>..\User\main_task.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression>\\BVACS_20240130\../User/main_task.c\54</Expression>
+        </Bp>
+      </Breakpoint>
+      <WatchWindow1>
+        <Ww>
+          <count>0</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>dmaRxBuf</ItemText>
+        </Ww>
+      </WatchWindow1>
       <Tracepoint>
         <THDelay>0</THDelay>
       </Tracepoint>
@@ -373,7 +397,7 @@
 
   <Group>
     <GroupName>Lib</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>

+ 1 - 1
Project/BVACS.uvprojx

@@ -49,7 +49,7 @@
             <InvalidFlash>1</InvalidFlash>
           </TargetStatus>
           <OutputDirectory>.\Objects\</OutputDirectory>
-          <OutputName>BVACS_20240130</OutputName>
+          <OutputName>BVACS_20240312</OutputName>
           <CreateExecutable>1</CreateExecutable>
           <CreateLib>0</CreateLib>
           <CreateHexFile>1</CreateHexFile>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 2297 - 2589
Project/JLinkLog.txt


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1184 - 1165
Project/Listings/BVACS_20240130.map


+ 23 - 8
User/process.c

@@ -50,6 +50,8 @@ uint8_t g_send_filtered = 0;
 uint32_t g_send_sequence = 0;
 uint8_t  g_vo_alarm = 0;	  /*  是否触发语音输出*/ 
 
+static uint16_t g_readaccfailed_count = 0;
+
 ALG_CONTEXT g_alg_context;
 
 void cbuffer_pushdata(int16_t acc_x, int16_t acc_y, int16_t acc_z);
@@ -111,8 +113,21 @@ void timer_callback(void)
 	}
 	
 	//read acc data
-  ADXL312_ReadAcc(&accx, &accy, &accz);
-	cbuffer_pushdata(accx, accy, accz);
+  if(0 == ADXL312_ReadAcc(&accx, &accy, &accz)){
+		cbuffer_pushdata(accx, accy, accz);
+		g_readaccfailed_count = 0;
+	}else{
+		g_readaccfailed_count++;
+		if(g_readaccfailed_count > 300){ 
+			//重启,尝度恢复加速度读取 
+			NVIC_SystemReset();
+		
+		}else if(g_readaccfailed_count > 3){
+			//运行指示灯,闪烁加快
+			g_blinkLedTgtTime = BLINK_LED_MINT;
+		}
+	}
+	
 
 }
 
@@ -144,7 +159,7 @@ void Process_Init(void)
 		g_autocalibration=0;
 		g_samplecount = 0;
 	
-	
+		g_readaccfailed_count = 0;
 }
 
 void Process_RunLedPrd(void)
@@ -618,13 +633,13 @@ void Process_Alg(void)
 				axis_info.z = acc_z*2.9/1000;
 			
 				
-				uint32_t start =  OSIF_GetMilliseconds();
+				//uint32_t start =  OSIF_GetMilliseconds();
 
 				//printf("alg:%d ms st: %d \r", start, g_alg_context.state);
-			if(1 == g_autocalibration ){
-					autocaculate_mtnoise(&axis_info);
+			//if(1 == g_autocalibration ){
+			//		autocaculate_mtnoise(&axis_info);
 				
-			}else{
+			//}else{
 				
 				alg_filter(&axis_info);
 				
@@ -648,7 +663,7 @@ void Process_Alg(void)
 						break;
 				}
 				
-			}
+		//	}
 			
 	#if 1
 			if(g_send_raw){

+ 4 - 4
User/process.h

@@ -55,8 +55,8 @@ extern uint8_t g_send_filtered;
 extern uint32_t g_send_sequence;
 
 
-#define BLINK_LED_MINT		(100)	/*闪烁LED灯最小时间间隔*/
-#define BLINK_LED_MAXT		(2000)	/*闪烁LED灯最大时间间隔*/
+#define BLINK_LED_MINT		(30)	/*闪烁LED灯最小时间间隔*/  
+#define BLINK_LED_MAXT		(500)	/*闪烁LED灯最大时间间隔*/
 #define BLINK_LED_DFTT		(100)	/*闪烁LED默认时间间隔*/
 #define VO_COUNT_DFTT			(50)	/*闪烁LED默认时间间隔*/
 
@@ -71,7 +71,7 @@ extern uint32_t g_send_sequence;
 #define ALG_Triggering    (4)
 #define ALG_Finished    	(5)
 
-#define CALIBRATE_COUNT    (5*100)   //5秒钟
+#define CALIBRATE_COUNT    (3*100)   //3秒钟
 #define RUNDELAY_COUNT			(5*60*100) //5分钟
 
 
@@ -91,7 +91,7 @@ typedef struct _filter_avg{
 
 #define DETECT_CNT   						(400) // 4s 
 #define KEEP_CNT								(80)
-#define DETECT_THRESHOLD  			(0.6)	 //m/s   2Km/h
+#define DETECT_THRESHOLD  			(0.7)	 //m/s   2Km/h
 #define DETECT_THRESHOLD_DOWN 	(0.2) //  5Km/h
 #define MECHANICAL_NOISE_THRESHOLD  (0.015) //g 
 

+ 1 - 1
User/protocol.c

@@ -5,7 +5,7 @@
 
 
 #ifdef IS_BOOTLOADER
-uint32_t Firmware_Version[4] = {1, 0, 1, 20240305};
+uint32_t Firmware_Version[4] = {1, 0, 1, 20240312};
 #else
 uint32_t Firmware_Version[4] = {1, 1, 5, 20240125};
 #endif