всё работает
+экранчик
This commit is contained in:
@@ -60,7 +60,7 @@ float ADC_Calc(ADC_t *adc)
|
||||
return 0;
|
||||
ADC_Coefs_t *coefs = &adc->Coefs;
|
||||
|
||||
int16_t rawval = (int16_t)HAL_ADC_GetValue(adc->hadc);
|
||||
int16_t rawval = HAL_ADC_GetValue(adc->hadc);
|
||||
|
||||
|
||||
rawval = Filter_Process(&adc->mdn, rawval);
|
||||
@@ -83,18 +83,22 @@ HAL_StatusTypeDef UKSI_Calc_Init(UKSI_Calc_t *calc, ADC_HandleTypeDef *hadc)
|
||||
return HAL_ERROR;
|
||||
|
||||
calc->adc.hadc = hadc;
|
||||
ADC_ConfigCoef(&calc->adc, 0, 1.411, 1860, 14);
|
||||
// ADC_ConfigCoef(&calc->adc, 0, 1.259, 1639, 14);
|
||||
ADC_ConfigCoef(&calc->adc, 0, 0.529, 703, 14);
|
||||
ADC_ConfigFilter(&calc->adc, 10, 50000);
|
||||
|
||||
calc->RMeasOhm = 35060;
|
||||
calc->RLimitOhm = 1.5e6;
|
||||
calc->DCVoltage = 63;
|
||||
calc->DCVoltage = 31.58;//60;
|
||||
|
||||
foster_init(&calc->adc.foster, 3000.0f);
|
||||
foster_set_mse(&calc->adc.foster, 0.001f); /* Подберите под ваши значения напряжения */
|
||||
|
||||
HAL_ADCEx_Calibration_Start(hadc, ADC_SINGLE_ENDED);
|
||||
|
||||
calc->IsoOhm = 100e6;
|
||||
calc->IsoMOhm = calc->IsoOhm / 1000000.0f;
|
||||
|
||||
return HAL_ADC_Start(hadc);
|
||||
}
|
||||
|
||||
@@ -113,9 +117,13 @@ float UKSI_Calc_Isolation(UKSI_Calc_t *calc)
|
||||
|
||||
if(Filter_isDataReady(&calc->adc.avg))
|
||||
{
|
||||
/* Расчет тока */
|
||||
float current = voltage / calc->RMeasOhm;
|
||||
calc->IsoCurrentuA = current * 1000000.0f;
|
||||
|
||||
/* Проверка стабильности напряжения */
|
||||
foster_add_sample(&calc->adc.foster, voltage);
|
||||
|
||||
|
||||
if(foster_is_ready(&calc->adc.foster)) {
|
||||
uint8_t stability = foster_check(&calc->adc.foster);
|
||||
calc->adc.is_stable = stability;
|
||||
@@ -126,14 +134,12 @@ float UKSI_Calc_Isolation(UKSI_Calc_t *calc)
|
||||
}
|
||||
}
|
||||
|
||||
/* Расчет изоляции */
|
||||
float current = voltage / calc->RMeasOhm;
|
||||
/* Расчет изоляции */
|
||||
float Rtotal = calc->DCVoltage / current;
|
||||
float Riso = Rtotal - (calc->RMeasOhm + calc->RLimitOhm);
|
||||
|
||||
calc->IsoOhm = Riso;
|
||||
calc->IsoMOhm = Riso / 1000000.0f;
|
||||
calc->IsoCurrentuA = current * 1000000.0f;
|
||||
|
||||
}
|
||||
return calc->IsoOhm;
|
||||
|
||||
Reference in New Issue
Block a user