Init
This commit is contained in:
parent
b980d6bae1
commit
851c9b8ee1
130
ArbiterCommand.c
130
ArbiterCommand.c
|
|
@ -276,6 +276,82 @@ setResistanceInit(tTaskSerial *env, char *name, int16_t temperature, const Table
|
|||
return (result1 && result2);
|
||||
}
|
||||
|
||||
|
||||
// Коэффициенты перевода
|
||||
#define ATM_TO_KGF_CM2 1.033227f
|
||||
|
||||
/**
|
||||
* @brief Рассчитать R1 по заданному давлению в атмосферах
|
||||
*
|
||||
* @param p_atm Давление в атмосферах (атм), при котором Vout = Vref * R1/(R1+R2)
|
||||
* @param r2 Нижний резистор делителя (Ом)
|
||||
* @param vref Опорное напряжение АЦП (В)
|
||||
* @param vdd Напряжение питания датчика (В)
|
||||
* @return float Сопротивление R1 (Ом), или 0.0f если делитель не нужен
|
||||
*/
|
||||
float calculate_r1_for_pressure_atm(float p_atm, float r2, float vref, float vdd)
|
||||
{
|
||||
// Переводим давление в кгс/см²
|
||||
float p_kgf = p_atm * ATM_TO_KGF_CM2;
|
||||
|
||||
// Напряжение датчика при давлении P (в кгс/см²)
|
||||
float vsensor = vdd * (0.025f * p_kgf + 0.1f);
|
||||
|
||||
// Проверка: Vref должно быть больше Vsensor
|
||||
if (vref <= vsensor) {
|
||||
return 0.0f; // Делитель не нужен или нужен усилитель
|
||||
}
|
||||
|
||||
// Расчёт R1
|
||||
float r1 = (r2 * vsensor) / (vref - vsensor);
|
||||
|
||||
return r1;
|
||||
}
|
||||
|
||||
static bool
|
||||
setPressure(tTaskSerial *env, char *name,
|
||||
tSensorType sensorType,
|
||||
tSensorAdr sensorAdr1, tSensorAdr sensorAdr2) {
|
||||
|
||||
char *start = env->At.rxBuffer.data + strlen(name);
|
||||
int16_t pressure = atoi(start);
|
||||
|
||||
uint32_t r1 = (uint32_t)calculate_r1_for_pressure_atm((float)pressure / 10, 51000.0f, 4.96f, 5.0f);
|
||||
|
||||
uint8_t step100;
|
||||
uint8_t step10;
|
||||
find_steps_for_resistance(r1, &step100, &step10);
|
||||
|
||||
step100 = 255 - step100;
|
||||
step10 = 255 - step10;
|
||||
|
||||
bool result1 = setSpiSensor(env->sensorSPI, sensorType, sensorAdr1, step100);
|
||||
bool result2 = setSpiSensor(env->sensorSPI, sensorType, sensorAdr2, step10);
|
||||
|
||||
return (result1 && result2);
|
||||
}
|
||||
|
||||
static bool
|
||||
setPressureInit(tTaskSerial *env, char *name, int16_t pressure,
|
||||
tSensorType sensorType,
|
||||
tSensorAdr sensorAdr1, tSensorAdr sensorAdr2) {
|
||||
|
||||
uint32_t r1 = (uint32_t)calculate_r1_for_pressure_atm((float)pressure / 10, 51000.0f, 4.96f, 5.0f);
|
||||
|
||||
uint8_t step100;
|
||||
uint8_t step10;
|
||||
find_steps_for_resistance(r1, &step100, &step10);
|
||||
|
||||
step100 = 255 - step100;
|
||||
step10 = 255 - step10;
|
||||
|
||||
bool result1 = setSpiSensor(env->sensorSPI, sensorType, sensorAdr1, step100);
|
||||
bool result2 = setSpiSensor(env->sensorSPI, sensorType, sensorAdr2, step10);
|
||||
|
||||
return (result1 && result2);
|
||||
}
|
||||
|
||||
|
||||
void SerialCommand_Scheduler(tTaskSerial *env) {
|
||||
|
||||
osStatus_t status;
|
||||
|
|
@ -416,8 +492,8 @@ void SerialCommand_Scheduler(tTaskSerial *env) {
|
|||
SENSOR_ADR_11, SENSOR_ADR_12);
|
||||
}
|
||||
|
||||
if (AtCmdRxBeginWithStatic(&env->At, "Sen_Eva_F")) {
|
||||
setResistance(env, "Sen_Eva_F", duct_lookup_table_20000, size_duct_lookup_table_20000, SENSOR_TYPE_A,
|
||||
if (AtCmdRxBeginWithStatic(&env->At, "Eva_F")) {
|
||||
setResistance(env, "Eva_F", duct_lookup_table_20000, size_duct_lookup_table_20000, SENSOR_TYPE_A,
|
||||
SENSOR_ADR_13, SENSOR_ADR_14);
|
||||
}
|
||||
|
||||
|
|
@ -444,11 +520,48 @@ void SerialCommand_Scheduler(tTaskSerial *env) {
|
|||
SENSOR_ADR_3, SENSOR_ADR_4);
|
||||
}
|
||||
|
||||
if (AtCmdRxBeginWithStatic(&env->At, "Sen_Eva_R")) {
|
||||
setResistance(env, "Sen_Eva_R", duct_lookup_table_20000, size_duct_lookup_table_20000, SENSOR_TYPE_B,
|
||||
if (AtCmdRxBeginWithStatic(&env->At, "Eva_R")) {
|
||||
setResistance(env, "Eva_R", duct_lookup_table_20000, size_duct_lookup_table_20000, SENSOR_TYPE_B,
|
||||
SENSOR_ADR_9, SENSOR_ADR_10);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (AtCmdRxBeginWithStatic(&env->At, "Incar_FL")) {
|
||||
setResistance(env, "Incar_FL", incar_lookup_table_20000, size_incar_lookup_table_20000,
|
||||
SENSOR_TYPE_D,
|
||||
SENSOR_ADR_1,
|
||||
SENSOR_ADR_2);
|
||||
}
|
||||
|
||||
if (AtCmdRxBeginWithStatic(&env->At, "Incar_FL")) {
|
||||
setResistance(env, "Incar_FL", incar_lookup_table_20000, size_incar_lookup_table_20000,
|
||||
SENSOR_TYPE_D,
|
||||
SENSOR_ADR_5,
|
||||
SENSOR_ADR_6);
|
||||
}
|
||||
|
||||
if (AtCmdRxBeginWithStatic(&env->At, "Incar_FR")) {
|
||||
setResistance(env, "Incar_FR", incar_lookup_table_20000, size_incar_lookup_table_20000,
|
||||
SENSOR_TYPE_D,
|
||||
SENSOR_ADR_3,
|
||||
SENSOR_ADR_4);
|
||||
}
|
||||
|
||||
if (AtCmdRxBeginWithStatic(&env->At, "Incar_RR")) {
|
||||
setResistance(env, "Incar_RR", incar_lookup_table_20000, size_incar_lookup_table_20000,
|
||||
SENSOR_TYPE_D,
|
||||
SENSOR_ADR_7,
|
||||
SENSOR_ADR_8);
|
||||
}
|
||||
|
||||
|
||||
if (AtCmdRxBeginWithStatic(&env->At, "Pressure")) {
|
||||
setPressure(env, "Pressure",
|
||||
SENSOR_TYPE_D,
|
||||
SENSOR_ADR_9, SENSOR_ADR_10);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -498,6 +611,7 @@ void TaskSerialUSB1_Init(tTaskSerial *env,
|
|||
static _Noreturn void Serial_USB1_Thread(tTaskSerial *env) {
|
||||
|
||||
int16_t temperature = 250;
|
||||
int16_t pressure = 150;
|
||||
|
||||
setResistanceInit(env, "Duct_FL_Upper", temperature, duct_lookup_table_3000, size_duct_lookup_table_3000,
|
||||
SENSOR_TYPE_A,
|
||||
|
|
@ -523,7 +637,7 @@ static _Noreturn void Serial_USB1_Thread(tTaskSerial *env) {
|
|||
SENSOR_TYPE_A,
|
||||
SENSOR_ADR_11,
|
||||
SENSOR_ADR_12);
|
||||
setResistanceInit(env, "Sen_Eva_F", temperature, duct_lookup_table_20000, size_duct_lookup_table_20000,
|
||||
setResistanceInit(env, "Eva_F", temperature, duct_lookup_table_20000, size_duct_lookup_table_20000,
|
||||
SENSOR_TYPE_A,
|
||||
SENSOR_ADR_13,
|
||||
SENSOR_ADR_14);
|
||||
|
|
@ -541,7 +655,7 @@ static _Noreturn void Serial_USB1_Thread(tTaskSerial *env) {
|
|||
setResistanceInit(env, "Duct_RR", temperature, duct_lookup_table_3000, size_duct_lookup_table_3000, SENSOR_TYPE_B,
|
||||
SENSOR_ADR_3,
|
||||
SENSOR_ADR_4);
|
||||
setResistanceInit(env, "Sen_Eva_R", temperature, duct_lookup_table_20000, size_duct_lookup_table_20000,
|
||||
setResistanceInit(env, "Eva_R", temperature, duct_lookup_table_20000, size_duct_lookup_table_20000,
|
||||
SENSOR_TYPE_B,
|
||||
SENSOR_ADR_9,
|
||||
SENSOR_ADR_10);
|
||||
|
|
@ -567,6 +681,10 @@ static _Noreturn void Serial_USB1_Thread(tTaskSerial *env) {
|
|||
SENSOR_ADR_7,
|
||||
SENSOR_ADR_8);
|
||||
|
||||
setPressureInit(env, "Pressure", pressure,
|
||||
SENSOR_TYPE_D,
|
||||
SENSOR_ADR_9, SENSOR_ADR_10);
|
||||
|
||||
for (;;) {
|
||||
|
||||
SerialCommand_Scheduler(env);
|
||||
|
|
|
|||
Loading…
Reference in New Issue