Skip to content

Repository files navigation

g4-driver

CI

BLDC Driver with STSPIN32G4

Simulation Results

FOC control simulation results generated by the bldc-sim crate.

Simulation Parameters

Motor Parameters (Maxon EC-i 40 100W 48V)

Parameter Value Unit Description
R_s 0.497 Ω Stator resistance per phase
L_d 0.4975 mH d-axis inductance
L_q 0.4975 mH q-axis inductance
λ_m 8.67 mWb PM flux linkage
J 44 g·cm² Rotor inertia
B 0.00001 N·m·s/rad Viscous friction
Pole pairs 7 - Number of pole pairs
V_dc 48 V DC bus voltage
I_max 10 A Maximum phase current

Datasheet: Maxon EC-i 40

FOC Controller Parameters

Parameter Value Description
Kp 0.5 Speed PI proportional gain
Ki 0.05 Speed PI integral gain
Max acceleration 500 RPM/s Speed ramp rate limit
Control frequency 2.5 kHz FOC update rate

Simulation Settings

Parameter Value Description
Physics dt 10 μs Integration time step
Control period 400 μs FOC control loop period
Integration method RK4 Runge-Kutta 4th order

Step Response (500 RPM)

Step Response 500 RPM

Load Disturbance Response

Load Disturbance

Startup Response

Startup

Ramp Response

Ramp Response

State Machine Simulation

bldc-sim supports full state machine simulation using the bldc crate's state machine module. This allows testing of:

  • OpenLoop → FOC transition: Motor startup sequence with automatic mode transition
  • Stall detection and recovery: Detection of stall conditions and recovery to OpenLoop mode
  • Mode transition tracking: Recording of all mode changes during simulation

Available Scenarios

Scenario Description
StartupWithTransitionScenario Tests startup from standstill through OpenLoop to FOC transition
StateMachineStepResponse Tests step response with mode tracking
StateMachineLoadDisturbance Tests load disturbance rejection with stall monitoring

Example Usage

use bldc_sim::motor_model::MotorParams;
use bldc_sim::scenarios::StartupWithTransitionScenario;
use bldc_sim::simulation::{SimConfig, StateMachineSimulation};

let params = MotorParams::default_small_bldc();
let config = SimConfig {
    duration: 3.0,
    ..Default::default()
};
let mut sim = StateMachineSimulation::new(params, config);

let scenario = StartupWithTransitionScenario::new(500.0)
    .with_max_transition_time(2000.0)
    .with_duration(3.0);

let result = scenario.run(&mut sim);

println!("OpenLoop time: {:.3}s", result.mode_durations.openloop);
println!("FOC time: {:.3}s", result.mode_durations.foc);
println!("Stalls: {}", result.stall_count);

Documentation

About

BLDC Driver with STSPIN32G4

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages