Browse Source

1、SGM832A的检测电阻换成0.015Ω,最大电流可以检测到5A左右,根据公式调整校准值和读取显示值
2、功耗显示曲线增加到15段,每段间隔65个数值

robbin 13 hours ago
parent
commit
fdc1b76727

+ 119 - 28
application/aem_watch/src/application/in_out_power/aem_in_out_power_screen.c

@@ -672,26 +672,37 @@ void aem_in_out_power_screen_del(lv_obj_t *par)
     }
 }
 
-#define RANGER_ONE_MIN 0
-#define RANGER_ONE_MAX 60
-#define RANGER_TWO_MIN 60
-#define RANGER_TWO_MAX 120
-#define RANGER_THREE_MIN 120
-#define RANGER_THREE_MAX 180
-#define RANGER_FOUR_MIN 180
-#define RANGER_FOUR_MAX 240
-#define RANGER_FIVE_MIN 240
-#define RANGER_FIVE_MAX 300
-#define RANGER_SIX_MIN 300
-#define RANGER_SIX_MAX 360
-#define RANGER_SEVEN_MIN 360
-#define RANGER_SEVEN_MAX 420
-#define RANGER_EIGHT_MIN 420
-#define RANGER_EIGHT_MAX 480
-#define RANGER_NINE_MIN 480
-#define RANGER_NINE_MAX 540
-#define RANGER_TEN_MIN 540
-#define RANGER_TEN_MAX 600
+#define RANGER_GAP          (65)  //20V * 45(4.5mA x 10) / 15(ranger)
+#define RANGER_ONE_MIN      (0)
+#define RANGER_ONE_MAX      (RANGER_ONE_MIN + RANGER_GAP)
+#define RANGER_TWO_MIN      (RANGER_ONE_MAX)
+#define RANGER_TWO_MAX      (RANGER_TWO_MIN + RANGER_GAP)
+#define RANGER_THREE_MIN    (RANGER_TWO_MAX)
+#define RANGER_THREE_MAX    (RANGER_THREE_MIN + RANGER_GAP)
+#define RANGER_FOUR_MIN     (RANGER_THREE_MAX)
+#define RANGER_FOUR_MAX     (RANGER_FOUR_MIN + RANGER_GAP)
+#define RANGER_FIVE_MIN     (RANGER_FOUR_MAX)
+#define RANGER_FIVE_MAX     (RANGER_FIVE_MIN + RANGER_GAP)
+#define RANGER_SIX_MIN      (RANGER_FIVE_MAX)
+#define RANGER_SIX_MAX      (RANGER_SIX_MIN + RANGER_GAP)
+#define RANGER_SEVEN_MIN    (RANGER_SIX_MAX)
+#define RANGER_SEVEN_MAX    (RANGER_SEVEN_MIN + RANGER_GAP)
+#define RANGER_EIGHT_MIN    (RANGER_SEVEN_MAX)
+#define RANGER_EIGHT_MAX    (RANGER_EIGHT_MIN + RANGER_GAP)
+#define RANGER_NINE_MIN     (RANGER_EIGHT_MAX)
+#define RANGER_NINE_MAX     (RANGER_NINE_MIN + RANGER_GAP)
+#define RANGER_TEN_MIN      (RANGER_NINE_MAX)
+#define RANGER_TEN_MAX      (RANGER_TEN_MIN + RANGER_GAP)
+#define RANGER_ELEVEN_MIN   (RANGER_TEN_MAX)
+#define RANGER_ELEVEN_MAX   (RANGER_ELEVEN_MIN + RANGER_GAP)
+#define RANGER_TWELVE_MIN   (RANGER_ELEVEN_MAX)
+#define RANGER_TWELVE_MAX   (RANGER_TWELVE_MIN + RANGER_GAP)
+#define RANGER_THIRTEEN_MIN (RANGER_TWELVE_MAX)
+#define RANGER_THIRTEEN_MAX (RANGER_THIRTEEN_MIN + RANGER_GAP)
+#define RANGER_FOURTEEN_MIN (RANGER_THIRTEEN_MAX)
+#define RANGER_FOURTEEN_MAX (RANGER_FOURTEEN_MIN + RANGER_GAP)
+#define RANGER_FIFTEEN_MIN  (RANGER_FOURTEEN_MAX)
+#define RANGER_FIFTEEN_MAX  (RANGER_FIFTEEN_MIN + RANGER_GAP)
 
 #ifndef CONFIG_SIMULATOR
 extern float f_BusVoltage[2];
