25.2. BLDC FOC Control
25.2.1. Overview
The bldc_foc project contains the speed control and position control of DC brushless motors. - Use the FOC (Field Oriented Control) control algorithm - Support both hardware and software current loop implementation - Support dual closed-loop control of speed and position - Support both ABZ encoder and QEI encoder for position detection
25.2.2. Configurations
This program uses the BLM57050-1000 brushless motor of “Leisai Intelligence”, please refer to the Leisai Intelligence website for the specific parameters of the motor.
Board settings refer to the development board documentation Motor Pin related content
Ensure PWM frequency is set correctly
Ensure motor pole pairs is set correctly
Ensure ADC sampling configuration is correct
Peripheral Configuration:
- PWM Configuration:
Use BLDC PWM module
Configure dead time to prevent shoot-through
Configure complementary PWM output
Support three-phase six-channel PWM output
Support PWM synchronized ADC sampling trigger
Use shadow register to update PWM duty cycle
Support PWM fault protection
- ADC Configuration:
Use two ADC modules to sample U-phase and V-phase current respectively
Configure ADC reference voltage
Configure op-amp gain
Configure sampling precision
Configure sampling resolution
Support DMA transfer
Support ADC synchronized sampling
Support ADC trigger source configuration
Support ADC sampling interrupt
- Encoder Configuration:
Support ABZ encoder and QEI encoder
Configure encoder precision
Configure encoder direction
Configure encoder sampling period
Support encoder position counting
Support encoder speed calculation
- Timer Configuration:
Use GPTMR as timer
Configure current loop sampling period
Configure speed loop sampling period
Configure position loop sampling period
Support timer interrupt
25.2.3. Current Loop Time
Hardware current loop will show time zero. The current loop calculation time is around 1us, this time fluctuates depending on the angle and fluctuates in the range of 25%, which is reproduced by performing the following operation:
Turning off the mcl_app_config.h macros except for MCL_EN_LOOP_TIME_COUNT
Compile option flash_xip_release
25.2.4. Running the demo
The motor runs at default speed. The following data can be configured by serial console:
speed float, range +40~-40, unit r/s - Positive value for forward rotation - Negative value for reverse rotation - 0 for stop
pos int, (-4000, +4000) corresponds to (-360, +360) degrees - Positive value for clockwise direction - Negative value for counterclockwise direction
mode bool, 1- Speed mode 0- Position mode
- Speed mode
Enter the correct speed parameters with serial console
Use PID algorithm for speed control
- Position mode
Set the position of the motor’s shaft, then the motor’s shaft will be locked at the specified position
Use PID algorithm for position control
loop current tick: 399
Mode selection:
0. Location mode.
1. Speed mode.
Enter mode code:
1
Speed mode, motor run, speed is: 20.000000.
Input speed:
10.5
loop current tick: 535
Speed mode, motor run, speed is: 10.500000.
Input speed:
Warning
After the motor is powered on, it will first perform the “alignment” action. If the motor is disturbed at this time, it will produce a jitter
Pay attention to the current size, when abnormalities occur, please cut off the power at any time
When entering values for speed and position, a line break is required as an end-of-entry flag
For first-time operation, it is recommended to start testing at low speed
In position mode, ensure the motor is not subject to external force interference