Browse Source

Added multiplier coeficient calculations.

Vladimir N. Shilov 11 months ago
parent
commit
7d3f39477f
4 changed files with 26 additions and 13 deletions
  1. 2 4
      ReadMe.txt
  2. 7 1
      hw/mcu.txt
  3. 13 4
      inc/board.h
  4. 4 4
      src/main.c

+ 2 - 4
ReadMe.txt

@@ -1,4 +1,2 @@
-Пустий базовий проект.
-
-Вміє отображати інфу на індикаторі.
-Все інше - за потреби.
+Вимірювач для блока живлення на 200 Вт.
+напруга 12-15 вольт, струм до 20 ампер.

+ 7 - 1
hw/mcu.txt

@@ -58,7 +58,7 @@ DP	10
  3 - RST
  4 - UART-Rx
  5 - UART-Tx
- 6 - SWIM (одно проводной интерфейм программирования)
+ 6 - SWIM (одно проводной интерфейс программирования)
 
 рядом с ним 3х пиновый 
  1 - GND
@@ -81,4 +81,10 @@ Max I = 3/7.32/0.05 = 8,1967 A (Shunt = 0.05 Ohm)
 Потрібно: MaxU<=21V, MaxI<=21A (shunt = 0.01 Ohm)
 new Ku: 21/3 = 7, replace 84B res by 15кОм, K == 0.15, MaxU == 3/0,15 = 20V
 new Ki: (3/(0.01*21)) ~= 14.28, replace 84B res by 15кОм, K == 15, MaxI == 3/15/0.01 = 20A
+
+ADC_U = Uin * 15 / 100 / 3000mV * 1023 = Uin * (15 * 1023 / (100 * 3000mV))
+Uin = ADC_U / (15 * 1023 / (100 * 3000mV)) = (ADC_U * (((100K * 3000mV) / (15K * 1023)) * 100)) / 100
+
+ADC_I = Iin * 0.01R * 15K / 1K / 3000mV * 1023 = Iin * 0.01R * 15K * 1023 / (1K * 3000mV)
+Iin = ADC_I / (0.01R * 15K * 1023 / (1K * 3000mV)) = (ADC_I * (100 * (1K * 3000mV * 100R) / (15K * 1023)) / 100
 ---

+ 13 - 4
inc/board.h

@@ -15,11 +15,20 @@
 #define ADC_CHNLI ADC1_CHANNEL_4
 #define ADC_SCHTI ADC1_SCHMITTTRIG_CHANNEL4
 #define ADC_SMPLS 64
+#define ADC_RES   1024U
 // Supply voltage in mili volts
-#define ADC_VREF  3335
-// Сопротивление резисторов ОУ усилителя сигнала шунта
-#define CURRENT_MULT_TOP  3600
-#define CURRENT_MULT_BOT  680
+#define ADC_VREF  3335U
+// Voltage channel
+#define VOLTAGE_MULT_TOP  15
+#define VOLTAGE_MULT_BOT  100
+#define VOLT_MUL_K        100U
+#define VOLTAGE_MUL       (uint16_t)(VOLT_MUL_K * (VOLTAGE_MULT_BOT * ADC_VREF) / (VOLTAGE_MULT_TOP * ADC_RES))
+// Current channel
+#define CURREN_SHUNT      (1/0.01)
+#define CURRENT_MULT_TOP  15
+#define CURRENT_MULT_BOT  1
+#define CUR_MUL_K         100U
+#define CURRENT_MUL       (uint16_t)(CUR_MUL_K * (CURRENT_MULT_BOT * ADC_VREF * CURREN_SHUNT) / (CURRENT_MULT_TOP * ADC_RES))
 // shunt resistance in mili Ohms
 #define ADC_SHUNT 10
 

+ 4 - 4
src/main.c

@@ -69,8 +69,8 @@ void main(void)
         ADC1->CSR |= (uint8_t)(ADC_CHNLI);
 
         tbuf /= ADC_SMPLS;
-        //tbuf *= VOLTAGE_MUL;
-        //tbuf /= VOLT_MUL_MUL;
+        tbuf *= VOLTAGE_MUL;
+        tbuf /= VOLT_MUL_K;
         Voltage = tbuf;
       } else {
         MeasureMode = voltage_mode;
@@ -78,8 +78,8 @@ void main(void)
         ADC1->CSR |= (uint8_t)(ADC_CHNLU);
 
         tbuf /= ADC_SMPLS;
-        //tbuf *= CURRENT_MUL;
-        //tbuf /= CURR_MUL_MUL;
+        tbuf *= CURRENT_MUL;
+        tbuf /= CUR_MUL_K;
         Current = tbuf;
       }