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

Решил освоить ПИД

В качестве модели коллекторный мотор который крутит диск (для создания инерции)

мотор подключен через всем известный драйвер L293D к микроконтроллеру.

Пытаюсь написать прогу для стабилизации частоты оборотов с помощью шим

Допустим скважность ШИМ могу менять от 0 до 255 (0%-100%)

 

Непонятен переход от управляющего воздействия к скважности ШИМ

сначала разбираюсь только с пропорциональной составляющей P

Допустим нужно стабилизировать частоту 100Гц F0=100гц

выбрем коэфф Кp=2

Тогда при начале алгоритма (мотор еще стоит) начальная невязка будет Е=100,

тогда P=Kp*E=200, И упр. воздействие будет U=P=200.

Принимаю это упр воздействие за максимальное, и расчитываю коэфф. перевода его в 100% скважность шим равную 255

K=255/200=1.275

Далее вызывая алгоритм буду переводить упр. воздействие в скважность с помощью этого коэф.

Правильно ли это ?

 

И как делать когда будут еще интегральная и дифф. составляющие?

 

 

 

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


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

Пытаюсь написать прогу для стабилизации частоты оборотов с помощью шим
ШИМ - это импульсный сигнал с постоянной частотой и переменной скважностью (коэффициентом заполнения). А если Вы меняете скважность, изменяя частоту, то это уже не ШИМ.

 

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


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

частота шим постоянная, я ее не меняю )

я стабилизирую частоту оборотов двигателя)

 

Если кратко, то мой вопрос в том как правильно сделать нормализацию

управляющего сигнала с выхода ПИД, в скважность ШИМ.

 

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


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

я стабилизирую частоту оборотов двигателя)

Частоту вращения регулировать легко и приятно с таким двигателем.

Можно даже, выбранным Вами, таким незатейливым ШИМом. Частота при постоянной нагрузке устанавливается сама-собой пропорционально напряжению питания - среднему значению по периоду ШИМа. Лучше, однако, управлять током, от которого момент зависит линейно.

Но можно и так...

Суммируете компоненты ПИДа и подаете эту сумму на ШИМ.

Можете все это промоделировать, заменив двигатель на конденсатор с резистором и генератором тока, который имитирует нагрузку. Емкость конденсатора - момент инерции, напряжение на конденсаторе - скорость вращения. Если добавить еще резистор параллельно конденсатору, то добавится трение.

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


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

Выход ограничивайте на крайних значениях заполнения и не надо никаких "переход от управляющего воздействия к скважности ШИМ". Ведь это будет всего лишь еще один коэффициент на который умножится невязка, как и на пропорциональный коэффициент регулятора, так зачем их нужно два. Разделение на выход регулятора и величину заполнения может иметь смысл в каких-то случаях, если выход в Вольтах например, а питание может изменяться во время работы, тогда надо пересчитывать заполнение после регулятора. А еще, Вам здесь скоро скажут, что нужен контур тока, а потом уже по скорости.

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


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

Если кратко, то мой вопрос в том как правильно сделать нормализацию

управляющего сигнала с выхода ПИД, в скважность ШИМ.

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

P.S. Вы там по ходу дела учебник читаете, что ли? Очень уж наукоемко излагаете. :biggrin:

 

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


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

Выход ограничивайте на крайних значениях заполнения и не надо никаких "переход от управляющего воздействия к скважности ШИМ". Ведь это будет всего лишь еще один коэффициент на который умножится невязка, как и на пропорциональный коэффициент регулятора, так зачем их нужно два. Разделение на выход регулятора и величину заполнения может иметь смысл в каких-то случаях, если выход в Вольтах например, а питание может изменяться во время работы, тогда надо пересчитывать заполнение после регулятора. А еще, Вам здесь скоро скажут, что нужен контур тока, а потом уже по скорости.

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

Я понимаю в этом случае нужно увеличить коэфициент в пропорциональной составляющей Kp, но тогда другие составлющие (интегральная и дифференциальная) будут вносить меньший вклад в регулирование? Как тут быть ?

Можете все это промоделировать, заменив двигатель на конденсатор с резистором и генератором тока, который имитирует нагрузку.

Не, я уже сделал макет с мотором и ременной передачей на другой вал где насажен диск для создания инерции

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


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

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

Я понимаю в этом случае нужно увеличить коэфициент в пропорциональной составляющей Kp, но тогда другие составлющие (интегральная и дифференциальная) будут вносить меньший вклад в регулирование? Как тут быть ?

Алгоритм не должен выдавать зашкаливающие значения. Он (ПИД) не для того, чтобы им так грубо управляли. Нужно плавно менять значение задатчика - ограничивать скорость нарастания. Тогда ПИД будет нормально работать.

 

Не, я уже сделал макет с мотором и ременной передачей на другой вал где насажен диск для создания инерции

А вот с этим нужно осторожнее. Можно сжечь драйвер. Если слишком быстро (неумело) тормозить, например. При старте тоже... Контроль тока нужно делать.

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


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

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

Я понимаю в этом случае нужно увеличить коэфициент в пропорциональной составляющей Kp, но тогда другие составлющие (интегральная и дифференциальная) будут вносить меньший вклад в регулирование? Как тут быть ?

 

