лимит угла теперь не сатурирует, а начинается отсчет от него
плюс всякое по матлаб
This commit is contained in:
parent
eb6979aa27
commit
3750d579fa
@ -9,6 +9,24 @@
|
|||||||
float dbg[16];
|
float dbg[16];
|
||||||
#define PIN_READ(_verbname_) (_verbname_##_GPIO_Port->ODR & (_verbname_##_Pin)) ? 1 : 0
|
#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)
|
void Write_UPP_Outputs(real_T* Buffer, int ind_port)
|
||||||
{
|
{
|
||||||
//int pwm1_pin = PIN_READ(PWM1);
|
//int pwm1_pin = PIN_READ(PWM1);
|
||||||
@ -23,6 +41,13 @@ void Write_UPP_Outputs(real_T* Buffer, int ind_port)
|
|||||||
int pwm4_pin = (upp.hpwm.AllPhases[PHASE_B_NEG].State == PWM_THYR_TIM_ACTIVE);
|
int pwm4_pin = (upp.hpwm.AllPhases[PHASE_B_NEG].State == PWM_THYR_TIM_ACTIVE);
|
||||||
int pwm5_pin = (upp.hpwm.AllPhases[PHASE_C_POS].State == PWM_THYR_TIM_ACTIVE);
|
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);
|
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 err = PIN_READ(RDO1);
|
||||||
int work = PIN_READ(RDO2);
|
int work = PIN_READ(RDO2);
|
||||||
int ready = PIN_READ(RDO3);
|
int ready = PIN_READ(RDO3);
|
||||||
@ -140,14 +165,19 @@ void app_readInputs(const real_T* Buffer) {
|
|||||||
MB_DATA.HoldRegs.pui_params.Tdelay = ReadInputArray(1, 8);
|
MB_DATA.HoldRegs.pui_params.Tdelay = ReadInputArray(1, 8);
|
||||||
MB_DATA.HoldRegs.pui_params.Interlace = ReadInputArray(1, 9);
|
MB_DATA.HoldRegs.pui_params.Interlace = ReadInputArray(1, 9);
|
||||||
|
|
||||||
MB_INTERNAL.param.angle.Angle_Max = ReadInputArray(2, 0) * 65535;
|
MB_INTERNAL.param.adc.ADC_Max[ADC_CHANNEL_UAC] = ReadInputArray(2, 0) * 10;
|
||||||
MB_INTERNAL.param.angle.Angle_Min = ReadInputArray(2, 1) * 65535;
|
MB_INTERNAL.param.adc.ADC_Max[ADC_CHANNEL_UBA] = ReadInputArray(2, 0) * 10;
|
||||||
MB_INTERNAL.param.angle.PID_Kp = ReadInputArray(2, 2) * 10000;
|
MB_INTERNAL.param.adc.ADC_Max[ADC_CHANNEL_IA] = ReadInputArray(2, 1) * 10;
|
||||||
MB_INTERNAL.param.angle.PID_Ki = ReadInputArray(2, 3) * 10000;
|
MB_INTERNAL.param.adc.ADC_Max[ADC_CHANNEL_IC] = ReadInputArray(2, 1) * 10;
|
||||||
MB_INTERNAL.param.angle.PID_Kd = ReadInputArray(2, 4) * 10000;
|
|
||||||
|
MB_INTERNAL.param.nominal.U = ReadInputArray(2, 2) * 10;
|
||||||
|
MB_INTERNAL.param.nominal.I = ReadInputArray(2, 3) * 10;
|
||||||
|
|
||||||
|
MB_INTERNAL.param.angle.PID_Kp = ReadInputArray(2, 4) * 10000;
|
||||||
|
MB_INTERNAL.param.angle.PID_Ki = ReadInputArray(2, 5) * 10000;
|
||||||
|
MB_INTERNAL.param.angle.PID_Kd = ReadInputArray(2, 6) * 10000;
|
||||||
|
MB_INTERNAL.param.angle.PulseLengthReserve = ReadInputArray(2, 7);
|
||||||
|
|
||||||
MB_INTERNAL.param.nominal.U = ReadInputArray(2, 5) * 10;
|
|
||||||
MB_INTERNAL.param.nominal.I = ReadInputArray(2, 6) * 10;
|
|
||||||
}
|
}
|
||||||
// USER APP INPUT END
|
// USER APP INPUT END
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,8 @@
|
|||||||
clear all
|
clear all
|
||||||
|
|
||||||
|
IadcMax = 50;
|
||||||
|
VadcMax = 1216;
|
||||||
|
|
||||||
Ts = 5e-6;
|
Ts = 5e-6;
|
||||||
Vnom = 400;
|
Vnom = 400;
|
||||||
Inom = 30;
|
Inom = 30;
|
||||||
|
|||||||
Binary file not shown.
@ -79,7 +79,7 @@
|
|||||||
|
|
||||||
/* Параметры регулятора угла */
|
/* Параметры регулятора угла */
|
||||||
#define ANGLE_PULSE_LENGTH_RESERVE_PERCENT_DEFAULT 1.0
|
#define ANGLE_PULSE_LENGTH_RESERVE_PERCENT_DEFAULT 1.0
|
||||||
#define ANGLE_MAX_PERCENT_DEFAULT 0.8
|
#define ANGLE_MAX_PERCENT_DEFAULT 1
|
||||||
#define ANGLE_MIN_PERCENT_DEFAULT 0.1
|
#define ANGLE_MIN_PERCENT_DEFAULT 0.1
|
||||||
#define ANGLE_PID_KP_COEF_DEFAULT 0.0001
|
#define ANGLE_PID_KP_COEF_DEFAULT 0.0001
|
||||||
#define ANGLE_PID_KI_COEF_DEFAULT 0.0001
|
#define ANGLE_PID_KI_COEF_DEFAULT 0.0001
|
||||||
|
|||||||
@ -142,7 +142,7 @@ HAL_StatusTypeDef Angle_SetAngle(Angle_Handle_t *hangle, float OpenLevel)
|
|||||||
float OpenLevelForCos = (OpenLevel*2)-1;
|
float OpenLevelForCos = (OpenLevel*2)-1;
|
||||||
|
|
||||||
float alpha_rad = acosf(OpenLevelForCos); // угол в радианах
|
float alpha_rad = acosf(OpenLevelForCos); // угол в радианах
|
||||||
float alpha = alpha_rad/PI; // время открытие в процентах от периода - когда открыть
|
float alpha = alpha_rad/PI* hangle->Config.PeriodLimit; // время открытие в процентах от периода - когда открыть
|
||||||
|
|
||||||
if(alpha > hangle->Config.AngleMax)
|
if(alpha > hangle->Config.AngleMax)
|
||||||
alpha = hangle->Config.AngleMax;
|
alpha = hangle->Config.AngleMax;
|
||||||
|
|||||||
@ -290,10 +290,10 @@ void UPP_Params_Saturate(void)
|
|||||||
SATURATE_U16(PARAM_INTERNAL.nominal.F_deviation_minus, 0, 100*100);
|
SATURATE_U16(PARAM_INTERNAL.nominal.F_deviation_minus, 0, 100*100);
|
||||||
SATURATE_U16(PARAM_INTERNAL.nominal.I, 0, ADC_I_MAX_A_DEFAULT*10);
|
SATURATE_U16(PARAM_INTERNAL.nominal.I, 0, ADC_I_MAX_A_DEFAULT*10);
|
||||||
|
|
||||||
SATURATE_U16(PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_UBA], 0, ADC_U_MAX_V_DEFAULT*10);
|
SATURATE_U16(PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_UBA], 0, 5000*10);
|
||||||
SATURATE_U16(PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_UAC], 0, ADC_U_MAX_V_DEFAULT*10);
|
SATURATE_U16(PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_UAC], 0, 5000*10);
|
||||||
SATURATE_U16(PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_IC], 0, ADC_I_MAX_A_DEFAULT*10);
|
SATURATE_U16(PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_IC], 0, 1000*10);
|
||||||
SATURATE_U16(PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_IA], 0, ADC_I_MAX_A_DEFAULT*10);
|
SATURATE_U16(PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_IA], 0, 1000*10);
|
||||||
SATURATE_U16(PARAM_INTERNAL.adc.ADC_Zero[ADC_CHANNEL_UBA], 1848, 2248);
|
SATURATE_U16(PARAM_INTERNAL.adc.ADC_Zero[ADC_CHANNEL_UBA], 1848, 2248);
|
||||||
SATURATE_U16(PARAM_INTERNAL.adc.ADC_Zero[ADC_CHANNEL_UAC], 1848, 2248);
|
SATURATE_U16(PARAM_INTERNAL.adc.ADC_Zero[ADC_CHANNEL_UAC], 1848, 2248);
|
||||||
SATURATE_U16(PARAM_INTERNAL.adc.ADC_Zero[ADC_CHANNEL_IC], 1848, 2248);
|
SATURATE_U16(PARAM_INTERNAL.adc.ADC_Zero[ADC_CHANNEL_IC], 1848, 2248);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user