@@ -708,10 +719,10 @@ static uint16_t chart_point_cnt_plus2 = 1;
 void aem_in_out_power_screen_update(lv_obj_t *par)
 {
     in_out_power_scr_ui_data_t *power_volt_cur_data = lv_obj_get_user_data(par);
-    uint16_t input_power_blue_chart_point_min = 600;
-    uint16_t output_power_green_chart_point_min = 600;
-    uint16_t input_power_blue_chart_point_max = 0;
-    uint16_t output_power_green_chart_point_max = 0;
+    uint16_t input_power_blue_chart_point_min = RANGER_FIFTEEN_MAX;
+    uint16_t output_power_green_chart_point_min = RANGER_FIFTEEN_MAX;
+    uint16_t input_power_blue_chart_point_max = RANGER_ONE_MIN;
+    uint16_t output_power_green_chart_point_max = RANGER_ONE_MIN;
     bool f_Power_index;
 
 #ifdef CONFIG_SIMULATOR
@@ -832,12 +843,52 @@ void aem_in_out_power_screen_update(lv_obj_t *par)
             {
                 chart_range_min = RANGER_NINE_MIN;
             }
-            else //if (input_power_blue_chart_point_min <= RANGER_TEN_MAX)
+            else if (input_power_blue_chart_point_min <= RANGER_TEN_MAX)
             {
                 chart_range_min = RANGER_TEN_MIN;
             }
+            else if (input_power_blue_chart_point_min <= RANGER_ELEVEN_MAX)
+            {
+                chart_range_min = RANGER_ELEVEN_MIN;
+            }
+            else if (input_power_blue_chart_point_min <= RANGER_TWELVE_MAX)
+            {
+                chart_range_min = RANGER_TWELVE_MIN;
+            }
+            else if (input_power_blue_chart_point_min <= RANGER_THIRTEEN_MAX)
+            {
+                chart_range_min = RANGER_THIRTEEN_MIN;
+            }
+            else if (input_power_blue_chart_point_min <= RANGER_FOURTEEN_MAX)
+            {
+                chart_range_min = RANGER_FOURTEEN_MIN;
+            }
+            else //if (input_power_blue_chart_point_min <= RANGER_FIFTEEN_MAX)
+            {
+                chart_range_min = RANGER_FIFTEEN_MIN;
+            }
 
-            if (input_power_blue_chart_point_max >= RANGER_TEN_MIN)
+            if (input_power_blue_chart_point_max >= RANGER_FIFTEEN_MIN)
+            {
+                chart_range_max = RANGER_FIFTEEN_MAX;
+            }
+            else if (input_power_blue_chart_point_max >= RANGER_FOURTEEN_MIN)
+            {
+                chart_range_max = RANGER_FOURTEEN_MAX;
+            }
+            else if (input_power_blue_chart_point_max >= RANGER_THIRTEEN_MIN)
+            {
+                chart_range_max = RANGER_THIRTEEN_MAX;
+            }
+            else if (input_power_blue_chart_point_max >= RANGER_TWELVE_MIN)
+            {
+                chart_range_max = RANGER_TWELVE_MAX;
+            }
+            else if (input_power_blue_chart_point_max >= RANGER_ELEVEN_MIN)
+            {
+                chart_range_max = RANGER_ELEVEN_MAX;
+            }
+            else if (input_power_blue_chart_point_max >= RANGER_TEN_MIN)
             {
                 chart_range_max = RANGER_TEN_MAX;
             }
@@ -922,12 +973,52 @@ void aem_in_out_power_screen_update(lv_obj_t *par)
             {
                 output_power_green_chart_range_min = RANGER_NINE_MIN;
             }
-            else //if (output_power_green_chart_point_min <= RANGER_TEN_MAX)
+            else if (output_power_green_chart_point_min <= RANGER_TEN_MAX)
             {
                 output_power_green_chart_range_min = RANGER_TEN_MIN;
             }
+            else if (output_power_green_chart_point_min <= RANGER_ELEVEN_MAX)
+            {
+                output_power_green_chart_range_min = RANGER_ELEVEN_MIN;
+            }
+            else if (output_power_green_chart_point_min <= RANGER_TWELVE_MAX)
+            {
+                output_power_green_chart_range_min = RANGER_TWELVE_MIN;
+            }
+            else if (output_power_green_chart_point_min <= RANGER_THIRTEEN_MAX)
+            {
+                output_power_green_chart_range_min = RANGER_THIRTEEN_MIN;
+            }
+            else if (output_power_green_chart_point_min <= RANGER_FOURTEEN_MAX)
+            {
+                output_power_green_chart_range_min = RANGER_FOURTEEN_MIN;
+            }
+            else //if (output_power_green_chart_point_min <= RANGER_FIFTEEN_MAX)
+            {
+                output_power_green_chart_range_min = RANGER_FIFTEEN_MIN;
+            }
 
-            if (output_power_green_chart_point_max >= RANGER_TEN_MIN)
+            if (output_power_green_chart_point_min <= RANGER_FIFTEEN_MIN)
+            {
+                output_power_green_chart_range_max = RANGER_FIFTEEN_MAX;
+            }
+            else if (output_power_green_chart_point_min <= RANGER_FOURTEEN_MIN)
+            {
+                output_power_green_chart_range_max = RANGER_FOURTEEN_MAX;
+            }
+            else if (output_power_green_chart_point_min <= RANGER_THIRTEEN_MIN)
+            {
+                output_power_green_chart_range_max = RANGER_THIRTEEN_MAX;
+            }
+            else if (output_power_green_chart_point_min <= RANGER_TWELVE_MIN)
+            {
+                output_power_green_chart_range_max = RANGER_TWELVE_MAX;
+            }
+            else if (output_power_green_chart_point_min <= RANGER_ELEVEN_MIN)
+            {
+                output_power_green_chart_range_max = RANGER_ELEVEN_MAX;
+            }
+            else if (output_power_green_chart_point_max >= RANGER_TEN_MIN)
             {
                 output_power_green_chart_range_max = RANGER_TEN_MAX;
             }

+ 76 - 24
application/aem_watch/src/application/in_out_power/aem_input_power_screen.c

@@ -504,26 +504,38 @@ void aem_input_power_screen_del(lv_obj_t *par)
     }
 }
 
