瀏覽代碼

Merge branch 'master' of http://jiecheng2024.tpddns.cn:3000/liyuezong/SmartPDCode

guohui 1 年之前
父節點
當前提交
0690fc3500

+ 4 - 4
F030/Core/Inc/main.h

@@ -9,14 +9,14 @@ extern "C" {
 
 
 #define 		VOLTAGE_CMD       								0xA5A5
-#define     ADC_CONVERT_COUNT    							(3000)
+#define     ADC_CONVERT_COUNT    							(1000)
 
 #define     Vref															(33)
 
 #define     COUNT_BASE												(4096)
 
-#define 		ALL_RES														(201000)
-#define 		GATHER_RES												(1000)
+#define 		ALL_RES														(500500)
+#define 		GATHER_RES												(500)
 
 #include "stm32f0xx_hal.h"
 
@@ -28,7 +28,7 @@ typedef union{
 
 typedef union{
 	uint8_t 	u8_tx[4];
-	float     f_data;
+	uint32_t     f_data;
 }Tx_Data;
 void Error_Handler(void);
 

+ 4 - 4
F030/Core/Src/adc.c

@@ -64,7 +64,7 @@ void MX_ADC_Init(void)
 
   /** Configure for the selected ADC regular channel to be converted.
   */
-  sConfig.Channel = ADC_CHANNEL_0;
+  sConfig.Channel = ADC_CHANNEL_1;
   sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
   sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
   if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
@@ -74,7 +74,7 @@ void MX_ADC_Init(void)
 
   /** Configure for the selected ADC regular channel to be converted.
   */
-//  sConfig.Channel = ADC_CHANNEL_4;
+//  sConfig.Channel = ADC_CHANNEL_2;
 //  if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
 //  {
 //    Error_Handler();
@@ -102,7 +102,7 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
     PA3     ------> ADC_IN3
     PA4     ------> ADC_IN4
     */
-    GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4;
+    GPIO_InitStruct.Pin = GPIO_PIN_1;
     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
     GPIO_InitStruct.Pull = GPIO_NOPULL;
     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
@@ -145,7 +145,7 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
     PA3     ------> ADC_IN3
     PA4     ------> ADC_IN4
     */
-    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3|GPIO_PIN_4);
+    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1|GPIO_PIN_2);
 
     /* ADC1 DMA DeInit */
     HAL_DMA_DeInit(adcHandle->DMA_Handle);

+ 9 - 5
F030/Core/Src/main.c

@@ -23,6 +23,7 @@
 #include "iwdg.h"
 #include "usart.h"
 #include "gpio.h"
+#include "math.h"
 
 
 
@@ -31,7 +32,7 @@
 extern ADC_HandleTypeDef hadc;
 
 
-
+extern IWDG_HandleTypeDef hiwdg;
 
 Data da={0};
 Tx_Data tx_voltage={0};
@@ -48,8 +49,8 @@ static void get_adc_val()
 	float temp = 0.0;
 	for(int i = 0 ;i < ADC_CONVERT_COUNT;i++)
 	{
-		HAL_ADC_Start_DMA(&hadc,(uint32_t*)adc_buff,2);
-		value += (adc_buff[0]);
+		HAL_ADC_Start_DMA(&hadc,(uint32_t*)adc_buff,1);
+			value += (adc_buff[0]);
 		//adc_val[i] = adc_buff[0];
 		HAL_Delay(1);
 	}
@@ -63,8 +64,10 @@ static void get_adc_val()
 	temp *=	ALL_RES;
 	temp /=	GATHER_RES;
 	temp /= 10.0;
-	temp /= 1000.0;
+	if(temp > 50)
+		temp+=(1.3*1000);
 	tx_voltage.f_data = temp;
+
 }
 
 
@@ -79,7 +82,7 @@ int main(void)
   MX_DMA_Init();
   MX_ADC_Init();
   MX_USART1_UART_Init();
-  //MX_IWDG_Init();
+  MX_IWDG_Init();
 	
 	HAL_ADCEx_Calibration_Start(&hadc);
 	
