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

    

ПИД в источнике питания

Вот и пришлось мне ознакомиться с ПИД регулированием, чтоб оно было неладно. Карпова прочитал, очень доходчивая статья. Много апноутов всяких, формул раздобыл. А в кучу собрать не получается.

Ближе к делу.

Есть DCDC buck на Atmega8. ШИМ 8бит, 256 уровней. Питание 50В, делаем на выходе 20В. Значит, в 8-битный таймер ШИМ грузим сотню. 100/256*50=19,5В. Без обратной связи примерно так и получается.

Теперь АЦП оцифровывает выход, использую АЦП 8-битный. Т.е. при замкнутой петле и без нагрузки АЦП должен тоже выдавать значение 100? Это  первый вопрос.

Вешаем нагрузку - в таймере по прежнему 100, а АЦП выдаёт пусть 95. Далее, пропорциональная компонента: u=Kp*e. Как получается ошибка? Из опорных 100 вычесть 95 из АЦП будет 5, по логике надо умножить на пропорциональный компонент (коэффициент усиления). Что надо сделать далее? Это главный вопрос, после которого ни в одной известной мне статье не описывается. Просто u=Kp*e плюс дифф.компонента плюс интегральная компонента. Безразмерная, ни к чему не привязанная u.

И наконец, если выход равен опоре, то ошибка будет ноль? умножить её на любой Kp будет тоже ноль?

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

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


Ссылка на сообщение
Поделиться на другие сайты
30 minutes ago, borodach said:

 Карпова прочитал, очень доходчивая статья.

Есть DCDC buck на Atmega8. ШИМ 8бит, 256 уровней. Питание 50В, делаем на выходе 20В. Значит, в 8-битный таймер ШИМ грузим сотню. 100/256*50=19,5В. Без обратной связи примерно так и получается.

Увы и ах...

С какой скоростью Ваш ПИД будет менять управляющее воздействие? Сколько времени занимают вычисления? Каков период таймера?

Вы где-нибудь видели такой регулятор на таком процессоре?

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


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

Я бы не хотел рассматривать скоростные характеристики регуляторов. Меня математика сейчас интересует.

Мега8 вполне годится. Без АЦП и математики, чисто на таймере, достигается частота ШИМ 30кГц на 8-мегагерцовом кварце и 60кГц на 16-мегагерцовом.

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


Ссылка на сообщение
Поделиться на другие сайты
11 minutes ago, borodach said:

Я бы не хотел рассматривать скоростные характеристики регуляторов. Меня математика сейчас интересует.

Мега8 вполне годится. Без АЦП и математики, чисто на таймере, достигается частота ШИМ 30кГц на 8-мегагерцовом кварце и 60кГц на 16-мегагерцовом.

Вы же читали доходчивую статью... Там математика изложена. Обычно используют несколько иную форму записи. Так в чем у Вас затруднения?

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


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

Затруднение в понимании процессов

Т.е. у нас есть ошибка регулирования - разница между тем, что должно быть, и тем, что есть на самом деле. Есть коэффициент усиления Кр. Как перейти от e*Kp к числу, которое надо загрузить в таймер?

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

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


Ссылка на сообщение
Поделиться на другие сайты
11 минут назад, borodach сказал:

Т.е. у нас есть ошибка регулирования - разница между тем, что должно быть, и тем, что есть на самом деле. Есть коэффициент усиления Кр. Как перейти от e*Kp к числу, которое надо загрузить в таймер?

Есть ошибка текущая, есть скорость изменения текущей ошибки (прошлая ошибки - текущая ошибка) всё это подставляется в формулу с коэффициентами и на выходе получаем по сути напряжение которое должно быть выставлено на выходе.

Т.к. крутим не напряжение а скважность то есть ещё какой то коэффициет пересчёта. Который как я понимаю должен входить в пропорциональный коэффициент. В результате будем получать сразу число которое нужно получить.

А вообще очень всё хорошо видно в обычном экселе. 

Где каждая строчка это шаг. Соответственно на первом шаге на выходе 0 а должно быть N. Значит ошибка = N - 0. Далее применяем формулу ПИД регулятора, добавляем какую нибудь нелинейную функцию регулирования и получаем ошибку на выходе. Вуала. И так несколько строчек. Можно даже графики построить. Всё так прекрасно видно.

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


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