Это вопрос настройки регулятора, или даже выбора структуры СУ, а еще лучше начать с изучения требуемых траекторий движения системы и того какое управление их обеспечит.

 

Я знаю два варианта "быстрых" регуляторов.

 

1. Релейный, или почти релейный пропорциональный с большим коэффициентом. Весь переходный процесс регулятор находится в насыщении и выдает крайнее значение, и только в малой области около заданного значения остается линейный режим. Это требует хорошего качества обратной связи, с минимальным шумом.

2. Использование модели системы, для формирования управления из допустимой траектории (без использования невязки с заданным значением) + слабый ПИ регулятор для компенсации неточности модели или + адаптация модели. Здесь есть много разных вариантов, структур построения. В вашем случае простой пример такого управления, это пересчитывать требуемое напряжение через электромеханическую постоянную и заданную скорость + падение напряжения на активном сопротивлении, u = w*E + i*R. Только вот это пример не дает минимально возможный отклик, для этого нужно знать больше информации об управляемой системе.

 

Добавка: п.1 не для любой системы подходит в таком простом виде.

Изменено пользователем amaora

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


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

Алгоритм не должен выдавать зашкаливающие значения. Он (ПИД) не для того, чтобы им так грубо управляли. Нужно плавно менять значение задатчика - ограничивать скорость нарастания. Тогда ПИД будет нормально работать.

 

разве ПИД не обязан адекватно реагировать при любом изменение задатчика?

 

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


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

разве ПИД не обязан адекватно реагировать при любом изменение задатчика?

Нет, к всеобщему сожалению. Реальный. Идеальный с бесконечным напряжением питания (выдаваемым на выходе воздействием) мог бы.

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


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

Нет, к всеобщему сожалению. Реальный. Идеальный с бесконечным напряжением питания (выдаваемым на выходе воздействием) мог бы.

 

не понимаю, к примеру если ПИД управляет температурой котла, мы разве не можем поменять температуру с 50 до 80 ? какие последствие при этом будут?

 

и кто тогда должен плавно менять? другой контур ПИД? или еще что то? какие критерий допустимости изменения входа?

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


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

не понимаю, к примеру если ПИД управляет температурой котла, мы разве не можем поменять температуру с 50 до 80 ? какие последствие при этом будут?

Будет большое перерегулирование с последующими колебаниями. Не всегда это допустимо.

и кто тогда должен плавно менять? другой контур ПИД? или еще что то? какие критерий допустимости изменения входа?

Плавно менять должен ограничитель скорости нарастания. Ведь при максимальной мощности скорость нагрева ограничена. Вот и нужно до этой величины (ну, не совсем, немного меньше) ограничивать задатчик. Альтернативно. На примере Вашего котла - включаем максимальную мощность на некоторое время. При некоторой небольшой невязке включаем ПИД с величиной И-компоненты, соответствующей выбранной температуре - мы ведь не первый день этот котел греем...

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


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

Будет большое перерегулирование с последующими колебаниями. Не всегда это допустимо.

хм, я получается воюю с ветреными мельницами

Плавно менять должен ограничитель скорости нарастания. Ведь при максимальной мощности скорость нагрева ограничена. Вот и нужно до этой величины (ну, не совсем, немного меньше) ограничивать задатчик. Альтернативно. На примере Вашего котла - включаем максимальную мощность на некоторое время. При некоторой небольшой невязке включаем ПИД с величиной И-компоненты, соответствующей выбранной температуре - мы ведь не первый день этот котел греем...

т.е. примерно так?

1. способ

error=TempNeed-TempCur; // где TempNeed задатчик TemCur текущая

 

if((error<-5.0)||(error>-5.0)) Output=1.0; //

else Output=PID(error);

 

2. способ

 

Temp+=(TempNeed-Temp)/64;

 

error=Temp-TempCur;

Output=PID(error);

 

// где TempNeed задатчик

// TemCur текущая температура (измеренная)

 

и можно еще вопрос

в случае нагревателя, выход ПИД это амплитуда подаваемая на нагреватель или приращение амплитуды ?

 

т.е. Output=PID(error); или Output+=PID(error);

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


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

хм, я получается воюю с ветреными мельницами

т.е. примерно так?

 

и можно еще вопрос

 

в случае нагревателя, выход ПИД это амплитуда подаваемая на нагреватель или приращение амплитуды ?

 

т.е. Output=PID(error); или Output+=PID(error);

Не знаю, с чем и зачем Вы воюете, но пишете очень непонятно. Это на каком языке?

Схема (кусок кода) ограничения скорости задатчика должна линейно по времени периодически (каждую секунду или минуту, или неделю..) добавлять немножко к задатчику до достижения желаемого.

Второй способ - совсем отключаем регулятор и подаем максимальную мощность до достижения почти желаемого, после чего включаем ПИД, записав в И-часть заранее определенную величину.

На выходе регулятора должна быть мощность, которая при нагреве напряжением пропорциональна его квадрату, а при использовании ШИМа - среднему по периоду времени включения нагревателя. Это если напряжение фиксировано.

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


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

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

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

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

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

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

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

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

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

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