Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

DevLab: PWM AO4410 2-Channel Output Module

Introduction

The DevLab PWM AO4410 2-Channel Output Module is a compact, two-channel PCB designed to amplify pulse-width modulation signals from a microcontroller. It enables reliable switching of external loads at higher voltages and currents than the microcontroller can natively handle. With its clearly labeled screw-terminal connectors, the module is well-suited for motor speed control, high-power LED dimming, and other projects requiring precise power regulation via PWM. The board also includes a QWIIC-compatible 4-pin header, allowing for easy plug-and-play wiring and daisy-chaining of power and PWM signals using standard Qwiic cables.

Overview

FeatureDetails
2-channel PWMTwo independent channels for versatile control
5V logicCompatible with 3.3V and 5V microcontrollers
5V power supplyPowers external devices up to 2A
Qwiic connector4-pin connector for easy integration

Use Cases

  • Motor speed and direction control for DC motors
  • Brightness control for high-power LEDs
  • Temperature control for heating elements
  • Efficient power regulation for various loads
  • Amplifying PWM signals for long-distance transmission

Resources

License

All hardware and documentation in this project are licensed under the MIT License.
Please refer to LICENSE.md for full terms.

Hardware Overview

Key Technical Specifications

  • Input Voltage: -
  • Output Current: -
  • PWM Frequency: -
  • Control Interface: JST 1mm Connector

Pinout



ChannelDescriptionControl PinsPower PinsLoad TerminalsTypical Use
PWM Channel 1MOSFET-based driver that amplifies MCU’s PWM output to switch a heavier external loadPWM1, GNDVCC1, GNDLoad1DC motors, high-power LEDs, solenoids
PWM Channel 2Identical high-current PWM driver on a second channelPWM2, GNDVCC2, GNDLoad2Same as Channel 1

Dimensions

Topology

Ref.Description
SWDip Switch for coupling grounds
L1Channel 1 PWM LED
L2Channel 2 PWM LED
J1Screw Terminal Block for Channel 1 Load
J2Screw Terminal Block for Channel 2 Load
J3JST 1mm Connector for input signals
JP1Header for Channel 1 mode selection
JP2Header for input signals
JP3Header for Channel 2 mode selection

Key Technical Specifications

  • Input Voltage: -
  • Output Current: -
  • PWM Frequency: -
  • Control Interface: JST 1mm Connector

Pinout



ChannelDescriptionControl PinsPower PinsLoad TerminalsTypical Use
PWM Channel 1MOSFET-based driver that amplifies MCU’s PWM output to switch a heavier external loadPWM1, GNDVCC1, GNDLoad1DC motors, high-power LEDs, solenoids
PWM Channel 2Identical high-current PWM driver on a second channelPWM2, GNDVCC2, GNDLoad2Same as Channel 1

Dimensions

Topology

Ref.Description
SWDip Switch for coupling grounds
L1Channel 1 PWM LED
L2Channel 2 PWM LED
J1Screw Terminal Block for Channel 1 Load
J2Screw Terminal Block for Channel 2 Load
J3JST 1mm Connector for input signals
JP1Header for Channel 1 mode selection
JP2Header for input signals
JP3Header for Channel 2 mode selection

Getting Started

This directory contains example code demonstrating how to use the PWM AO4410 2-Channel Output Module with different programming platforms.

Overview

The PWM AO4410 module amplifies PWM signals from microcontrollers to control external loads at higher voltages and currents. The examples show how to generate PWM signals that can be used for:

  • Motor speed control
  • High-power LED dimming
  • Variable power output control
  • Load switching applications

Available Examples

📁 C/Arduino Examples (examples/c/)

pwm.ino - LED Fade with PWM Control

Platform: Arduino IDE compatible boards (Arduino Uno, ESP32, etc.)

Description: This example demonstrates basic PWM control by fading an LED up and down. It shows how to:

  • Configure a PWM output pin
  • Generate variable duty cycle signals
  • Monitor PWM duty cycle values via Serial Monitor
  • Create smooth fading effects

Key Features:

  • Uses analogWrite() function for PWM generation
  • Configurable brightness step size
  • Serial output for debugging and monitoring
  • Simple fade up/down pattern

Hardware Connections:

  • Connect PWM output pin (default: pin 9) to the module's PWM input
  • Connect LED or load to the module's output terminals
  • Ensure proper power supply connections

Usage:

  1. Open in Arduino IDE
  2. Select your board and port
  3. Upload the sketch
  4. Open Serial Monitor at 115200 baud
  5. Observe the LED fading and duty cycle values

📁 Python Examples (examples/python/)

