Фільтрація Back-EMF. Безсенсорні BLDC мотори
Ця стаття про деякі аспекти керування Безколекторними Бездатчиковими двигунами постійного струму (BLDC моторами). При керуванні бездатчиковими моторами положення ротора двигуна визначається за зворотною електрорушійною силою, яку звичай називають Back electromotive force або скорочено Back EMF чи BEMF. Вимірювання BEMF виконується на фазах мотора. Цей сигнал зашумлений здебільшого через використання PWM у керуванні мотором. Окрім того, ступінь зашумленості BEMF залежить від навантаженості мотора, та властивостей самого мотора. У статті розглянуто декілька підходів фільтрації BEMF.
Інформація викладена тут може бути цікавою тим, хто проєктує ESC (регулятори швидкості) для бездатчикових BLDC моторів.
Стаття містить теоретичний матеріал, Ви не знайдете тут схем з конкретними номіналами, коду програм прошивки тощо.
Основи керування бездатчиковими BLDC
Про те, як саме керувати бездатчиковими BLDC моторами я писав ще у минулому житті тут: та показував тут:Отже, якщо ви ще не розумієте, як керувати бездатчиковими BLDC мотором, і ще не пробували зробити свою реалізацію, тоді цю статтю Вам читати зарано.
Схема з компараторами та віртуальною середньою точкою
Використовуємо класичну схему, де напруга з фаз (U,V,W), через дільники напруги, подаються на входи компараторів, а середня точка формується суматором з трьох резисторів. Деякі мікроконтролери мають вбудовані аналогові компаратори, якщо не мають доводиться використовувати зовнішні мікросхеми. У будь-якому випадку схема приблизно така:Звичайний алгоритм
Програмне забезпечення мікроконтролера опрацьовує виходи компараторів через переривання, тобто обробка сигналу відбувається коли змінюється стан компаратора.Цей підхід має працювати. Для більшості дуже простих застосувань з малопотужними моторами цього може бути достатньо. І якщо у Вас все працює як треба далі можна нічого не вдосконалювати.
Імовірно цей підхід буде працювати не завжди коректно, через те, що переривання трапляються значно частіше, ніж напруги вільної фази перетинає середню точку. Чому? Тому що ми використовуємо PWM. І це псує ідеальну картинку. Реальна робоча осцилограма виглядає приблизно так, як на зображенні.
Через що я раніше експериментував і синхронізував обробку BEMF з частотою PWM.
Синхронізація з PWM
Принципова схема кака ж схема, але опитування стану компараторів виконується синхронно PWM. Ідея полягає у тому, щоб робити опит стану компараторів у середині імпульсу PWM, щоб мінімізувати вплив шумів від самого PWM. І це працювало. В певних межах, звісно. Відмінність такого підходу полягає у тому, що ми не використовуємо переривання, а опитуємо стан компараторів лише у певні моменти, синхронно з роботою PWM. І відповідно виміряна швидкість буде кратна кількості PWM імпульсів. Коли оберти мотора зростають, кількість PWM імпульсів між моментами переходу через середню точку зменшується і відповідно зменшується точність вимірювання швидкості обертання мотора. Відповідно і точність визначення положення ротора зменшується. Для роботи такого методу зі швидкісними моторами доведеться збільшувати частоту PWM. А це своєю чергою додатково збільшить нагрів ключів і навантажить драйвери ключів. Для мотора E-MAX Kv:1300, батарея 6S доводилось використовувати PWM частотою не нижче 48 кГц. І мотор стабільно працював на всьому діапазоні обертів, але без великих навантажень.Докладніше про цей метод у відео:
Все б нічого, та такий підхід має недоліки. А саме, при навантаженні, підвищується струм, зростає рівень шумів у фазах, що робить неможливим використання підходів описаних вище без фільтрації сигналу. При навантаженні двигуна зривається синхронізація і мотор зупиняється, або не зупиняється і "ричить".
Хочу зауважити, що підвищення частоти PWM зменшує амплітуду коливання струму двигуна, що своєю чергою зменшує рівень шуму BEMF сигналу. Сучасні ESC для дронів можуть працювати зі значно більшою частотою, до 100kHz. Та на жаль лише підвищення частоти PWM може не розв'язувати проблему.
Необхідність фільтрації
Рано чи пізно доведеться змиритися з думкою, що для забезпечення стабільної роботи у всіх режимах, фільтрація сигналів Back-EMF необхідна.Екранування ліній сигналів, синхронізація компараторів з PWM та інші хитрощі - радикально не покращують ситуацію. Я цілком погоджуюсь з тим, що плату треба розводити з урахуванням перешкод і впливу електричних полів, використовувати якісні конденсатори у ланцюгу живленню, та практика показує, що без фільтрації сигналів не обійтися ніяк.
Я знаю декілька шляхів - апаратний, програмний, комбінований.
Апаратна Фільтрація BEMF
У схему додав конденсатори для фільтрації BEMF.Як тільки Ви додасте конденсатори у схему, регулятор перестане працювати як раніше. Будуть виникати різні неочікувані ефекти. Додавання конденсатора, по-перше, додає затримку у фільтрований сигнал, по друге трохи підвищує рівень сигналу. Друге нас не дуже турбує, а перше доведеться враховувати.
Будь-яка фільтрація дає затримку сигналів
Не важливо використовуєте Ви простий R-C ланцюжок, складніший фільтр, спеціалізовані мікросхеми, або програмно фільтруєте сигнал - затримка сигналу все одно буде. Цю затримку доведеться враховувати. Звісно, Ви можете спробувати компенсувати затримку коригуючи таймінг. Та це хибний шлях, тому що час таймінгу залежить від обертів двигуна, а час затримки від фільтра більш-менш постійна і залежить від номіналів елементів, схеми тощо. Враховувати затримку сигналу від фільтра ми можемо коли будемо задавати таймеру час відліку до наступної комутації. Тобто, віднімати від розрахункового часу час затримки фільтра. Для спрощення я буду називати це "затримкою фільтра", хоча насправді це загальна, комплексна затримка сигналу.Фільтрований сигнал позначений червоною лінією.
Проблема затримки сигналу
При зростанні обертів мотора час між комутаціями зменшується і створюється ситуація, коли час між моментом перетину середньої точки до наступної комутації буде дорівнювати часу затримки сигналу спричиненою фільтром. Тобто, момент коли ми зафіксували перетин вільною фазою середньої точки, і момент наступної комутації збігаються у часі!Якщо уявити, що оберти мотора далі зростуть, тоді виходить, що ми будемо реєструвати перетин вільною фазою середньої точки вже після того, як наступна комутація (яку ми мали запланувати на майбутнє) вже відбулася.
Саме у цей момент, коли фільтрований сигнал, за яким ми відстежуємо момент перетину вільною фазою середньої точки, "наїжджає" на момент наступної комутації, звичайний алгоритм керування безколекторним бездатчиковим мотором перестає працювати. І нам доведеться з цим щось робити.
Така ситуація цілком досяжна на моторах популярно розміру 2807, kv 1300 при резисторах дільника напруги 1kOm, 10kOm, та ємності конденсатора 1nF.
Розв'язання проблеми затримки сигналу
Отже, ми не можемо планувати час комутації, яка вже минула. То що нам робити? Ми будемо використовувати один таймер, який буде працювати беззупинно і виконувати наступні комутації через час, зворотно пропорційний швидкості обертання мотора. При кожному вимірі обертів будемо коригувати час для цього таймера. На малюнку він позначений як timer1.Ще один таймер будемо використовувати для синхронізації (прив'язки) початку роботи таймера 1 до моменту перетину вільної фази через середню точку. На малюнку він позначений як timer2.
Зверніть увагу, що можливо ми не зможемо робити "корекцію фази" кожну комутацію, якщо для цього використовувати один таймер. Це може вплинути на якість роботи на малих обертах, та на високих обертах, коли момент інерції мотора суттєво впливає на стабільність обертів і заважає швидко змінюватися обертам, це не впливає на ситуацію.
В момент корекції фази треба звернути увагу на те, що може статися таке, що комутація щойно була і комутацію робити вже не потрібно лише занулити лічильник таймера timer1, а може бути таке, що до комутації таймер трішки не дорахував, і комутацію потрібно виконати.
Вибір номіналів елементів фільтра
Я не маю чітких методик вибору параметрів фільтрів. Вам доведеться самостійно підбирати їх з урахуванням умов у яких працюватиме Ваш регулятор. Мені дуже допомогли у цьому симулятори схем. Ви можете використовувати будь-які. Я знайшов простий on-line симулятор електричних схем (це не реклама):Комбінована фільтрація BEMF
Апаратна фільтрація BEMF чудово працює з тихохідними моторами. Та практика показала, що не завжди її вистачає. Збільшення номіналів конденсаторів у фільтруючих ланцюгах може мати драматичні результати, тому можна спробувати комбінований підхід.Для того, щоб мій регулятор зміг керувати моторами з різними характеристиками, забезпечував м'який старт, стабільно працював у всьому діапазоні обертів, довелося поєднати апаратну фільтрацію і програмну. При старті використовував метод перевірки компараторів синхронно з PWM. Такий метод дозволяє виконувати додаткову фільтрацію сигналу під час старту мотора і на дуже низьких обертах. Це забезпечило стабільний, м'який старт всіх моторів що я маю. При досягненні обертів певного рівня, виконується перехід на обробку сигналів лише по перериванню від компараторів, як таку, яка забезпечує точніше вимірювання швидкості обертання мотора і забезпечує хорошу роботу при динамічній зміні обертів. З подальшим ростом обертів виконується наступний перехід на використання описаної методики, яка враховує суттєве запізнення фільтрованого сигналу детекції перетину вільною фазою нульової точки.
На жаль зі швидкісними моторами, скажімо з моторами для мультикоптерів, апаратна фільтрація себе не виправдовує і зазвичай не використовується.
Програмна фільтрація BEMF
Для швидкісних моторів, таких, як для мультикоптерів, доцільно використовувати програмну фільтрацію BEMF (без фільтруючих конденсаторів). Апаратна фільтрація у цьому випадку може заважати, тому Ви навряд знайдете у схемах регуляторів для дронів фільтруючі конденсатори у ланцюгах BEMF.
Навіть найпростішою програмною фільтрацією можна досягти задовільного результату для швидкісних моторів.
Як це робиться? При спрацюванні переривання від одного з компараторів виконується перевірка стану компаратора декілька разів поспіль. Якщо він НЕ дриґався туди-сюди, вважаємо що вільна фаза перетнула нульову точку. Інакше виходимо з обробника переривань.
Важливо забезпечити як змога швидшу роботу обробника переривань і не допускати його "зависання" і пропусків зміну станів компараторів. Це може статися якщо не коректно скидати прапорці переривань.
Приклад того, як це робиться можна подивитися в одному з популярних відкритих проєктів AM32: https://github.com/am32-firmware/am32
Я у своїх експериментах я використовував власний код і мікроконтролер STM32G030F6P6, який працює на частоті 64 МГц.
P.S. У розв'язанні питання роботи з фільтрацією BEMF мені допомогла стаття: Sensorless BLDC Control With Back-EMF Filtering. Рекомендую для читання.
Недавні записи
- Фільтрація Back-EMF. Безсенсорні BLDC мотори
- Text to speech. Українська мова
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
Tags
barometer dht11 wifi bmp280 meteo ssd1306 uart books dc-dc lcd tim ssd1331 timer programmator battery exti mpx4115a motor flask nodemcu usb dma html java-script rs-232 st-link 3d-printer rfid esp8266 nvic encoder gpio piezo eb-500 brushless docker sms pmsm ngnix servo examples avr led smd i2c bkp eeprom usart solar soldering python flash stm32 raspberry-pi bme280 mpu-9250 hih-4000 foc bldc sensors rtc pwm capture adc max1674 atmega gps bluetooth remap mongodb mpu-6050 websocket css git watchdog displays ethernet web options
Архіви