Перейти к содержанию
    

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

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

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

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, student23 said:

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

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, student23 said:

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

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...