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
Tags
web java-script bmp280 adc bldc stm32 rs-232 programmator 3d-printer flash pwm sms motor docker raspberry-pi meteo gps ngnix bme280 timer ssd1331 mpu-6050 bkp battery rfid st-link tim mpx4115a ssd1306 encoder atmega pmsm wifi options rtc examples nvic soldering mongodb esp8266 books lcd foc flask barometer bluetooth ethernet brushless uart watchdog servo gpio solar git remap dma usart eb-500 smd nodemcu sensors displays html python capture dht11 led i2c eeprom piezo exti websocket max1674 usb dc-dc avr hih-4000 css mpu-9250
Архіви







