Init
This commit is contained in:
parent
ca8937626d
commit
f9284b8c03
|
|
@ -3,6 +3,21 @@
|
||||||
//
|
//
|
||||||
#include "MainModesArbiter_Private.h"
|
#include "MainModesArbiter_Private.h"
|
||||||
|
|
||||||
|
// Функция расчета D для Rwa
|
||||||
|
int32_t calc_D_for_Rwa(float Rwa_desired, float Rab, float Rw) {
|
||||||
|
float D_float = 256.0f - ((Rwa_desired - Rw) / Rab) * 256.0f;
|
||||||
|
int32_t D = (int32_t)(D_float + 0.5f); // Округление
|
||||||
|
|
||||||
|
if (D > 255) D = 255;
|
||||||
|
if (D < 0) D = 0;
|
||||||
|
|
||||||
|
return D;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Параметры
|
||||||
|
const float Rw_typ = 60.0f; // Типовое сопротивление движка
|
||||||
|
const float Rw_max = 120.0f; // Максимальное (для консервативного расчета)
|
||||||
|
|
||||||
void Mma_Init(
|
void Mma_Init(
|
||||||
tMma *env,
|
tMma *env,
|
||||||
tGpios *gpios,
|
tGpios *gpios,
|
||||||
|
|
@ -26,25 +41,18 @@ static _Noreturn void Mma_Thread(tMma *env) {
|
||||||
// Запуск устройства
|
// Запуск устройства
|
||||||
Mma_InitStage(env);
|
Mma_InitStage(env);
|
||||||
|
|
||||||
bool result;
|
bool result = false;
|
||||||
|
|
||||||
|
// Rwa — желаемое сопротивление между выводами W и A.
|
||||||
|
// Rab — полное номинальное сопротивление потенциометра (5, 10, 50 или 100 кОм).
|
||||||
|
// Rw — сопротивление движка (Wiper resistance). Типовое значение — 60 Ом (может варьироваться от 50 до 120 Ом).
|
||||||
|
// D — десятичное значение кода (от 0 до 255).
|
||||||
/*
|
/*
|
||||||
uint32_t step_100 = 100000 / 256; // ОМ
|
|
||||||
uint32_t R100 = 100000;
|
|
||||||
uint32_t R2 = 100000 - R100; // Для записи в регистр
|
|
||||||
uint32_t steps = R2 / step_100;
|
|
||||||
|
|
||||||
uint32_t step_10 = 10000 / 256; // ОМ
|
|
||||||
uint32_t R10 = 10000;
|
|
||||||
uint32_t R3 = 10000 - R10; // Для записи в регистр
|
|
||||||
uint32_t steps2 = R3 / step_10;
|
|
||||||
*/
|
|
||||||
|
|
||||||
float Rwa = 60.0f;
|
float Rwa = 60.0f;
|
||||||
|
|
||||||
float R100 = 21000.0f; // Это сколько нужно
|
float Rwa100 = 21000.0f; // Это сколько сопротивление желаем
|
||||||
float R100ab = 100000.0f;
|
float R100ab = 100000.0f;
|
||||||
int32_t D100 = (int32_t) (256.0f - (((R100 - Rwa) / R100ab) * 256.0f));
|
int32_t D100 = (int32_t) (256.0f - (((Rwa100 - Rwa) / R100ab) * 256.0f));
|
||||||
|
|
||||||
if (D100 > 255)
|
if (D100 > 255)
|
||||||
D100 = 255;
|
D100 = 255;
|
||||||
|
|
@ -53,34 +61,42 @@ static _Noreturn void Mma_Thread(tMma *env) {
|
||||||
D100 = 0;
|
D100 = 0;
|
||||||
|
|
||||||
|
|
||||||
float R10 = 3000.0f; // Это сколько нужно
|
float Rwa10 = 3000.0f; // Это сколько сопротивление желаем
|
||||||
float R10ab = 10000.0f;
|
float R10ab = 10000.0f;
|
||||||
int32_t D10 = (int32_t) (256.0f - (((R10 - Rwa) / R10ab) * 256.0f));
|
int32_t D10 = (int32_t) (256.0f - (((Rwa10 - Rwa) / R10ab) * 256.0f));
|
||||||
|
|
||||||
if (D10 > 255)
|
if (D10 > 255)
|
||||||
D10 = 255;
|
D10 = 255;
|
||||||
|
|
||||||
if (D10 < 0)
|
if (D10 < 0)
|
||||||
D10 = 0;
|
D10 = 0;
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Использование
|
||||||
|
float Rwa_desired_100k = 21000.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 = 3000.0f;
|
||||||
|
float R_ab_10k = 10000.0f;
|
||||||
|
int32_t D10 = calc_D_for_Rwa(Rwa_desired_10k, R_ab_10k, Rw_typ);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
/*
|
/*
|
||||||
GpioPinSet(&env->gpios->Led.ledR1, true);
|
GpioPinSet(&env->gpios->Led.ledR1, true);
|
||||||
SystemDelayMs(1000);
|
SystemDelayMs(100);
|
||||||
GpioPinSet(&env->gpios->Led.ledR1, false);
|
GpioPinSet(&env->gpios->Led.ledR1, false);
|
||||||
SystemDelayMs(1000);
|
SystemDelayMs(100);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
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");
|
||||||
|
|
||||||
result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_2, D10);
|
result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_2, D10);
|
||||||
|
|
||||||
asm("nop");
|
asm("nop");
|
||||||
|
result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_3, D100);
|
||||||
|
asm("nop");
|
||||||
|
result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_4, D10);
|
||||||
|
asm("nop");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue