官方提供的小熊派pwm案例中如何修改频率和占空比

Viewed 27

一、描述你遇到的问题

如何修改占空比,能不能输出50hz的pwm

二、你具体做的所有步骤结果截图

三、当前开发板状态全景照片

请插入图片

四、开发板串口所有日志

请在此处粘贴串口日志

1 Answers

PWM 的频率和占空比是通过 uapi_pwm_open 接口中的 pwm_config_t 结构体参数进行配置的。具体的修改和计算方法如下:

1. 参数配置结构体

在调用 uapi_pwm_open 函数时,需要传入 pwm_config_t 类型的配置参数。该结构体包含以下关键字段:

  • high_time:高电平时间(以时钟周期数为单位)。
  • low_time:低电平时间(以时钟周期数为单位)。
  • cycles:循环次数(用于延长总时长)。
  • repeat:是否重复模式。

2. 计算与修改方法

频率的修改

PWM 的工作周期由 high_time 和 low_time 的总和决定。

  • 计算公式:
    $PWM \text{ 工作周期} = \frac{1}{\text{CPU时钟频率}}$
    $PWM \text{ 信号周期} = (\text{high_time} + \text{low_time}) \times PWM \text{ 工作周期}$
    $PWM \text{ 频率} = \frac{1}{PWM \text{ 信号周期}}$
  • 操作步骤:
    1. 获取 CPU 时钟频率(可调用 uapi_pwm_get_frequency() 获取,例如 32MHz)。
    2. 根据目标频率计算出所需的信号周期时长。
    3. 将周期时长换算成时钟周期数,分配给 high_time 和 low_time。

占空比的修改

占空比由 high_time 和 low_time 的比例决定。

  • 计算公式:
    $\text{占空比} = \frac{\text{high_time}}{\text{high_time} + \text{low_time}}$
  • 操作方法:调整 high_time 和 low_time 的数值即可改变占空比。

3. 示例说明

假设 CPU 时钟频率为 32MHz,需要设计一个亮 500ms 的 PWM 参数(高电平亮):

  1. 计算时间基数:
    PWM 工作周期 = $1s / 32M = 0.03125\mu s$。
  2. 设置高低电平时间:
    目标时长 500ms,换算成周期数为 $500000\mu s / 0.03125\mu s = 16,000,000$。
    由于 high_time 是 uint16_t 类型(最大值 65535),无法直接填入 16,000,000。
    • 解决方法:将 high_time 设置为 50000。
    • 利用 cycles 参数:设置 `cycles = 320$。
    • 总时长计算:$320 \times 50000 \times 0.03125\mu s = 500ms$。
  3. 配置代码示例:

pwm_config_t cfg = {
.low_time = 0, // 低电平时间
.high_time = 50000, // 高电平时间
.offset_time = 0, // 偏移时间
.cycles = 320, // 循环次数
.repeat = false // 是否重复(false时cycles生效)
};
uapi_pwm_open(channel, &cfg);

### 4. 动态更新
如果需要在运行过程中动态修改频率或占空比,可以调用 uapi_pwm_update_cfg 接口(需开启 CONFIG_PWM_USING_V151 宏)来更新配置。
总结:修改频率即调整 (high_time + low_time) 的总和;修改占空比即调整 high_time 在总和中的比例。如果所需时间超出 16 位数值限制,请配合 cycles 参数使用。