STM32 Motor control SDK - керування оборотами мотора за допомогою потенціометра 📑
Векторне управління безколекторним мотором. Як програмно керувати обертами мотора за допомогою потенціометра. X-CUBE-MCSDK, STM32 Motor Control Software Development Kit (MCSDK) для мікроконтролерів STM32.
Приклад для мікроконтролера STM32F303RE і плати X-NUCLEO-IHM07M1
Використовується ADCЗавантажити архів з прикладом використання ADC
Пояснення до прикладу
Дивись файл user_code.c, та файл main.cПриклад для мікроконтролера STM32G431RB і плати X-NUCLEO-IHM16M1
Використовується Regular ConversionsЗавантажити архів з прикладом використання Regular Conversions
Пояснення до прикладу
Дивись файл user_code.c, та файл main.cПриклади зроблені для SW4STM32! Якщо Ви використовуєте іншу IDE, можливо, Вам не варто качати весь приклад. Я наведу фрагменти коду з функціями для використання Regular Conversions.
user_code.c:
#include "motorcontrol.h"
# include "stdlib.h"
#include "stm32g4xx_ll_adc.h"
#define SPEED_MAX MAX_APPLICATION_SPEED_RPM
#define SPEED_MIN OBS_MINIMUM_SPEED_RPM
#define POT_MAX 4000
#define POT_START 200
#define POT_STOP 50
#define POT_SPEED_ARRAY_SIZE 4
#define POT_SPEED_DELTA 10
int32_t POT_SPEED;
int32_t POT_SPEED_ARRAY[POT_SPEED_ARRAY_SIZE];
int32_t POT_SPEED_AVERAGE;
int32_t POT_SPEED_INDEX;
RegConv_t PotentiometerConv;
uint8_t PotentiometerHandle;
void Potentiometer_Init() {
uint8_t i;
for (i=0; i<POT_SPEED_ARRAY_SIZE; i++) {
POT_SPEED_ARRAY[i] = 0;
}
POT_SPEED_INDEX=0;
POT_SPEED = 0;
PotentiometerConv.regADC = ADC2;
PotentiometerConv.channel = 8;
PotentiometerConv.samplingTime = LL_ADC_SAMPLINGTIME_6CYCLES_5;
PotentiometerHandle = RCM_RegisterRegConv(&PotentiometerConv);
}
void Potentiometer_Process() {
uint8_t i;
uint16_t ADC_VALUE;
State_t motorState = MC_GetSTMStateMotor1();
if(RCM_GetUserConvState() == RCM_USERCONV_IDLE)
{
RCM_RequestUserConv(PotentiometerHandle);
}
else if (RCM_GetUserConvState() == RCM_USERCONV_EOC)
{
ADC_VALUE = RCM_GetUserConv()>>4;
POT_SPEED_ARRAY[POT_SPEED_INDEX] = SPEED_MIN + ( (SPEED_MAX-SPEED_MIN) * ((int32_t)ADC_VALUE - POT_STOP) / (POT_MAX-POT_STOP) ) ;
POT_SPEED_INDEX++;
if (POT_SPEED_INDEX>=POT_SPEED_ARRAY_SIZE) {
POT_SPEED_INDEX=0;
}
POT_SPEED_AVERAGE = 0;
for (i=0; i<POT_SPEED_ARRAY_SIZE; i++) {
POT_SPEED_AVERAGE = POT_SPEED_AVERAGE + POT_SPEED_ARRAY[i];
}
POT_SPEED_AVERAGE = POT_SPEED_AVERAGE/POT_SPEED_ARRAY_SIZE;
if ( abs(POT_SPEED_AVERAGE - POT_SPEED) > POT_SPEED_DELTA) {
POT_SPEED = POT_SPEED_AVERAGE;
MC_ProgramSpeedRampMotor1((int16_t)(POT_SPEED/6), 100);
}
if( ADC_VALUE > POT_START ) {
if (motorState == IDLE) {
MC_StartMotor1();
}
}
else {
if( ADC_VALUE < POT_STOP ) {
if (motorState == RUN) {
MC_StopMotor1();
}
}
}
}
}
ДВИСЬ ТАКОЖ:
STM32 Motor control SDK №1 - як створити перший проект:
STM32 Motor control SDK №2 - Як програмно керувати обертами мотора:
Безколекторні мотори "на пальцях":
PMSM. Вимірювання фазних струмів:
Навіщо потрібні перетворення Кларк, пряме і зворотне перетворення Парка.
Відео про саморобний дерев'яний безколекторний двгун:
Відео про розрахунку потужності двигуна:
Програма розрахунку приблизної потужності мотора:
https://blog.avislab.com/uploads/motor/#/
Статті по безколекторним двигунам:
- Бесколлекторный мотор постоянного тока. Что это такое?
- Устройство бесколлекторного мотора
- Управление бесколлекторным мотором с датчиками Холла (Sensored brushless motors)
- Управление бесколлекторными моторами без бездатчиков (Sensorless BLDC)
- Запуск бесколлекторного мотора без бездатчиков (Sensorless BLDC)
- Определение положения ротора бесколлекторного мотора в остановленном состоянии
- Регулятор бесколлекторного мотора. Структура (ESC)
- Схема регулятора бесколлекторного мотора (Схема ESC)
- Силова частина регулятора BLDC двигунів
- Література по безколекторним двигунам.
- Безколекторні двигуни. Приклади програм для мікроконтролера
- Схема регулятора BLDC на STM32
- STM32. Приклад. Керування безколекторним двигуном (BLDC)
- STM32. Приклад. Керування PMSM. Приклади програм
- Видео о бесколлекторных моторах. BLDC, PMSM, векторное управление (російською)
Написав цікаву статтю як можна девелопити для МК в терміналі (vim/neovim + cmake) https://solderkid-blog.netlify.app/stm32/cmake
Недавні записи
- Фільтрація 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
Архіви