This commit is contained in:
cfif 2026-04-23 12:10:21 +03:00
parent a7aa5c8b55
commit 59db4b83e9
1 changed files with 11 additions and 10 deletions

View File

@ -99,22 +99,22 @@ int32_t CalculateSteps2(float Rout_required, int32_t *CountStep100, int32_t *Cou
if (Rout < 0) Rout = 0; if (Rout < 0) Rout = 0;
// Приоритет 1: Сначала заполняем точный резистор (10 кОм) // Приоритет 1: Сначала заполняем точный резистор (10 кОм)
*CountStep10 = (int32_t)(Rout / Step10 + 0.5f); *CountStep10 = (int32_t) (Rout / Step10 + 0.5f);
if (*CountStep10 > 255) *CountStep10 = 255; if (*CountStep10 > 255) *CountStep10 = 255;
if (*CountStep10 < 0) *CountStep10 = 0; if (*CountStep10 < 0) *CountStep10 = 0;
// Вычисляем остаток после установки точного резистора // Вычисляем остаток после установки точного резистора
float R_remaining = Rout - (float)(*CountStep10) * Step10; float R_remaining = Rout - (float) (*CountStep10) * Step10;
if (R_remaining < 0) R_remaining = 0; if (R_remaining < 0) R_remaining = 0;
// Приоритет 2: Остаток добираем грубым резистором (100 кОм) // Приоритет 2: Остаток добираем грубым резистором (100 кОм)
*CountStep100 = (int32_t)(R_remaining / Step100 + 0.5f); *CountStep100 = (int32_t) (R_remaining / Step100 + 0.5f);
if (*CountStep100 > 255) *CountStep100 = 255; if (*CountStep100 > 255) *CountStep100 = 255;
if (*CountStep100 < 0) *CountStep100 = 0; if (*CountStep100 < 0) *CountStep100 = 0;
// Опционально: корректировка для минимизации общей ошибки // Опционально: корректировка для минимизации общей ошибки
// Если грубый резистор перекомпенсировал, уменьшаем точный // Если грубый резистор перекомпенсировал, уменьшаем точный
float R_actual = R_constL + (float)(*CountStep100) * Step100 + (float)(*CountStep10) * Step10; float R_actual = R_constL + (float) (*CountStep100) * Step100 + (float) (*CountStep10) * Step10;
float R_error = R_actual - Rout_required; float R_error = R_actual - Rout_required;
// Если ошибка положительная и большая, пробуем скорректировать // Если ошибка положительная и большая, пробуем скорректировать
@ -122,9 +122,9 @@ int32_t CalculateSteps2(float Rout_required, int32_t *CountStep100, int32_t *Cou
// Уменьшаем точный резистор на 1 шаг // Уменьшаем точный резистор на 1 шаг
(*CountStep10)--; (*CountStep10)--;
// Пересчитываем грубый резистор // Пересчитываем грубый резистор
R_remaining = Rout - (float)(*CountStep10) * Step10; R_remaining = Rout - (float) (*CountStep10) * Step10;
if (R_remaining < 0) R_remaining = 0; if (R_remaining < 0) R_remaining = 0;
*CountStep100 = (int32_t)(R_remaining / Step100 + 0.5f); *CountStep100 = (int32_t) (R_remaining / Step100 + 0.5f);
if (*CountStep100 > 255) *CountStep100 = 255; if (*CountStep100 > 255) *CountStep100 = 255;
} }
@ -186,7 +186,7 @@ static _Noreturn void Mma_Thread(tMma *env) {
*/ */
int32_t step100, step10; int32_t step100, step10;
/*
// Использование // Использование
float R_ab_100k = 100000.0f; float R_ab_100k = 100000.0f;
float R_ab_10k = 10000.0f; float R_ab_10k = 10000.0f;
@ -204,7 +204,7 @@ static _Noreturn void Mma_Thread(tMma *env) {
float Rwa_desired_10k = (float)CountStep10 * Step10; float Rwa_desired_10k = (float)CountStep10 * Step10;
step10 = calc_D_for_Rwa(Rwa_desired_10k, R_ab_10k, Rw_typ); step10 = calc_D_for_Rwa(Rwa_desired_10k, R_ab_10k, Rw_typ);
*/
/* /*
float Rwa_desired2_100k = 000.00f - R_const; float Rwa_desired2_100k = 000.00f - R_const;
step100 = calc_D_for_Rwa(Rwa_desired2_100k, R_ab_100k, Rw_typ); step100 = calc_D_for_Rwa(Rwa_desired2_100k, R_ab_100k, Rw_typ);
@ -215,12 +215,13 @@ static _Noreturn void Mma_Thread(tMma *env) {
float required_resistance = 8000.00f; float required_resistance = 8000.00f;
// CalculateSteps2(required_resistance, &step100, &step10); CalculateSteps(required_resistance, &step100, &step10);
// CalculateSteps(required_resistance, &step100, &step10);
step100 = 255 - step100; step100 = 255 - step100;
step10 = 255 - step10; step10 = 255 - step10;
result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_1, step100);
result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_2, step10);
asm("nop"); asm("nop");