Init
This commit is contained in:
parent
02b0e4a760
commit
d9f413af81
|
|
@ -2,22 +2,66 @@
|
||||||
// Created by cfif on 05.05.23.
|
// Created by cfif on 05.05.23.
|
||||||
//
|
//
|
||||||
#include "MainModesArbiter_Private.h"
|
#include "MainModesArbiter_Private.h"
|
||||||
|
/*
|
||||||
// Функция расчета D для Rwa
|
// Функция расчета D для Rwa
|
||||||
int32_t calc_D_for_Rwa(float Rwa_desired, float Rab, float Rw) {
|
int32_t calc_D_for_Rwa(float Rwa_desired, float Rab, float Rw) {
|
||||||
float D_float = 256.0f - ((Rwa_desired - Rw) / Rab) * 256.0f;
|
float D_float = 256.0f - ((Rwa_desired - Rw) / Rab) * 256.0f;
|
||||||
int32_t D = (int32_t)(D_float + 0.5f); // Округление
|
int32_t D = (int32_t) (D_float + 0.5f); // Округление
|
||||||
|
|
||||||
if (D > 255) D = 255;
|
if (D > 255) D = 255;
|
||||||
if (D < 0) D = 0;
|
if (D < 0) D = 0;
|
||||||
|
|
||||||
return D;
|
return D;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
// Параметры
|
// Параметры
|
||||||
|
/*
|
||||||
const float R_const = 171.0f;
|
const float R_const = 171.0f;
|
||||||
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; // Максимальное (для консервативного расчета)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Расчет шагов для двухкаскадного цифрового потенциометра
|
||||||
|
* Резисторы: 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) {
|
||||||
|
const float R_const = 171.0f;
|
||||||
|
const float R_ab_100k = 100000.0f;
|
||||||
|
const float R_ab_10k = 10000.0f;
|
||||||
|
|
||||||
|
if (CountStep100 == NULL || CountStep10 == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
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) Rout = 0;
|
||||||
|
|
||||||
|
*CountStep100 = (int32_t) (Rout / Step100);
|
||||||
|
if (*CountStep100 > 255) *CountStep100 = 255;
|
||||||
|
if (*CountStep100 < 0) *CountStep100 = 0;
|
||||||
|
|
||||||
|
float R_tail = Rout - (float) (*CountStep100) * Step100;
|
||||||
|
if (R_tail < 0) R_tail = 0;
|
||||||
|
|
||||||
|
*CountStep10 = (int32_t) (R_tail / Step10 + 0.5f);
|
||||||
|
if (*CountStep10 > 255) *CountStep10 = 255;
|
||||||
|
if (*CountStep10 < 0) *CountStep10 = 0;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void Mma_Init(
|
void Mma_Init(
|
||||||
tMma *env,
|
tMma *env,
|
||||||
|
|
@ -74,6 +118,7 @@ static _Noreturn void Mma_Thread(tMma *env) {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Использование
|
// Использование
|
||||||
|
/*
|
||||||
float Rwa_desired_100k = 7000.0f - R_const;//10000.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);
|
||||||
|
|
@ -81,18 +126,12 @@ static _Noreturn void Mma_Thread(tMma *env) {
|
||||||
float Rwa_desired_10k = 0;//8701.0f - R_const;
|
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 КОм
|
|
||||||
|
|
||||||
|
|
||||||
|
int32_t step100, step10;
|
||||||
|
float required_resistance = 7000.0f;
|
||||||
|
CalculateSteps(required_resistance, &step100, &step10);
|
||||||
|
|
||||||
|
|
||||||
asm("nop");
|
asm("nop");
|
||||||
|
|
@ -112,13 +151,13 @@ static _Noreturn void Mma_Thread(tMma *env) {
|
||||||
// result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_2, D10);
|
// result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_2, D10);
|
||||||
|
|
||||||
|
|
||||||
uint32_t step = 0;
|
uint32_t step = 0;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
|
||||||
|
/*
|
||||||
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 > R_ab_100k) {
|
if (Rwa_desired_100k > R_ab_100k) {
|
||||||
Rwa_desired_100k = 0;
|
Rwa_desired_100k = 0;
|
||||||
|
|
@ -126,24 +165,24 @@ static _Noreturn void Mma_Thread(tMma *env) {
|
||||||
|
|
||||||
|
|
||||||
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 > R_ab_10k) {
|
if (Rwa_desired_10k > R_ab_10k) {
|
||||||
Rwa_desired_10k = 0;
|
Rwa_desired_10k = 0;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_1, 255 - step100);
|
||||||
result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_1, 237);
|
|
||||||
asm("nop");
|
asm("nop");
|
||||||
++step;
|
// ++step;
|
||||||
|
|
||||||
if (step> 255)
|
// if (step> 255)
|
||||||
step =0;
|
// step =0;
|
||||||
|
|
||||||
|
|
||||||
result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_2, 255);
|
result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_2, 255 - step10);
|
||||||
asm("nop");
|
asm("nop");
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue