Quellcode durchsuchen

Мелкий фикс.

Vladimir N. Shilov vor 8 Jahren
Ursprung
Commit
95a4c73379
2 geänderte Dateien mit 23 neuen und 13 gelöschten Zeilen
  1. 9 0
      ReadMe.txt
  2. 14 13
      lib/adc.c

+ 9 - 0
ReadMe.txt

@@ -328,3 +328,12 @@ Factory_VREFINT у меня == 0x7E, т.е. полное значение 0x067E
 Добавил простенькую фильтрацию сразу после DMA.
 Вернул "оверсемплинг". Не уверен, правильно ли я насчитал коэфф...
 Нужно будет добавить коррекцию "0" с выхода ОУ.
+
+---
+2017.06.05
+
+Напряжение показывает нормально, ток -- задержка в пару секунд.
+Или там другая прошивка, или я не знаю...
+Чуть упростил вычисления напряжения на шунте -- я уже вообще не помню, что 
+там и как...
+БП у меня может выдавать до 16 А, а настроен вроде на 6.6А...

+ 14 - 13
lib/adc.c

@@ -230,16 +230,6 @@ uint16_t * ADC_GetValues(void) {
     curr += CurrentFastBuffer[i];
   }
 
-  /* Попытка оверсемплинга, чтобы сделать шаг ~1мВ
-     делим на 8, умножаем на опорное напряжение, умножаем на входной делитель
-     и делим на (12 бит АЦП * 8). */
-  volt += 4; // для округления
-  volt /= 8; // усредняем
-  volt *= ADC_REF;
-  volt *= ADC_VOLT_K;
-  volt += ADC_ORES_H;
-  volt /= ADC_ORES;
-
   curr += 4;
   curr /= 8;
   // компенсация смещения нуля ОУ
@@ -255,13 +245,24 @@ uint16_t * ADC_GetValues(void) {
        компенсируем падение напряжения на нём. */
     shunt_volt += (ADC_OU_MUL/2);
     shunt_volt /= ADC_OU_MUL;
-    shunt_volt += ADC_ORES_H;
-    shunt_volt /= ADC_ORES; // мВ на входе ОУ
-    volt -= shunt_volt; // получили напряжение на клемах
+//    shunt_volt += ADC_ORES_H;
+//    shunt_volt /= ADC_ORES; // мВ на входе ОУ
+//    volt -= shunt_volt; // получили напряжение на клемах
   } else {
     curr = 0;
   }
 
+  /* Попытка оверсемплинга, чтобы сделать шаг ~1мВ
+     делим на 8, умножаем на опорное напряжение, умножаем на входной делитель
+     и делим на (12 бит АЦП * 8). */
+  volt += 4; // для округления
+  volt /= 8; // усредняем
+  volt *= ADC_REF;
+  volt *= ADC_VOLT_K;
+  volt -= shunt_volt;
+  volt += ADC_ORES_H;
+  volt /= ADC_ORES;
+
   avgVal[0] = (uint16_t)volt;
   avgVal[1] = (uint16_t)curr;