// В тексте ниже объявление переменных приводится скорее для комментариев и может оказаться не полным по проекту в целом

volatile int DMA_ADC1_GO = 0;                   // Флаг визуализации DMA (разрешает прерывания DMA)
volatile int Sin_Average_GO = 0;                // Флаг завершения выборки
volatile int Period_Fl = 0;                     // Флаг завершения периода синуса
volatile int Period_Counter = 0;                // Счетчик периода синуса (Проверяет весь ли период влез)


const long Tim2_Start_AMA_ADC = 2000;        // Запуск измерений, через 2000 тиков


volatile int PSC_Val = 0; // Расчетная частота несущей.
// В SM32 внутренний RC генератор с частотой 48 МГц. 
// Установим предварительный делитель равным 1. TIM1->ARR = 750 (2х750).
// Значения счетчика будут инкрементироваться с частотой ~32 КГц:
// (Center-aligned mode 3)! Счетчик считает вверх и вниз поочередно.

const int Deadtime = 12;                 // Мертвое время комплементарных сигналов TIM
// На всякий случай в 2 раза больше. На практике ужасный разброс тразисторов.

const int Sin_ordinate = 749;
// От 0 до 749. На отрезке в 24 точки синуса
// Максимальная частота синуса 166,66667 Гц или 10000,00 оборота в минуту
// (Center-aligned mode 3)! Счетчик считает вверх и вниз поочередно.
static volatile int Sin_counter = 23;
const int Sin_abcissa = 23;


#include "Sin_A.h"    // volatile int Sin_A [24] = 
#include "Sin_B.h"    // volatile int Sin_B [24] = 
#include "Sin_C.h"    // volatile int Sin_C [24] = 
static volatile int *p_Sin_A;
static volatile int *p_Sin_B;
static volatile int *p_Sin_C;

const int Fr_L_Number = 100;
static volatile int Fr_L_counter = 101;
// У нас не бывает плавного перехода из Act_F = 0; в Act_F = 1;
// Поэтому все массивы счетчиков начинаются с незначащего нуля, и имеют 101 элемент
// Работа начинается не с нулевого, а с первого элемента массива
#include "F_L_Disp.h"    // volatile int Fr_Loc_Disp [101] = 
#include "F_L24_Tim2.h"    // volatile long Fr_Loc_Tim2 [101] = 
//static volatile int *p_Fr_Loc_Disp;
//static volatile int *p_Fr_Loc_Tim2;

//------------------------------------------------------------------------------
#define Tim2_St_N        121              // Количество приращений счетчика Tim2
// Это разница значения счетного регистра Tim2 9900 и 10000 prm
// 12121 и 12000. То есть декремируем счетчик 121 раз
// Соответственно при ускорении от 8900 до 9000 [13483] - [13333] = 150
// тоже 121 раз +DIV(29)
// А вот при ускорении от 2900 до 3000 [41379] [40000] декремируем счетчик
// тоже 121 раз, но с приращением Mod (11) +DIV(48)
// При ускорении от 100 до 200 prm [1200000] [600000] декремируем счетчик
// те же 121 раз, но с приращением Mod (4950) +DIV(82)
// Настоящим пробуем утверждать, что разгон двигателя будет линейным
// Кроме того время разгона двигателя может быть значимым и не зависеть
// от шага енкодера и скорости его накручивания
#include "Mod_F_L24_Tim2.h"    // volatile int Mod_Fr_Loc_Tim2 [101] =
#include "Div_F_L24_Tim2.h"    // volatile int Div_Fr_Loc_Tim2 [101] =
//static volatile int *p_Mod_Fr_Loc_Tim2;
//static volatile int *p_Div_Fr_Loc_Tim2;
static volatile int  Fl_Rev = 0;        // Флаг реверса
static volatile int  Mod_F = 0;         // Частота, устанавливаемая ручками управления
static volatile int  Kn_St = 1;         // Приращение Mod_F по нажатию кнопки
static volatile int  En_St = 1;         // Приращение Mod_F по щелчку энкодера

static volatile int  Act_F = 0;         // Частота, отрабатываемая TIM2
static volatile int  Mod_St_Cr = 0;     // Счетчик приращения Tim2 в пределах Mod
static volatile int  Div_St_Cr = 0;     // Счетчик приращения Tim2 в пределах Div


//------------------------------------------------------------------------------
// Если Act_F != Mod_F Tim14 обрабатывает Act_F - Mod_F = 1 за Tim2_St_N = 121
// Соответственно Fr_Ass_Tim14 [n] Tim14_Acc_ARR все деленное на 121
#define Tim14_Acc_PSC        1200       // Подделитель счетчика разгона Tim14
#define Tim14_Acc_ARR        40000      // TIM1->ARR счетчика разгона Tim14
// Этот Tim14_Acc_ARR = 40000 для отработки секундного интервала пуска питания
#include "F_Acc24_Tim14.h"    // volatile int Fr_Ass_Tim14 [21] =
//static volatile int *p_Fr_Ass_Tim14;
// Fr_Ass_Tim14 [0] - это 10 Гц. Поэтому грузить будем Fr_Ass_Tim14 [10] - 1 Сек
int D_Ass_Fl = 0;                       // Флаг игменения ускорения
#define Ass_Buf_Poz        4            // Индекс Ass в массиве SPI
// Не мудрствуя, сравнивать новое значение со старым SPI1_Buff [4] и Acc_eng
int Ass_MinInt = 0; // После SPI отрицательное число приходит в дополнительном коде
//------------------------------------------------------------------------------
