OpenHarmony鸿蒙硬件-PWM(Pulse Width Modulation,脉冲宽度调制)

介绍

在鸿蒙(OpenHarmony)硬件开发中,PWM(Pulse Width Modulation,脉冲宽度调制) 是一种通过周期性脉冲信号的占空比(高电平时间占周期的比例)来模拟模拟信号或实现数字控制的技术,是物联网设备开发中常用的硬件功能。

重要概念

  • 周期:一个脉冲信号的时间
  • 频率:单位时间内经过周期次数,单位:Hz,决定信号的周期(周期 = 1/频率)
  • 脉宽时间,高电平时间
  • 占空比,一个周期内高电平时间(脉宽时间)与总周期的比值(通常用百分比表示)

原理

PWM 信号是一种周期性的 方波,通过调整 频率、占空比 实现控制

例如:

  • 频率 1000Hz → 周期 1ms(1/1000 秒)。
  • 占空比 50% → 高电平持续 0.5ms,低电平持续 0.5ms。

典型用途

在鸿蒙物联网设备(如 Hi3861、Hi3516 开发板)中,PWM 常用于以下场景:

  1. 控制蜂鸣器音调
    通过不同频率的 PWM 信号驱动蜂鸣器,产生不同音调的声音(如报警提示、音乐播放)。

  2. 调节 LED 亮度
    利用人眼视觉暂留效应,通过改变占空比(如 10%~90%)调节 LED 平均亮度,实现呼吸灯效果。

  3. 驱动电机/舵机
    向电机或舵机发送特定占空比的 PWM 信号,控制转速或角度(如无人机、机械臂)。

  4. 模拟模拟电压输出
    配合低通滤波电路,将 PWM 信号转换为对应的模拟电压(如控制 DAC 芯片输出)。

控制方式

鸿蒙通过标准化接口封装了 PWM 硬件操作,核心函数包括:

  1. IoSetFunc:将物理引脚配置为 PWM 功能(引脚需支持 PWM 复用)。
  2. PwmInit:初始化指定的 PWM 通道(如 PWM0、PWM1)。
  3. PwmStart:启动 PWM 输出,设置频率和占空比。
  4. PwmStop:停止 PWM 输出。

示例代码片段(控制蜂鸣器):

#include "wifiiot_pwm.h"
#include "wifiiot_gpio.h"

// 配置 GPIO12 为 PWM0 功能
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_PWM0_OUT);
// 初始化 PWM0 通道
PwmInit(WIFI_IOT_PWM_PORT_PWM0);
// 输出 1000Hz、50% 占空比的 PWM 信号(驱动蜂鸣器发声)
PwmStart(WIFI_IOT_PWM_PORT_PWM0, 1000, 500);

与其他硬件功能的区别

  • GPIO:仅能输出高低电平(0 或 1),无法实现渐变控制;PWM 通过占空比调节可模拟“中间状态”。
  • DAC:直接输出模拟电压,精度高但硬件成本高;PWM 基于数字电路实现,成本低、兼容性强,是多数场景的替代方案。

总之,PWM 是鸿蒙硬件开发中实现“渐变控制”“模拟信号输出”的核心技术,通过简单的数字信号即可实现丰富的硬件交互功能,是物联网设备开发的必备技能。


原文出处:/show_1GW1wuQSMBZO.html