# Harmonic Drive

High-ratio speed reducer based on elastic deformation of an elliptical gear

**Libraries:**

Simscape /
Driveline /
Gears

## Description

The Harmonic Drive block represents a compact, high-ratio speed reduction mechanism that contains three key components:

Strain wave generator

Elliptical gear

Circular ring gear

A harmonic drive is backlash-free with a high-ratio of speed reduction by design. This is advantageous for systems that require precise gear positioning. The base shaft turns the strain wave generator, which is elliptical with bearings around the circumference. The bearings allow the strain wave generator to rotate within the elliptical gear. The elliptical gear is flexible, and the motion of the strain wave generator causes the vertices of the elliptical gear to move. This deformation of the ellipse causes the teeth of the elliptical gear to slowly climb the teeth of the circular ring gear. The ring gear has more teeth than the elliptical gear to allow for this motion. The elliptical gear transmits torque to the output shaft while rotating within the ring gear.

Meshing occurs concurrently at both vertices of the elliptical gear. This design doubles the teeth in mesh, thereby increasing the torque capacity of the drive system.

The internal meshing between the two gears causes the elliptical gear axis to spin counter to the elliptical strain wave generator.

Large reduction ratios arise from the near-equal gear tooth numbers. The effective gear reduction ratio is

$$r=\frac{{n}_{\text{E}}}{{n}_{\text{C}}-{n}_{\text{E}}}\text{\hspace{0.17em}},$$

where:

*r*is the gear reduction ratio.*n*_{C}is the number of teeth on the circular ring gear.*n*_{E}is the number of teeth on the elliptical gear.

The Simple Gear block provides the foundation for this block.

### Ring Gear Rotation

You can enable rotation of the circular ring gear by setting **Ring gear
rotation** to `On`

. The block exposes port
**R**, which allows you to control the rotational motion of the
ring gear by using a mechanical rotational input signal.

**Note**

The **Ring gear rotation** parameter determines how you
parameterize meshing losses.

When you set **Ring gear rotation** to
`Off`

, the block calculates the efficiencies using the
Simple Gear block implementation. In this case,
you parameterize the meshing losses the same way you would for the
Simple Gear block. However, when you select
`On`

, the block calculates the efficiencies by
implementing the Planetary Gear block. For this case,
you parameterize the meshing losses the same way you would for the
Planetary Gear block.

### Thermal Model

You can model
the effects of heat flow and temperature change by enabling the optional thermal port. To enable
the port, set **Friction model** to ```
Temperature-dependent
efficiency
```

.

### Variables

Use the **Variables** settings to set the priority and initial target
values for the block variables before simulating. For more information, see Set Priority and Initial Target for Block Variables.

## Ports

### Conserving

**B** — Base shaft

mechanical rotational

Mechanical rotational conserving port associated with the base shaft and the strain wave generator.

When you set **Ring gear rotation** to
`On`

, this port corresponds to port
**S** of the Planetary
Gear block. This is the sun gear.

**F** — Follower shaft

mechanical rotational

Mechanical rotational conserving port associated with the follower shaft and the flexible spline.

When you set **Ring gear rotation** to
`On`

, this port corresponds to port
**R** of the Planetary
Gear block. This is the ring gear.

**C** — Circular spline

mechanical rotational

Mechanical rotational conserving port associated with the circular spline.

When you set **Ring gear rotation** to
`On`

, this port corresponds to port
**C** of the Planetary
Gear block. This is the carrier gear.

#### Dependencies

To enable this port, set **Ring gear rotation**
to `On`

.

**H** — Heat transfer

thermal

Thermal conserving port associated with heat transfer.

#### Dependencies

To enable this port, set **Friction model** to
either `Temperature-dependent efficiency`

or ```
Temperature and load-dependent
efficiency
```

.

## Parameters

### Main

**Ring gear rotation** — Option to simulate ring gear motion

`Off`

(default) | `On`

Option to simulate ring gear rotation. Set this parameter to
`On`

to expose port
**R**.

**Number of teeth on elliptical gear** — Elliptical gear teeth

`100`

(default) | positive scalar

Total number of teeth protruding outward from the elliptical gear perimeter. The value of this parameter should be slightly smaller than the number of teeth on the circular ring gear. The default difference of two teeth is common. The ratio of the two gear tooth numbers defines the relative angular velocities of the base and follower shafts.

