📋 Overview
The 2-Channel 5V PWM Pulse / Square Wave Generator Module is a compact, affordable signal generator that produces two independent square wave outputs, each with individually adjustable frequency and duty cycle. It is controlled through a simple 3-button interface with a 3-digit LED display, or through an RS-232 serial connection for computer-driven or automated control.
Whether you are experimenting with stepper motor control, testing microcontroller inputs, dimming LEDs with PWM, or just need a reliable bench signal source, this module delivers a wide frequency range — from a slow 1Hz all the way up to 150KHz — with up to 30mA output current per channel.
This guide covers both firmware versions, step-by-step button operation, RS-232 serial commands, output wiring, and output voltage adjustment.

⭐ Key Features
- Two fully independent PWM output channels, each with its own frequency and duty cycle setting
- Wide frequency range: 1Hz to 150KHz
- Adjustable duty cycle: 1% to 100% in 1% increments
- Intuitive 3-button interface (SET, UP, DOWN) with 3-digit LED display
- RS-232 serial control at 9600 bps for automated or computer-driven operation
- MicroUSB 5V power input — power directly from any USB charger or power bank
- Wide supply voltage range: 5V to 30V
- Output current up to 30mA per channel
- Output voltage adjustable via external supply (requires one-time trace cut on PCB)
- Settings are saved and restored at power-on
- Operating temperature: −30°C to 70°C
📊 Specifications
| Parameter | Value |
|---|---|
| Number of Channels | 2 (independent) |
| Supply Voltage | 5V – 30V DC (MicroUSB or VCC/GND pads) |
| Frequency Range | 1Hz – 150KHz |
| Frequency Precision | ±2% |
| Duty Cycle Range | 1% – 100% (1% steps) |
| Output Voltage (default) | Equals supply voltage (nominally 5V peak-to-peak from USB) |
| Output Voltage (adjustable) | 5V – 30V (with external supply and trace cut) |
| Max Output Current | 30mA per channel |
| Control Interface | SET / UP / DOWN buttons + 3-digit LED display |
| Serial Interface | RS-232, 9600 bps, 8N1, no flow control |
| Power Input | MicroUSB (5V) or VCC/GND solder pads |
| Operating Temperature | −30°C to 70°C |
| Part Number | EM-OTHER-0010 |
📌 Connections & Pinout
Output signal connections are made via solder pads on the board — no plug-in terminals are included. The MicroUSB port provides the simplest way to power the module at 5V. Solder pads for VCC and GND allow connection of a higher-voltage supply (up to 30V) if needed.
| Connection | Type | Description |
|---|---|---|
| MicroUSB | Power input | 5V power — connect to any USB charger, power bank, or computer USB port |
| VCC | Power input (pad) | DC positive supply, 5V – 30V. Alternative to MicroUSB. |
| GND | Ground (pad) | Common ground — share with the GND of your connected circuit |
| CH1 / OUT1 | Signal output (pad) | PWM Channel 1 square wave output |
| CH2 / OUT2 | Signal output (pad) | PWM Channel 2 square wave output |
| Back-side pads | External voltage input | Used to set output voltage independently from supply (see Changing the Output Voltage) |
⚠️ Soldering Required: The CH1 and CH2 signal output pads, as well as the VCC and GND supply pads, require soldering to attach wires. No screw terminals or connectors are included. Have a soldering iron ready before wiring the module into your project.
💡 Output Voltage: By default, the output voltage of both channels equals the supply voltage. If powered via MicroUSB (5V), the output will be approximately 5V peak-to-peak. See the Changing the Output Voltage section if you need a different signal level.
🚀 Getting Started
Step 1 — Power the Module
Connect a MicroUSB cable to a 5V USB power source (USB charger, USB power bank, or computer USB port). The LED display will light up and show either a parameter label (FR1, FA1, or a similar designation) or a number, depending on which firmware version is installed.
Alternatively, solder wires to the VCC and GND pads and connect a regulated DC supply between 5V and 30V.
Step 2 — Identify Your Firmware Version
This module is manufactured by different suppliers and may come with one of two firmware versions. The output specifications and frequency range are identical — only the button operation differs.
- FR/FA Version: The LED display shows FR1 or FA1 immediately at power-on
- PA Version: The LED display shows a plain number (the previously saved PWM1 duty cycle, e.g., "50") at power-on
See the Button Operation section below for step-by-step instructions for your version.
Step 3 — Set Frequency and Duty Cycle
Use the SET, UP, and DOWN buttons to select a channel parameter and adjust its value. Refer to the Button Operation section below for detailed instructions matched to your firmware version.
Step 4 — Connect Your Output Device
Solder wires to the CH1 and/or CH2 output pads and connect them to the input of your target device — such as a stepper motor driver, microcontroller GPIO pin, or LED driver circuit. Connect the module GND to the common ground of your circuit.
🔧 Button Operation
The module has three control buttons: SET, UP, and DOWN. The procedure for adjusting settings depends on which firmware version your module has.
Firmware Version FR/FA (Display shows FR1 or FA1 at power-on)
Short-pressing the SET button cycles through four operating parameters in order:
| Display | Parameter |
|---|---|
| FR1 (or FA1) | Channel 1 Frequency |
| dU1 | Channel 1 Duty Cycle |
| FR2 (or FA2) | Channel 2 Frequency |
| dU2 | Channel 2 Duty Cycle |
When a parameter is selected with SET, its label will briefly flash on the display before showing the current value. Then press UP or DOWN to change the value.
Selecting the Frequency Range (FR/FA Version)
While a frequency parameter (FR1 or FR2) is selected, long-press the SET button (hold for approximately 1 second) to cycle through the available frequency ranges. The display format changes to indicate the active range:
| Display Format | Frequency Range | Example |
|---|---|---|
| XXX (default, no decimal) | 1Hz – 999Hz | 050 = 50Hz |
| XX.X (1 long press) | 100Hz – 99.9KHz | 01.2 = 1.2KHz 55.5 = 55.5KHz |
| X.X.X. (2 long presses) | 1KHz – 150KHz | 0.3.5. = 3.5KHz 1.0.0. = 100KHz |
Setting the Duty Cycle (FR/FA Version)
Short-press SET to navigate to dU1 or dU2. Then press UP or DOWN to set the duty cycle from 1% to 100% in 1% steps.
Firmware Version PA (Display shows a number at power-on)
Short-pressing the SET button cycles through four operating parameters in order:
| Display | Parameter |
|---|---|
| PA1 | Channel 1 Frequency |
| dU1 | Channel 1 Duty Cycle |
| PA2 | Channel 2 Frequency |
| dU2 | Channel 2 Duty Cycle |
To edit a parameter: navigate to it with short presses, then long-press SET to enter edit mode. The parameter label will briefly appear, followed by the flashing current value. Press UP or DOWN to change the value. Long-press SET again to save the value and advance to the next parameter. After all four parameters have been stepped through, a final long press returns you to the main power-on display showing the saved values.
Selecting the Frequency Range (PA Version)
While in frequency edit mode (PA1 or PA2), short-press SET to cycle through the available frequency ranges:
| Display Format | Frequency Range | Example |
|---|---|---|
| XXX (default, no decimal) | 1Hz – 999Hz | 050 = 50Hz |
| X.XX (1 short press) | 10Hz – 9.99KHz | 1.20 = 1.2KHz 5.55 = 5.55KHz |
| XX.X (2 short presses) | 100Hz – 99.9KHz | 01.2 = 1.2KHz 55.5 = 55.5KHz |
| XXX. (3 short presses) | 1KHz – 150KHz | 003. = 3KHz 100. = 100KHz |
💡 Tip — Reading the Display: The position of the decimal point tells you which frequency range is active. No decimal point means you are in the 1Hz–999Hz range. One or more decimal points shift the range upward. Use this as a quick sanity check before entering a frequency value.
💡 Not Sure Which Version You Have? Power on the module and look at the display. If it shows letters (FR1, FA1, or similar), follow the FR/FA instructions above. If it shows a plain number, follow the PA instructions. Both versions produce identical output — only the button steps differ.
🔋 Changing the Output Voltage
By default, the output voltage of both PWM channels equals the supply voltage. When powered from MicroUSB at 5V, each channel outputs approximately 5V peak-to-peak, which is compatible with most 5V logic and driver circuits.
If your application requires a different output voltage — for example, 3.3V for CMOS logic compatibility, or a higher voltage for a motor driver — you can modify the module as follows:
- Continue using MicroUSB (5V) to power the module's control circuitry as normal.
- Apply a separate external DC power supply (5V – 30V) of your desired output voltage to the dedicated pads on the back side of the board.
- Cut the trace on the back of the PCB as marked, to disconnect the output voltage from the main supply voltage rail.

