
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.169] |
![]() |
|
Сообщ.
#1
,
|
|
|
У меня математический кретинизм в плане переделки исходного кода в формулы.
В этом коде должна реализоваться формула 75%<Uшунта<125%. Но кажется, что написал что-то другое. И интересно, что: может, это лучший вариант, чем планировался. Но нужно математическое представление кода в виде формулы. В данном коде анализируется последовательное соединение резистора-шунта и резистора-сенсора: расчет пределов нормы, когда считать резистор-сенсор закороченным или разорванным. Вызов: g_fA1_R_Shunt_Min = fCalculate_Shunt_R_Percent(g_fA1_A7_R_Shunt, g_fA1_R_Sensors, true); g_fA1_R_Shunt_Max = fCalculate_Shunt_R_Percent(g_fA1_A7_R_Shunt, g_fA1_R_Sensors, false); Функция: ![]() ![]() float fCalculate_Shunt_R_Percent(const float fShunt_R, const float fSensor_R, const bool bMin) { //В зависимости от номиналов шунта и датчиков (а также их количества), имеется разное перераспредение напряжений между ними. //Нужно рассчитать диапазон напряжений на шунте, при котором ситуация считается нормой. Выход за норму - разрыв/замыкание датчика (в т.ч. из-за воды). //Несмотря на погрешность резисторов 5% - берется 25% (см. g_fVoltage_Deviation): китайские резисторы могут оказаться с намеренно неверной погрешностью + погрешности измерений на каналах Arduino. float fResult = 0; float fSituation1 = fShunt_R*(1.000-g_fVoltage_Deviation) / (fShunt_R*(1.000-g_fVoltage_Deviation) + fSensor_R*(1.000-g_fVoltage_Deviation)); float fSituation2 = fShunt_R*(1.000-g_fVoltage_Deviation) / (fShunt_R*(1.000-g_fVoltage_Deviation) + fSensor_R*(1.000+g_fVoltage_Deviation)); float fSituation3 = fShunt_R*(1.000+g_fVoltage_Deviation) / (fShunt_R*(1.000+g_fVoltage_Deviation) + fSensor_R*(1.000-g_fVoltage_Deviation)); float fSituation4 = fShunt_R*(1.000+g_fVoltage_Deviation) / (fShunt_R*(1.000+g_fVoltage_Deviation) + fSensor_R*(1.000+g_fVoltage_Deviation)); if (bMin) { fResult = min(fSituation1, fSituation2); fResult = min(fResult, fSituation3); fResult = min(fResult, fSituation4); } else { fResult = max(fSituation1, fSituation2); fResult = max(fResult, fSituation3); fResult = max(fResult, fSituation4); } return fResult; } |