Ви не увійшли.
Вітаю, займаюсь створенням, трьохфазного тиристорного регулятора обертів колекторного двигуна. Схема представляє собою повністю керований міст на 6 тиристорів, і колекторний двигун 220в 5кВт 1600об/хв з тахогенератором. Його роботою керує мікроконтролер blue pill він же stm32f103.
Тиристорами керують 3 таймери, які налаштовані на співпадіння так, що при 0 в регістрі співпадіння двигун ледь обертається, а при числу 4095 двигун обертається з частотою 2000 об/хв.
Для керування обертами, до 2х каналів АЦП підєднані 2 змінні резистори, для грубого і точного керування обертами. На виході АЦП виходить число від 0 до 4095 відповідно.
Тахогенератор підєднано до третього каналу АЦП так, що при 0 обертів двигуна число АЦП дорівнювало 0, а при 2000 обертів число дорівнювало 4095.
Для захисту по струму, в схемі присутні 3 трансформатори струму на кожну фазу, які заведені на 4й канал АЦП.
Для стабілізації обертів, використовується PID регулятор.
Так як двигун дуже великий по потужності, для його плавного запуску і зменшення навантаження на мережу, в програмі написав простий генератор розгону. Його логіка проста. Є змінна «Rozghin», яка збільшується на 15 кожного разу коли будь яка фаза переходить через нуль, і передається напряму в регістри співпадіння таймерів. На каналі АЦП трансформаторів струму, налаштував analog watchdog, який при спрацюванні забороняє збільшуватися змінній «Rozghin». В такий спосіб виходить, що змінна «Rozghin» збільшується тільки тоді, коли струм не перевищує задану величину, і двигун розганяється чітко з током 23А до того моменту, коли число тахогенератора не порівняється з встановленим числом на змінних резисторах, після цього розгін завершується і керування двигуном передається вже PID регулятору.
А от дальші починається саме цікаве. З завершенням розгону, завершується і контроль по струму. І якщо PID регулятор налаштовано з невеликою точністю, то можна змінним резистором задати 100 обертів двигуна і потім плавно піднімати наприклад до 1000 обертів, при цьому немає ніякої просадки в мережі, але точність підтримування обертів виходить десь +- 3 об/хв. А якщо налаштувати PID на велику точність, то стабільність обертів виходить +-1 об/хв. що дуже добре, але якщо резистором піднімати плавно оберти від 100об до 1000об то PID регулятор миттєво вираховує дуже велику похибку регулювання, і дає на вихід максимальну потужність, що без контролю струму дає дуже велику просадку в мережі.
Можливо хтось вже з таким стикався, як прив’язати до PID регулятора ще й обмеження по струму.
Можливо я щось не правильно описав в плані програмування, вибачаєте, я самоучка.
Неактивний
Ви хочете обмежувати тільки струм при зміні обертів? Тоді задача зводиться до того, як відрізнити великий "розгонний" струм від великого струму нормальної роботи під навантаженням. Цим критерієм є різниця у заданих і наявних оборотах. Але вона і так є вхідним параметром для PID. Тобто потрібно просто підібрати коефіцієнти PID, які задовільнять ваші вимоги: як мінімум, зменшити пропорційний коефіцієнт. Але швидкість реакції на зміну навантаження також зменшиться.
Може не зовсім зрозумів проблему, бо поки для мене виглядає як взаємовиключні вимоги: струм обмежити, але дозволити двигуну працювати на великій потужності.
Активний
Обмеження струму до 23А працює тільки при розгоні двигуна, до моменту коли тахогенератор порівняється з установкою на резисторі.
Дальше в роботу вступає PID регулятор, який бере інформацію з змінного резистора і тахогенератора, і тримає встановлені оберти, струм при цьому під навантаженням не перевищує 5А. Але коли змінювати оберти резистором, то PID регулятор може давати на вихід максимальну похибку регулювання, і струм може з легкістю піднятися до 60-100А, так як зворотного зв'язку по струму немає.
Коефіцієнти PID, пробував підбирати, але золотої середини так і не знайшов.
З малими коефіцієнтами, швидкість реакції мала, і система повільно з малим струмом входить в баланс, але погано тримає оберти, бо напруга в мережі не стала.
З великими коефіцієнтами, швидкість реакції велика, двигун чудово тримає оберти, і якщо не змінювати оберти резистором то все працює на тих же 5А, але лише стоїть повернути резистор для зміни обертів, як струм різко зростає і тримається допоки система не прийде в баланс.
Потрібно якось на PID регулятор вести ще зворотній зв'язок по струму. Наразі дивлюсь на схему PI регулятора, побудованого на операційних підсилювачах, там зворотній зв'язок по струму заводиться на вихід PI регулятора.
Неактивний
Обмеження струму до 23А працює тільки при розгоні двигуна
...
струм при цьому під навантаженням не перевищує 5А.
Так може просто обмежити струм до 23А незалежно від PID-регулятора? І регулятор вмикати відразу, без окремого режиму розгону.
Чи струм обмежується постійним резистивним баластом?
Тоді знайти, при якому значенні на виході регулятора струм складає 23A при максимальному навантаженні (можна і розрахувати, знаючи потужність двигуна), і програмно обмежити саме вихідне значення регулятора. Якщо регулятор видає значення, що перевищує максимально допустиме, то на керуючий елемент подається саме це максимально допустиме, і не більше.
але лише стоїть повернути резистор для зміни обертів, як струм різко зростає
Чим початковий розгін від нуля до, скажімо, 900 обертів відрізняється від зміни зі 100 обертів до 1000? З фізичної точки зору - нічим.
Потрібно якось на PID регулятор вести ще зворотній зв'язок по струму.
Так вихідне значення PID-регулятора і задає струм, якщо правильно розумію схему. Там же не частотник, а ШІМ, якщо двигун колекторний.
Подавати на вхід PID-регулятора ту ж величину, якою він безпосередньо керує виходом, не бачу сенсу. Це практично рівнозначно просто зменшенню пропорційного коефіцієнта.
Активний
А, перечитав уважніше, у вас обмеження струму виконано на тих же елементах, що і регулювання обертів. Так не відмикайте його, нехай працює параллельно з регулятором, але з вищим пріорітетом. Тобто коли струм починає перевищувати задане значення, обмежувач перекриває вихід регулятора.
Активний
Пробував схожий варіант, коли при роботі PID регулятора струм перевищував 23А, то регулятор відмикався а замість нього знову починався розгін, а після розгону знову вмикався PID, в такому варіанті працює, але тоді виходить неприємний різкий удар струму в мережі
Остання редакція duron (2024-02-24 20:17:30)
Неактивний
В голову прийшло ще таке, думаю спробувати поставити на вихід PID Регулятора.
ADC_current - Вихід АЦП після трансформаторів струму, число 1240 рівне 23 амперам. 539 це струм 10А.
Out_PID - це вихід PID регулятора 0-мінімум 4095-максмум.
Константа 5.84 розрахована так, щоб при 1240(23А) на вході ацп, на виході регулятора був приблизно 0.
if(ADC_current>539) // Якщо струм більший за 10 ампер
Out_PID=Out_PID-((ADC_current-539)*5.84);
Цей шматок коду має працювати так:
Якщо двигун обертається зі струмом до 10А то вихід PID регулятора напряму йде в регістри співпадіння таймерів.
А якщо двигун буде обертатися зі струмом більше 10А, то з виходу PID регулятора буде відніматися струм. Регулятор звісно буде намагатися компенсувати це збільшуючи похибку регулявання але при цьому ростиме і струм компенсуючи регулятор. З рештою система має плавно прийти в баланс працюючи вже на 5 амперах без різких стрибків струму.
Теоретично
Неактивний
А якщо двигун буде обертатися зі струмом більше 10А, то з виходу PID регулятора буде відніматися струм.
По суті це те, що і було запропоновано вище. Обмеження струму не є задачею PID-регулятора обертів, цим має займатись ще один окремий регулятор. В якому вигляді його оптимально реалізувати: пороговий вимикач чи пропорційний регулятор - це інше питання.
Було би корисно для розуміння намалювати повну блок-схему регулювання з усіма зворотніми звʼязками. На вході: задані оберти, наявні оберти, виміряний струм; на виході - час вмикання тиристорів відносно напівперіоду (фаза).
А як реалізовано вимір струму? Є якась пост-обробка після АЦП? Зауважте, якщо струм вимірюється без врахування фази відносно напруги, то це вимір повної потужності, а просадка відбувається в основному через активну складову. Хоча з фазовим методом можуть бути нюанси.
Активний
А як реалізовано вимір струму?
Після АЦП ніякої обробки немає, вимір з АЦП зчитується в момент коли будь яка фаза перейшла через 0.
Схематично все зроблено так.
Неактивний
Схематично все зроблено так.
Ага, зчитується усереднений піковий струм, що є усереднена пікова повна потужність розділити на напругу. Постійне обмеження по цьому значенню буде еквівалентне використанню двигуна меншої потужності, хіба що потужному двигуну "легше" працювати без перевищення номінального струму.
коли при роботі PID регулятора струм перевищував 23А, то регулятор відмикався а замість нього знову починався розгін, а після розгону знову вмикався PID
Тобто перевищення струму при розгоні реєструється тільки по перевищенню порового значення (analog watchdog)? А компоненти I і D у регулятора скидаєте в 0 при його повторному увімкненні? Різкий удар струму може і відбуватись через накопичену інтегральну компоненту.
Нетривіальна задачка. Для детального аналізу було би цікаво подивитись графіки зміни компонент PID, виміряного струму і вихідного значення регулятора при зміні режимів. Але це, мабуть, вже занадто.
Активний
Тобто перевищення струму при розгоні реєструється тільки по перевищенню порового значення (analog watchdog)?
Саме так, в самому першому варіанті пробував зчитувати струм просто з АЦП, і перевіряти чи перевищує він встановлений поріг, але добитись нормальної роботи не получилось, двигун стартував з більшим струмом ніж був встановлений поріг. З analog watchdog такого нема.
А компоненти I і D у регулятора скидаєте в 0 при його повторному увімкненні?
Ні, при повторному увімкнені регулятора удару струму немає, як і удару після розгону. Удар струму відбувається при зміні обертів змінним резистором в процесі роботи регулятора.
Нетривіальна задачка. Для детального аналізу було би цікаво подивитись графіки зміни компонент PID, виміряного струму і вихідного значення регулятора при зміні режимів. Але це, мабуть, вже занадто.
Такого робити я не вмію
Неактивний
пробував зчитувати струм просто з АЦП, і перевіряти чи перевищує він встановлений поріг, але добитись нормальної роботи не получилось, двигун стартував з більшим струмом ніж був встановлений поріг. З analog watchdog такого нема.
Може була недостатня частота опитування АЦП? Інших варіантів, чому би з ватчдогом працювало, а з програмним опитуванням ні, не бачу.
dimich пише:А компоненти I і D у регулятора скидаєте в 0 при його повторному увімкненні?
Ні, при повторному увімкнені регулятора удару струму немає, як і удару після розгону. Удар струму відбувається при зміні обертів змінним резистором в процесі роботи регулятора.
Тоді не дуже зрозумів, чим не влаштував варіант з обмеженням струму і підчас роботи регулятора. Змінили оберти -> струм підвищився, перевищив поріг -> спрацював ватчдог -> обмежив струм. Струм зменшився -> перемкнулись на регулятор.
Щоб запобігти занадто частим перемиканням, на регулятор перемикатись через деякий мінімальний проміжок часу та/або після зниження струму до значення трохи меншого, ніж поріг спрацювання (гістерезис).
Активний
Може була недостатня частота опитування АЦП? Інших варіантів, чому би з ватчдогом працювало, а з програмним опитуванням ні, не бачу.
АЦП працює в чотирьох канальному режимі, з частотою 9мГц і DMA, в сумі виходить що кожен канал працює на частоті трохи більше ніж 2мгц, думаю цієї частоти опитування достатньо.
Думаю що програмне опитування не працює тому, що в момент коли робиться вибірка, амплітуда сигналу на вході АЦП вже йде на спад, із за невеликої ємності конденсатора (100мкф) після діодного мосту. Вирішить це можна збільшенням ємності, але тоді втратиться швидкість реакції.
Змінили оберти -> струм підвищився, перевищив поріг -> спрацював ватчдог -> обмежив струм. Струм зменшився -> перемкнулись на регулятор.
Такий спосіб працює, але не дуже добре. Виходить що двигун працює зі струмом в 5А -> змінюю оберти, відбувається різкий стрибок струму з 5А до 23А -> спрацьовує ватчдог -> струм зменшився -> знову працює регулятор з 5А. Якщо в цей момент дивитись на лампочку, то виглядає так, ніби хтось швидко клацає перемикач що вимикає світло.
Неактивний
АЦП працює в чотирьох канальному режимі, з частотою 9мГц і DMA, в сумі виходить що кожен канал працює на частоті трохи більше ніж 2мгц, думаю цієї частоти опитування достатньо.
Я маю на увазі не частоту роботи самого АЦП, а частоту аналізу отриманного значення програмою.
Думаю що програмне опитування не працює тому, що в момент коли робиться вибірка, амплітуда сигналу на вході АЦП вже йде на спад, із за невеликої ємності конденсатора (100мкф) після діодного мосту. Вирішить це можна збільшенням ємності, але тоді втратиться швидкість реакції.
Постійна часу там - 100 мкФ * 1 кОм = 100 мс. Навіть при зникненні струму до нуля, через 1 мс (при частоті опитування 1 кГц) напруга зменшиться всього на 1%.
Виходить що двигун працює зі струмом в 5А -> змінюю оберти, відбувається різкий стрибок струму з 5А до 23А -> спрацьовує ватчдог -> струм зменшився -> знову працює регулятор з 5А. Якщо в цей момент дивитись на лампочку, то виглядає так, ніби хтось швидко клацає перемикач що вимикає світло.
Якщо при 23А лампочка моргає, то вже непорядок з проводкою. Або з лампочкою Тоді вибачте, не розумію проблему ще більше. Ви хочете обмежити швидкість обмеження струму?
Остання редакція dimich (2024-02-26 19:53:49)
Активний
Я маю на увазі не частоту роботи самого АЦП, а частоту аналізу отриманного значення програмою.
А зрозумів, частота аналізу виходить 300 гц. Я маю по 2 зовнішні переривання для кожної фази, від детекторів переходу через нуль. І коли спрацьовує переривання, саме в цей момент беруться вибірки з АЦП по струмові, тахогенератору і змінних резисторів, і тут же виконується обчислення PID. До речі, частота дискретизації PID теж дорівнює 300 гц.
Якщо при 23А лампочка моргає, то вже непорядок з проводкою. Або з лампочкою Тоді вибачте, не розумію проблему ще більше. Ви хочете обмежити швидкість обмеження струму?
Ну 23A це не мало не багато а 5кВт навантаження на мережу, а від трансформатора я знаходжусь далеко. Тому різко подавати таке навантаження в мережу не дуже добре (мої сусіди це підтвердять). Наприклад коли відбувається розгін, то двигун теж працює на цих же 23 амперах, але це відбувається плавно, просто лампочка на момент притухає і все.
Неактивний
А зрозумів, частота аналізу виходить 300 гц.
300 Гц має бути теж цілком достатньо, період в 30 разів коротше постійної часу.
Наприклад коли відбувається розгін, то двигун теж працює на цих же 23 амперах, але це відбувається плавно, просто лампочка на момент притухає і все.
Тобто обмежити не тільки струм, а і швидкість зростання струму. І при цьому не погіршити характеристику регулятора обертів. Майже взаємовиключні вимоги.
Чи не простіше обмежити швидкість зміни керуючого сигнала з потенціометра? Якщо показання з потенціометра збільшились, на вхід регулятора подавати не повне значення одразу, а збільшувати його поступово. По суті ФНЧ. Знайти максимальний коефіцієнт, при якому просадка ще допустима, і раз на період множити на нього початкове значення від потенціометра, поки воно не досягне кінцевого значення. Якщо там значення від 0 до 4096, частота оновлення 300 Гц, а час зміни порядку секунд, то коефіцієнт буде нецілим числом зовсім трохи більше одиниці. Але арифметикою з нерухомою крапкою це реалізувати нескладно.
Активний
обмежити швидкість зміни керуючого сигнала з потенціометра
Доречі, можна спробувати обійтись і чисто хардварним рішенням - RC-ланцюжок після потенціометрів перед АЦП. Можна додати ще діод, щоб зміна "вниз" відбувалась швидше.
Активний
Чи не простіше обмежити швидкість зміни керуючого сигнала з потенціометра?
Хмм, цікава думка, швидка зміна обертів мені і не потрібна. Треба буде спробувати.
Неактивний