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) управління мотором для створення гіростабілізатора камери?
Недавні записи
- Text to speech. Українська мова
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
Tags
docker sensors rtc led timer wifi remap sms css websocket mongodb bme280 rfid bluetooth esp8266 nodemcu bkp piezo bmp280 i2c mpu-6050 encoder examples avr brushless ngnix nvic displays bldc java-script pmsm barometer pwm lcd ethernet stm32 raspberry-pi capture usart gpio exti atmega meteo solar smd dma adc eeprom eb-500 flask python ssd1306 uart options flash mpx4115a html gps st-link 3d-printer servo dc-dc foc git books battery hih-4000 watchdog dht11 web tim programmator ssd1331 mpu-9250 usb rs-232 motor max1674 soldering
Архіви