Тесты в матлабе
А также: - Коррекция фазового сдвига фильтра - Определение порядка фаз
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user