|
@@ -194,7 +194,7 @@ INTERRUPT_HANDLER(DMA1_CHANNEL0_1_IRQHandler,2)
|
|
uint16_t * ADC_GetValues(void) {
|
|
uint16_t * ADC_GetValues(void) {
|
|
static uint16_t avgVal[ADC_BUFFER_SIZE];
|
|
static uint16_t avgVal[ADC_BUFFER_SIZE];
|
|
uint32_t volt=0, curr=0;
|
|
uint32_t volt=0, curr=0;
|
|
- uint16_t middle, shunt_volt;
|
|
|
|
|
|
+ uint16_t shunt_volt;
|
|
uint8_t i;
|
|
uint8_t i;
|
|
|
|
|
|
/* Summarize buffers values */
|
|
/* Summarize buffers values */
|
|
@@ -206,14 +206,24 @@ uint16_t * ADC_GetValues(void) {
|
|
/* Попытка оверсемплинга, чтобы сделать шаг ~1мВ
|
|
/* Попытка оверсемплинга, чтобы сделать шаг ~1мВ
|
|
делим на 8, умножаем на опорное напряжение, умножаем на входной делитель
|
|
делим на 8, умножаем на опорное напряжение, умножаем на входной делитель
|
|
и делим на (12 бит АЦП * 8). */
|
|
и делим на (12 бит АЦП * 8). */
|
|
-
|
|
|
|
|
|
+#ifdef ADC_USE_V_OVERS
|
|
volt >>= 3;
|
|
volt >>= 3;
|
|
volt *= ADC_REF;
|
|
volt *= ADC_REF;
|
|
volt *= ADC_VOLT_K;
|
|
volt *= ADC_VOLT_K;
|
|
volt /= ADC_ODIV;
|
|
volt /= ADC_ODIV;
|
|
|
|
+#else
|
|
|
|
+ volt += 32;
|
|
|
|
+ volt >>= 6;
|
|
|
|
+ volt *= ADC_REF;
|
|
|
|
+ volt *= ADC_VOLT_K;
|
|
|
|
+ volt /= ADC_DIV;
|
|
|
|
+#endif // ADC_USE_V_OVERS
|
|
|
|
|
|
/* получаем среднее по току, затем фильтруем */
|
|
/* получаем среднее по току, затем фильтруем */
|
|
|
|
+ curr += 32;
|
|
curr >>= 6;
|
|
curr >>= 6;
|
|
|
|
+#ifdef ADC_USE_C_FILTR
|
|
|
|
+ uint16_t middle;
|
|
middle = curr + 8;
|
|
middle = curr + 8;
|
|
middle &= 0xFFF0;
|
|
middle &= 0xFFF0;
|
|
curr = 0;
|
|
curr = 0;
|
|
@@ -236,6 +246,8 @@ uint16_t * ADC_GetValues(void) {
|
|
} else {
|
|
} else {
|
|
curr = middle;
|
|
curr = middle;
|
|
}
|
|
}
|
|
|
|
+#endif // ADC_USE_C_FILTR
|
|
|
|
+
|
|
curr *= ADC_REF;
|
|
curr *= ADC_REF;
|
|
curr /= ADC_DIV;
|
|
curr /= ADC_DIV;
|
|
|
|
|