How to Implement Torque and Speed Control in Cranes

Motor Torque and Speed Performance / Visits:4

The modern crane industry is undergoing a quiet revolution. While hydraulic systems and massive induction motors still dominate heavy lifting, a new class of precision control is emerging at the micro scale. Micro servo motors—those palm-sized, high-torque-density actuators originally designed for robotics and RC applications—are finding their way into specialized crane subsystems. This is not about lifting a 50-ton beam with a servo the size of a coffee cup. Instead, it is about how these tiny powerhouses enable unprecedented torque and speed control in delicate load positioning, anti-sway systems, and automated grab mechanisms.

In this article, we will walk through the practical implementation of torque and speed control in cranes using micro servo motors. We will cover the hardware architecture, the control theory that makes it work, and the real-world coding strategies that turn a hobby-grade servo into an industrial-grade actuator. By the end, you will understand why a micro servo can be the difference between a load that swings dangerously and a load that glides into place with millimeter accuracy.

Why Micro Servo Motors for Crane Control?

Before diving into implementation, it is worth understanding the specific advantages micro servo motors bring to crane applications. Traditional crane drives use large AC or DC motors with gearboxes, encoders, and VFDs (Variable Frequency Drives). These systems are powerful but bulky, expensive, and often overkill for tasks that require fine motion control rather than brute force.

Micro servo motors, by contrast, offer three critical properties:

  • High torque-to-size ratio: A typical micro servo like the MG996R can deliver up to 10 kg·cm of stall torque while measuring only 40mm x 20mm x 38mm. That is enough to control a small hoist drum or a grabber arm on a mini-crane.
  • Built-in feedback: Most micro servos include a potentiometer or magnetic encoder for position feedback. This makes closed-loop control trivial—no external encoder mounting or wiring required.
  • PWM simplicity: Control is achieved through a single PWM signal. No complex field-oriented control algorithms or high-voltage power stages are needed.

The catch? These servos are designed for continuous rotation ranges of 180° or 360°, not for multi-turn absolute positioning. But with clever mechanical design and software, we can overcome this limitation.

Hardware Architecture for Crane Torque and Speed Control

The Core Components

To implement torque and speed control in a crane using micro servo motors, you need the following hardware:

  1. Micro Servo Motor: Choose a metal-gear servo with at least 8 kg·cm torque for light-duty cranes. For heavier applications, consider a servo with a magnetic encoder (e.g., Dynamixel or Herkulex series) that supports multi-turn rotation.
  2. Microcontroller: An Arduino Uno, ESP32, or STM32 board. The ESP32 is preferred for its dual-core processor and built-in Wi-Fi/Bluetooth, which allows remote crane control.
  3. Power Supply: Micro servos draw significant current under load. A 5V 5A supply is a minimum for a single servo; for multiple servos, use a dedicated BEC (Battery Eliminator Circuit) or a regulated power supply.
  4. Mechanical Interface: A timing belt, gear train, or lead screw to convert the servo’s rotational motion into linear hoisting or slewing movement.
  5. Load Cell or Current Sensor: For torque control, you need feedback on the actual force being applied. A simple current sensor (ACS712) on the servo’s power line can estimate torque, since servo current is roughly proportional to torque output.

Wiring Diagram (Simplified)

[Microcontroller] -- PWM Pin --> [Servo Signal Wire] [Microcontroller] -- GND --> [Servo Ground] [Power Supply 5V] -- + --> [Servo Power Wire] [Power Supply GND] -- GND --> [Servo Ground] [Current Sensor] -- in-line --> [Servo Power Wire] [Current Sensor] -- Analog Out --> [Microcontroller ADC Pin]

The current sensor is optional but highly recommended for torque-limited operation. Without it, you are running open-loop torque control, which can lead to servo stall or damage.

Control Theory: PID for Speed and Torque

Speed Control with PID

Speed control in a crane means regulating how fast the hoist drum rotates or how quickly the trolley traverses the bridge. Micro servos are inherently position-controlled devices, but we can trick them into speed control by continuously updating the target position.

Here is the trick: Instead of commanding a fixed position, you command a moving target that advances at a desired rate. For example, if you want the servo to rotate at 30 RPM, you increment the target position by 0.5° every millisecond. The servo’s internal PID controller then tries to catch up, resulting in smooth, controlled motion.

