PWM¶
Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.
功能概述¶
PWM的基本概念¶
PWM(Pulse Width Modulation,脉冲宽度调制)是一种利用脉冲信号的宽度来调制输出信号的技术。通过改变脉冲的宽度(即高电平持续的时间),PWM能够有效地控制输出信号的平均电压,从而实现对模拟信号的数字编码和控制。
工作原理¶
占空比:PWM信号的占空比是指高电平持续时间与一个完整周期的比例。通过调节占空比,可以控制输出信号的平均电压值。
周期与频率:PWM信号的周期是指完成一个完整的高低电平循环所需的时间,频率则是单位时间内周期的数量。不同的应用场景可能需要不同的工作频率,常见的PWM频率范围从数百Hz到几MHz不等。
面积等效原理:PWM的基本原理之一是面积等效原理,即冲量(面积)相等而形状不同的脉冲,作用于惯性环节时效果基本相同。通过调节脉冲的宽度,可以实现与目标波形相等的效果。
应用领域¶
PWM技术广泛应用于多个领域,包括但不限于:
电机控制:用于调节电机的转速和转矩,广泛应用于电动车、风力发电等。
开关电源:在电源管理中,PWM技术能够提高效率和功率密度,降低系统成本和功耗。
通信系统:PWM可以用于信号传输,增强抗干扰能力,延长通信距离。
PWM API¶
头文件¶
qosa_pwm.h
函数概览¶
函数 |
说明 |
|---|---|
qosa_pwm_config() |
配置PWM功能 |
qosa_pwm_enable() |
启用PWM输出功能并配置其参数 |
qosa_pwm_disable() |
禁用PWM输出功能 |
函数详解¶
qosa_pwm_config¶
功能描述
配置PWM功能。函数原型
qosa_pwm_error_e qosa_pwm_config(unsigned char pwm_sel, qosa_pwm_info_t *pwm_info);
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
pwm_sel |
输入 |
unsigned char |
PWM通道标识符;范围:0~4 |
pwm_info |
输入 |
qosa_pwm_info_t* |
指向PWM配置信息结构体的指针;详见 qosa_pwm_info_t |
返回值说明
QOSA_PWM_SUCCESS:函数执行成功
其他值(详见 qosa_pwm_error_e):函数执行失败
qosa_pwm_enable¶
功能描述
启用PWM输出功能并配置其参数。函数原型
qosa_pwm_error_e qosa_pwm_enable(unsigned char pwm_sel, unsigned int high_one_cycle_duration);
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
pwm_sel |
输入 |
unsigned char |
PWM通道标识符;范围:0~4 |
high_one_cycle_duration |
输入 |
unsigned int |
单周期内PWM输出保持高电平的持续时间;单位:定时器计数值;范围:0~total_one_cycle_duration。若传入此参数,将覆盖 qosa_pwm_config() 初始化时设置的初值 |
返回值说明
QOSA_PWM_SUCCESS:函数执行成功
其他值(详见 qosa_pwm_error_e):函数执行失败
qosa_pwm_disable¶
功能描述
禁用PWM输出功能。函数原型
qosa_pwm_error_e qosa_pwm_disable(unsigned char pwm_sel);
参数说明
参数名 |
输入/输出 |
类型 |
说明 |
|---|---|---|---|
pwm_sel |
输入 |
unsigned char |
PWM通道标识符;范围:0~4 |
返回值说明
QOSA_PWM_SUCCESS:函数执行成功
其他值(详见 qosa_pwm_error_e):函数执行失败
结构体定义¶
qosa_pwm_info_t¶
PWM配置信息结构体定义如下:
typedef struct {
unsigned int high_one_cycle_duration;
unsigned int total_one_cycle_duration;
unsigned int pwm_psc;
qosa_pwm_clk_src_e clk_src;
} qosa_pwm_info_t;
参数 |
类型 |
说明 |
|---|---|---|
high_one_cycle_duration |
unsigned int |
单周期内PWM输出保持高电平的持续时间;单位:定时器计数值;范围:0~total_one_cycle_duration。仅作为PWM初始化时的初值,后续实际生效值为 qosa_pwm_enable() 传入的参数 |
total_one_cycle_duration |
unsigned int |
一个完整PWM周期的总持续时间;单位:定时器计数值;取值不可为 0 |
pwm_psc |
unsigned int |
时钟分频系数;取值不可为 0 |
clk_src |
qosa_pwm_clk_src_e |
时钟源选择;详见 qosa_pwm_clk_src_e |
枚举定义¶
qosa_pwm_clk_src_e¶
PWM时钟源选择枚举定义如下:
typedef enum {
QOSA_FCLK_SEL_32K = 0,
QOSA_FCLK_SEL_13M,
QOSA_FCLK_SEL_26M,
} qosa_pwm_clk_src_e;
成员 |
说明 |
|---|---|
QOSA_FCLK_SEL_32K |
32 kHz时钟源;当需要在睡眠期间维持输出时可选 |
QOSA_FCLK_SEL_13M |
13 MHz时钟源(暂不支持) |
QOSA_FCLK_SEL_26M |
26 MHz时钟源 |
qosa_pwm_error_e¶
PWM错误码枚举定义如下:
typedef enum {
QOSA_PWM_SUCCESS = 0,
QOSA_PWM_EXECUTE_ERR = 1 | (QOSA_COMPONENT_BSP_PWM << 16),
QOSA_PWM_INVALID_PARAM_ERR,
QOSA_PWM_FUNC_SET_ERR,
QOSA_PWM_START_ERR,
QOSA_PWM_STOP_ERR,
QOSA_PWM_REPEAT_OPEN_ERR,
QOSA_PWM_REPEAT_CLOSE_ERR,
QOSA_PWM_NO_OPEN_ERR,
QOSA_PWM_SET_CLK_ERR,
} qosa_pwm_error_e;
成员 |
说明 |
|---|---|
QOSA_PWM_SUCCESS |
函数执行成功 |
QOSA_PWM_EXECUTE_ERR |
函数执行失败 |
QOSA_PWM_INVALID_PARAM_ERR |
输入参数无效 |
QOSA_PWM_FUNC_SET_ERR |
功能设置失败 |
QOSA_PWM_START_ERR |
启动失败 |
QOSA_PWM_STOP_ERR |
停止失败 |
QOSA_PWM_REPEAT_OPEN_ERR |
重复打开失败 |
QOSA_PWM_REPEAT_CLOSE_ERR |
重复关闭失败 |
QOSA_PWM_NO_OPEN_ERR |
打开配置失败 |
QOSA_PWM_SET_CLK_ERR |
时钟设置失败 |
备注
QOSA_COMPONENT_BSP_PWM 为PWM组件ID,定义于 qosa_def.h 中。
应用逻辑流程图¶
示例代码¶
完整示例代码请查看 https://github.com/UniRTOS/UniRTOS-Doc-Examples/blob/main/peripheral/pwm/pwm_demo.c