-#define RANGER_ONE_MIN 0
-#define RANGER_ONE_MAX 60
-#define RANGER_TWO_MIN 60
-#define RANGER_TWO_MAX 120
-#define RANGER_THREE_MIN 120
-#define RANGER_THREE_MAX 180
-#define RANGER_FOUR_MIN 180
-#define RANGER_FOUR_MAX 240
-#define RANGER_FIVE_MIN 240
-#define RANGER_FIVE_MAX 300
-#define RANGER_SIX_MIN 300
-#define RANGER_SIX_MAX 360
-#define RANGER_SEVEN_MIN 360
-#define RANGER_SEVEN_MAX 420
-#define RANGER_EIGHT_MIN 420
-#define RANGER_EIGHT_MAX 480
-#define RANGER_NINE_MIN 480
-#define RANGER_NINE_MAX 540
-#define RANGER_TEN_MIN 540
-#define RANGER_TEN_MAX 600
+#define RANGER_GAP          (65)  //20V * 45(4.5mA x 10) / 15(ranger)
+#define RANGER_ONE_MIN      (0)
+#define RANGER_ONE_MAX      (RANGER_ONE_MIN + RANGER_GAP)
+#define RANGER_TWO_MIN      (RANGER_ONE_MAX)
+#define RANGER_TWO_MAX      (RANGER_TWO_MIN + RANGER_GAP)
+#define RANGER_THREE_MIN    (RANGER_TWO_MAX)
+#define RANGER_THREE_MAX    (RANGER_THREE_MIN + RANGER_GAP)
+#define RANGER_FOUR_MIN     (RANGER_THREE_MAX)
+#define RANGER_FOUR_MAX     (RANGER_FOUR_MIN + RANGER_GAP)
+#define RANGER_FIVE_MIN     (RANGER_FOUR_MAX)
+#define RANGER_FIVE_MAX     (RANGER_FIVE_MIN + RANGER_GAP)
+#define RANGER_SIX_MIN      (RANGER_FIVE_MAX)
+#define RANGER_SIX_MAX      (RANGER_SIX_MIN + RANGER_GAP)
+#define RANGER_SEVEN_MIN    (RANGER_SIX_MAX)
+#define RANGER_SEVEN_MAX    (RANGER_SEVEN_MIN + RANGER_GAP)
+#define RANGER_EIGHT_MIN    (RANGER_SEVEN_MAX)
+#define RANGER_EIGHT_MAX    (RANGER_EIGHT_MIN + RANGER_GAP)
+#define RANGER_NINE_MIN     (RANGER_EIGHT_MAX)
+#define RANGER_NINE_MAX     (RANGER_NINE_MIN + RANGER_GAP)
+#define RANGER_TEN_MIN      (RANGER_NINE_MAX)
+#define RANGER_TEN_MAX      (RANGER_TEN_MIN + RANGER_GAP)
+#define RANGER_ELEVEN_MIN   (RANGER_TEN_MAX)
+#define RANGER_ELEVEN_MAX   (RANGER_ELEVEN_MIN + RANGER_GAP)
+#define RANGER_TWELVE_MIN   (RANGER_ELEVEN_MAX)
+#define RANGER_TWELVE_MAX   (RANGER_TWELVE_MIN + RANGER_GAP)
+#define RANGER_THIRTEEN_MIN (RANGER_TWELVE_MAX)
+#define RANGER_THIRTEEN_MAX (RANGER_THIRTEEN_MIN + RANGER_GAP)
+#define RANGER_FOURTEEN_MIN (RANGER_THIRTEEN_MAX)
+#define RANGER_FOURTEEN_MAX (RANGER_FOURTEEN_MIN + RANGER_GAP)
+#define RANGER_FIFTEEN_MIN  (RANGER_FOURTEEN_MAX)
+#define RANGER_FIFTEEN_MAX  (RANGER_FIFTEEN_MIN + RANGER_GAP)
+
 
 #ifndef CONFIG_SIMULATOR
 extern float f_BusVoltage[2];
