Тесты в матлабе

А также:
- Коррекция фазового сдвига фильтра
- Определение порядка фаз
This commit is contained in:
2026-01-30 15:56:09 +03:00
parent bd64d747b3
commit deac6d5b06
21 changed files with 363 additions and 141 deletions

View File

@@ -10,24 +10,14 @@ float dbg_err_limit = 0;
float dbg[16];
#define PIN_READ(_verbname_) (_verbname_##_GPIO_Port->ODR & (_verbname_##_Pin)) ? 1 : 0
void pwm_wtf(PWM_State_t state1, PWM_State_t state2, int* pwm_pin)
{
if ((*pwm_pin == 0) && (state1 == PWM_THYR_TIM_ACTIVE))
{
*pwm_pin = 1;
}
else if ((*pwm_pin == 1) && (state2 == PWM_THYR_TIM_ACTIVE))
{
*pwm_pin = 0;
}
}
int pwm1_pin = 0;
int pwm2_pin = 0;
int pwm3_pin = 0;
int pwm4_pin = 0;
int pwm5_pin = 0;
int pwm6_pin = 0;
void Write_UPP_Outputs(real_T* Buffer, int ind_port)
{
//int pwm1_pin = PIN_READ(PWM1);
@@ -43,15 +33,6 @@ void Write_UPP_Outputs(real_T* Buffer, int ind_port)
int pwm5_pin = (upp.hpwm.AllPhases[PHASE_C_POS].State == PWM_THYR_TIM_ACTIVE);
int pwm6_pin = (upp.hpwm.AllPhases[PHASE_C_NEG].State == PWM_THYR_TIM_ACTIVE);
//pwm_wtf(upp.hpwm.AllPhases[PHASE_A_POS].State, upp.hpwm.AllPhases[PHASE_A_NEG].State, &pwm1_pin);
//pwm_wtf(upp.hpwm.AllPhases[PHASE_A_NEG].State, upp.hpwm.AllPhases[PHASE_A_POS].State, &pwm2_pin);
//pwm_wtf(upp.hpwm.AllPhases[PHASE_B_POS].State, upp.hpwm.AllPhases[PHASE_B_NEG].State, &pwm3_pin);
//pwm_wtf(upp.hpwm.AllPhases[PHASE_B_NEG].State, upp.hpwm.AllPhases[PHASE_B_POS].State, &pwm4_pin);
//pwm_wtf(upp.hpwm.AllPhases[PHASE_C_POS].State, upp.hpwm.AllPhases[PHASE_C_NEG].State, &pwm5_pin);
//pwm_wtf(upp.hpwm.AllPhases[PHASE_C_NEG].State, upp.hpwm.AllPhases[PHASE_C_POS].State, &pwm6_pin);
int err = PIN_READ(RDO1);
int work = PIN_READ(RDO2);
int ready = upp.errors->common;
if (CEN_GPIO_Port->ODR & CEN_Pin)
{
@@ -62,10 +43,6 @@ void Write_UPP_Outputs(real_T* Buffer, int ind_port)
WriteOutputArray(0, ind_port, 4);
WriteOutputArray(0, ind_port, 5);
WriteOutputArray(0, ind_port+1, 0);
WriteOutputArray(0, ind_port+1, 1);
WriteOutputArray(0, ind_port+1, 2);
}
else
{
@@ -76,14 +53,32 @@ void Write_UPP_Outputs(real_T* Buffer, int ind_port)
WriteOutputArray(pwm5_pin, ind_port, 4);
WriteOutputArray(pwm6_pin, ind_port, 5);
WriteOutputArray(ready, ind_port+1, 0);
WriteOutputArray(work, ind_port+1, 1);
WriteOutputArray(err, ind_port+1, 2);
}
}
void Write_UPP_WorkInfo(real_T* Buffer, int ind_port)
{
int nn = 0;
int err = PIN_READ(RDO3);
int work = PIN_READ(RDO2);
int ready = PIN_READ(RDO1);
int err_num = upp.errors->common;
WriteOutputArray(ready, ind_port, nn++);
WriteOutputArray(work, ind_port, nn++);
WriteOutputArray(err, ind_port, nn++);
WriteOutputArray(err_num, ind_port, nn++);
int prv_err = 0;
for (int i = 0; i < 32; i++)
{
prv_err = (errors.prvt.f.all & (1 << i)) ? 1 : 0;
WriteOutputArray(prv_err, ind_port, nn++);
}
}
void Write_PowerMonitor(real_T* Buffer, int ind_port)
{
int nn = 0;
@@ -123,7 +118,6 @@ void Write_PowerMonitor(real_T* Buffer, int ind_port)
}
void Write_AngleControl(real_T* Buffer, int ind_port)
{
int nn = 0;
@@ -133,10 +127,19 @@ void Write_AngleControl(real_T* Buffer, int ind_port)
WriteOutputArray(upp.hangle.alpha, ind_port, nn++);
WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR1) - upp.hangle.htim->Instance->CNT, ind_port, nn++);
WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR2) - upp.hangle.htim->Instance->CNT, ind_port, nn++);
WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR3) - upp.hangle.htim->Instance->CNT, ind_port, nn++);
#define get_diff(ccrx) ((long long)(upp.hangle.htim->Instance->ccrx) - upp.hangle.htim->Instance->CNT)
#define diff_cnt(ccrx) \
((upp.workmode == UPP_Work) ? \
((abs(get_diff(ccrx)) > upp.hangle.alpha_tick/upp.hangle.alpha_real) ? 0 : get_diff(ccrx)) : \
0)
WriteOutputArray(diff_cnt(CCR1), ind_port, nn++);
WriteOutputArray(diff_cnt(CCR2), ind_port, nn++);
WriteOutputArray(diff_cnt(CCR3), ind_port, nn++);
WriteOutputArray(upp.hangle.alpha_real, ind_port, nn++);
WriteOutputArray(upp.hangle.alpha, ind_port, nn++);
WriteOutputArray(ADC_GetPhaseCorrection(upp.pm.measured.final.Fmean)/180, ind_port, nn++);
}
/**
@@ -196,6 +199,8 @@ void app_writeOutputBuffer(real_T* Buffer) {
// USER APP OUTPUT START
Write_UPP_Outputs(Buffer, 0);
Write_UPP_WorkInfo(Buffer, 1);
Write_PowerMonitor(Buffer, 2);
Write_AngleControl(Buffer, 3);