**Number of teeth on circular gear** — Circular gear teeth

`102`

(default) | positive scalar

Number of teeth protruding inward from the circular ring gear perimeter. The value of this parameter should be slightly larger than the number of teeth on the elliptical gear. The default difference of two teeth is common. The ratio of the two gear tooth numbers defines the relative angular velocities of the base and follower shafts.

### Meshing Losses

To enable these parameters, set **Ring gear rotation** to
`Off`

.

**Friction model** — Gear friction model

```
No meshing losses - Suitable for HIL
simulation
```

(default) | `Constant efficiency`

| `Load-dependent efficiency`

| `Temperature-dependent efficiency`

| ```
Temperature and load-dependent
efficiency
```

Option to include friction meshing losses:

`No meshing losses - Suitable for HIL simulation`

— The block ignores meshing losses.`Constant efficiency`

— You specify a component efficiency that remains constant throughout the simulation.`Load-dependent efficiency`

— The block reduces torque transfer by a variable efficiency factor. This factor falls in the range 0 <*η*< 1 and varies with the torque load.`Temperature-dependent efficiency`

— The block determines the torque transfer efficiency from the input at port**H**. This factor falls in the range 0 <*η*≤ 1 and is independent from load.`Temperature and load-dependent efficiency`

— The block reduces torque transfer by a variable efficiency factor that depends on temperature and load. This factor falls in the range 0 <*η*< 1 and varies with the torque load.

#### Dependencies

To enable this parameter, set **Ring gear
rotation** to `Off`

.

**Efficiency** — Torque transfer efficiency

`0.95`

(default) | positive scalar in the range of (0, 1]

Torque transfer efficiency (*η*) between base and
follower shafts. This parameter is inversely proportional to the meshing
power losses.

#### Dependencies

To enable this parameter, set **Friction model**
to `Constant efficiency`

.

**Follower power threshold** — Value above which the full efficiency factor is applied

`0.001`

`W`

(default) | positive scalar

Absolute value of the follower shaft power above which the full efficiency factor is in effect. A hyperbolic tangent function smooths the efficiency factor from zero when at rest to the full efficiency value at the power threshold.

As a guideline, the power threshold should be lower than the expected power transmitted during simulation. Higher values might cause the block to underestimate efficiency losses. However, very low values may raise the computational cost of simulation.

#### Dependencies

To enable this parameter, set **Friction model**
to `Constant efficiency`

.

**Input shaft torque at no load** — Net torque on idle shaft

`0.1`

`N*m`

(default) | positive scalar

Net torque (*τ*_{idle}) acting on
the input shaft in idle mode, e.g., when torque transfer to the output
shaft equals zero. For nonzero values, the power input in idle mode
completely dissipates due to meshing losses.

#### Dependencies

To enable this parameter, set **Friction model**
to `Load-dependent efficiency`

.

**Nominal output torque** — Value of torque at which efficiency is normalized

`5`

`N*m`

(default) | positive scalar

Output torque (*τ*_{F}) at which
to normalize the load-dependent efficiency.

#### Dependencies

To enable this parameter, set **Friction model**
to `Load-dependent efficiency`

.

**Efficiency at nominal output torque** — Transfer efficiency

`0.95`

(default) | positive scalar in the range of (0,1]

Torque transfer efficiency (*η*) at the nominal
output torque. Larger efficiency values correspond to greater torque
transfer between the input and output shafts.

#### Dependencies

To enable this parameter, set **Friction model**
to `Load-dependent efficiency`

.

**Follower angular velocity threshold** — Value above which the full efficiency factor is applied

`0.01`

`rad/s`

(default) | positive scalar

Absolute value of the follower shaft angular velocity above which the
full efficiency factor is in effect
(*ω*_{F}). Below this value, a
hyperbolic tangent function smooths the efficiency factor to one,
lowering the efficiency losses to zero when at rest.

As a guideline, the angular velocity threshold should be lower than the expected angular velocity during simulation. Higher values might cause the block to underestimate efficiency losses. However, very low values may raise the computational cost of simulation.

#### Dependencies

To enable this parameter, set **Friction model**
to `Load-dependent efficiency`

.

**Temperature** — Array for tabular parameterization of efficiency

`[280 300 320]`

`K`

(default) | vector