@@ -541,8 +553,8 @@ static uint8_t simulator_cnt = 0;
 void aem_input_power_screen_update(lv_obj_t *par)
 {
     input_power_scr_ui_data_t *power_volt_cur_data = lv_obj_get_user_data(par);
-    uint16_t input_power_blue_chart_point_min = 600;
-    uint16_t input_power_blue_chart_point_max = 0;
+    uint16_t input_power_blue_chart_point_min = RANGER_FIFTEEN_MAX;
+    uint16_t input_power_blue_chart_point_max = RANGER_ONE_MIN;
     bool f_Power_index;
 
 #ifdef CONFIG_SIMULATOR
@@ -655,12 +667,52 @@ void aem_input_power_screen_update(lv_obj_t *par)
             {
                 chart_range_min = RANGER_NINE_MIN;
             }
-            else //if (input_power_blue_chart_point_min <= RANGER_TEN_MAX)
+            else if (input_power_blue_chart_point_min <= RANGER_TEN_MAX)
             {
                 chart_range_min = RANGER_TEN_MIN;
             }
+            else if (input_power_blue_chart_point_min <= RANGER_ELEVEN_MAX)
+            {
+                chart_range_min = RANGER_ELEVEN_MIN;
+            }
+            else if (input_power_blue_chart_point_min <= RANGER_TWELVE_MAX)
+            {
+                chart_range_min = RANGER_TWELVE_MIN;
+            }
+            else if (input_power_blue_chart_point_min <= RANGER_THIRTEEN_MAX)
+            {
+                chart_range_min = RANGER_THIRTEEN_MIN;
+            }
+            else if (input_power_blue_chart_point_min <= RANGER_FOURTEEN_MAX)
+            {
+                chart_range_min = RANGER_FOURTEEN_MIN;
+            }
+            else //if (input_power_blue_chart_point_min <= RANGER_FIFTEEN_MAX)
+            {
+                chart_range_min = RANGER_FIFTEEN_MIN;
+            }
 
-            if (input_power_blue_chart_point_max >= RANGER_TEN_MIN)
+            if (input_power_blue_chart_point_max >= RANGER_FIFTEEN_MIN)
+            {
+                chart_range_max = RANGER_FIFTEEN_MAX;
+            }
+            else if (input_power_blue_chart_point_max >= RANGER_FOURTEEN_MIN)
+            {
+                chart_range_max = RANGER_FOURTEEN_MAX;
+            }
+            else if (input_power_blue_chart_point_max >= RANGER_THIRTEEN_MIN)
+            {
+                chart_range_max = RANGER_THIRTEEN_MAX;
+            }
+            else if (input_power_blue_chart_point_max >= RANGER_TWELVE_MIN)
+            {
+                chart_range_max = RANGER_TWELVE_MAX;
+            }
+            else if (input_power_blue_chart_point_max >= RANGER_ELEVEN_MIN)
+            {
+                chart_range_max = RANGER_ELEVEN_MAX;
+            }
+            else if (input_power_blue_chart_point_max >= RANGER_TEN_MIN)
             {
                 chart_range_max = RANGER_TEN_MAX;
             }

+ 6 - 6
application/aem_watch/src/user_cfg/device_info_cfg.h

@@ -6,13 +6,13 @@
 #define DMG_LCM  0  //达明光电的LCM
 
 #if DMG_LCM
-#define MAJOR_VERSION 0X01
-#define MINOR_VERSION 0X01
-#define MICRO_VERSION 0x0B
+#define MAJOR_VERSION 0x01
+#define MINOR_VERSION 0x01
+#define MICRO_VERSION 0x0D
 #else
-#define MAJOR_VERSION 0X02
-#define MINOR_VERSION 0X00
-#define MICRO_VERSION 0x0B
+#define MAJOR_VERSION 0x02
+#define MINOR_VERSION 0x00
+#define MICRO_VERSION 0x0D
 #endif
 
 #define DEVICE_ID "CJ01"//3085

+ 1 - 1
thirdparty/lib/aem/config/aem_project.h

@@ -4,7 +4,7 @@
 #pragma warning(error : 4013)
 #endif
 #define AEM_VERSION "BL_Develop_NOR"
-#define BUILD_TIME "202507181450"
+#define BUILD_TIME "202510091650"
 #define AEM_GUI_FWK_LIB_VER "2.0.0.0"
 #define APP_DOWNLOAD_URL "https://customer.com"
 #define AEM_APP_TRANS_ANIMATION 1

+ 8 - 8
zephyr/drivers/input/sgm832a_acts.c

@@ -171,7 +171,7 @@ static void sgm832_typec_get_data(const struct device *i2c_dev, uint16_t sgm832_
 
 	read_data[0] = ((read_data[0]  & 0xFF00) >> 8) + ((read_data[0] & 0x00FF) << 8);
 	//There is a ratio of 25 between the LSB of the power and the Current_LSB	
-	f_Power[typec_num] = (float)read_data[0] * 25 * 0.00009;  //W
+	f_Power[typec_num] = (float)read_data[0] * 25 * 0.00015;  //W
 	//printk("Power: %.3f mW\n", f_Power[typec_num]);
 
 	//04H Current Register
@@ -185,9 +185,9 @@ static void sgm832_typec_get_data(const struct device *i2c_dev, uint16_t sgm832_
         }
 
         //Current_LSB=Max_Expected_Current/(2^15),
-		//Max_Expected_Current = 3A, 
-		//Current_LSB=3A/(2^15) ≈ 0.00009A
-		f_Current[typec_num] = read_data[0] * 0.00009;  
+		//Max_Expected_Current = 5A, 
+		//Current_LSB=5A/(2^15) ≈ 0.000138A
+		f_Current[typec_num] = read_data[0] * 0.00015;  
 	}
 	else
 	{
@@ -313,14 +313,14 @@ static void sgm832_typec1_get_shuntvoltage(const struct device *i2c_dev)
 *  @typec_num: typec number, 0 or 1
 *  @return: none
 *  @description: Set sgm832 calibration register, CAL=0.00512/(Current_LSB*Rshunt), Current_LSB=Max_Expected_Current/(2^15),
-*  				 Max_Expected_Current = 3A, Rshunt = 0.028Ω, Current_LSB=3A/(2^15) ≈ 0.00009A,
-*  				 CAL=0.00512/(0.00009A*0.028Ω) ≈ 2000 = 0x07D0, so CAL = 0x07D0
+*  				 Max_Expected_Current = 5A, Rshunt = 0.015Ω, Current_LSB=5A/(2^15) ≈ 0.00015A,
+*  				 CAL=0.00512/(0.00015A*0.015Ω) ≈ 2275 = 0x08E3, so CAL = 0x08E3
 */
 static void sgm832_typec_calibration(const struct device *i2c_dev, uint16_t sgm832_typec_slaver_addr, uint8_t typec_num)
 {
     //static uint8_t configurate_write_data[3] = {CONFIGURATION_REGISTER, 0x47, 0x6F};
-	static uint8_t calibrate_write_data0[3] = {CALIBRATION_REGISTER, 0x07, 0xcd};  //typec0, input/output
-	static uint8_t calibrate_write_data1[3] = {CALIBRATION_REGISTER, 0x07, 0xcd};  //typec1, input
+	static uint8_t calibrate_write_data0[3] = {CALIBRATION_REGISTER, 0x08, 0xE3};  //typec0, input/output
+	static uint8_t calibrate_write_data1[3] = {CALIBRATION_REGISTER, 0x08, 0xE3};  //typec1, input
     int ret = 0;
 
 	//ret = i2c_write(i2c_dev, configurate_write_data, 3, sgm832_typec_slaver_addr);