Jump to content
    

Ограничение скорости нарастания сигнала ШИМ на двигатель (STM32)

Всем привет. Я работаю на СТМ32 BluePill. Есть двигатель, силовой драйвер и источник питания.

Для того, чтобы подать напряжение на двигатель через ШИМ, нужно задать коэффициент заполнения. Я настроил таймер с возможностью генерации ШИМ -сигнала. Настройки его на картинке. То есть максимальное значение, которое можно подать, это 1000. 

Суть в том, что я написал регулятор скорости через прерывание (выполняется каждые 10 мс, скорость вращения находится через энкодер на том же прерывании).Выходной сигнал - это нужная скорость вращения.

У этого регулятора выходной сигнал ограничен до макс. диапазона шим (то есть о 0 до 1000 может быть максимальный выходной сигнал). Значение этого сигнала подается на ШИМ (Я написал в коде как TIM3 -> CCR1 = out)

Но как я понимаю, этот скорость нарастания данного сигнала следует ограничивать, то есть чтобы не было такой ситуации, что выходной сигнал резко перешел от 0 до 1000. Просто источник тока я включаю немного позже, и за это время выходной сигнал естественно очень сильно возрастает.

Почитав пару статей про двигатель постоянного тока, я понял, что такой ситуации следует избегать. Везде пишут про ограничение скорости нарастания сигнала. Как это можно ограничить программно? Прошу помочь.

Скриншот 17-09-2022 191833.jpg

Скриншот 17-09-2022 191642.jpg

Share this post


Link to post
Share on other sites

Судя по названиям переменных, у вас ПИ-регулятор и обычное явление перерегулирования. Уменьшайте коэффициенты регулятора.

Умножение на 0,0003333 подозрительно само по себе. У вас не целочисленные вычисления?

Текст придуман как раз для того чтобы не пользоваться изображениями, если что.

Share this post


Link to post
Share on other sites

20 минут назад, vov4ick сказал:

Судя по названиям переменных, у вас ПИ-регулятор и обычное явление перерегулирования. Уменьшайте коэффициенты регулятора.

Умножение на 0,0003333 подозрительно само по себе. У вас не целочисленные вычисления?

Текст придуман как раз для того чтобы не пользоваться изображениями, если что.

Это старый код) Раньше была частота прерываний 3000 Гц

 

Share this post


Link to post
Share on other sites

1 hour ago, student23 said:

тобы не было такой ситуации, что выходной сигнал резко перешел от 0 до 1000

Вам нужно знать, за какое минимальное число шагов допустимо такое переключение. Например за 10, тогда максимальный шаг изменения не должен превышать 100.

Перед записью в CCR1 сравниваете PWM1 с его же значением на предыдущем шаге. Если разница больше 100, то 100.

 

 

Share this post


Link to post
Share on other sites

1 час назад, Alex-lab сказал:

Вам нужно знать, за какое минимальное число шагов допустимо такое переключение.

 

 

Огромное спасибо за дельную мысль, наконец-то понял, как реализовать) Это ведь верно? Я беру в самом начале прерываний прошлое значение с ШИМ, а затем сравниваю модуль от разности.

Скриншот 17-09-2022 224957.jpg

Share this post


Link to post
Share on other sites

1 час назад, student23 сказал:

Огромное спасибо за дельную мысль, наконец-то понял, как реализовать)

Admin: Вставляйте код как текст в специально предусмотренном для этого блоке.

Share this post


Link to post
Share on other sites

4 hours ago, student23 said:

Это ведь верно? Я беру в самом начале прерываний прошлое значение с ШИМ, а затем сравниваю модуль от разности.

Я не могу понять ваш код, почему там все закомментировано? Где начало обработчика прерывания?

У вас не правильно, вы ограничили сам PWM, а нужно лишь прирост, то есть вместо if ... PWM_1=300 должно быть что-то вроде:

if (PWM1-PWM1_old > 300) {
PWM1 = PWM1_old + 300;
}

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...