This commit is contained in:
cfif 2026-04-01 17:58:36 +03:00
parent e539a0a68b
commit 02b0e4a760
1 changed files with 46 additions and 14 deletions

View File

@ -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; // Максимальное (для консервативного расчета) const float Rw_max = 120.0f; // Максимальное (для консервативного расчета)
void Mma_Init( 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; float R_ab_100k = 100000.0f;
int32_t D100 = calc_D_for_Rwa(Rwa_desired_100k, R_ab_100k, Rw_typ); 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; float R_ab_10k = 10000.0f;
int32_t D10 = calc_D_for_Rwa(Rwa_desired_10k, R_ab_10k, Rw_typ); 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; uint32_t step = 0;
for (;;) { for (;;) {
GpioPinSet(&env->gpios->Led.ledR1, true);
SystemDelayMs(1000);
GpioPinSet(&env->gpios->Led.ledR1, false);
SystemDelayMs(1000);
Rwa_desired_100k += 1000.0f; 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_100k = 0;
} }
Rwa_desired_10k += 1000.0f; 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; 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"); asm("nop");
++step; ++step;
@ -117,9 +143,15 @@ static _Noreturn void Mma_Thread(tMma *env) {
step =0; 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"); 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); result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_1, D100);
asm("nop"); asm("nop");