Array of temperatures used to construct an efficiency lookup table.
The array values must increase from left to right. The temperature array
must be the same size as the efficiency array in temperature-dependent
models. The array must be the same size as the
**Efficiency** array.

#### Dependencies

To enable this parameter, set **Friction model**
to either:

`Temperature-dependent efficiency`

`Temperature and load-dependent efficiency`

**Efficiency** — Array of gear efficiencies

`[0.95 0.9 0.85]`

(default) | vector

Array of efficiencies used to construct a 1-D temperature-efficiency
lookup table for temperature-dependent efficiency models. The array
elements are the efficiencies at the temperatures in the
**Temperature** array. The two arrays must be the
same size.

#### Dependencies

To enable this parameter, set **Friction model**
to either:

`Temperature-dependent efficiency`

`Temperature and load-dependent efficiency`

**Follower power threshold** — Power below which numerical smoothing is applied

`0.001`

`W`

(default) | positive scalar

Absolute value of the follower shaft power above which the full efficiency factor is in effect. A hyperbolic tangent function smooths the efficiency factor between zero when at rest and the value provided by the temperature-efficiency lookup table when at the power threshold.

#### Dependencies

To enable this parameter, set **Friction model**
to ```
Temperature-dependent
efficiency
```

.

**Load at elliptical gear** — Elliptical-gear loads for tabular parameterization of efficiency

`[1 5 10]`

`N*m`

(default) | numerical array

Array of elliptical-gear loads used to construct a 2-D temperature-load-efficiency lookup table for temperature-and-load-dependent efficiency models. The array values must increase from left to right. The load array must be the same size as a single column of the efficiency matrix.

#### Dependencies

To enable this parameter, set **Friction model**
to ```
Temperature and load-dependent
efficiency
```

.

**Efficiency matrix** — Efficiency array for tabular parameterization of efficiency

```
[ 0.85 0.8 0.75; 0.95 0.9 0.85; 0.85 0.8 0.7
]
```

(default) | numerical array

Matrix of component efficiencies used to construct a 2-D
temperature-load-efficiency lookup table. The matrix elements are the
efficiencies at the temperatures in the **Temperature**
array and at the loads in the **Load at elliptical
gear** array.

The number of rows must be the same as the number of elements in the
**Temperature** array. The number of columns must
be the same as the number of elements in the **Load at
elliptical gear** array.

#### Dependencies

To enable this parameter, set **Friction model**
to ```
Temperature and load-dependent
efficiency
```

.

**Follower angular velocity threshold** — Angular velocity below which numerical smoothing is applied

`0.01`

`rad/s`

(default) | positive scalar

Absolute value of the follower shaft angular velocity above which the full efficiency factor is in effect. Below this value, a hyperbolic tangent function smooths the efficiency factor to one, lowering the efficiency losses to zero when at rest.

#### Dependencies

To enable this parameter, set **Friction model**
to ```
Temperature and load-dependent
efficiency
```

.

To enable these parameters, set **Ring gear rotation** to
`On`

.

**Friction model** — Friction model

```
No meshing losses - Suitable for HIL
simulation
```

(default) | `Constant efficiency`

| `Temperature-dependent efficiency`

Friction model for the block:

`No meshing losses - Suitable for HIL simulation`

— Gear meshing is ideal.`Constant efficiency`

— Transfer of torque between the gear wheel pairs is reduced by a constant efficiency,*η*, such that 0 <*η*≤ 1.`Temperature-dependent efficiency`

— Transfer of torque between the gear wheel pairs is defined by the table lookup based on the temperature.

**Sun-planet and ring-planet ordinary efficiencies** — Torque transfer efficiency vector

`[.96, .98]`

(default) | vector

Vector of torque transfer efficiencies where the first element represents the relationship between the strain wave generator and the elliptical gear, and the second element represents the relationship between the elliptical gear and the circular ring gear.

#### Dependencies

To enable this parameter, set **Friction model**
to `Constant efficiency`

.

**Temperature** — Temperature

`[280, 300, 320]`

`K`

(default) | vector

Vector of temperatures used to construct a 1-D temperature-efficiency lookup table. The vector elements must increase from left to right.

#### Dependencies

To enable this parameter, set **Friction model** to
`Temperature-dependent efficiency`

.

**Sun-planet efficiency** — Sun gear to planet gear torque transfer efficiency

