diff --git a/matlab_stm_emulate b/matlab_stm_emulate
index 08719ff..c3d30fa 160000
--- a/matlab_stm_emulate
+++ b/matlab_stm_emulate
@@ -1 +1 @@
-Subproject commit 08719ffc055e27b3b22a9c37742add86ece43ea4
+Subproject commit c3d30fa6f13e7874019a9661fee66d4ccb1929b1
diff --git a/mcu_project/upp/Core/upp/tiristor.c b/mcu_project/upp/Core/upp/tiristor.c
index ed39a60..44ab8c7 100644
--- a/mcu_project/upp/Core/upp/tiristor.c
+++ b/mcu_project/upp/Core/upp/tiristor.c
@@ -1,4 +1,3 @@
-#include "upp.h"
#include "tiristor.h"
// управление тиристором
void tiristor_control(TiristorControl_t *ctrl)
@@ -30,37 +29,49 @@ void tiristor_angle_update(TiristorAngleControl_t *angle)
{
uint32_t current_time_ms = HAL_GetTick();
- if ((current_time_ms - angle->last_update_ms) >= angle->sample_time_ms)
+ if ((current_time_ms - angle->last_update_ms) >= angle->Init->sample_time_ms)
{
angle->last_update_ms = current_time_ms;
- if (angle->delay_us > angle->delay_min_us)
+ if(angle->Init->direction)
+ angle->delay_us += angle->Init->delay_step_us;
+ else
+ angle->delay_us -= angle->Init->delay_step_us;
+
+
+ if (angle->delay_us < angle->Init->delay_min_us)
{
- angle->delay_us -= angle->delay_step_us;
- if (angle->delay_us < angle->delay_min_us)
- angle->delay_us = angle->delay_min_us;
+ angle->delay_us = angle->Init->delay_min_us;
+ }
+ else if (angle->delay_us > angle->Init->delay_max_us)
+ {
+ angle->delay_us = angle->Init->delay_max_us;
}
}
}
+
void tiristor_angle_control(TiristorControl_t *ctrl)
{
tiristor_angle_update(&ctrl->angle);
- if ((uint16_t)((uint16_t)TIMER->CNT - ctrl->angle.start_delay_us) > ctrl->angle.delay_us)
+ if(ctrl->angle.delay_us != 0)
{
- if(ctrl->f.TiristorDone == 0)
+ if ((uint16_t)((uint16_t)TIMER->CNT - ctrl->angle.start_delay_tick) > ctrl->angle.delay_us)
{
- ctrl->f.EnableTiristor = 1;
- ctrl->f.TiristorDone = 1;
+ if(ctrl->f.TiristorReady)
+ {
+ ctrl->f.EnableTiristor = 1;
+ ctrl->f.TiristorReady = 0;
+ }
}
}
}
void tiristor_start_angle_delay(TiristorControl_t *ctrl)
{
- ctrl->f.TiristorDone = 0;
- ctrl->angle.start_delay_us = TIMER->CNT;
+ ctrl->f.TiristorReady = 1;
+ ctrl->angle.start_delay_tick = TIMER->CNT;
}
void tiristor_enable(TiristorControl_t *ctrl)
@@ -77,15 +88,17 @@ void tiristor_disable(TiristorControl_t *ctrl)
ctrl->f.TiristorIsEnable = 0;
}
+void tiristor_angle_reset(TiristorControl_t *ctrl)
+{
+ if(ctrl->angle.Init->direction)
+ ctrl->angle.delay_us = ctrl->angle.Init->delay_min_us;
+ else
+ ctrl->angle.delay_us = ctrl->angle.Init->delay_max_us;
+}
+
void tiristor_init(TiristorControl_t *ctrl, GPIO_TypeDef *gpiox, uint32_t gpio_pin)
{
ctrl->gpiox = gpiox;
ctrl->gpio_pin = gpio_pin;
- ctrl->angle.delay_max_us = 8000;
- ctrl->angle.delay_min_us = 100;
- ctrl->angle.delay_us = 7000;
- ctrl->angle.delay_step_us = 500;
- ctrl->angle.sample_time_ms = 100;
- ctrl->open_time = 1;
- TIMER->CR1 |= TIM_CR1_CEN;
+ tiristor_angle_reset(ctrl);
}
\ No newline at end of file
diff --git a/mcu_project/upp/Core/upp/tiristor.h b/mcu_project/upp/Core/upp/tiristor.h
index 5893d46..e75f8a9 100644
--- a/mcu_project/upp/Core/upp/tiristor.h
+++ b/mcu_project/upp/Core/upp/tiristor.h
@@ -15,20 +15,24 @@ typedef struct
{
unsigned EnableTiristor:1;
unsigned TiristorIsEnable:1;
- unsigned TiristorDone:1;
+ unsigned TiristorReady:1;
}TiristorControlFlags;
-
+typedef struct
+{
+uint32_t delay_min_us; // Минимальная задержка (максимальное открытие тиристора)
+uint32_t delay_max_us; // Начальная задержка (практически закрыт)
+uint32_t delay_step_us; // Шаг уменьшения задержки
+uint32_t sample_time_ms; // Интервал между шагами (например, 200 мс)
+unsigned direction; // Направление разгон/торможение
+}AngleInit_t;
typedef struct
{
- uint32_t delay_us; // Текущая задержка (в микросекундах)
- uint32_t delay_min_us; // Минимальная задержка (максимальное открытие тиристора)
- uint32_t delay_max_us; // Начальная задержка (практически закрыт)
- uint32_t delay_step_us; // Шаг уменьшения задержки
+ AngleInit_t *Init;
+
uint32_t last_update_ms; // Время последнего обновления
- uint32_t sample_time_ms; // Интервал между шагами (например, 200 мс)
-
- uint16_t start_delay_us;
+ uint32_t delay_us; // Текущая задержка (в микросекундах)
+ uint16_t start_delay_tick;
}TiristorAngleControl_t;
typedef struct TiristorControl_t TiristorControl_t;
@@ -48,6 +52,7 @@ void tiristor_control(TiristorControl_t *ctrl);
void tiristor_angle_update(TiristorAngleControl_t *angle);
void tiristor_angle_control(TiristorControl_t *ctrl);
void tiristor_start_angle_delay(TiristorControl_t* ctrl);
+void tiristor_angle_reset(TiristorControl_t *ctrl);
void tiristor_enable(TiristorControl_t *ctrl);
void tiristor_disable(TiristorControl_t *ctrl);
void tiristor_init(TiristorControl_t *ctrl, GPIO_TypeDef *gpiox, uint32_t gpio_pin);
diff --git a/mcu_project/upp/Core/upp/upp.c b/mcu_project/upp/Core/upp/upp.c
index 39cf054..9bcc6a8 100644
--- a/mcu_project/upp/Core/upp/upp.c
+++ b/mcu_project/upp/Core/upp/upp.c
@@ -3,20 +3,184 @@
Phase_t phase_A;
Phase_t phase_B;
Phase_t phase_C;
+UPP_Control_t Upp;
// главная функция
void upp_main(void)
-{
- upp_phase_routine(&phase_A);
- upp_phase_routine(&phase_B);
- upp_phase_routine(&phase_C);
+{
+ if(GetAngleInit(&Upp.angleInit))
+ {
+ tiristor_angle_reset(&phase_A.ctrl);
+ tiristor_angle_reset(&phase_B.ctrl);
+ tiristor_angle_reset(&phase_C.ctrl);
+ }
- upp_phase_control(&phase_A);
- upp_phase_control(&phase_B);
- upp_phase_control(&phase_C);
+ // безопасный запуск
+ upp_safe_go();
+
+ // останавливаем УПП (убираем питание с выхода упп) если выставлен флаг
+ if(Upp.ForceStop)
+ {
+ Upp.Go = 0;
+ connect_upp();
+ return;
+ }
+
+ // отключаем упп если выставлен флаг
+ if(Upp.GoDisconnect)
+ {
+ disconnect_upp();
+ }
+ // останавливаем упп если выставлен флаг
+ if(Upp.GoStop)
+ {
+ Upp.Go = 0;
+ connect_upp();
+ }
+
+ if(Upp.Prepare)
+ {
+ if(Upp.Disconnected)
+ {
+ connect_upp();
+ }
+ upp_phase_routine(&phase_A);
+ upp_phase_routine(&phase_B);
+ upp_phase_routine(&phase_C);
+ }
+ if(Upp.Go)
+ {
+ if(Upp.Prepare)
+ {
+ if(phase_A.ctrl.f.TiristorReady && phase_B.ctrl.f.TiristorReady && phase_C.ctrl.f.TiristorReady)
+ {
+ Upp.Prepare = 0;
+ }
+ else
+ {
+ return;
+ }
+ }
+ if(Upp.Disconnected)
+ {
+ Upp.ForceStop = 1;
+ return;
+ }
+
+ // если все фазы дошли до минимума в режиме разгона, то выставляем флаг на отключение упп (прямая подача питания на двигатель)
+ if( (phase_A.ctrl.angle.delay_us == phase_A.ctrl.angle.Init->delay_min_us) &&
+ (phase_B.ctrl.angle.delay_us == phase_B.ctrl.angle.Init->delay_min_us) &&
+ (phase_C.ctrl.angle.delay_us == phase_C.ctrl.angle.Init->delay_min_us) && (Upp.angleInit.direction == 0))
+ {
+ Upp.GoDisconnect = 1;
+ }
+ else
+ {
+ Upp.GoDisconnect = 0;
+ }
+
+ // если все фазы дошли до максимума в режиме торможения, то выставляем флаг на остановку упп (выключения питания на двигателе)
+ if( (phase_A.ctrl.angle.delay_us == phase_A.ctrl.angle.Init->delay_max_us) &&
+ (phase_B.ctrl.angle.delay_us == phase_B.ctrl.angle.Init->delay_max_us) &&
+ (phase_C.ctrl.angle.delay_us == phase_C.ctrl.angle.Init->delay_max_us) && (Upp.angleInit.direction == 1))
+ {
+ Upp.GoStop = 1;
+ }
+ else
+ {
+ Upp.GoStop = 0;
+ }
+
+ upp_phase_routine(&phase_A);
+ upp_phase_routine(&phase_B);
+ upp_phase_routine(&phase_C);
+
+ upp_phase_control(&phase_A);
+ upp_phase_control(&phase_B);
+ upp_phase_control(&phase_C);
+ }
+ else
+ {
+ tiristor_angle_reset(&phase_A.ctrl);
+ tiristor_angle_reset(&phase_B.ctrl);
+ tiristor_angle_reset(&phase_C.ctrl);
+ }
+}
+
+void upp_safe_go(void)
+{
+ static int prev_gosafe;
+
+
+ if(Upp.GoSafe > prev_gosafe)
+ {
+ Upp.angleInit.direction = 0;
+ Upp.ForceStop = 0;
+ Upp.Prepare = 1;
+ Upp.Go = 1;
+ tiristor_angle_reset(&phase_A.ctrl);
+ tiristor_angle_reset(&phase_B.ctrl);
+ tiristor_angle_reset(&phase_C.ctrl);
+ }
+ else if (Upp.GoSafe < prev_gosafe)
+ {
+ Upp.angleInit.direction = 1;
+ Upp.Prepare = 1;
+ Upp.Go = 1;
+ tiristor_angle_reset(&phase_A.ctrl);
+ tiristor_angle_reset(&phase_B.ctrl);
+ tiristor_angle_reset(&phase_C.ctrl);
+ }
+
+ prev_gosafe = Upp.GoSafe;
+}
+
+void disconnect_upp(void)
+{
+ if(phase_A.ctrl.f.TiristorReady)
+ {
+ disconnect_phase(&phase_A);
+ }
+
+ if(phase_B.ctrl.f.TiristorReady)
+ {
+ disconnect_phase(&phase_B);
+ }
+
+ if(phase_C.ctrl.f.TiristorReady)
+ {
+ disconnect_phase(&phase_C);
+ }
+
+ if(phase_A.disconnect.Disconnected && phase_B.disconnect.Disconnected && phase_C.disconnect.Disconnected)
+ {
+ Upp.Disconnected = 1;
+ Upp.GoDisconnect = 0;
+ Upp.Go = 0;
+ }
+}
+
+void connect_upp(void)
+{
+ tiristor_disable(&phase_A.ctrl);
+ tiristor_disable(&phase_B.ctrl);
+ tiristor_disable(&phase_C.ctrl);
+
+ connect_phase(&phase_A);
+ connect_phase(&phase_B);
+ connect_phase(&phase_C);
+
+ Upp.Disconnected = 0;
}
void upp_phase_control(Phase_t *phase)
{
+ tiristor_angle_control(&phase->ctrl);
+ tiristor_control(&phase->ctrl);
+}
+
+void upp_phase_routine(Phase_t *phase)
+{
+ zero_cross_update(&phase->zc_detector);
if(is_zero_cross(&phase->zc_detector))
{
tiristor_start_angle_delay(&phase->ctrl);
@@ -26,19 +190,109 @@ void upp_phase_control(Phase_t *phase)
}
}
-void upp_phase_routine(Phase_t *phase)
+
+int GetAngleInit(AngleInit_t *angle)
{
- tiristor_angle_control(&phase->ctrl);
- tiristor_control(&phase->ctrl);
- zero_cross_update(&phase->zc_detector);
+ static float sine_freq_old = 0;
+ static float Duration_old = 0;
+ static float max_duty_old = 0, min_duty_old = 0; // Задаются в процентах
+ int update = 0;
+
+
+ if( (Upp.sine_freq != sine_freq_old) &&
+ (Upp.max_duty != max_duty_old) &&
+ (Upp.min_duty != min_duty_old) )
+ {
+ update = 1;
+ min_duty_old = Upp.min_duty;
+ max_duty_old = Upp.max_duty;
+ sine_freq_old = Upp.sine_freq;
+
+ }
+
+ if(Upp.Duration != Duration_old)
+ {
+ update = 1;
+ Duration_old = Upp.Duration;
+ }
+
+ if(update)
+ {
+ // max/min duty
+ uint32_t half_period_us = (500000.0f / Upp.sine_freq) - 1000; // полупериод в мкс - время открытия тиристоры
+
+ angle->delay_max_us = (uint32_t)(Upp.max_duty * half_period_us);
+ angle->delay_min_us = (uint32_t)(Upp.min_duty * half_period_us);
+
+ if((angle->delay_max_us > 0xFFFF) || (angle->delay_min_us > 0xFFFF))
+ {
+ // увеличение прескалера в 10 раз (с 1мкс до 10мкс, с 7Гц до 0.7Гц)
+ angle->delay_max_us /= 10;
+ angle->delay_min_us /= 10;
+ TIMER->PSC = 719;
+
+ if((angle->delay_max_us > 0xFFFF) || (angle->delay_min_us > 0xFFFF))
+ {
+ // увеличение прескалера в 10 раз (с 10мкс до 0,1мс, с 0.7Гц до 0.07 Гц)
+ angle->delay_max_us /= 10;
+ angle->delay_min_us /= 10;
+ TIMER->PSC = 7299;
+
+ if ((angle->delay_max_us > 0xFFFF) || (angle->delay_min_us > 0xFFFF))
+ {
+ // если все еще переполнение то выключаем всё
+ Upp.ForceStop = 1;
+ }
+ }
+ }
+ else
+ {
+ TIMER->PSC = 71;
+ }
+
+ // duration
+ float duration_ms = Duration_old * 1000.0f;
+ uint32_t steps = duration_ms / angle->sample_time_ms;
+ if (steps == 0) steps = 1;
+
+ if (angle->delay_max_us > angle->delay_min_us)
+ angle->delay_step_us = (angle->delay_max_us - angle->delay_min_us) / steps;
+ else
+ angle->delay_step_us = 0;
+
+ }
+
+ return update;
}
void upp_init(void)
{
+ Upp.max_duty = 0.8;
+ Upp.min_duty = 0.1;
+ Upp.angleInit.sample_time_ms = 100;
+
+ phase_A.disconnect.gpiox = GPIOA;
+ phase_A.disconnect.gpio_pin = GPIO_PIN_5;
+
+ phase_B.disconnect.gpiox = GPIOA;
+ phase_B.disconnect.gpio_pin = GPIO_PIN_6;
+
+ phase_C.disconnect.gpiox = GPIOA;
+ phase_C.disconnect.gpio_pin = GPIO_PIN_7;
+
+ phase_A.ctrl.angle.Init = &Upp.angleInit;
+ phase_B.ctrl.angle.Init = &Upp.angleInit;
+ phase_C.ctrl.angle.Init = &Upp.angleInit;
+
tiristor_init(&phase_A.ctrl, GPIOB, GPIO_PIN_12);
tiristor_init(&phase_B.ctrl, GPIOB, GPIO_PIN_13);
tiristor_init(&phase_C.ctrl, GPIOB, GPIO_PIN_14);
+ TIMER->CR1 |= TIM_CR1_CEN;
+
+ tiristor_angle_reset(&phase_A.ctrl);
+ tiristor_angle_reset(&phase_B.ctrl);
+ tiristor_angle_reset(&phase_C.ctrl);
#ifndef HARDWARE_ZERO_CROSS_DETECT
adc_Attach(&phase_A.zc_detector.AdcFilter, &hadc);
zero_cross_Init(&phase_A.zc_detector, ADC_INITIAL_ZERO_LEVEL);
@@ -46,5 +300,6 @@ void upp_init(void)
adc_Attach(&phase_A.zc_detector.AdcFilter, &hadc);
zero_cross_Init(&phase_A.zc_detector, ADC_INITIAL_ZERO_LEVEL);
#endif
+ //Upp.GoSafe = 1;
}
diff --git a/mcu_project/upp/Core/upp/upp.h b/mcu_project/upp/Core/upp/upp.h
index 2351f8b..cafce11 100644
--- a/mcu_project/upp/Core/upp/upp.h
+++ b/mcu_project/upp/Core/upp/upp.h
@@ -11,20 +11,57 @@
#define hadc hadc1
#define ADC_INITIAL_ZERO_LEVEL 2048
-
+
+#define disconnect_phase(_ph_) { (_ph_)->disconnect.gpiox->ODR |= (_ph_)->disconnect.gpio_pin; (_ph_)->disconnect.Disconnected = 1;}
+#define connect_phase(_ph_) { (_ph_)->disconnect.gpiox->ODR &= ~(_ph_)->disconnect.gpio_pin; (_ph_)->disconnect.Disconnected = 0;}
+
typedef struct
{
+ struct
+ {
+ unsigned Disconnected:1;
+ GPIO_TypeDef *gpiox;
+ uint32_t gpio_pin;
+ }disconnect;
+
ZeroCrossDetector_t zc_detector;
TiristorControl_t ctrl;
} Phase_t; // структура для фазы
+
+typedef struct
+{
+ unsigned GoSafe:1;
+ unsigned Go:1;
+ unsigned GoStop:1;
+ unsigned Prepare:1;
+ unsigned Disconnected:1;
+ unsigned GoDisconnect:1;
+ unsigned ForceStop:1;
+ unsigned PreGoDone:1;
+
+
+ float Duration;
+ float sine_freq;
+ float max_duty;
+ float min_duty;
+
+ AngleInit_t angleInit;
+}UPP_Control_t;
+
+
extern Phase_t phase_A;
extern Phase_t phase_B;
extern Phase_t phase_C;
+extern UPP_Control_t Upp;
void upp_main(void);
+void upp_safe_go(void);
+void disconnect_upp(void);
+void connect_upp(void);
void upp_phase_routine(Phase_t *phase);
void upp_phase_control(Phase_t *phase);
+int GetAngleInit(AngleInit_t *angle);
void upp_init(void);
diff --git a/mcu_project/upp/MDK-ARM/upp.uvguix.wot89 b/mcu_project/upp/MDK-ARM/upp.uvguix.wot89
index 52ccc17..2ce7c3b 100644
--- a/mcu_project/upp/MDK-ARM/upp.uvguix.wot89
+++ b/mcu_project/upp/MDK-ARM/upp.uvguix.wot89
@@ -101,17 +101,17 @@
-1
- 430
- 1740
- 2550
- 1219
+ 431
+ 1912
+ 2722
+ 1220
0
1414
- 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000010000000070000000100000029453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C7570702E6300000000057570702E6300000000C5D4F200FFFFFFFF29453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C7570702E6800000000057570702E6800000000FFDC7800FFFFFFFF2A453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C496E635C6D61696E2E6800000000066D61696E2E6800000000BECEA100FFFFFFFF2A453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000F0A0A100FFFFFFFF29453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C496E635C6164632E6800000000056164632E6800000000BCA8E100FFFFFFFF30453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C6164635F66696C7465722E63000000000C6164635F66696C7465722E63000000009CC1B600FFFFFFFF30453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C6164635F66696C7465722E68000000000C6164635F66696C7465722E6800000000F7B88600FFFFFFFF30453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C7A65726F5F63726F73732E63000000000C7A65726F5F63726F73732E6300000000D9ADC200FFFFFFFF30453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C7A65726F5F63726F73732E68000000000C7A65726F5F63726F73732E6800000000A5C2D700FFFFFFFF29453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C5372635C74696D2E63000000000574696D2E6300000000B3A6BE00FFFFFFFF2E453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C7469726973746F722E68000000000A7469726973746F722E6800000000EAD6A300FFFFFFFF2E453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C7469726973746F722E63000000000A7469726973746F722E6300000000F6FA7D00FFFFFFFF37453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C5372635C73746D3332663178785F68616C5F6D73702E63000000001373746D3332663178785F68616C5F6D73702E6300000000B5E99D00FFFFFFFF29453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C5372635C6164632E6300000000056164632E63000000005FC3CF00FFFFFFFF4F453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F6164632E63000000001373746D3332663178785F68616C5F6164632E6300000000C1838300FFFFFFFF52453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F7263635F65782E63000000001673746D3332663178785F68616C5F7263635F65782E6300000000CACAD500FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000007408000066000000B80B0000FC050000
+ 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000010000000000000000100000029453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C7570702E6300000000057570702E6300000000C5D4F200FFFFFFFF29453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C7570702E6800000000057570702E6800000000FFDC7800FFFFFFFF2A453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C496E635C6D61696E2E6800000000066D61696E2E6800000000BECEA100FFFFFFFF2A453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000F0A0A100FFFFFFFF29453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C496E635C6164632E6800000000056164632E6800000000BCA8E100FFFFFFFF30453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C6164635F66696C7465722E63000000000C6164635F66696C7465722E63000000009CC1B600FFFFFFFF30453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C6164635F66696C7465722E68000000000C6164635F66696C7465722E6800000000F7B88600FFFFFFFF30453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C7A65726F5F63726F73732E63000000000C7A65726F5F63726F73732E6300000000D9ADC200FFFFFFFF30453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C7A65726F5F63726F73732E68000000000C7A65726F5F63726F73732E6800000000A5C2D700FFFFFFFF29453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C5372635C74696D2E63000000000574696D2E6300000000B3A6BE00FFFFFFFF2E453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C7469726973746F722E68000000000A7469726973746F722E6800000000EAD6A300FFFFFFFF2E453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C7570705C7469726973746F722E63000000000A7469726973746F722E6300000000F6FA7D00FFFFFFFF37453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C5372635C73746D3332663178785F68616C5F6D73702E63000000001373746D3332663178785F68616C5F6D73702E6300000000B5E99D00FFFFFFFF29453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C436F72655C5372635C6164632E6300000000056164632E63000000005FC3CF00FFFFFFFF4F453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F6164632E63000000001373746D3332663178785F68616C5F6164632E6300000000C1838300FFFFFFFF52453A5C2E4449504C4F4D5C6D63755F70726F6A6563745C7570705C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F7263635F65782E63000000001673746D3332663178785F68616C5F7263635F65782E6300000000CACAD500FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000007408000066000000B80B0000FC050000
@@ -1805,8 +1805,8 @@
59392
File
- 2620
- 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001A48414C5F52434345785F476574506572697068434C4B46726571960000000000000002001548415244574152455F43524F53535F4445544543541A48414C5F52434345785F476574506572697068434C4B467265710000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
+ 2918
+ 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001A48414C5F52434345785F476574506572697068434C4B4672657196000000000000001400095570702E616E676C650A416E676C65496E69742E0D5570702E466F72636553746F700B636F6E6E6563745F7570700D5469726973746F7252656164790C5469726973746F72446F6E650E6C6173745F7570646174655F6D73147469726973746F725F616E676C655F72657365740E73616D706C655F74696D655F6D730D64656C61795F737465705F75730C64656C61795F6D696E5F75730C64656C61795F6D61785F75730E73746172745F64656C61795F7573084475726174696F6E086475726174696F6E185469726973746F724857416E676C65436F6E74726F6C5F74165469726973746F72416E676C65436F6E74726F6C5F74057570702E680A656E61626C655F7570700B5570702E44697361626C650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
1423
@@ -1862,21 +1862,21 @@
0
100
- 7
+ 0
..\Core\upp\upp.c
- 20
- 1
- 18
+ 18
+ 19
+ 44
1
0
..\Core\upp\upp.h
- 16
+ 26
1
- 31
+ 39
1
0
@@ -1892,9 +1892,9 @@
../Core/Src/main.c
- 24
- 40
- 81
+ 5
+ 82
+ 96
1
0
@@ -1928,9 +1928,9 @@
..\Core\upp\zero_cross.c
- 33
+ 22
1
- 51
+ 43
1
0
@@ -1955,18 +1955,18 @@
..\Core\upp\tiristor.h
- 23
+ 8
1
- 18
+ 26
1
0
..\Core\upp\tiristor.c
- 0
- 1
- 39
+ 2
+ 19
+ 95
1
0
diff --git a/mcu_project/upp/MDK-ARM/upp/tiristor.d b/mcu_project/upp/MDK-ARM/upp/tiristor.d
index 9b23175..843298a 100644
--- a/mcu_project/upp/MDK-ARM/upp/tiristor.d
+++ b/mcu_project/upp/MDK-ARM/upp/tiristor.d
@@ -1,4 +1,4 @@
-upp/tiristor.o: ..\Core\upp\tiristor.c ..\Core\upp\upp.h \
+upp/tiristor.o: ..\Core\upp\tiristor.c ..\Core\upp\tiristor.h \
..\Core\Inc\main.h ..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h \
..\Core\Inc\stm32f1xx_hal_conf.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h \
@@ -30,6 +30,4 @@ upp/tiristor.o: ..\Core\upp\tiristor.c ..\Core\upp\upp.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h \
..\Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h \
- ..\Core\Inc\adc.h ..\Core\Inc\tim.h ..\Core\Inc\usart.h \
- ..\Core\Inc\gpio.h ..\Core\upp\zero_cross.h ..\Core\upp\adc_filter.h \
- ..\Core\upp\tiristor.h
+ ..\Core\Inc\tim.h