OpenHarmony鸿蒙硬件-PWM(Pulse Width Modulation,脉冲宽度调制) 作者:马育民 • 2025-09-29 12:02 • 阅读:10006 # 介绍 在鸿蒙(OpenHarmony)硬件开发中,**PWM(Pulse Width Modulation,脉冲宽度调制)** 是一种通过周期性脉冲信号的**占空比**(高电平时间占周期的比例)来模拟模拟信号或实现数字控制的技术,是物联网设备开发中常用的硬件功能。 ### 重要概念 - 周期:一个脉冲信号的时间 - 频率:单位时间内经过周期次数,单位:`Hz`,决定信号的周期(周期 = 1/频率) - 脉宽时间,高电平时间 - 占空比,一个周期内高电平时间(脉宽时间)与总周期的比值(通常用百分比表示) ### 原理 [](https://www.malaoshi.top/upload/0/0/1GW1wuxlNtQP.png) 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 输出。 示例代码片段(控制蜂鸣器): ```c #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 是鸿蒙硬件开发中实现“渐变控制”“模拟信号输出”的核心技术,通过简单的数字信号即可实现丰富的硬件交互功能,是物联网设备开发的必备技能。 原文出处:http://www.malaoshi.top/show_1GW1wuQSMBZO.html