`[.95, .9, .85]`

(default) | vector

Vector of output-to-input power ratios that describe the power flow from the strain wave generator to the elliptical gear. The block uses the values to construct a 1-D temperature-efficiency lookup table.

Each element is an efficiency that
relates to a temperature in the **Temperature** vector.
The length of the vector must be equal to the length of the
**Temperature** vector. Each element in the vector
must be in the range (0,1].

#### Dependencies

To enable this parameter, set **Friction model**
to ```
Temperature-dependent
efficiency
```

.

**Ring-planet efficiency** — Torque transfer efficiency from the ring gear to the planet gear

`[.95, .9, .85]`

(default) | vector

Vector of output-to-input power ratios that describe the power flow from the elliptical gear to the flexible gear. The block uses the values to construct a 1-D temperature-efficiency lookup table.

Each element is an efficiency that
relates to a temperature in the **Temperature** vector.
The length of the vector must be equal to the length of the
**Temperature** vector. Each element in the vector
must be in the range (0,1].

#### Dependencies

To enable this parameter, set **Friction model**
to ```
Temperature-dependent
efficiency
```

.

**Sun-carrier and planet-carrier power thresholds** — Minimum efficiency power threshold for the sun-carrier and planet-carrier gear couplings

`[.001, .001]`

`W`

(default) | vector

Vector of power thresholds above which full efficiency factors apply. Enter the thresholds in the order strain wave generator-circular gear, elliptical gear-circular gear. Below these values, a hyperbolic tangent function smooths the efficiency factor.

When you set **Friction model** to
`Constant efficiency`

, the block lowers the
efficiency losses to zero when no power is transmitted. When you set
**Friction model** to
`Temperature-dependent efficiency`

, the
block smooths the efficiency factors between zero when at rest and the
values provided by the temperature-efficiency lookup tables at the power
thresholds.

#### Dependencies

To enable this parameter, set **Friction model**
to `Constant efficiency`

or
```
Temperature-dependent
efficiency
```

.

### Viscous Losses

**Viscous friction coefficients at base (B) and follower (F)** — Fluid dynamic friction coefficients

`[0 0]`

`N*m/(rad/s)`

(default) | positive two-element vector

Two-element array with the viscous friction coefficients in effect at the base and follower shafts. The default array corresponds to zero viscous losses.

### Inertia

To enable these parameters, set **Ring gear rotation** to
`On`

.

**Inertia** — Option to include inertia

`Off`

(default) | `On`

Option to include inertia due to ring gear rotation in your simulation.

** Wave generator gear inertia** — Inertia of the wave generator gear

`0.001`

`kg*m^2`

(default) | positive scalar

Inertia of the wave generator gear.

#### Dependencies

To enable this parameter, set **Inertia** to
`On`

.

** Flexspline gear inertia** — Inertia of the flexspline gear

`0.0005`

`kg*m^2`

(default) | positive scalar

Inertia of the flexspline gear.

#### Dependencies

To enable this parameter, set **Inertia** to
`On`

.

**Ring gear inertia** — Ring gear inertia

`0.001`

`kg*m^2`

(default) | positive scalar

Ring gear inertia.

#### Dependencies

To enable this parameter, set **Inertia** to
`On`

.

### Thermal Port

**Thermal mass** — Thermal mass

`50`

`J/K`

(default) | positive scalar

Thermal energy required to change the component temperature by a single degree. The greater the thermal mass, the more resistant the component is to temperature change.

**Initial temperature** — Initial temperature

`300`

`K`

(default) | positive scalar

Component temperature at the start of simulation. The initial temperature alters the component efficiency according to an efficiency vector that you specify, affecting the starting meshing or friction losses.

## Extended Capabilities

### C/C++ Code Generation

Generate C and C++ code using Simulink® Coder™.

## Version History

**Introduced in R2014a**

### R2024b: Inertia updates

You now can specify the inertia of all gear subcomponents including the sun, ring, and carrier gears. You also now can include the effects of planet procession in the planet inertia behavior.

## See Also

### Simscape Blocks

## Commande MATLAB

Vous avez cliqué sur un lien qui correspond à cette commande MATLAB :

Pour exécuter la commande, saisissez-la dans la fenêtre de commande de MATLAB. Les navigateurs web ne supportent pas les commandes MATLAB.

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)