PWM(Pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术, 广泛应用在测量、通信、工控等方面。其中有几个术语需要注意:PWM的频率、占空比
1、频率:在1秒钟内,信号从高电平到低电平再回到高电平的次数,单位Hz
2、占空比:是一个脉冲周期内,高电平的时间与整个周期时间的比例,单位是% (0%-100%)
板级使能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的模拟电压。
首先添加设备树,使能驱动然后重新编译烧录。
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导出到用户空间 echo 0 > export #设置pwm周期 单位为ns echo 1000000 > pwm0/period #设置占空比 echo 500000 > pwm0/duty_cycle #设置pwm极性 echo "normal" > pwm0/polarity #使能pwm echo 1 > pwm0/enable
以下通过检测CPU的温度来改变PWM的占空比,以改变风扇的转速,shell脚本如下:
#! /bin/bash 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温度变化而改变
Copyright © 2022-2030 aukun.cn 合肥奥鲲电子科技版权所有 皖ICP备2023002494号-1