But the internal PID of a cheap servo is often poorly tuned. For industrial-grade performance, you bypass the internal controller and use an external PID loop running on your microcontroller. This gives you full control over the Kp, Ki, and Kd gains.

Speed PID Pseudocode:

cpp float setpoint_speed = 30.0; // RPM float current_position = servo.read(); float error = setpoint_speed - (current_position - last_position) / dt; float output = Kp * error + Ki * integral + Kd * derivative; servo.writeMicroseconds(1500 + output); // 1500 is neutral for continuous rotation servos

Note that for continuous rotation servos, the PWM signal directly controls speed and direction, not position. A pulse width of 1500 µs means stop, 1000 µs means full speed clockwise, and 2000 µs means full speed counterclockwise. This makes speed control trivial—no PID needed for the speed loop itself, only for the outer position loop if you need precise stopping.

Torque Control via Current Limiting

Torque control is more nuanced. Torque is proportional to current in a DC motor, so by limiting the current supplied to the servo, you limit its torque output. This is critical in crane applications to prevent overloading the mechanical structure or damaging the load.

Implement torque control as follows:

  1. Read the current sensor value in real time.
  2. Convert the ADC reading to milliamps using the sensor’s sensitivity (e.g., 185 mV/A for the ACS712).
  3. Compare the measured current to a setpoint current (e.g., 2A for a 10 kg·cm torque limit).
  4. If the current exceeds the setpoint, reduce the PWM signal to the servo (i.e., command a slower speed or stop).

This is essentially a current-limiting loop. It prevents the servo from drawing more than the allowed current, which in turn caps the torque.

Torque Limiting Pseudocode:

cpp float current_limit = 2.0; // Amps float measured_current = readCurrentSensor(); if (measured_current > current_limit) { // Reduce speed command pwm_output -= 10; // Decrease PWM pulse width if (pwm_output < 1000) pwm_output = 1000; // Clamp to min } else { // Allow normal speed command pwm_output = target_speed_pwm; } servo.writeMicroseconds(pwm_output);

This simple approach works well for static loads. For dynamic loads (e.g., a swinging load), you need a more sophisticated torque observer, but for most micro servo crane applications, current limiting is sufficient.

Implementing a Dual-Loop Control System

Position-Speed-Torque Cascade

For professional-grade crane control, you combine position, speed, and torque into a cascade control architecture. The outer loop is position control, the middle loop is speed control, and the inner loop is torque (current) control.

Why cascade? Each loop runs at a different frequency. The torque loop runs fastest (1 kHz), the speed loop runs at 100 Hz, and the position loop runs at 10 Hz. This separation prevents instability and allows each loop to be tuned independently.

Implementation steps:

  1. Torque Loop (Inner): Run at 1 kHz. Read current sensor. Compare to torque reference from speed loop. Output PWM to servo.
  2. Speed Loop (Middle): Run at 100 Hz. Read encoder or potentiometer for velocity. Compare to speed reference from position loop. Output torque reference to inner loop.
  3. Position Loop (Outer): Run at 10 Hz. Read absolute position from a multi-turn encoder or limit switches. Compare to target position. Output speed reference to middle loop.

This architecture is overkill for a simple hobby crane, but it is exactly how industrial servo drives work. Implementing it on a microcontroller like the ESP32 is feasible because of its dual cores—you can run the torque loop on Core 0 and the position/speed loops on Core 1.

Anti-Windup for Integral Terms

A common problem in crane control is integrator windup. When the servo hits a mechanical limit or the load is too heavy, the integral term in the PID controller accumulates a large error. When the load is removed, the integral term dumps all that accumulated error at once, causing a violent overshoot.

Solution: Implement anti-windup by clamping the integral term to a maximum value, or by using a conditional integration technique (only integrate when the output is not saturated).

cpp integral += error * dt; if (integral > integral_max) integral = integral_max; if (integral < -integral_max) integral = -integral_max;

Software Implementation: A Complete Example

Let us put everything together into a working Arduino sketch for an ESP32 controlling a micro servo crane hoist. This example assumes a continuous rotation servo (e.g., FS90R) with a current sensor on the power line.

cpp

include <ESP32Servo.h>

Servo hoistServo; const int servoPin = 13; const int currentPin = 34; // ADC pin for ACS712

