Извиняюсь за долгий ответ.
Частично вопрос разрешился. В RC цепочки (для определения огбающей ШИМ) стоял конденсатор с слишком большой ёмкостью .
Вот часть кода позаимствованного и переделанного из примеров STM.
CODE
int32_t seterr, pid_out;
int32_t error;
error = Vout - Vref;
seterr = (-Kp * error) / 200;
term_Volt = term_Volt + ((-Ki * error) / 200);
if (term_Volt > SAT_LIMIT)//B40
{
term_Volt = SAT_LIMIT;
}
if (term_Volt < -(SAT_LIMIT))
{
term_Volt = -(SAT_LIMIT);
}
dif = (-Kd*(error-error_old))/200;
pid_out = seterr + term_Volt + dif ;
pid_out += 5760;//5760 максимальное скважность ШИМ.
if (pid_out >= MAX_DUTY_A)//B40
{
pid_out = MAX_DUTY_A;
}
if (pid_out < MIN_DUTY_A)//480
{
pid_out = MIN_DUTY_A;
}
CurrentDutyA = pid_out;
__HAL_HRTIM_SETCOMPARE(&hhrtim, HRTIM_TIMERINDEX_TIMER_C, HRTIM_COMPAREUNIT_2, CurrentDutyA);
Схема входной цепи

В данный момент проблема состоит в том что не получается качественно настроить ПИД регулятор.
При Кр относитльно большом (30...50) амплитуда колебаний уменьшается в разы ,но появляются треугольники с увеличеной частотой 600...900 Гц
Если уменьшить Кр (10...3) - синусоида компенсируется плохо см. на фото , нижняя осциллограмма.
Сообщение отредактировал IgorKossak - Nov 1 2017, 18:26
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!