Sfoglia il codice sorgente

南网DC项目匹配新设计

liyi 1 anno fa
parent
commit
752704cc8c

+ 1 - 1
F030/Core/Src/main.c

@@ -65,7 +65,7 @@ static void get_adc_val()
 	temp /=	GATHER_RES;
 	temp /= 10.0;
 	if(temp > 50)
-		temp+=(1.3*1000);
+		temp+=(1.8*1000);
 	tx_voltage.f_data = temp;
 
 }

+ 40 - 1
control/PDU-DC/App/ADC/ADC.c

@@ -179,12 +179,50 @@ void ADC_dma_config(void)
 *           电流传感器转换公式:实际电流值I(A) = 实际电压值V / 灵敏度参数(V/A)
 *           实际计算时,让小数变成整数,最终结果扩大1000倍
 *********************************************************************************************************/
-uint32_t DC_I_calfunction(uint16_t da)
+uint32_t DC_I_calfunction(uint16_t da,uint8_t channel)
 {
 	uint32_t temp_i = 0;
 	uint32_t temp_v = 0;
 	if(da > 0)
 	{
+#if SUPPORT_STM32_ADC
+		switch(channel)
+		{
+			case 0:
+			case 1:
+			case 4:
+			case 5:
+			{
+				temp_v = da;
+				temp_v *= ADC_Vref;
+				temp_v *= 1000;
+				temp_v = temp_v >> 12;
+				temp_v *= 2.5;
+				temp_i = temp_v;
+				temp_i /= 10;//去掉第3位小数
+				temp_i *= 10;
+				temp_i += 200;
+				if(temp_i <= 220)
+							temp_i = 0;
+			}
+				break;
+			default:
+			{
+				temp_v = da;
+				temp_v *= ADC_Vref;
+				temp_v *= 1000;
+				temp_v = temp_v >> 12;//temp_v /= ADC_Fulscale;
+				temp_v /= A_gain;
+				temp_i = temp_v / I_sens;
+				temp_i /= 10;//去掉第3位小数
+				temp_i *= 10;
+				temp_i += 70;
+				if(temp_i <= 80)
+							temp_i = 0;
+			}
+		}
+		
+#else
 		temp_v = da;
 		temp_v *= ADC_Vref;
 		temp_v *= 1000;
@@ -195,6 +233,7 @@ uint32_t DC_I_calfunction(uint16_t da)
 		temp_i *= 10;
 		if(temp_i < 20)
 			temp_i = 0;
+#endif
 		return temp_i;
 	}
 	else

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

@@ -32,7 +32,7 @@
 #define I_sens       0.66  //实际电流传感器的灵敏度,单位是V/A,扩大成1
 
 #if SUPPORT_STM32_ADC
-	#define A_gain       3  //电压放大倍数
+	#define A_gain       2  //电压放大倍数
 #else
 	#define A_gain       3  //电压放大倍数
 #endif
@@ -65,7 +65,7 @@
 void Init_ADC(void);
 void ConfigADCGPIO(void);
 void ADC_dma_config(void);
-uint32_t DC_I_calfunction(uint16_t da);
+uint32_t DC_I_calfunction(uint16_t da,uint8_t channel);
 #if SUPPORT_2_V_GA_CHN
 uint32_t DC_V_calfunction(uint16_t va);
 #endif

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

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

+ 14 - 3
control/PDU-DC/App/Main/Main.c

@@ -692,8 +692,8 @@ int main(void)
 #if SUPPORT_EIGHT_LIGHT
 	Relayx_Onoff_state(7,RELAY_ON);
 #endif
-	//Fwdgt_Init();
-
+	Fwdgt_Init();
+static  uint8_t write_iic_flash = 0;
 	while(1)
 	{
 		
@@ -838,6 +838,7 @@ int main(void)
 
 		if(Get1SecFlag()) //判断1s标志状态
 		{
+			write_iic_flash++;
 			LEDFlicker2();
 			Clr1SecFlag();  //清除1s标志
 			//read_adc_val();//定时读取ADC的数据
@@ -867,12 +868,22 @@ int main(void)
 				}
 				
 				//将耗电量实时写入Eeprom
+
+			}
+			
+		if(write_iic_flash == 90)
+		{
+			write_iic_flash = 0;
+			for(i = 0;i < DCPDU_active_chn;i++)
+			{
+				temp0 = 4*i;
 				Eeprom_Rbuf[ERom_TotalWh1_Addr + temp0] = DCPDU_Modbus_Reg[temp0 + Mb_Dbuff_P1Output_Addr + 3] >> 24;
 				Eeprom_Rbuf[ERom_TotalWh1_Addr + temp0 + 1] = DCPDU_Modbus_Reg[temp0 + Mb_Dbuff_P1Output_Addr + 3] >> 16;
 				Eeprom_Rbuf[ERom_TotalWh1_Addr + temp0 + 2] = DCPDU_Modbus_Reg[temp0 + Mb_Dbuff_P1Output_Addr + 3] >> 8;
 				Eeprom_Rbuf[ERom_TotalWh1_Addr + temp0 + 3] = DCPDU_Modbus_Reg[temp0 + Mb_Dbuff_P1Output_Addr + 3];
 				AT24CxxWrite(ERom_TotalWh1_Addr + temp0,(Eeprom_Rbuf + ERom_TotalWh1_Addr + temp0),4);
 			}
+		}
 #if (SUPPORT_IM1253E == 0)
 			DCPDU_Modbus_Reg[Mb_Dbuff_KWhInput_Addr] = kWh_in;
 			DC_BASE[3] = DCPDU_Modbus_Reg[Mb_Dbuff_KWhInput_Addr];
@@ -932,7 +943,7 @@ int main(void)
 					}
 				}
 
-				DCPDU_Modbus_Reg[temp0 + Mb_Dbuff_P1Output_Addr + 1] = DC_I_calfunction(adc_Avg_value[i]);//输出电流
+				DCPDU_Modbus_Reg[temp0 + Mb_Dbuff_P1Output_Addr + 1] = DC_I_calfunction(adc_Avg_value[i],i);//输出电流
 				
 				
 				if(Load_conn_end_flag)//负载加载以后再检测电流