@@ -88,6 +91,7 @@ int main(void)
   while (1)
   {
 		//HAL_UART_Transmit(&huart1,(uint8_t*)(&tx_voltage.u8_tx),sizeof(tx_voltage),0xffff);
+		HAL_IWDG_Refresh(&hiwdg);
 		get_adc_val();
 		HAL_Delay(100);
   }

文件差異過大導致無法顯示
+ 10464 - 87
F030/MDK-ARM/JLinkLog.txt


文件差異過大導致無法顯示
+ 137 - 92
F030/MDK-ARM/adc_voltage.uvguix.Gowon


+ 15 - 6
F030/MDK-ARM/adc_voltage.uvoptx

@@ -117,6 +117,10 @@
         <pMon>Segger\JL2CM3.dll</pMon>
       </DebugOpt>
       <TargetDriverDllRegistry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>DLGUARM</Key>
+        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>ARMRTXEVENTFLAGS</Key>
@@ -132,11 +136,6 @@
           <Key>ARMDBGFLAGS</Key>
           <Name></Name>
         </SetRegEntry>
-        <SetRegEntry>
-          <Number>0</Number>
-          <Key>DLGUARM</Key>
-          <Name>L</Name>
-        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>JL2CM3</Key>
@@ -175,6 +174,16 @@
           <WinNumber>1</WinNumber>
           <ItemText>adc_val</ItemText>
         </Ww>
+        <Ww>
+          <count>4</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>adc_val</ItemText>
+        </Ww>
+        <Ww>
+          <count>5</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>huart1</ItemText>
+        </Ww>
       </WatchWindow1>
       <MemoryWindow1>
         <Mm>
@@ -190,7 +199,7 @@
       <DebugFlag>
         <trace>0</trace>
         <periodic>1</periodic>
-        <aLwin>0</aLwin>
+        <aLwin>1</aLwin>
         <aCover>0</aCover>
         <aSer1>0</aSer1>
         <aSer2>0</aSer2>

+ 2 - 2
control/PDU-DC/App/ADC/ADC.h

@@ -29,10 +29,10 @@
 #define ADC_Vref     33  //实际ADC参考电压3.3V,扩大成33
 #define ADC_V_Gain   4020    //实际 200.9   扩大2009
 #define ADC_Fulscale 4096 //ADC满量程值,12位,即4096
-#define I_sens       1  //实际电流传感器的灵敏度,单位是V/A,扩大成1
+#define I_sens       0.66  //实际电流传感器的灵敏度,单位是V/A,扩大成1
 
 #if SUPPORT_STM32_ADC
-	#define A_gain       1  //电压放大倍数
+	#define A_gain       3  //电压放大倍数
 #else
 	#define A_gain       3  //电压放大倍数
 #endif

+ 1 - 1
control/PDU-DC/App/CH442E/ch442e.c

@@ -20,7 +20,7 @@
 
 #define      CHOISE_STM32_1			gpio_bit_reset(CH442E_GPIO, CH442E_IN_GPIO)
 
-#define      CHOISE_STM32_2			gpio_bit_set(CH442E_GPIO, CH442E_IN_GPIO)
+#define      CHOISE_STM32_2			gpio_bit_set(CH442E_GPIO, CH442E_IN_GPIO) 
 
 
 void che442e_Init(void)

+ 51 - 35
control/PDU-DC/App/Main/Main.c

@@ -686,48 +686,55 @@ int main(void)
 	{
 		LimiT_enable_check(i,DCPDU_Modbus_Reg[Mb_Dbuff_CH1ST_FT_Addr+i]);
 	}
-#if SUPPORT_EIGHT_LIGHT
-	Relayx_Onoff_state(7,RELAY_ON);
-#endif
-	Fwdgt_Init();
 #if SUPPORT_DETECTION
 		detection_value = get_detection();
 #endif
