Cascade PID

Tutorial demonstrates cascade PID control of motor.

Cascade PID

Cascade PID: The output of the previous PID controller is used as the input of the next PID controller.

In cascade PID control, the speed loop is used as the inner loop and the position loop is used as the outer loop: the output of the position PID is used as the input of the speed PID, that is, the output of the position PID is used as the target value of the speed PID for control.

Example: Control the motor to reach a specified distance at a specified speed.

Single-stage/cascade difference

Single-stage PID

Position PID can make the motor run a specified number of turns, but the speed control during the movement is relatively poor.

Incremental PID can make the motor run at a specified speed, but does not directly control the position or angle of the motor.

Cascade PID

Position PID can control the distance/number of turns of the motor, and incremental PID can control the speed of the motor.

PID inner loop: incremental PID

PID outer loop: position PID

Code implementation

The output of position PID is used as the input of speed PID, that is, the output of position PID is used as the target value of speed PID for control

Software code

Since the relevant peripheral driver tutorial has been introduced before, it will not be introduced here!

Experimental phenomenon

The Contact_PID.hex file generated by the project compilation is located in the OBJ folder of the Contact_PID project. Find the Contact_PID.hex file corresponding to the project and use the FlyMcu software to download the program into it.

After the program is downloaded successfully: the motor will rotate to the preset encoder count value, the serial port will print the button status and motor speed and encoder value (corresponding to the distance the motor rotates), the button can switch the LED status and control the motor to run to the set pulse position and stop.

Note: Since each motor is different, the value printed by the serial port may be slightly different from the value set by the program; we can modify the Kp, Ki, Kd parameters in the program to make the encoding value as close to the value set by the program as possible.

image-20240812170440704