FOC Position Control. Векторне управління - Стабілізація положення
Безколекторні двигуни можливо використовувати не тільки як тяглові, а ще як сервоприводи для систем позиціювання. У цьому випадку їх не слід порівнювати з кроковими електродвигунами. Використовуючи Безколекторні двигуни можна побудувати більш досконалу систему утримування положення. Навіть як що вплив зовнішніх сил буде намагатися зрушити систему з заданого положення, двигун буде намагатися утримувати задане положення. А якщо зовнішні сили відхилять систему від заданого положення, двигун поверне її у задане положення. Для того, щоб система могла оцінювати положення, двигун має бути обладнаний датчиком положення (зазвичай енкодером). Використовуючи зворотній зв'язок з датчика положення, контролер зможе керувати двигуном для забезпечення утримання положення. Звісно, така система буде більш складною і більш дорогою за просту систему з кроковими електродвигунами без зворотного звʼязку.
Для реалізації системи стабілізації положення за допомогою MCSDK потрібно:
- Безколекторний двигун (можна без датчиків Холла)
- Енкодер, який монтується на вал двигуна, або такий на який можна передати оберти валу двигуна механічним шляхом
- Контролер безколекторних двигунів на базі мікроконтролера STM32, який здатний працювати з векторним керуванням (FOC) та підтримується MCSDK
У прикладі я буду використовувати двигун Longs Brushless Motor Model: 57BL02 24VDC 3000RPM (www.longs-motor.com):
Енкодер квадратурний E38S6G5-600B-G24N:
У якості контролера я використаю свою тестову плату розроблену саме для вивчення MCSDK.
Схема, файли плати, відео про плату і знайдете за цим посиланням: https://blog.avislab.com/foc-brd/
Підключення
Схема підключення плати мотора та енкодера:Програмна реалізація виконана за допомогою MCSDK
Для того щоб створити проект MCSDK потрібно вказати:
1. Тип керування (положення)
2. Вказати параметри мотора не помившись у визначенні кількості пар полюсів (не сплутати з кількістю полюсів). Це важливо.
3. В параметрах мотора в датчиках вказати параметри енкодера, точно вказавши кількість імпульсів на один оберт. Це важливо.
Енкодери можуть бути з двома і з трьома виходами. У мене енкодер з двома виходами (Channel A, Channel B), тому у налаштуваннях галку "Encoder Alignment" не ставимо.
4. В Speed Sensing у якості датчика положення вказати енкодер.
А в налаштуваннях осьового датчика нічого не має бути
Завантажити проєктом для MCSDK можна за цим посиланням: Encoder.stmcx
Оскільки виходи енкодера потребують підтягуючих резисторів, як і датчики Холла, я вирішив їх підключити до виводів плати, призначених для датчиків Холла. У цьому проекті я не буду використовувати датчики Холла. У своїх експериментах мені не вдалося поєднати роботу відразу і датчиків Холла і енкодара. Хоча візуальна частина MCSDK дозволяє це налаштувати, мені не вдалося отримати робочий код для мого мікроконтролера.
Програмне керування положенням
Після генерації коду за допомогою MCSDK потрібно додати деякі операції для запуску роботи двигуна.
Треба ввімкнути двигун, і обов'язково дочекатися стабілізації положення.
...
MC_ProgramPositionCommandMotor1(0.0, 0.0);
MC_StartMotor1();
while(MC_GetAlignmentStatusMotor1()!=TC_ALIGNMENT_COMPLETED){
HAL_Delay(10);
}
...
Оскільки у мого енкодера немає сигналу CH_Z, положення мотора після стабілізації буде прийняте за 0. Якби був енкодер з трьома вхідними сигналами (CH1, CH2, CH_Z) мотор зайняв би початкове положення згідно сигналу енкодера. (Я так гадаю :))
Після чого командами MC_ProgramPositionCommandMotor1 можемо задавати положення в радіанах і період за який це положення має бути зайняте у секундах.
...
HAL_Delay(2000);
MC_ProgramPositionCommandMotor1(3.0, 0.9);
HAL_Delay(2000);
MC_ProgramPositionCommandMotor1(-3.0, 0.9);
...
Використання енкодера для ручного керування положення мотора
Якщо у програмі задати положення 0 і не міняти його, тоді, знявши з мотора енкодер і обертаючи вал енкодера, Двигун буде повторювати рухи енкодера. Таким чином можна зробити систему, яка повторює рухи, екзоскелет, наприклад :) Насправді, у такій системі з'являється певний недолік, про який Ви мабуть відразу здогадалися - відсутність зворотного зв'язку за положенням.Тюнінг PID - регуляторів
Після того, як все зарухалось можна зайнятися підбором коефіцієнтів PID - регуляторів. Можна змінювати їх в проєкті: Encoder06.png або в коді програми. Наприклад, таким чином:
PID_SetKP(&PIDSpeedHandle_M1, (int16_t)1000);
PID_SetKI(&PIDSpeedHandle_M1, (int16_t)100);
PID_SetKP(&PIDIqHandle_M1, (int16_t)500);
PID_SetKI(&PIDIqHandle_M1, (int16_t)10);
PID_SetKP(&PIDIdHandle_M1, (int16_t)500);
PID_SetKI(&PIDIdHandle_M1, (int16_t)10);
Завантажити
Проєкт MCSDK для вказаних вище мотора(Longs Brushless Motor Model: 57BL02 24VDC 3000RPM), енкодера (E38S6G5-600B-G24N) і моєї плати можна завантажити тут: Завантажити проєктом для MCSDK можна за цим посиланням: Encoder.stmcxЛітература :)
Детальніше про те, як працює MCSDK з системою позиціювання читайте у документації:Здравствуйте, заказал изг. плат по вашему проекту. У меня есть вопрос по FOC. Вы не могли бы сделать один опыт. Включить мотор на движение по часовой стрелке, при этом руками крутить его против часовой. Т.е мотор выступает как сопротивление ручному вращению. Будут ли при исп. FOC ощущаться подергивания (перескоки полярностей полюсов). Если есть возможность, то для этого опыта исп. управление svm или svpwm. По идее при FOC не должны ощущаться рывки, т.к полярность меняется плавно и вместе с углом положения ротора, в этом хорошо помогает энкодер. Очень интересно, как это на практике выходит. Заранее спасибо!
Для того, чтобы мотор выступал как сопротивление ручному вращению, ним нужно управлять в режиме стабилизации момента. Если управлять в режиме стабилизации скорости или стабилизации положения, то регулятор приложит все усилия, чтобы сломать Вам руки. В режиме стабилизации момента заметных подергиваний не наблюдается. Касательно энкодера, то я его использовал только в режиме стабилизации положения. Совместно исползовать датчики Холла и энкодер у меня не получилось. Обратите внимание, что последние версии MCSDK (X-CUBE-MCSDK-Y) больше не поддрживают микроконтроллеры сери STM32F103.
Добрий день. Хотів запитати чи підійде ця схема (Position control) управління мотором для створення гіростабілізатора камери?
Недавні записи
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
- DC-DC для IGBT драйверів ізольований 2 W +15 -8 вольт
Tags
battery soldering java-script ngnix adc rs-232 flask esp8266 watchdog web exti solar mongodb rtc sms pwm usart books ethernet smd git websocket meteo css python dc-dc displays led ssd1306 eeprom gpio barometer max1674 mpx4115a brushless motor mpu-6050 timer sensors remap servo bldc atmega pmsm 3d-printer flash encoder examples dma raspberry-pi tim ssd1331 piezo mpu-9250 rfid eb-500 foc bme280 gps nvic dht11 bluetooth hih-4000 stm32 st-link docker uart avr html wifi bmp280 bkp nodemcu options usb lcd programmator i2c capture
Архіви