diff --git a/MainModesArbiter.c b/MainModesArbiter.c index ece0aaf..6b64d78 100644 --- a/MainModesArbiter.c +++ b/MainModesArbiter.c @@ -15,7 +15,8 @@ int32_t calc_D_for_Rwa(float Rwa_desired, float Rab, float Rw) { } // Параметры -const float Rw_typ = 60.0f; // Типовое сопротивление движка +const float R_const = 171.0f; +const float Rw_typ = 00.0f; //60.0f // Типовое сопротивление движка const float Rw_max = 120.0f; // Максимальное (для консервативного расчета) void Mma_Init( @@ -73,43 +74,68 @@ static _Noreturn void Mma_Thread(tMma *env) { */ // Использование - float Rwa_desired_100k = 1000.0f; + float Rwa_desired_100k = 7000.0f - R_const;//10000.0f; float R_ab_100k = 100000.0f; int32_t D100 = calc_D_for_Rwa(Rwa_desired_100k, R_ab_100k, Rw_typ); - float Rwa_desired_10k = 0.0f; + float Rwa_desired_10k = 0;//8701.0f - R_const; float R_ab_10k = 10000.0f; int32_t D10 = calc_D_for_Rwa(Rwa_desired_10k, R_ab_10k, Rw_typ); + float Rin = 7000.0f; // Нужное сопротивление Ом + float Step100 = R_ab_100k / 256.0f; // Шаг 100 КОм резистора + float Step10 = R_ab_10k / 256.0f; // Шаг 10 КОм резистора + + int32_t CountStep100 = (int32_t)(Rin / Step100); // Целых шагов на резисторе 100 кОм + + float R_tail = Rin - ((float)CountStep100 * Step100); // Хвост Ом для резистора 10 кОм + + int32_t CountStep10 = (int32_t)(R_tail / Step10); // Шагов на резисторе 10 КОм + + + + + asm("nop"); + + +// D100 = (int32_t)(255.0f - (R / Step100)); +// D10 = (int32_t)(255.0f - (R / Step10)); + + +// D100 = 255 - (R / 390.625); +// int32_t div + + + + +// result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_1, D100); +// result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_2, D10); + + uint32_t step = 0; for (;;) { - GpioPinSet(&env->gpios->Led.ledR1, true); - SystemDelayMs(1000); - GpioPinSet(&env->gpios->Led.ledR1, false); - SystemDelayMs(1000); - Rwa_desired_100k += 1000.0f; - D100 = calc_D_for_Rwa(Rwa_desired_100k, R_ab_100k, Rw_typ); +// D100 = calc_D_for_Rwa(Rwa_desired_100k, R_ab_100k, Rw_typ); - if (Rwa_desired_100k > 100000) { + if (Rwa_desired_100k > R_ab_100k) { Rwa_desired_100k = 0; } Rwa_desired_10k += 1000.0f; - D10 = calc_D_for_Rwa(Rwa_desired_10k, R_ab_10k, Rw_typ); +// D10 = calc_D_for_Rwa(Rwa_desired_10k, R_ab_10k, Rw_typ); - if (Rwa_desired_10k > 10000) { + if (Rwa_desired_10k > R_ab_10k) { Rwa_desired_10k = 0; } - result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_3, 255); + result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_1, 237); asm("nop"); ++step; @@ -117,9 +143,15 @@ static _Noreturn void Mma_Thread(tMma *env) { step =0; - result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_4, D10); + result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_2, 255); asm("nop"); + + GpioPinSet(&env->gpios->Led.ledR1, true); + SystemDelayMs(1000); + GpioPinSet(&env->gpios->Led.ledR1, false); + SystemDelayMs(1000); + /* result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_1, D100); asm("nop");