香橙派5 使用pwm给风扇调速

如果你的风扇没有pwm调速的线我建议就不要折腾了

一、物料

香橙派5 、一个带pwm调速功能的风扇(我这里是自己手焊的mos)

二、给风扇焊个mos用于调速

我用的si2302,nmos,淘宝很便宜。nmos接在风扇负极。
请添加图片描述

三、pwm生成

这个参考香橙派给的手册就行了。
在这里插入图片描述
下面是手册中写的怎么配置

在 linux 系统中,26pin 中的 pwm 默认都是关闭的,需要手动打开才能使用。
在/boot/orangepiEnv.txt 中加入下面红色字体部分的配置,然后重启 Linux 系统就
可以同时打开 pwm0、pwm13、pwm14 和 pwm15,如果只需要打开一个,那么就
填写一个即可。

orangepi@orangepi:~$ sudo vim /boot/orangepiEnv.txt
overlays=pwm0-m1 pwm13-m2 pwm14-m1 pwm15-m2

选择 pwm1_m1 的设置如下所示,pwm1-m1 和 pwm1-m2 请不要同时打开:

orangepi@orangepi:~$ sudo vim /boot/orangepiEnv.txt
overlays=pwm1-m1

选择 pwm1_m2 的设置如下所示:

orangepi@orangepi:~$ sudo vim /boot/orangepiEnv.txt
overlays=pwm1-m2

选择 pwm3_m0 的设置如下所示,pwm3-m0 和 pwm3-m2 请不要同时打开:

orangepi@orangepi:~$ sudo vim /boot/orangepiEnv.txt
overlays=pwm3-m0

选择 pwm3_m2 的设置如下所示:

orangepi@orangepi:~$ sudo vim /boot/orangepiEnv.txt
overlays=pwm3-m2

我这里要用pwm13-m2。

sudo nano /boot/orangepiEnv.txt

在文件里面加上

overlays=pwm3-m2

然后重启!!!

2、配置频率,占空比,等参数

当打开一个 pwm 后,在/sys/class/pwm/中就会多出一个 pwmchipX(X 为具体的
的数字),比如打开 pwm13 后,查看/sys/class/pwm/下的 pwmchipX 会由两个变成了三个
在这里插入图片描述
之前只有pwmchip0 pwmchip1。
上面哪个 pwmchip 对应 pwm13呢,我们先查看下 ls /sys/class/pwm/ -l 命令的输出,如下所示:
在这里插入图片描述

  1. 然后由之前的表可知,pwm15 寄存器的基地址为 febf0010,再看 ls /sys/class/pwm/ -l
    命令的输出,可以看到 pwmchip2 中链接到了 febf0010.pwm,所以 pwm13 对应
    pwmchip 为 pwmchip2。

下面开始输出pwm,pwm时钟的频率为1000000000hz,也就是1ns。
我这里输出1000hz,我也想输出20khz让人耳听不见,但是看看这个mos的手册的导通时间就懂了,基本不太可能输出20khz。

输入下面第一行后 会生成一个pwm0的文件,后面就是在pwm0上面炒作了

echo 0 > /sys/class/pwm/pwmchip2/export
echo 1000000 > /sys/class/pwm/pwmchip2/pwm0/period/*设置频率1khz*/
echo 100000 > /sys/class/pwm/pwmchip2/pwm0/duty_cycle//占空比10%
echo 1 > /sys/class/pwm/pwmchip2/pwm0/enable//启动

他默认的极性是高电平,下面这行给他换成低电平
/sys/class/pwm/pwmchip2/pwm0# echo normal >polarity

应该用三极管的,三极管频率响应高
最后用chatgpt生成了一个脚本可以自由的调占空比10-100之前,占空比10以下有时候转有时候不转。0为不转
如图
在这里插入图片描述
脚本:

#!/bin/bash

PWM_PATH="/sys/class/pwm/pwmchip2/pwm0"

# 检查文件是否存在
if [ -e "$PWM_PATH" ]; then
    echo "PWM 文件已存在,无需导出"
else
    # 文件不存在,导出 PWM 通道
    echo 0 > /sys/class/pwm/pwmchip2/export
    sleep 1
    echo "normal" > /sys/class/pwm/pwmchip2/pwm0/polarity
    echo "PWM 通道已导出"
fi

# 通过命令行参数获取用户输入
user_input="$1"
temp=0
# 如果未提供参数,或者小于 10,将其设为默认值 10
if [ -z "$user_input" ] || [ "$user_input" -lt 10 ]; then
    temp=10
else
    temp="$user_input"
fi

# 如果输入为 0,则 var0;否则,计算 var 的值,并乘以 10
if [ "$user_input" -eq 0 ]; then
    temp=0
fi

var=$((temp * 10 * 10000))


# 设置 PWM 周期
echo 10000000 > "$PWM_PATH/period"

# 设置 PWM 占空比
echo $var > "$PWM_PATH/duty_cycle"

# 启用 PWM
echo 1 > "$PWM_PATH/enable"

echo "PWM 已配置,值为: $var"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值