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) управління мотором для створення гіростабілізатора камери?
Недавні записи
- Фільтрація 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
Архіви