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, векторное управление (російською)
Недавні записи
- 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
Архіви