PWM的使用

概述

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

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

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

DTS驱动配置

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

  1. aukun_run: board-run{
  2. status = "okay";
  3. fan: pwm-fan {
  4. compatible = "pwm-fan";
  5. cooling-min-state = ;
  6. cooling-max-state = ;
  7. #cooling-cells = ;
  8. pwms = ;
  9. cooling-levels = ;
  10. };
  11. };

实验调用

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

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

PWM设备文件

1、查看PWM

  1. ls/sys/class/pwm/
  2. cat/sys/kernel/debug/pwm

以下为刚刚添加的设备 PWM使用 - 图1

2、文件属性 PWM使用 - 图2

duty_cycle为PWM的占空比的周期

period为PWM周期

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

3、设置PWM

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

将pwm3导出到用户空间

  1. echo0>export

设置pwm周期单位为ns

  1. echo 1000000>pwm0/period

设置占空比

  1. echo 500000>pwm0/duty_cycle

设置pwm极性

  1. echo "normal" >pwm0/polarity

使能pwm

  1. echo 1 >pwm0/enable

PWM的测试

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

  1. while true
  2. do
  3. vol_raw=$(cat /sys/class/thermal/thermal_zone1/temp)
  4. if [ "$vol_raw" -gt "30000" ]; then
  5. echo 300000 > pwm0/duty_cycle
  6. elif [ "$vol_raw" -gt "50000" ]; then
  7. echo 500000 > pwm0/duty_cycle
  8. elif [ "$vol_raw" -gt "60000" ]; then
  9. echo 600000 > pwm0/duty_cycle
  10. elif [ "$vol_raw" -gt "70000" ]; then
  11. echo 900000 > pwm0/duty_cycle
  12. fi
  13. done

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