pwm.py - MicroPython PWM Control

Platform: MicroPython (ESP32, Raspberry Pi Pico, etc.)

Description: This MicroPython example shows how to control PWM outputs using the machine.PWM class. It demonstrates:

  • High-resolution PWM control (16-bit duty cycle)
  • Frequency configuration
  • Percentage-based duty cycle calculation
  • Continuous fading loop

Key Features:

  • 16-bit duty cycle resolution (0-65535)
  • Configurable PWM frequency (default: 1 kHz)
  • Percentage calculation for easy understanding
  • Continuous fade pattern

Hardware Connections:

  • Connect PWM output pin (default: GPIO 2) to the module's PWM input
  • Connect LED or load to the module's output terminals
  • Ensure proper power supply connections

Usage:

  1. Upload to your MicroPython device
  2. Run the script
  3. Observe the console output showing duty cycle values
  4. Watch the connected load fade smoothly

Module Specifications

PWM Input Requirements

  • Voltage: 3.3V or 5V logic levels
  • Frequency Range: 1 Hz - 100 kHz (recommended)
  • Duty Cycle: 0-100%

Output Characteristics

  • Channels: 2 independent outputs
  • Maximum Voltage: 30V DC
  • Maximum Current: 4A per channel
  • MOSFET: AO4410 N-channel
  • Control: Low-side switching

Connection Guide

QWIIC/4-Pin Header Connections

PinFunctionColor (Standard)
1GNDBlack
2VCCRed
3PWM1Blue
4PWM2Yellow

Screw Terminal Connections

  • VIN+/VIN-: External power supply for loads
  • OUT1+/OUT1-: Channel 1 output to load
  • OUT2+/OUT2-: Channel 2 output to load

Safety Considerations

⚠️ Important Safety Notes:

  • Always ensure proper power supply ratings
  • Use appropriate wire gauge for current requirements
  • Verify load compatibility before connection
  • Never exceed maximum voltage/current ratings
  • Ensure proper heat dissipation for high-power applications

Troubleshooting

Common Issues:

  1. No PWM Output:

    • Check PWM signal connections
    • Verify code is generating PWM on correct pin
    • Ensure proper power supply
  2. Insufficient Load Power:

    • Check external power supply voltage/current
    • Verify load requirements are within module limits
  3. Erratic Behavior:

    • Check for proper grounding
    • Verify PWM frequency is within acceptable range
    • Ensure stable power supply

Getting Started

  1. Choose your platform (Arduino/C or MicroPython)
  2. Wire the module according to the connection guide
  3. Load the example code for your platform
  4. Modify parameters as needed for your application
  5. Test with a simple load (LED) before connecting high-power devices

Additional Resources

Support

For technical support and questions:

Examples

Arduino/C++ Examples

The following examples demonstrate various features of this development board.

pwm

// LED Fade + PWM duty print on Serial Monitor (simple version)

int LED_PIN = 9;      // PWM pin
int STEP    = 5;      // Brightness increment per step

void setup() {
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(115200);          // Match this baud rate in the Serial Monitor
  delay(200);                    // Small pause to avoid garbage at start
  Serial.println("Starting fade...");
}

void loop() {
  // Fade up
  for (int duty = 0; duty <= 255; duty += STEP) {
    analogWrite(LED_PIN, duty);
    Serial.print("Duty: ");
    Serial.println(duty);
    delay(500);
  }

See complete code on GitHub

Python Examples

The following Python examples demonstrate usage with the sensor.

pwm

# LED Fade + PWM duty print 

from machine import Pin, PWM
from time import sleep_ms

LED_PIN = 2          # Change to your LED pin
STEP    = 512        # Brightness increment per step (0..65535)
DELAY_MS = 500

pwm = PWM(Pin(LED_PIN), freq=1000)  # 1 kHz

MAX_DUTY = 65535

def print_duty(d):
    pct = d * 100.0 / MAX_DUTY
    print("Duty:", d, f"({pct:0.1f}%)")

# Fade loop
while True:
    # Fade up

See complete code on GitHub

Hardware Documentation & Resources

Product Datasheet

Official product documentation with complete technical specifications.

Product datasheet not found in hardware directory.

Hardware Resources

Software Resources

Quick Reference

ResourceDescriptionLink
SchematicCircuit diagramPDF
PinoutPin configurationView
ExamplesCode samplesView
Setup GuideGetting startedView

Hardware documentation extracted from project files.

License

MIT License

Copyright (c) 2025 UNIT-Electronics-MX

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


This project is licensed under the MIT License - see the LICENSE file for details.