diff --git a/Inc/PwmFlagchip.h b/Inc/PwmFlagchip.h index 416a8f1..96f51c8 100644 --- a/Inc/PwmFlagchip.h +++ b/Inc/PwmFlagchip.h @@ -44,7 +44,7 @@ void Get_Set_Tpu_PwmCallback(tPwmFlagchip *env); #define TPU_FREQ (BUS_CLK / SCG_CLK_DIV) -#define PWM_FREQ 100 // 100 Hz +#define PWM_FREQ 50 // 100 Hz #define PERIOD_TICKS (TPU_FREQ / PWM_FREQ) diff --git a/Src/PwmFlagchip.c b/Src/PwmFlagchip.c index 30fa06b..ae34540 100644 --- a/Src/PwmFlagchip.c +++ b/Src/PwmFlagchip.c @@ -80,17 +80,25 @@ static void vPwmRun(tPwmFlagchip *env) { } static void setActivePercent(tPwmFlagchip *env, uint8_t percent) { + uint8_t final_percent; + // Ограничения if (percent >= 100) - percent = 85; - + percent = 95; if (percent == 0) percent = 5; - // Расчет времени активности в тактах - uint32_t data = PERIOD_TICKS * percent / 100; - osMessageQueuePut(env->q_u32ActiveTime, &data, 0, 0); + // Для active LOW (bActiveHigh = false) нужна инверсия + // 10% → 90%, 20% → 80% и т.д. + if (env->etpu_pwmconfig_tbl.bActiveHigh == false) { + final_percent = 100 - percent; + } else { + final_percent = percent; + } + // Расчет времени активности в тактах + uint32_t data = env->etpu_pwmconfig_tbl.u32PeriodTime * final_percent / 100; + osMessageQueuePut(env->q_u32ActiveTime, &data, 0, 0); }