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, векторное управление (російською)
Недавні записи
- Своя бібліотека для векторного керування безколекторними моторами
- Not Allowed
- Адаптивний ПІД регулятор
- Конструктор регуляторів моторів. Структура.
- Конструктор регуляторів моторів. Анонс.
- Golang + Vue + PostgreSQL #2
- Golang + Vue + SQLite #1
- FOC Position Control. Векторне управління - Стабілізація положення
- Flask & Vue. Завантаження файлів. Приклад № 2.10
- Рекуперація. FOC і цікаві досліди
Tags
gpio piezo hih-4000 bme280 mpu-6050 options watchdog capture led brushless foc docker wifi dc-dc flask tim gps mpu-9250 sms bldc java-script examples solar smd max1674 rfid ethernet raspberry-pi sensors usart lcd dht11 displays motor websocket timer flash pwm stm32 python bmp280 battery eb-500 web html css mongodb books git ssd1306 i2c dma exti atmega pmsm meteo avr mpx4115a remap eeprom encoder rs-232 soldering bluetooth esp8266 ngnix ssd1331 rtc bkp servo st-link programmator uart 3d-printer usb adc nvic nodemcu barometer
Архіви