The PWM output signal voltage will then match the external DC voltage you applied to the back-side pads.
⚠️ Warning: Cutting the PCB trace is a permanent, irreversible modification. Verify the correct trace location before cutting. Do not exceed 30V on the external output supply pads.
💻 RS-232 Serial Control
The module includes an RS-232 serial interface that allows frequency and duty cycle to be programmed from a computer, microcontroller, or other serial host. This is useful for automated test setups, frequency sweeps, or integration into a larger control system.
Serial Port Settings
| Parameter | Setting |
|---|---|
| Baud Rate | 9600 bps |
| Data Bits | 8 |
| Stop Bits | 1 |
| Parity | None |
| Flow Control | None |
Command Format Overview
Commands are plain ASCII strings. S1 targets Channel 1; S2 targets Channel 2. F sets frequency; D sets duty cycle. Every command ends with T as the stop/termination character.
Frequency Commands
| Command | Description | Range | Example |
|---|---|---|---|
S1FXXXT |
Set CH1 frequency in Hz | 001 – 999 Hz | S1F050T → 50Hz |
S1FXX.XT |
Set CH1 frequency in KHz (0.1KHz resolution) | 00.1 – 99.9 KHz | S1F01.5T → 1.5KHz |
S1FX.X.X.T |
Set CH1 frequency in KHz (1KHz resolution) | 0.0.1. – 1.5.0. | S1F1.0.0.T → 100KHz |
S2FXXXT |
Set CH2 frequency in Hz | 001 – 999 Hz | S2F100T → 100Hz |
S2FXX.XT |
Set CH2 frequency in KHz (0.1KHz resolution) | 00.1 – 99.9 KHz | S2F10.0T → 10KHz |
S2FX.X.X.T |
Set CH2 frequency in KHz (1KHz resolution) | 0.0.1. – 1.5.0. | S2F0.5.0.T → 50KHz |
Duty Cycle Commands
| Command | Description | Range | Example |
|---|---|---|---|
S1DXXXT |
Set CH1 duty cycle | 001 – 100 (%) | S1D050T → 50% |
S2DXXXT |
Set CH2 duty cycle | 001 – 100 (%) | S2D025T → 25% |
Response Codes
| Response | Meaning |
|---|---|
DOWN |
Command accepted — setting was applied successfully |
FALL |
Command rejected — check format, value range, and baud rate |
💡 Tip: You can test serial commands using any terminal application (Arduino Serial Monitor, PuTTY, CoolTerm). Set the port to 9600 baud, 8N1, no flow control, and send commands as plain ASCII text. The "T" character at the end of each command acts as the terminator — no newline or carriage return is required.
Example: Arduino Serial Control
// 2-Channel PWM Generator — Arduino RS-232 Control Example
//
// Wiring:
// Arduino TX → Module RX (serial input pad)
// Module TX → Arduino RX (optional, to read DOWN/FALL responses)
// Arduino GND → Module GND (shared ground required)
//
// IMPORTANT: This module uses 5V logic. If your Arduino operates at 3.3V
// (e.g., Arduino Due, MKR series), use a logic level converter on the TX line.
void setup() {
Serial.begin(9600);
delay(500); // Allow module time to initialize after power-on
// Set Channel 1: 1KHz frequency, 50% duty cycle
Serial.print("S1F00.1T"); // 1.0KHz using XX.X format (note: "00.1" = 0.1KHz; use "01.0" for 1.0KHz)
delay(100);
Serial.print("S1D050T"); // CH1 duty cycle = 50%
delay(100);
// Set Channel 2: 500Hz frequency, 25% duty cycle
Serial.print("S2F500T"); // CH2 frequency = 500Hz
delay(100);
Serial.print("S2D025T"); // CH2 duty cycle = 25%
delay(100);
}
void loop() {
// Outputs run continuously once set — no loop code needed for basic operation
}
⚠️ Logic Level Warning: The RS-232 interface on this module operates at 5V logic levels. If connecting to a 3.3V device (ESP32, Raspberry Pi, Arduino 3.3V board), use a bi-directional logic level converter to avoid damaging your 3.3V device.
🎯 Applications
- Stepper Motor Control: Supply step-pulse signals to stepper motor driver boards (A4988, DRV8825, TMC2209, etc.) and adjust motor speed by changing the output frequency
- LED and LED Strip Dimming: PWM-control the brightness of LEDs or LED strips through a MOSFET driver stage
- Microcontroller Testing: Supply adjustable test signals to GPIO inputs during firmware development and debugging — no extra code required
- Bench Signal Generator: Generate reference square waves for audio testing, timing circuits, relay switching, and frequency measurement verification
- Servo Motor Testing: Drive RC servo motors at 50Hz with variable duty cycle to test position control without a microcontroller
- Automotive ECM Testing: Simulate RPM and vehicle speed sensor signals for bench-testing automotive engine control modules
- PWM Lighting Effects: Control two independently pulsing light sources for photography strobes, theatrical effects, or indicator signals
- Educational Use: Demonstrate square wave generation, duty cycle, and frequency concepts in electronics courses and maker workshops
🛠️ Troubleshooting
| Symptom | Likely Cause | Solution |
|---|---|---|
| No display — module does not power on | No power connected or faulty USB cable | Try a different MicroUSB cable and power source. If using VCC/GND pads, verify polarity and supply voltage (5V – 30V). |
| Cannot set frequency below 100Hz | Frequency display range is set too high | Select the XXX range (no decimal point). FR/FA: short-press SET to FR1 or FR2, then verify display shows XXX before adjusting. PA: enter frequency edit mode and short-press SET until the plain XXX display appears. |
| No output signal on CH1 or CH2 | Output pads not soldered; duty cycle at minimum | Check solder joints on output pads. The minimum duty cycle is 1%, not 0% — ensure it is not set to 0. |
| Output voltage is incorrect | External supply connected to back pads, but trace was not cut | If using an external output voltage supply, the PCB trace on the back must be cut as described in Changing the Output Voltage. |
| RS-232 command returns FALL | Incorrect command format or value out of range | Check that values are zero-padded to 3 digits (e.g., "050" not "50"). Verify command ends with "T". Confirm baud rate is 9600 and settings are 8N1, no flow control. |
| Displayed frequency does not match expected output | Wrong frequency range active on display | Check the decimal point position on the display — it indicates the active range. Navigate to the correct range before entering your value. |
| Buttons seem unresponsive or jump to wrong mode | Accidental long-press of SET | Short-press (tap) SET to cycle parameters. Reserve long-press for frequency range selection (FR/FA) or entering edit mode (PA version). |
| Unsure which firmware version the module has | Two manufacturers produce this module | Power on and observe the display. Letters (FR1 / FA1) = FR/FA firmware. A plain number = PA firmware. Follow the matching instructions in this guide. |
⚠️ Important Notes
- Output signal connections require soldering — no plug-in terminals are provided for CH1, CH2, VCC, or GND pads
- Maximum output current is 30mA per channel. For loads drawing more than 30mA (motors, solenoids, high-power LEDs), use a MOSFET or transistor to buffer the output signal
- This module is available with two different firmware versions; specifications are identical but button procedures differ — see the Button Operation section for both
- Frequency precision is ±2%, which is suitable for most PWM control and motor-driving applications but is not recommended for precision frequency reference use
- Settings (frequency and duty cycle) are saved to non-volatile memory and restored automatically at power-on
- The RS-232 serial interface operates at 5V logic levels — use a logic level converter when connecting to 3.3V systems
- Cutting the PCB trace to enable external output voltage adjustment is permanent and irreversible — verify the correct trace before cutting
- Do not exceed 30V on either the supply input pads or the back-side external output voltage pads
🏪 Where to Buy
This module is available from Envistia Mall
2-Channel 5V PWM Pulse / Square Wave Generator Module — Envistia Mall
- 📦 Fast US Shipping
- 🔄 Hassle-Free Returns
- 📧 Responsive Customer Support
📄 Documentation & Resources
- VIDEO: Testing a Dual Channel Signal Generator (#71) by Martyn Davies on Youtube:
Sold and supported by Envistia Mall. Ships from the USA. The manufacturer and Envistia LLC (dba Envistia Mall) are not responsible for any damages or losses resulting from the use of this product. Always follow proper electrical safety practices when working with electronic components. Specifications are based on manufacturer data and are subject to change without notice.