+#if SUPPORT_EIGHT_LIGHT
+	Relayx_Onoff_state(7,RELAY_ON);
+#endif
+	//Fwdgt_Init();
+
 	while(1)
 	{
 		
 #if SUPPORT_DETECTION
 		if((detection_value & 0x1) == 0)
 		{
-			for(int i = 0; i <RELAY_ChN_default / 2;i++)
-			{
-
-					uint8_t temp0 = 0x01 << i;
-					Relayx_Onoff_state(i,RELAY_OFF);
-					temp0 = ~temp0;
-					DCPDU_Modbus_Reg[Mb_Dbuff_RL_ST_Addr] &= temp0;
-					//E
-					//AT24CxxWriteOneByte(ERom_RL_ST_Addr,Eeprom_Rbuf[ERom_RL_ST_Addr]);
-			}
-			Eeprom_Rbuf[ERom_RL_ST_Addr] = DCPDU_Modbus_Reg[Mb_Dbuff_RL_ST_Addr] & Active_state_bit;
-			RL_Rx_state = Eeprom_Rbuf[ERom_RL_ST_Addr];
-			Write_74hc573();
+//			for(int i = 0; i <RELAY_ChN_default / 2;i++)
+//			{
+
+//					uint8_t temp0 = 0x01 << i;
+//					Relayx_Onoff_state(i,RELAY_OFF);
+//					temp0 = ~temp0;
+//					DCPDU_Modbus_Reg[Mb_Dbuff_RL_ST_Addr] &= temp0;
+//					//E
+//					//AT24CxxWriteOneByte(ERom_RL_ST_Addr,Eeprom_Rbuf[ERom_RL_ST_Addr]);
+//			}
+//			Eeprom_Rbuf[ERom_RL_ST_Addr] = DCPDU_Modbus_Reg[Mb_Dbuff_RL_ST_Addr] & Active_state_bit;
+//			RL_Rx_state = Eeprom_Rbuf[ERom_RL_ST_Addr];
+//			Write_74hc573();
+				uint8_t data = RL_Rx_state;
+				RL_Rx_state = 0xF0;
+				RL_Rx_state &= data;
 		}
 		if((detection_value & 0x2) == 0)
 		{
-			for(int i = RELAY_ChN_default / 2; i <RELAY_ChN_default;i++)
-			{
-
-					uint8_t temp0 = 0x01 << i;
-					Relayx_Onoff_state(i,RELAY_OFF);
-					temp0 = ~temp0;
-					DCPDU_Modbus_Reg[Mb_Dbuff_RL_ST_Addr] &= temp0;
-					//E
-					//AT24CxxWriteOneByte(ERom_RL_ST_Addr,Eeprom_Rbuf[ERom_RL_ST_Addr]);
-			}
-			Eeprom_Rbuf[ERom_RL_ST_Addr] = DCPDU_Modbus_Reg[Mb_Dbuff_RL_ST_Addr] & Active_state_bit;
-			RL_Rx_state = Eeprom_Rbuf[ERom_RL_ST_Addr];
-			Write_74hc573();
+//			for(int i = RELAY_ChN_default / 2; i <RELAY_ChN_default;i++)
+//			{
+
+//					uint8_t temp0 = 0x01 << i;
+//					Relayx_Onoff_state(i,RELAY_OFF);
+//					temp0 = ~temp0;
+//					DCPDU_Modbus_Reg[Mb_Dbuff_RL_ST_Addr] &= temp0;
+//					//E
+//					//AT24CxxWriteOneByte(ERom_RL_ST_Addr,Eeprom_Rbuf[ERom_RL_ST_Addr]);
+//			}
+//			Eeprom_Rbuf[ERom_RL_ST_Addr] = DCPDU_Modbus_Reg[Mb_Dbuff_RL_ST_Addr] & Active_state_bit;
+//			RL_Rx_state = Eeprom_Rbuf[ERom_RL_ST_Addr];
+//			Write_74hc573();
+			uint8_t data = RL_Rx_state;
+			RL_Rx_state = 0x0F;
+			RL_Rx_state &= data;
 		}
 #endif
 		CHK_JLINK();
@@ -824,14 +831,15 @@ int main(void)
 		{
 			read_adc_val();
 			read_adc_flag = 0;
+#if SUPPORT_DETECTION
+		detection_value = get_detection();
+#endif
 		}
+
 		if(Get1SecFlag()) //判断1s标志状态
 		{
 			LEDFlicker2();
 			Clr1SecFlag();  //清除1s标志
-#if SUPPORT_DETECTION
-		detection_value = get_detection();
-#endif
 			//read_adc_val();//定时读取ADC的数据
 			//输出耗电量计算。累计。
 			
@@ -883,8 +891,12 @@ int main(void)
 			uint32_t I_in = 0;
 			uint32_t W_in = 0;
 #if SUPPORT_STM32_ADC
-			uint32_t voltage_chi_1 = read_voltage(STM32_ADC_V_1) *1000;
-			uint32_t voltage_chi_2 = read_voltage(STM32_ADC_V_2) *1000;
+			uint32_t voltage_chi_1 = 0;
+			uint32_t voltage_chi_2 = 0;
+			voltage_chi_1 = read_voltage(STM32_ADC_V_1) ;
+			//delay_ms(5);
+			voltage_chi_2 = read_voltage(STM32_ADC_V_2) ;
+
 			DCPDU_Modbus_Reg[Mb_Dbuff_VInput_Addr] = voltage_chi_1 > voltage_chi_2 ? voltage_chi_1 : voltage_chi_2;
 #else
 			DCPDU_Modbus_Reg[Mb_Dbuff_VInput_Addr] = DC_V_calfunction(adc_Avg_value[ADC_VOL]);
@@ -1135,7 +1147,11 @@ void MODbus_CMD(void)
 		}
 		else if(Modbus_Wr_buff[Wr_eeprom_cnt][1] == Mb_Dbuff_RL_Alloff_Addr)//设置继电器全关
 		{
+#if SUPPORT_EIGHT_LIGHT
 			RL_Rx_state = 0x80;
+#else
+			RL_Rx_state = 0;
+#endif
 			RL_Alloff_flag = true;
 			//Eeprom_Rbuf[ERom_RL_ST_Addr] = 0x00;
 			//AT24CxxWriteOneByte(ERom_RL_ST_Addr,Eeprom_Rbuf[ERom_RL_ST_Addr]);

+ 4 - 1
control/PDU-DC/App/Main/Main.h

@@ -980,7 +980,10 @@ typedef struct	DC_SUM_Para_struct_Reg
 }DC_SUM_Para_struct_Reg; 
 
 
-
+typedef union{
+	uint8_t 	data[4];
+	uint32_t     value;
+}Rx_Data;
 
 
 extern unsigned int All_On_Flag;							//继电器全开标志

+ 2 - 2
control/PDU-DC/App/detection/detection.c

@@ -30,9 +30,9 @@ void detection_Init()
 uint8_t get_detection()
 {
 	uint8_t value = 0;
-	if(gpio_input_bit_get(RCU_GPIOB,GPIO_PIN_3)==0)
+	if(gpio_input_bit_get(GPIOB,GPIO_PIN_3)==0)
 		value |= 1;
-	if(gpio_input_bit_get(RCU_GPIOA,GPIO_PIN_11)==0)
+	if(gpio_input_bit_get(GPIOA,GPIO_PIN_11)==0)
 		value |= 2;
 	return value;
 }

+ 28 - 6
control/PDU-DC/App/uart_IM1253E/IM1253E.c

@@ -157,28 +157,50 @@ void Write_IM1253E_REG(uint8_t dev_addr,uint16_t reg_addr,uint8_t *pt,uint8_t le
 
 Rx_Data data={0};
 
-float read_voltage(uint8_t channel)
+uint32_t read_voltage(uint8_t channel)
 {
 	uint16_t read_volatge = 0xA5A5;
+	uint32_t value;
 	RX_Length = 4;
 	che442_change_ch(channel);
+	DelayNms(5);
+	//memset(&data.value,0,4);
 	Start_Send_UartData((uint8_t*)&read_volatge,sizeof(read_volatge));
-	uint8_t count = 0;
+	int count = 0;
 	while(Rx_Finish_flag != true)
 	{
 		DelayNms(1);
-		if(count >= 50)
+		if(count >= 100)
 		{
 			RX_Index = 0;
 			Rx_Finish_flag =false;
 			break;
 		}
+		count++;
 	}
-	if(Rx_Finish_flag)
+	if(Rx_Finish_flag == false)
 	{
-		return data.value;
+		count =0;
+		Start_Send_UartData((uint8_t*)&read_volatge,sizeof(read_volatge));
+		while(Rx_Finish_flag != true)
+		{
+			DelayNms(1);
+			if(count >= 100)
+			{
+				RX_Index = 0;
+				Rx_Finish_flag =false;
+				break;
+			}
+			count ++;
+		}
 	}
-	return 0.0;
+	if(Rx_Finish_flag)
+	{
+		value = data.value;
+		Rx_Finish_flag = false;
+	}else
+		value = 0;
+	return value;
 }
 
 

+ 1 - 1
control/PDU-DC/App/uart_IM1253E/IM1253E.h

@@ -62,7 +62,7 @@ void Write_IM1253E_REG(uint8_t dev_addr,uint16_t reg_addr,uint8_t *pt,uint8_t le
 
 
 #if SUPPORT_STM32_ADC
-float read_voltage(uint8_t channel);
+uint32_t read_voltage(uint8_t channel);
 #endif
 
 

+ 15 - 0
control/PDU-DC/App/uart_IM1253E/Uart1.c

@@ -62,6 +62,21 @@ extern uint8_t W_R_reg_N;
 *********************************************************************************************************/
 void USART1_IRQHandler(void)            
 {
+	  if(usart_flag_get(USART1, USART_FLAG_ORERR) == SET) //溢出错误标志为1
+  {                                                         
+    usart_flag_clear(USART1, USART_FLAG_ORERR);       //清除溢出错误标志
+
+  }                                                                                                           
+	if(usart_interrupt_flag_get(USART1, USART_INT_FLAG_TBE)!= RESET)  //发送缓冲区空中断
+  {     
+	
+    usart_interrupt_flag_clear(USART1, USART_INT_FLAG_TBE);        //清除发送中断标志
+  }
+//	if(usart_interrupt_flag_get(USART1, USART_INT_FLAG_TC)!= RESET)  //发送完成中断
+//  {     	
+//		usart_interrupt_flag_clear(USART1, USART_INT_FLAG_TC);         //清除发送完成中断   
+////		gpio_bit_reset(GPIOA, GPIO_PIN_8);														 //接收		
+//  }
 	if(usart_interrupt_flag_get(USART1, USART_INT_FLAG_RBNE) != RESET)  //接收缓冲区非空中断
 	{
 		usart_interrupt_flag_clear(USART1, USART_INT_FLAG_RBNE);  //清除USART1中断挂起

文件差異過大導致無法顯示
+ 105 - 132
control/PDU-DC/Project/GD32KeilPrj.uvguix.Gowon


+ 23 - 4
control/PDU-DC/Project/GD32KeilPrj.uvoptx

@@ -117,6 +117,10 @@
         <pMon>Segger\JL2CM3.dll</pMon>
       </DebugOpt>
       <TargetDriverDllRegistry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>DLGUARM</Key>
+        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>DLGTARM</Key>
@@ -148,23 +152,38 @@
         <Ww>
           <count>0</count>
           <WinNumber>1</WinNumber>
-          <ItemText>RL_Rx_state</ItemText>
+          <ItemText>detection_value</ItemText>
         </Ww>
         <Ww>
           <count>1</count>
           <WinNumber>1</WinNumber>
-          <ItemText>Eeprom_Rbuf</ItemText>
+          <ItemText>data</ItemText>
         </Ww>
         <Ww>
           <count>2</count>
           <WinNumber>1</WinNumber>
-          <ItemText>RL_Rx_state</ItemText>
+          <ItemText>voltage_chi_1</ItemText>
         </Ww>
         <Ww>
           <count>3</count>
           <WinNumber>1</WinNumber>
+          <ItemText>voltage_chi_2</ItemText>
+        </Ww>
+        <Ww>
+          <count>4</count>
+          <WinNumber>1</WinNumber>
           <ItemText>DCPDU_Modbus_Reg</ItemText>
         </Ww>
+        <Ww>
+          <count>5</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>data</ItemText>
+        </Ww>
+        <Ww>
+          <count>6</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>RX_Index</ItemText>
+        </Ww>
       </WatchWindow1>
       <WatchWindow2>
         <Ww>
@@ -228,7 +247,7 @@
       <GroupNumber>1</GroupNumber>
       <FileNumber>1</FileNumber>
       <FileType>1</FileType>
-      <tvExp>0</tvExp>
+      <tvExp>1</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\App\Main\Main.c</PathWithFileName>

文件差異過大導致無法顯示
+ 3300 - 3412
control/PDU-DC/Project/JLinkLog.txt