GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Home
  • SimpleFOC Boards
  • SimpleFOCShield
  • Getting Started
  • Soldering pads
  • Soldering Pads v1.x
  • Soldering Pads v2.x
  • Soldering Pads v3.x
  • Connecting the hardware
  • Writing the code
  • Board Fabrication
  • Shield v1.x
  • Shield v2.x
  • Shield v3.x

This view

  • Original page
  • New address

GeezerVison is showing docs.simplefoc.com — Position Control

SimpleFOCDocs
  • Home
  • GitHub
  • Discord
  • Community
  • Shop
  • Contact
★ Loading...
Helpful?

How can we improve this page?

✓ Thank you! Your feedback helps improve SimpleFOC docs.
On this page
  • Position control loop
    • How it works
    • Comparison of the two strategies

Position control loop

This control loop allows you to move your motor to the desired angle in real-time. There are two different strategies for this control loop:

  • Standard cascade angle control
    • angle control loop is closing the loop around the velocity control loop, which is closing the loop around the torque control loop.
    • Cascade angle control loop (Recommended)
  • Non-cascade angle control
    • angle control loop is closing the loop directly around the torque control loop.
    • Non-cascaded angle control loop

You can enable the angle/position control loop by setting the controller variable of the motor to either MotionControlType::angle or MotionControlType::angle_nocascade depending on which strategy you want to use.

// set angle/position motion control loop
motor.controller = MotionControlType::angle; // standard cascade angle > velocity > torque control
// or
motor.controller = MotionControlType::angle_nocascade; // non-cascade angle control angle > torque control

You can test this algorithm by running the examples in motion_control/position_motion_control/ folder.

How it works

Cascade Position Control No-cascade Position Control

BLDC motors Stepper motors

In Cascade position control the angle control loop is closing the loop around the velocity control loop, which is closing the loop around the torque control loop. This means that the angle controller will be setting the velocity target to the velocity controller, and then the velocity controller will be setting the torque target to the torque controller.

This angle control loop is therefore created by adding one more control loop in cascade on the velocity control loop like showed on the figure above. The loop is closed by using additional PID controller and an optional low pass filter. The controller reads the angle a from the motor (filters is optionally) and determines which velocity vd the motor should move to reach the desired angle ad set by the user. And then the velocity controller reads the current filtered velocity from the motor vf and sets the torque target (uq voltage or iq current) to the torque control loop, needed to reach the velocity vd, set by the angle loop.

Go to Cascade Control (Recommended)

In No-cascade position control the angle control loop is closing the loop directly around the torque control loop. This means that the angle controller will be setting the torque target to the torque controller, without using the velocity controller in between.

This angle control loop is created by adding one more control loop on top of the torque control loop like showed on the figure above. The loop is closed by using additional PID controller and an optional low pass filter. The controller reads the angle a from the motor (filters is optionally) and sets the torque target (uq voltage or iq current) to the torque control loop, needed to reach the desired angle ad, set by the angle loop.

Go to Non-Cascade Control (Advanced)

Comparison of the two strategies

Control Mode Control Structure Pros Cons
Cascade Position Control (angle) P(angle)
+ PI (velocity)
✔️ Safe Velocity Limits: Inherits the velocity_limit from the inner loop, preventing runaway speeds
✔️ Superior Stability: Dual-loop damping makes it much more robust against high-inertia loads .
✔️ High-Speed Precision: Provides better tracking performance at high velocities.
❌ Tuning Complexity: Requires tuning two PID controllers (Velocity and Angle) plus the Low Pass Filter
❌ Not always intuitive: Conceptually hard to understand the interaction between the two loops.
Non-Cascade Control (angle_nocascade) PD
or PID in special cases
✔️ Low Latency: Direct path from angle to torque provides the fastest possible physical response
✔️ High Stiffness: Acts as a “Virtual Spring,” reacting instantly to disturbances.
✔️ Easier Setup: Only one PID controller to tune
❌ Speed Instability: No internal velocity damping; can vibrate at high speeds
❌ No Velocity Limit: The motor can reach unsafe speeds instantly if the angle error is large (Runaway Risk)
❌ Inertia Sensitive: Hard to stabilize large masses without aggressive D gain tuning.

Use-cases for Cascade Position Control:

  • Robotic arms with varying loads and high precision requirements
  • CNC machines where stability at high speeds is critical
  • Applications where the the velocity needs to be limited or variable (e.g. conveyor belts, camera gimbals, safety concerns)
  • Any application where safety and reliability are a concern

Go to Cascade Control (Recommended)

Use-cases for No-Cascade Position Control:

  • Setups where there is an external mechanical damping or low inertia load
  • Application where the motor fights gravity (e.g. vertical axis) and the load is never removed (I gain is important here)
  • Systems simulating a spring-damper (PD controller)

Go to Non-Cascade Control (Advanced)


Table of contents

  • Cascade Position Control
  • Non-Cascade Position Control

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.