добавлены параметры упп в модель симулинк

This commit is contained in:
2025-05-10 22:08:06 +03:00
parent 97368919cb
commit c3d30fa6f1
7 changed files with 57 additions and 39 deletions

View File

@@ -2,6 +2,20 @@
#include "upp.h"
#define detect_front(_in_numb_, _var_, _val_) { \
if ((in[_in_numb_] > 0.5) && (prev_in[_in_numb_] <= 0.5)) \
{ \
_var_ = _val_; \
} }
#define detect_rise(_in_numb_, _var_, _val_) { \
if ((in[_in_numb_] < 0.5) && (prev_in[_in_numb_] >= 0.5)) \
{ \
_var_ = _val_; \
} }
void WriteFromSFunc(real_T* disc)
{
@@ -17,49 +31,43 @@ void WriteFromSFunc(real_T* disc)
disc[PORT_WIDTH + i] = 1;
}
}
disc[2 * PORT_WIDTH + 0] = phase_A.ctrl.f.EnableTiristor;
disc[2 * PORT_WIDTH + 1] = phase_A.ctrl.f.TiristorIsEnable;
disc[2 * PORT_WIDTH + 2] = uwTick - phase_A.ctrl.enable_start_tick;
disc[2 * PORT_WIDTH + 3] = phase_A.ctrl.angle.start_delay_us;
disc[2 * PORT_WIDTH + 4] = (uint16_t)((uint16_t)TIMER->CNT - phase_A.ctrl.angle.start_delay_us);
disc[2 * PORT_WIDTH + 0] = phase_A.ctrl.angle.delay_us;
disc[2 * PORT_WIDTH + 1] = (uint16_t)((uint16_t)TIMER->CNT - phase_A.ctrl.angle.start_delay_tick);
disc[2 * PORT_WIDTH + 2] = phase_A.ctrl.angle.start_delay_tick;
disc[2 * PORT_WIDTH + 3] = TIMER->CNT;
}
void ReadToSFunc(real_T* in)
{
static real_T in_prev[3];
static real_T prev_in[IN_PORT_WIDTH];
if ((in[0] > 0.5) && (in_prev[0] <= 0.5))
detect_front(0, phase_A.zc_detector.f.EXTIZeroCrossDetected, 1);
detect_rise(0, phase_A.zc_detector.f.EXTIZeroCrossDetected, 1);
detect_front(1, phase_B.zc_detector.f.EXTIZeroCrossDetected, 1);
detect_rise(1, phase_B.zc_detector.f.EXTIZeroCrossDetected, 1);
detect_front(2, phase_C.zc_detector.f.EXTIZeroCrossDetected, 1);
detect_rise(2, phase_C.zc_detector.f.EXTIZeroCrossDetected, 1);
detect_front(3, Upp.GoSafe, 1);
detect_rise(3, Upp.GoSafe, 0);
detect_front(4, Upp.Prepare, 1);
detect_rise(4, Upp.Prepare, 0);
detect_front(5, Upp.ForceStop, 1);
detect_rise(5, Upp.ForceStop, 0);
Upp.sine_freq = in[6];
Upp.Duration = in[7];
for (int i = 0; i < IN_PORT_WIDTH; i++)
{
phase_A.zc_detector.f.EXTIZeroCrossDetected = 1;
prev_in[i] = in[i];
}
else if ((in[0] < 0.5) && (in_prev[0] >= 0.5))
{
phase_A.zc_detector.f.EXTIZeroCrossDetected = 1;
}
if ((in[1] > 0.5) && (in_prev[1] <= 0.5))
{
phase_B.zc_detector.f.EXTIZeroCrossDetected = 1;
}
else if ((in[1] < 0.5) && (in_prev[1] >= 0.5))
{
phase_B.zc_detector.f.EXTIZeroCrossDetected = 1;
}
if ((in[2] > 0.5) && (in_prev[2] <= 0.5))
{
phase_C.zc_detector.f.EXTIZeroCrossDetected = 1;
}
else if ((in[2] < 0.5) && (in_prev[2] >= 0.5))
{
phase_C.zc_detector.f.EXTIZeroCrossDetected = 1;
}
in_prev[0] = in[0];
in_prev[1] = in[1];
in_prev[2] = in[2];
}