LISA PWM 基础输出示例

功能说明

演示如何使用 LISA PWM 驱动输出固定频率和占空比的 PWM 信号,通过配置 PWM 通道参数并启动输出,实现可控的脉冲宽度调制信号。

PWM(脉冲宽度调制)信号广泛应用于 LED 调光、电机控制、音频输出等场景,通过调节占空比可以控制平均输出功率。

硬件连接

  • PA20: PWM0 通道 0 输出引脚

可连接 LED(带限流电阻)或示波器到 PA20 引脚进行验证。连接 LED 时,LED 正极通过限流电阻(推荐 220Ω-1kΩ)连接到 PA20,负极连接到 GND。

示例步骤

  1. 获取 PWM0 设备

  2. 设置 PWM 通道 0 参数(频率 5kHz,占空比 50%)

  3. 启动 PWM 输出

  4. 保持 PWM 持续输出

编译

重要提示:在编译前,请先确认您使用的开发板型号。SDK 目前支持以下开发板:

  • arcs_evb - ARCS EVB 评估板

  • arcs_mini - ARCS Mini 开发板

根据您的开发板型号,选择对应的编译命令:

在示例目录下执行编译:

# 使用 arcs_evb 开发板
./build.sh -C -DBOARD=arcs_evb

# 或使用 arcs_mini 开发板
./build.sh -C -DBOARD=arcs_mini

Note

如果在 SDK 根目录执行,需要指定示例路径:

# 使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb

# 或使用 arcs_mini 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_mini

Note

确保已安装对应的工具链。

烧录

编译完成后,使用 SDK tools 目录下的 cskburn 工具烧录固件:

./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 0x0 build/arcs.bin -C arcs

Note

烧录参数说明

  • -s /dev/ttyUSB0:串口设备路径,需要根据实际情况修改 - Linux 系统:通常是 /dev/ttyUSB0/dev/ttyACM0 - 可通过 ls /dev/tty* 命令查看可用串口设备 - 不同开发板或 USB 转串口芯片可能使用不同的设备名

  • -b 3000000:烧录波特率(3Mbps)

  • 0x0:烧录起始地址

  • build/arcs.bin:编译生成的固件路径

  • -C arcs:芯片类型

注意事项

  • 确保开发板已正确连接到电脑

  • 如果无法识别串口设备,请检查 USB 连接线是否正常,或尝试其他 USB 端口

预期输出

终端输出:

=== LISA PWM output example ===
pwm0 device ready
PWM enabled: 5kHz, 50% duty cycle

PWM 输出:

  • PA20 引脚输出 5kHz 的 PWM 信号

  • 占空比为 50%(高电平和低电平时间各占一半)

核心 API

API

说明

lisa_device_get()

获取 PWM 设备

lisa_device_ready()

检查设备是否就绪

lisa_pwm_set()

设置 PWM 通道频率和占空比

lisa_pwm_enable()

启动 PWM 通道输出

lisa_pwm_disable()

停止 PWM 通道输出

关键代码

#define PWM_CHANNEL 0

/* 设置 PWM 频率为 5000Hz,占空比为 50% */
int ret = lisa_pwm_set(pwm_dev, PWM_CHANNEL, 5000, 50);
if (ret != 0) {
    LISA_LOGE(LOG_TAG, "Error: PWM set failed (code: %d)", ret);
    return -1;
}

/* 启用 PWM 输出 */
ret = lisa_pwm_enable(pwm_dev, PWM_CHANNEL);
if (ret != 0) {
    LISA_LOGE(LOG_TAG, "Error: PWM enable failed (code: %d)", ret);
    return -1;
}

LISA_LOGI(LOG_TAG, "PWM enabled: 5kHz, 50%% duty cycle");

参数说明

PWM 配置参数

lisa_pwm_set() 函数参数说明:

int lisa_pwm_set(lisa_device_t *dev, uint32_t channel,
                 uint32_t frequency, uint32_t duty_cycle);
  • dev: PWM 设备指针

  • channel: PWM 通道编号(本示例使用通道 0)

  • frequency: PWM 输出频率,单位 Hz(本示例为 5000Hz = 5kHz)

  • duty_cycle: 占空比,范围 0-100,表示百分比(本示例为 50%)

占空比说明

  • 1%-10%: 低占空比,低亮度/低速

  • 50%: 高电平和低电平时间各占一半(中等亮度)

  • 90%-99%: 高占空比,高亮度/高速

注意:硬件限制不支持 0% 或 100% 占空比

频率选择

  • 低频率(< 100Hz): 可能产生闪烁,适合步进电机等应用

  • 中频率(100Hz - 10kHz): 适合 LED 调光、音频等应用

  • 高频率(> 10kHz): 适合高速电机控制、开关电源等应用

本示例使用 5kHz 作为推荐频率,既能保证 LED 无闪烁,又能确保稳定输出。

验证方法

方法 1: LED 验证

  1. 连接 LED(带限流电阻)到 PA20 引脚

  2. LED 应以 中等亮度 持续点亮(50% 占空比)

  3. 如果 LED 全亮或全灭,检查接线和代码配置

方法 2: 示波器验证

  1. 连接示波器探头到 PA20 引脚

  2. 观察波形应为矩形波,参数如下:

    • 频率: 5000 Hz (5 kHz)

    • 占空比: 50%(高电平时间 = 低电平时间 = 100μs)

    • 幅值: 芯片 IO 电压(通常为 3.3V)

使用场景

适用于需要可调输出功率的场景:

  • LED 调光:通过调节占空比控制 LED 亮度

  • 电机调速:通过调节占空比控制电机转速

  • 音频输出:产生不同频率的音调

  • 模拟 DAC:通过低通滤波将 PWM 转换为模拟电压

注意事项

  1. 占空比范围:占空比参数范围为 1-99,硬件不支持 0% 或 100%

  2. 频率限制:PWM 频率受硬件限制,过高或过低的频率可能无法精确输出

  3. 限流保护:连接 LED 时必须串联限流电阻,防止电流过大损坏引脚

  4. 通道独立:每个 PWM 通道可独立配置不同的频率和占空比

  5. 引脚复用:确保引脚已正确配置为 PWM 功能(示例中通过 pinmux 自动配置)