Banana Pi Zero M2 上的“文档”非常混乱,甚至很有趣。目标:使 PWM 正常工作。
所以我安装了armbian
,等了一周直到我的 USB OTG 电缆来了(因为默认的 SSH 会失败),配置了 ssh 并按照步骤操作在这里安装修改后的接线 pi --gpio
实用程序。我可以确认设置引脚 L/H 是否有效。
下一步是验证 PWM 的工作原理,所以乐趣就从这里开始了。引脚排列看起来与 Raspberry Pi 上的相同,因此他们声称:
我用最后的 RPI 0 设计了我的板,并且使用了引脚 GPIO 12 (wiringPi 1),所以我这样做了:
# gpio mode 1 pwm
the pin you choose is not surport hardware PWM
you can select PA6 for PWM pin
or you can use it in softPwm mode
所以正如你所读到的,这不是“超”,我应该尝试 PA6。
不知道 PA6 是什么,所以我正在搜索并找到这个主题话题。
所以我设置:
# gpio mode 7 pwm
you choose the hardware PWM:1
它告诉我我已经选择了 PWM:1 无论这意味着什么。 (1 开启?) 果然我尝试设置占空比并等待看到我的 LED 亮起,但就像前面提到的线程中的那位先生一样,我得到:
# gpio pwm 7 100
val pwmWrite 0 <= X <= 1024
Or you can set new range by yourself by pwmSetRange(range
错误不会随着我输入的占空比值而改变。
我找到的下一个最佳选择让我添加 pwm 叠加、激活 pwm、设置周期和占空比。命令通过且没有错误,但 LED 未亮起。正如在限制开始时所建议的,我的 PWM 线现在连接到 GPIO 15 (UART_TXD)- 它是否正确??。
这是我的armbianEnv.txt
# cat /boot/armbianEnv.txt
verbosity=1
bootlogo=false
console=both
disp_mode=1920x1080p60
overlay_prefix=sun8i-h3
rootdev=UUID=986b3dcb-01f8-4965-8a16-03b55c7341fd
rootfstype=ext4
overlays=i2c0 pwm w1-gpio
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u
我刚刚注意到i2c0
并可能被实用程序w1-gpio
添加到其中,所以这可能没问题。overlays
armbian-config
但如果你问我:
root@bananapim2zero:~# ls /boot/dtb/ | grep pwm
root@bananapim2zero:~# ls /boot/dtb-6.1.11-sunxi/ | grep pwm
显示没有这样的覆盖,所以我不知道。
最后,我想理解所有缩写:PA
,所有此处列出了 GPIO 引脚名称意思是,我的意思是那里似乎有一些逻辑,但我只是不知道为什么有两个单独的表在这些名称前面加上前缀,然后CON2-
就像CON3-
有P{0-24}
两个不同的GPIO一样?为什么和什么是 UART毛衣?
主要是:如何让 PWM 工作? i2c 和 w1 紧随其后。
我相信答案将为更多寻求 RPI 替代品的迷失者带来启发。
谢谢!
答案1
好的,明白了。
昨天深夜,我没有注意到 GPIO 40 针接头之外有 3 个独立的针,供应商标记为 UART:
gpio
实用程序会将您指向其中之一:
但这只是视觉上的,如果您注意到,您设置为 PWM: 7 的引脚并没有这样标记。至少它不在输出中。而且它不起作用,所以没有雪茄;我只是想知道为什么会这样因为我可以看到dev bontago 已专门针对此板目的调整了该实用程序。
为了消除引脚排列混乱,存储卡侧面的 Rx UART 引脚是 PWM,如第一张图片所示。
# activate the PWM. On H3 only 1 PWM is supported, so exporting PWM 0
echo 0 > /sys/class/pwm/pwmchip0/export
# set period to 10ms
echo 10000000 > /sys/class/pwm/pwmchip0/pwm0/period
# set normal polarity. needs to be reset explicitly. Bug?
echo "inversed" > /sys/class/pwm/pwmchip0/pwm0/polarity
echo "normal" > /sys/class/pwm/pwmchip0/pwm0/polarity
# enable the PWM
echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
# set duty cycle to 1ms
echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
- 是的,你的PWM从1开始,所以你需要导出它,首先设置“正常”极性,然后你就可以按照你习惯的方式操作
# uname -a Linux bananapim2zero 6.1.11-sunxi #23.02.2 SMP Sat Feb 18 05:52:53 UTC 2023 armv7l GNU/Linux