скорость изменения ошибки - это дифф.компонент, я до него пока не дошёл, делаю просто П-регулятор.

так вот число в таймере - это и связано со скважностью, т.е. это длительность цикла; Uвых=Uвх*D, где D=100/256 для получения 20 вольт из 50

6 minutes ago, MegaVolt said:

В результате будем получать сразу число которое нужно получить.

т.е. АЦП должен совсем немного отставать от опоры, и, имея достаточный коэффициент усиления Кр, мы получим на выходе число, равное опорному?

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


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

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

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


Ссылка на сообщение
Поделиться на другие сайты
1 hour ago, borodach said:

 

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

Вы просто не понимаете своего счастья.

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

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


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Tanya сказал:

Увы и ах...

С какой скоростью Ваш ПИД будет менять управляющее воздействие? Сколько времени занимают вычисления? Каков период таймера?

Вы где-нибудь видели такой регулятор на таком процессоре?

Вот, именно так и надо делать. Сначала построить ЛАХ, который Вы хотите получить.

На нем выделить 3 "волшебные" точки:

1. Коэфф усиления в "статике" - он даст ошибку регулирования;

2. Частоту, когда ЛАХ пересекает 0 дб - "слева" от нее будет полоса частот, где изменения выходного сигнала будут подавляться обратной связью. Наклон ЛАХ там будет от -20 до -40дб/дек

3. Частота квантования - по горизонтали, а по вертикали эту точку определит подавление силового фильтра. Наклон ЛАХ там будет "фильтр" + "наклон от участка №2" 

Как только определите ЛАХ и частоты, так все остальное сразу будет видно...

Хотите подробнее - могу голосом по скайпу...

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


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

2 ALL

если бы я делал обычный аналоговый источник, то вопрос звучал бы так "как мне подключить TL431 и оптопару, чтобы появилась обратная связь"

Т.е. вопрос стоит не в полюсах и нулях, не в частотах сопряжения и среза фильтров LC, не в полосе пропускания, а тупо на уровне проводочков, соединяющих узлы. Даже без частотозависимых компонентов.

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


Ссылка на сообщение
Поделиться на другие сайты
1 hour ago, borodach said:

Т.е. вопрос стоит не в полюсах и нулях, не в частотах сопряжения и среза фильтров LC, не в полосе пропускания, а тупо на уровне проводочков, соединяющих узлы. Даже без частотозависимых компонентов.

Схема цифровой обработки такая:

image.png.7eb15f4297ed9af6c606a4551cd7c76e.png

И тут не PID, а 2p2z контроллер во-первых. 
Во вторых, как видно из схемы, в 8-и битной арифметике его не считают, надо переходить на 32-а бита, если нужно нормальное качество управления без выбросов. 
Для этого на схеме стоят конвертеры разрядности. А PWM comparator это и есть регистр compare вашего таймера генерации ШИМ-а.

На простом PID-е да еще 8-и битном ничего кроме возбуждений не получите.  

Рекомендую Microcap для моделирования в z-области. Там и оптимизацию запустить можно. 

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


Ссылка на сообщение
Поделиться на другие сайты
28 минут назад, AlexandrY сказал:

На простом PID-е да еще 8-и битном ничего кроме возбуждений не получите.  

Рекомендую Microcap для моделирования в z-области. Там и оптимизацию запустить можно.  

Да можно регулирование -то получить. Если автору не важна скорость, не важно качество регулирования (в смысле выбросов) - то медленно, и конечно с выбросами, в среднем можно добиться чтоб регулятор держал напряжение. Но без I компоненты, только P думаю держаться напряжение не будет, будет плавать.

2borodach: произведениe Kp*e добавляйте с нужным знаком к значению таймера на "холостом ходу", при котором преобразователь показывает нужное напряжение. Но без интегральной компоненты таймер не сумеет автоматически подстроиться так, чтобы на выходе напряжение было равно заданному. Ошибка на выходе думаю все-равно будет.

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


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, borodach сказал:

вопрос ... тупо на уровне проводочков, соединяющих узлы

ERX = VOUT – VREF

IX+1 = IX – i · ERX

D = IX – p · ERX – d · (ERX – ERX–1)

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


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

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

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация