The 60-second answer
Choose PWM if...
- Host is a microcontroller, BMC, or PLC (with PWM output)
- Need 0-100% continuous speed control
- Want closed-loop control with FG feedback
- 4-pin is the industry standard
Need FG / RD feedback if...
- Need to monitor whether the fan is running normally
- Need fan-failure alarms (medical, servers, telecom)
- Want closed-loop speed control (FG)
- Only need binary running/not-running status (RD)
Use 0-10V if...
- Host is a building HVAC BMS or legacy industrial analog system
- Native 0-10V or 4-20mA output
- Recommend switching to EC fan (most DC fans don't natively support 0-10V)
Why industrial DC fans need signal lines
A 2-wire DC fan (just +V and GND) is the most basic design — power on, runs at full speed; power off, stops. For consumer electronics or low-cost equipment that's enough, but industrial environments have three additional needs:
- Speed control: When the cabinet temperature is low, slow down to save power and reduce noise; when temperature rises, speed up. Single-speed designs are either too noisy or under-cool.
- Monitoring: Fans are mechanical parts that wear out and stall. The host needs to know each fan's status to alarm immediately on failure — not wait until critical equipment overheats.
- Integration: The fan must communicate with the host's control system (PLC, BMC, HVAC controller) — manual speed adjustment doesn't scale.
These three needs gave rise to four standard signals: PWM handles speed commands, FG and RD handle feedback monitoring, and 0-10V handles compatibility with legacy analog systems. Below we cover each in turn.
PWM (Pulse Width Modulation) — the dominant speed command
How it works
PWM stands for Pulse Width Modulation. The host sends a fixed-frequency square wave (industry standard 25 kHz) that switches between high and low voltage levels. The percentage of time the wave spends at the high level (duty cycle) is the speed command:
duty cycle = 100%→ always high → full speedduty cycle = 50%→ half high, half low → about 50% speedduty cycle = 20%→ mostly low → minimum speed
The key: speed is encoded by time ratio, not voltage level. So even if the host can only output a fixed 3.3V or 5V, it can transmit a continuous 0-100% speed command.
Why 25 kHz?
- Above the human hearing threshold (about 20 kHz) — avoids audible chirping during speed changes
- Below the PWM generation limit of microcontrollers — Arduino, STM32, ESP32, and other mainstream MCUs can easily produce 25 kHz
- Matches fan driver IC bandwidth — motor control ICs filter cleanest in this band
A few legacy designs use 5 kHz or 1 kHz. These produce audible chirping during speed changes and are rarely used in modern industrial designs. When purchasing, requesting "Intel 4-Wire PWM Fan Specification compatible" ensures 25 kHz.
PWM duty cycle vs actual speed
Linear correspondence is the ideal case. In practice, most industrial DC fans behave as follows:
| Duty cycle | Actual speed behavior |
|---|---|
| 0% (always low) | Most models enforce a minimum speed (30-40% of max) to avoid being unable to restart from a stopped state |
| 10-20% | Uncertain region — may not start reliably; recommend avoiding |
| 20-100% | Linear correspondence to 30-100% actual speed |
| 100% (always high) | Full speed |
* The above behavior is a general industry description. Different vendors and models exhibit variation in low-duty behavior (forced minimum speed value, startup threshold). Practical advice: design your PWM control range between 20-100% to avoid the uncertain region; for a specific model, refer to the published datasheet for verified low-duty behavior.
How to generate PWM on the host side
- Microcontroller (Arduino, STM32, ESP32, Raspberry Pi Pico): use a Timer module to generate hardware PWM — supported by virtually all mainstream MCUs
- BMC (server baseboard management): chipset-native PWM output, BMC firmware controls duty cycle
- PLC: most industrial PLCs support PWM output modules, but verify the frequency reaches 25 kHz; legacy models may only reach 1-5 kHz and need conversion
- Dedicated fan controller: small ICs with built-in temperature sensing and PWM output (e.g. MAX31790, EMC2301), common in cost-sensitive applications
FG / TACH — tachometer feedback signal
How it works
FG (Frequency Generator), also called TACH (Tachometer), is the signal output from the fan to the host (opposite direction from PWM). A Hall sensor inside the fan detects magnet rotation, generating 2 pulses per revolution (industry standard 2 PPR — Pulses Per Revolution).
The host reads the pulse frequency to derive RPM:
RPM = (FG frequency Hz × 60 sec/min) / 2 PPR
For example, FG frequency 100 Hz → RPM = 100 × 60 / 2 = 3000 RPM.
Output type: open-collector
Most DC industrial fan FG outputs use an open-collector design — internally the fan only has an NPN transistor that pulls FG to GND, with no active high-drive capability. To read the signal, the host side must add an external pull-up resistor to V+:
Common pull-up values: 4.7 - 10 kΩ. Too small (<1 kΩ) increases current draw; too large (>47 kΩ) results in slow rising edges that the host may misread.
* Voltage compatibility warning: if the host reads with 5V logic but the fan is on a 12V system, the pull-up MUST be tied to 5V (not 12V), otherwise the FG signal sends 12V into the host GPIO and burns the chip. Safe practice: tie pull-up to host logic voltage (not fan power), or add a level shifter / resistor divider between FG and host GPIO. A few newer models have built-in push-pull FG outputs (no pull-up needed) — always verify with the supplier at purchase.
Two main FG use cases
- Failure detection: FG suddenly stops outputting pulses → fan stalled → trigger alarm. This is standard equipment for medical devices, servers, and telecom rooms.
- Closed-loop speed control: a host PID algorithm uses the target RPM and the actual FG-read RPM to compute error and dynamically adjust PWM duty. Compared to open-loop control (set PWM, ignore feedback), this compensates for long-term changes like fan aging and bearing wear.
RD / Locked-rotor — stall alarm signal
RD (Rotation Detector, also called Locked-rotor Output or Alarm Output) is a simplified version of FG — it only outputs a binary "is it spinning" status, not RPM.
RD vs FG comparison
| Item | FG | RD |
|---|---|---|
| Signal type | Continuous pulses (2 PPR) | Binary level (high or low) |
| Host processing | Frequency counting + RPM calculation | Simple GPIO state read |
| Can compute RPM? | Yes | No |
| Detect stall | Yes (pulses stop) | Yes (level flips) |
| Firmware complexity | High (pulse-counting interrupt) | Low (single GPIO read) |
| Typical applications | BMC, PID control, servers | Low-cost industrial control panels, PLC GPIO |
In practice, choose FG for precise RPM, choose RD if you only need to know whether the fan failed. Most models offer FG and RD as mutually exclusive on the same signal line (must specify at purchase).
0-10V analog — legacy system command
How it works
0-10V analog control is conceptually different from PWM — instead of encoding by time ratio of a square wave, it directly maps a DC voltage value to speed:
0V→ minimum speed / stopped5V→ 50% speed10V→ full speed
Related signals include 4-20mA current loop (industrial analog standard, immune to wire voltage drop) and 2-10V (some European HVAC standard).
Main applications: building HVAC and legacy industrial analog systems
- Building BMS (Building Management System): Honeywell, Siemens, Johnson Controls, Schneider — virtually all building automation systems use 0-10V control as standard
- Legacy industrial analog control panels: 1980s-1990s industrial equipment is mostly analog
- VFD inverters: most industrial variable-frequency drives natively output 0-10V, which can directly drive EC fan speed control
Note: most pure DC fans don't natively support 0-10V
Most DC fans only accept PWM, not 0-10V. If your control system natively outputs 0-10V, three options:
| Option | Approach | Practical assessment |
|---|---|---|
| 1. Switch to EC fan | EC natively accepts 0-10V, runs on AC mains, drop-in replacement | ★★★ Cleanest, HVAC retrofit standard |
| 2. Add 0-10V→PWM converter | Op-Amp + 555 timer or dedicated IC (e.g. LM555) | ★★ Extra circuit, extra failure point |
| 3. Redesign control system | Host outputs PWM directly | ★ Large engineering effort, only for new systems |
In practice option 1 is most common — if your application natively runs on AC mains and 0-10V control, an EC fan is the ideal drop-in replacement. See the DC vs EC vs AC fan comparison guide for detail.
2-pin / 3-pin / 4-pin pinout reference
The number of pins on a DC fan determines which signals you can use:
| Pin count | Wires / functions | Supported features | Typical use |
|---|---|---|---|
| 2-pin | Red: V+, Black: GND | Fixed speed, no control, no feedback | Consumer electronics, simple ventilation |
| 3-pin | Red: V+, Black: GND, Yellow: FG | Fixed speed + tachometer feedback | Industrial equipment with monitoring but no speed control |
| 4-pin (PWM standard) | Red: V+, Black: GND, Yellow: FG, Blue: PWM | Speed control + feedback (industry mainstream) | Servers, industrial BMC, PLC speed control |
4-pin industry standard pinout (Intel 4-Wire PWM Fan Specification)
Looking at the connector edge inward (with locking tab up):
Connector: Molex 5557 series, 4.2mm pitch (some industrial models switch to JST PH 2.0mm or bare wire + terminal block).
* Wire color warning: the colors above are PC industry Intel-spec, but industrial models may swap colors (especially across 12V/24V/48V product lines, where some vendors use red/yellow/orange to distinguish voltages). Always request the actual wire color mapping table from the supplier at purchase — reversing power lines burns the driver IC immediately.
Signal levels and compatibility
PWM input levels
| Host output | Common fan spec | Compatibility |
|---|---|---|
| 3.3V CMOS | Most industrial DC fans tolerate 3.3V or 5V input | Usually directly compatible |
| 5V TTL/CMOS | Mainstream industry spec | Native compatible |
| 12V logic | A few legacy designs (especially early HVAC) | Verify; may need step-down |
FG output levels and pull-up configuration
FG output level is determined by the pull-up — the fan does not actively drive high (unless it's a push-pull design). Therefore:
- Host 5V GPIO reads FG → pull-up to 5V → FG outputs 0V/5V switching ✓
- Host 3.3V GPIO reads FG → pull-up to 3.3V → FG outputs 0V/3.3V switching ✓
- Host 3.3V GPIO, pull-up to 12V → FG outputs 0V/12V → 12V hits 3.3V host GPIO → chip burned!
Common mistake: tying FG pull-up to V+ (12V or 24V system supply) while the host reads with 5V or 3.3V GPIO. This sends overvoltage into the host on every FG pulse. Solution: tie pull-up to host logic voltage (not fan power), or add a resistor divider / level shifter.
Worked scenarios (PLC / BMC / Arduino / HVAC)
Equipment: Arduino Uno (5V logic) + 12V DC fan + 12V power supply
analogWrite() + Timer1 to set 25 kHz, attachInterrupt() to count FG pulses.Equipment: Mitsubishi/Siemens PLC + 24V DC fan × 4 + PT100 temperature sensors
Equipment: Aspeed BMC chip + 48V DC fan × 8 + rack temperature sensors
Equipment: Johnson Controls BMS (0-10V output) + existing 230V three-phase AC blower + customer wants efficiency upgrade
Equipment: embedded Linux board (3.3V logic) + 12V DC fan + immediate failure alarm required