// PID parameters for speed control float Kp = 0.5; float Ki = 0.1; float Kd = 0.05; float integral = 0; float lastError = 0; float setpointSpeed = 0; // RPM, positive for hoist up, negative for down

// Current limiting float currentLimit = 1.5; // Amps float measuredCurrent = 0;

void setup() { Serial.begin(115200); hoistServo.attach(servoPin); hoistServo.writeMicroseconds(1500); // Stop pinMode(currentPin, INPUT); }

void loop() { // Read current sensor int adcValue = analogRead(currentPin); float voltage = (adcValue / 4095.0) * 3.3; measuredCurrent = (voltage - 2.5) / 0.185; // ACS712 5A version

// Speed PID calculation float error = setpointSpeed - measuredSpeed(); // measuredSpeed() from encoder integral += error * 0.01; // 100 Hz loop if (integral > 100) integral = 100; if (integral < -100) integral = -100; float derivative = (error - lastError) / 0.01; float output = Kp * error + Ki * integral + Kd * derivative; lastError = error;  // Apply current limit if (measuredCurrent > currentLimit) {     output -= 20; // Reduce speed     if (output < -180) output = -180; }  // Convert output to PWM (1000-2000 µs) int pwmValue = 1500 + output; if (pwmValue < 1000) pwmValue = 1000; if (pwmValue > 2000) pwmValue = 2000;  hoistServo.writeMicroseconds(pwmValue);  delay(10); // 100 Hz loop 

}

float measuredSpeed() { // Placeholder: read encoder or potentiometer to calculate RPM // For continuous rotation servos, this requires an external encoder return 0.0; }

This code is a starting point. In a real crane, you would replace measuredSpeed() with an actual velocity reading from a magnetic encoder mounted on the servo shaft.

Advanced Topics: Multi-Turn Absolute Positioning

The 180° Limitation Problem

Standard micro servos have a rotation range of 180° to 270°. This is insufficient for crane hoisting, which requires multiple rotations to wind a cable. The solution is to use a continuous rotation servo (like the FS90R) or a multi-turn absolute servo (like the Dynamixel XM430).

Continuous rotation servos trade position control for infinite rotation. You lose the ability to command an absolute angle, but you gain the ability to rotate indefinitely. To achieve absolute positioning with a continuous rotation servo, you must add an external multi-turn encoder.

Adding an External Encoder

Mount a magnetic encoder (e.g., AS5600) on the servo shaft or on the drum shaft. The AS5600 can measure 360° with 12-bit resolution, but it is not multi-turn. For multi-turn, you can use a mechanical gear ratio: if the servo rotates 10 times to wind the cable one meter, you can count rotations in software.

Rotation counting pseudocode:

cpp int lastAngle = 0; int fullRotations = 0;

void loop() { int currentAngle = readEncoder(); int delta = currentAngle - lastAngle; if (delta > 180) delta -= 360; if (delta < -180) delta += 360; fullRotations += delta; // Accumulate in degrees lastAngle = currentAngle;

float absolutePosition = fullRotations / 360.0; // In rotations // Use this for position PID 

}

This technique gives you absolute multi-turn positioning with a cheap 360° encoder. The only downside is that on power-up, you lose the rotation count. To solve this, store the rotation count in EEPROM at regular intervals, or use a mechanical limit switch to home the system on startup.

Real-World Crane Applications Using Micro Servos

Anti-Sway Control in Mini Cranes

One of the most impressive uses of micro servo motors in cranes is active anti-sway control. A small servo mounted near the hoist drum can adjust the cable tension dynamically to dampen load oscillations. The servo acts on a small lever arm that changes the effective cable length, introducing a phase-shifted counter-motion.

How it works: An IMU (Inertial Measurement Unit) mounted on the load measures sway angle and angular velocity. A microcontroller runs a state-space controller that outputs a position command to the micro servo. The servo moves a small mass or adjusts a tensioner, creating a force that cancels the sway within seconds.

This is not science fiction—it is a standard feature in modern tower cranes, but implemented with large hydraulic actuators. With micro servos, the same principle can be applied to desktop cranes or small construction equipment.

Precision Grabber Control

In scrap yards or recycling plants, cranes use grabbers to pick up irregular objects. Micro servo motors are ideal for controlling the grabber’s jaw opening angle and grip force. By implementing torque control through current limiting, the grabber can apply just enough force to hold an object without crushing it.

Implementation: Two micro servos control the left and right jaws. Each servo has a current sensor. The microcontroller reads the current and adjusts the grip force to a setpoint. If the object slips (detected by a sudden drop in current), the grip force increases. This creates a adaptive gripping system that works on objects of varying size and fragility.

Automated Hoist Leveling

When a crane lifts an uneven load, the hoist platform tilts. Micro servos can adjust the cable lengths individually to keep the platform level. This is a multi-servo synchronization problem: each servo must move at a different speed to maintain level while the load is lifted.

Control strategy: Use a master-slave architecture. One servo is the master, moving at a constant speed. The other servos are slaves, adjusting their speed based on tilt sensor feedback. A simple proportional controller on the tilt angle works well.

Tuning Tips for Micro Servo Crane Control

Gain Scheduling

Crane dynamics change with load weight and cable length. A PID controller tuned for a 1 kg load will oscillate with a 5 kg load. The solution is gain scheduling: store multiple sets of PID gains for different load ranges, and switch between them based on the measured current (which correlates with load weight).

Deadband Compensation

Micro servos often have a deadband around the neutral position (1500 µs). Within this deadband, the servo does not move even though the PWM signal changes. This causes steady-state error in position control. Compensate by adding a small offset to the PWM signal when the error is small, or by using a dithering technique (adding a high-frequency low-amplitude signal).

Thermal Management

Micro servos are not designed for continuous high-torque operation. In crane applications, the servo may be under load for minutes at a time. This generates heat that can demagnetize the motor magnets or melt the plastic gears. Monitor the servo temperature using a thermistor and reduce the duty cycle if the temperature exceeds 60°C.

Common Pitfalls and How to Avoid Them

Pitfall 1: Ignoring Power Supply Sag

When a micro servo starts under load, it can draw several amps for a few milliseconds. If your power supply cannot deliver this surge, the voltage drops, causing the microcontroller to reset or the servo to behave erratically.

Fix: Use a power supply with at least 20% headroom. Add a 1000 µF capacitor near the servo to handle transient currents.

Pitfall 2: Using Continuous Rotation Servos for Absolute Positioning

Continuous rotation servos have no internal position feedback. If you try to use them for absolute positioning without an external encoder, you will get drift over time.

Fix: Always use an external encoder or limit switches for absolute positioning with continuous rotation servos. Alternatively, use a standard servo with a 180° range and a gearbox to multiply the rotation.

Pitfall 3: Overlooking Mechanical Backlash

Micro servos are often connected to the crane mechanism through gears or belts. Backlash in these mechanical links causes oscillations in the control loop, especially at low speeds.

Fix: Use anti-backlash gears or spring-loaded belt tensioners. In software, add a backlash compensation term that accounts for the direction of motion.

The Future of Micro Servos in Crane Technology

As micro servo motors become more powerful and more intelligent, their role in crane control will expand. We are already seeing servos with built-in CAN bus communication, absolute multi-turn encoders, and integrated current sensing. These “smart servos” eliminate the need for external microcontrollers and sensors, making crane control as simple as sending a command over a serial bus.

Imagine a crane where every joint—hoist, trolley, slewing, and grabber—is controlled by a single smart servo daisy-chained on a CAN bus. The crane operator sends high-level commands (e.g., “lift 2 meters at 0.5 m/s with 10 Nm torque limit”), and each servo handles the low-level PID loops internally. This is not a hypothetical scenario; it is already happening in the robotics industry, and it is only a matter of time before it becomes standard in micro crane applications.

For now, the implementation we have covered—using a microcontroller, current sensor, and PID control—is the most accessible way to achieve professional-grade torque and speed control with off-the-shelf micro servo motors. Whether you are building a desktop crane for a laboratory, a mini construction crane for a maker project, or a specialized industrial grabber, the principles remain the same: measure, control, and protect.

The micro servo motor is not just a toy anymore. It is a precision actuator capable of transforming how we think about crane control at small scales. And with the right implementation, it can deliver performance that rivals systems ten times its size and cost.

Copyright Statement:

Author: Micro Servo Motor

Link: https://microservomotor.com/motor-torque-and-speed-performance/torque-speed-cranes.htm

Source: Micro Servo Motor

The copyright of this article belongs to the author. Reproduction is not allowed without permission.

About Us

Lucas Bennett avatar
Lucas Bennett
Welcome to my blog!

Tags