Ви не увійшли.
Сторінки 1
Допомогти навряд чи зможу, але цікавить в чому полягає проблема
Чи не простіше обмежити швидкість зміни керуючого сигнала з потенціометра?
Хмм, цікава думка, швидка зміна обертів мені і не потрібна. Треба буде спробувати.
Я маю на увазі не частоту роботи самого АЦП, а частоту аналізу отриманного значення програмою.
А зрозумів, частота аналізу виходить 300 гц. Я маю по 2 зовнішні переривання для кожної фази, від детекторів переходу через нуль. І коли спрацьовує переривання, саме в цей момент беруться вибірки з АЦП по струмові, тахогенератору і змінних резисторів, і тут же виконується обчислення PID. До речі, частота дискретизації PID теж дорівнює 300 гц.
Якщо при 23А лампочка моргає, то вже непорядок з проводкою. Або з лампочкою Тоді вибачте, не розумію проблему ще більше. Ви хочете обмежити швидкість обмеження струму?
Ну 23A це не мало не багато а 5кВт навантаження на мережу, а від трансформатора я знаходжусь далеко. Тому різко подавати таке навантаження в мережу не дуже добре (мої сусіди це підтвердять). Наприклад коли відбувається розгін, то двигун теж працює на цих же 23 амперах, але це відбувається плавно, просто лампочка на момент притухає і все.
Може була недостатня частота опитування АЦП? Інших варіантів, чому би з ватчдогом працювало, а з програмним опитуванням ні, не бачу.
АЦП працює в чотирьох канальному режимі, з частотою 9мГц і DMA, в сумі виходить що кожен канал працює на частоті трохи більше ніж 2мгц, думаю цієї частоти опитування достатньо.
Думаю що програмне опитування не працює тому, що в момент коли робиться вибірка, амплітуда сигналу на вході АЦП вже йде на спад, із за невеликої ємності конденсатора (100мкф) після діодного мосту. Вирішить це можна збільшенням ємності, але тоді втратиться швидкість реакції.
Змінили оберти -> струм підвищився, перевищив поріг -> спрацював ватчдог -> обмежив струм. Струм зменшився -> перемкнулись на регулятор.
Такий спосіб працює, але не дуже добре. Виходить що двигун працює зі струмом в 5А -> змінюю оберти, відбувається різкий стрибок струму з 5А до 23А -> спрацьовує ватчдог -> струм зменшився -> знову працює регулятор з 5А. Якщо в цей момент дивитись на лампочку, то виглядає так, ніби хтось швидко клацає перемикач що вимикає світло.
Тобто перевищення струму при розгоні реєструється тільки по перевищенню порового значення (analog watchdog)?
Саме так, в самому першому варіанті пробував зчитувати струм просто з АЦП, і перевіряти чи перевищує він встановлений поріг, але добитись нормальної роботи не получилось, двигун стартував з більшим струмом ніж був встановлений поріг. З analog watchdog такого нема.
А компоненти I і D у регулятора скидаєте в 0 при його повторному увімкненні?
Ні, при повторному увімкнені регулятора удару струму немає, як і удару після розгону. Удар струму відбувається при зміні обертів змінним резистором в процесі роботи регулятора.
Нетривіальна задачка. Для детального аналізу було би цікаво подивитись графіки зміни компонент PID, виміряного струму і вихідного значення регулятора при зміні режимів. Але це, мабуть, вже занадто.
Такого робити я не вмію
А як реалізовано вимір струму?
Після АЦП ніякої обробки немає, вимір з АЦП зчитується в момент коли будь яка фаза перейшла через 0.
Схематично все зроблено так.
В голову прийшло ще таке, думаю спробувати поставити на вихід 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 амперах без різких стрибків струму.
Теоретично
Пробував схожий варіант, коли при роботі PID регулятора струм перевищував 23А, то регулятор відмикався а замість нього знову починався розгін, а після розгону знову вмикався PID, в такому варіанті працює, але тоді виходить неприємний різкий удар струму в мережі
Обмеження струму до 23А працює тільки при розгоні двигуна, до моменту коли тахогенератор порівняється з установкою на резисторі.
Дальше в роботу вступає PID регулятор, який бере інформацію з змінного резистора і тахогенератора, і тримає встановлені оберти, струм при цьому під навантаженням не перевищує 5А. Але коли змінювати оберти резистором, то PID регулятор може давати на вихід максимальну похибку регулювання, і струм може з легкістю піднятися до 60-100А, так як зворотного зв'язку по струму немає.
Коефіцієнти PID, пробував підбирати, але золотої середини так і не знайшов.
З малими коефіцієнтами, швидкість реакції мала, і система повільно з малим струмом входить в баланс, але погано тримає оберти, бо напруга в мережі не стала.
З великими коефіцієнтами, швидкість реакції велика, двигун чудово тримає оберти, і якщо не змінювати оберти резистором то все працює на тих же 5А, але лише стоїть повернути резистор для зміни обертів, як струм різко зростає і тримається допоки система не прийде в баланс.
Потрібно якось на PID регулятор вести ще зворотній зв'язок по струму. Наразі дивлюсь на схему PI регулятора, побудованого на операційних підсилювачах, там зворотній зв'язок по струму заводиться на вихід PI регулятора.
Вітаю, займаюсь створенням, трьохфазного тиристорного регулятора обертів колекторного двигуна. Схема представляє собою повністю керований міст на 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 регулятора ще й обмеження по струму.
Можливо я щось не правильно описав в плані програмування, вибачаєте, я самоучка.
Сторінки 1