Init
This commit is contained in:
parent
06524546a3
commit
c392b084a3
|
|
@ -20,40 +20,31 @@ const float R_const = 163.4f;
|
||||||
const float Rw_typ = 00.0f; //60.0f // Типовое сопротивление движка
|
const float Rw_typ = 00.0f; //60.0f // Типовое сопротивление движка
|
||||||
const float Rw_max = 120.0f; // Максимальное (для консервативного расчета)
|
const float Rw_max = 120.0f; // Максимальное (для консервативного расчета)
|
||||||
|
|
||||||
/**
|
|
||||||
* Расчет шагов для двухкаскадного цифрового потенциометра
|
|
||||||
* Резисторы: 100 кОм (грубый) и 10 кОм (точный)
|
|
||||||
* Постоянное сопротивление: 171 Ом
|
|
||||||
*
|
|
||||||
* @param Rout_required Требуемое сопротивление в Омах
|
|
||||||
* @param CountStep100 Указатель для сохранения шагов грубого резистора (0-255)
|
|
||||||
* @param CountStep10 Указатель для сохранения шагов точного резистора (0-255)
|
|
||||||
* @return 0 - успех, -1 - ошибка
|
|
||||||
*/
|
|
||||||
int32_t CalculateSteps(float Rout_required, int32_t *CountStep100, int32_t *CountStep10) {
|
int32_t CalculateSteps(float Rout_required, int32_t *CountStep100, int32_t *CountStep10) {
|
||||||
const float R_constL = 0.0f;//150.4f;
|
|
||||||
const float R_ab_100k = 100000.0f;
|
const float R_ab_100k = 100000.0f;
|
||||||
const float R_ab_10k = 10000.0f;
|
const float R_ab_10k = 10000.0f;
|
||||||
|
const float R_w_100k = 120.0f;
|
||||||
|
const float R_w_10k = 120.0f;
|
||||||
|
const float R__const = R_w_100k + R_w_10k; // 150 Ом — всегда присутствует
|
||||||
|
|
||||||
if (CountStep100 == NULL || CountStep10 == NULL) {
|
const float Step100 = R_ab_100k / 256.0f; // ~390.625 Ом
|
||||||
return -1;
|
const float Step10 = R_ab_10k / 256.0f; // ~39.0625 Ом
|
||||||
}
|
|
||||||
|
|
||||||
const float Step100 = R_ab_100k / 256.0f;
|
// Вычитаем постоянную составляющую
|
||||||
const float Step10 = R_ab_10k / 256.0f;
|
float Rout = Rout_required - R__const;
|
||||||
|
if (Rout < 0.0f) Rout = 0.0f;
|
||||||
|
|
||||||
float Rout = Rout_required - R_constL;
|
// Расчёт грубого каскада (без вычитания R_w — он уже в R_const)
|
||||||
if (Rout < 0) Rout = 0;
|
*CountStep100 = (int32_t)(Rout / Step100);
|
||||||
|
|
||||||
*CountStep100 = (int32_t) (Rout / Step100);
|
|
||||||
if (*CountStep100 > 255) *CountStep100 = 255;
|
if (*CountStep100 > 255) *CountStep100 = 255;
|
||||||
if (*CountStep100 < 0) *CountStep100 = 0;
|
if (*CountStep100 < 0) *CountStep100 = 0;
|
||||||
|
|
||||||
float R_tail = Rout - (float) (*CountStep100) * Step100;
|
// Остаток для точного каскада
|
||||||
|
float R_tail = Rout - (float)(*CountStep100) * Step100;
|
||||||
|
if (R_tail < 0.0f) R_tail = 0.0f;
|
||||||
|
|
||||||
if (R_tail < 0) R_tail = 0;
|
// Расчёт точного каскада с округлением
|
||||||
|
*CountStep10 = (int32_t)(R_tail / Step10 + 0.5f);
|
||||||
*CountStep10 = (int32_t) (R_tail / Step10 + 0.5f);
|
|
||||||
if (*CountStep10 > 255) *CountStep10 = 255;
|
if (*CountStep10 > 255) *CountStep10 = 255;
|
||||||
if (*CountStep10 < 0) *CountStep10 = 0;
|
if (*CountStep10 < 0) *CountStep10 = 0;
|
||||||
|
|
||||||
|
|
@ -216,11 +207,11 @@ static _Noreturn void Mma_Thread(tMma *env) {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
float required_resistance = 10440.0f;
|
float required_resistance = 9282.03f;
|
||||||
CalculateSteps(required_resistance, &step100, &step10);
|
CalculateSteps(required_resistance, &step100, &step10);
|
||||||
|
|
||||||
step100 = 50;
|
// step100 = 50;
|
||||||
step10 = 0;
|
// step10 = 0;
|
||||||
|
|
||||||
step100 = 255 - step100;
|
step100 = 255 - step100;
|
||||||
step10 = 255 - step10;
|
step10 = 255 - step10;
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
#include "CommandLines.h"
|
#include "CommandLines.h"
|
||||||
#include "ArbiterCommand.h"
|
#include "ArbiterCommand.h"
|
||||||
#include "SpiPorts.h"
|
#include "SpiPorts.h"
|
||||||
|
#include "LinSensorTasks.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
// Преферийные интерфесы
|
// Преферийные интерфесы
|
||||||
|
|
@ -42,6 +43,8 @@ typedef struct {
|
||||||
tTaskSerial TaskSerialUSB2;
|
tTaskSerial TaskSerialUSB2;
|
||||||
|
|
||||||
|
|
||||||
|
tLin5TaskSensor lin5TaskSensor;
|
||||||
|
|
||||||
tTaskReceivedSerial TaskReceivedSerialUSB1;
|
tTaskReceivedSerial TaskReceivedSerialUSB1;
|
||||||
tTaskReceivedSerial TaskReceivedSerialUSB2;
|
tTaskReceivedSerial TaskReceivedSerialUSB2;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ void Mma_InitComIntLog(tMma *env) {
|
||||||
&env->slog,
|
&env->slog,
|
||||||
3,
|
3,
|
||||||
&SERIAL_PORTS.cliVirtualPortOut_Io,
|
&SERIAL_PORTS.cliVirtualPortOut_Io,
|
||||||
&SERIAL_PORTS.Rs485_HalfDuplexIo,
|
&SERIAL_PORTS.Rs485_USART2_HalfDuplexIo,
|
||||||
&env->rtcs->rtcI0,
|
&env->rtcs->rtcI0,
|
||||||
SERIAL_LOGGER_SHOW_AUTHOR | SERIAL_LOGGER_SHOW_LOG_LEVEL,
|
SERIAL_LOGGER_SHOW_AUTHOR | SERIAL_LOGGER_SHOW_LOG_LEVEL,
|
||||||
1000
|
1000
|
||||||
|
|
@ -97,8 +97,16 @@ static void Mma_InitSubSystems(tMma *env) {
|
||||||
Task_RECEIVED_SerialUSB2_StartThread(&env->TaskReceivedSerialUSB2);
|
Task_RECEIVED_SerialUSB2_StartThread(&env->TaskReceivedSerialUSB2);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Lin_5_Init(&env->lin5TaskSensor, &env->serialPorts->LIN1_UART4_IO, &env->slog.logger);
|
||||||
|
Lin5_StartThread(&env->lin5TaskSensor);
|
||||||
|
|
||||||
|
|
||||||
SensorSpi_Init(&env->sensorSPI, env->spiPorts, &env->gpios->conns);
|
SensorSpi_Init(&env->sensorSPI, env->spiPorts, &env->gpios->conns);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "End of subsystem initialization")
|
LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "End of subsystem initialization")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue