PWM使用

更新时间:2026-10-26v0
下载本文档

PWM的使用

概述

PWM(Pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术, 广泛应用在测量、通信、工控等方面。其中有几个术语需要注意:PWM的频率、占空比

1、频率:在1秒钟内,信号从高电平到低电平再回到高电平的次数,单位Hz

2、占空比:是一个脉冲周期内,高电平的时间与整个周期时间的比例,单位是% (0%-100%)

DTS驱动配置

板级使能pwm-fan,配置位置:arch/arm64/boot/dts/rockchip/aukun-utx-rk3568jt.dtsi

aukun_run: board-run{
status = "okay";
fan: pwm-fan {
compatible = "pwm-fan";
cooling-min-state = ;
cooling-max-state = ;
#cooling-cells = ;
pwms = ;
cooling-levels = ;
    };
};

实验调用

本次实验通过PWM来控制风扇的转速,风扇的GPIO3_B6固定输出电压为5V,即通过调节PWM占空比可以输出任意不大于最大电压值5V的模拟电压。

首先添加设备树,使能驱动然后重新编译烧录。

PWM设备文件

1、查看PWM

ls/sys/class/pwm/

cat/sys/kernel/debug/pwm

以下为刚刚添加的设备

2、文件属性

duty_cycle为PWM的占空比的周期

period为PWM周期

polarity为PWM极性,为有效电平的电平状态

3、设置PWM

进入到/sys/class/pwm/pwmchip3目录下

将pwm3导出到用户空间

echo0>export

设置pwm周期单位为ns

echo 1000000>pwm0/period

设置占空比

echo 500000>pwm0/duty_cycle

设置pwm极性

echo "normal" >pwm0/polarity

使能pwm

echo 1 >pwm0/enable

PWM的测试

以下通过检测CPU的温度来改变PWM的占空比,以改变风扇的转速,shell脚本如下:

while true
do
 vol_raw=$(cat /sys/class/thermal/thermal_zone1/temp)
 if [ "$vol_raw" -gt "30000" ]; then
  echo 300000 > pwm0/duty_cycle
 elif [ "$vol_raw" -gt "50000" ]; then
  echo 500000 > pwm0/duty_cycle
 elif [ "$vol_raw" -gt "60000" ]; then
  echo 600000 > pwm0/duty_cycle
 elif [ "$vol_raw" -gt "70000" ]; then
  echo 900000 > pwm0/duty_cycle
 fi
done

此时可以观察到风扇会随着CPU温度变化而改变