【原创】树莓派3B开发Go语言(四)-自写库实现pwm输出

【原创】树莓派3B开发Go语言(四)-自写库实现pwm输出,第1张

在前一小节中介绍了点亮第一个LED灯,这里我们准备进阶尝试下,输出第一段PWM波形。(PWM也就是脉宽调制,一种可调占空比的技术,得到的效果就是:如果用示波器测量引脚会发现有方波输出,而且高电平、低电平的时间是可调的。)

这里爪爪熊准备写成一个golang的库,并开源到github上,后续更新将直接更新到github中,如果你有兴趣可以和我联系。 githubcom/dpawsbear/bear_rpi_go

我在很多的教程中都看到说树莓派的PWM(硬件)只有一个GPIO能够输出,就是 GPIO1 。这可是不小的打击,因为我想使用至少四个 PWM ,还是不死心,想通过硬件手册上找寻蛛丝马迹,看看究竟怎么回事。

手册上找寻东西稍等下讲述,这里先提供一种方法测试 树莓派3B PWM 方法:用指令控制硬件PWM。

这里通过指令的方式掌握了基本的pwm设置技巧,决定去翻一下手册看看到底PWM怎么回事,这里因为没有 BCM2837 的手册,根据之前文章引用官网所说, BCM2835 BCM2837 应该是一样的。这里我们直接翻阅 BCM2835 的手册,直接找到 PWM 章节。找到了如下图:

图中可以看到在博通的命名规则中 GPIO 12、13、18、19、40、41、45、52、53 均可以作为PWM输出。但是只有两路PWM0 PWM1。根据我之前所学知识,不出意外应该是PWM0 和 PWM1可以输出不一样的占空比,但是频率应该是一样的。因为没有示波器,暂时不好测试。先找到下面对应图:

根据以上两个图对比可以发现如下规律:

对照上面的表可以看出从 BCM2837 中印出来的能够使用在PWM上的就这几个了。

为了验证个人猜想是否正确,这里先直接使用指令的模式,模拟配置下是否能够正常输出。

通过上面一系列指令模拟发现,(GPIO1、GPIO26)、(GPIO23、GPIO24)是绑定在一起的,调节任意一个,另外一个也会发生变化。也即是PWM0、PWM1虽然输出了两路,可以理解成两路其实都是连在一个输出口上。这里由于没有示波器或者逻辑分析仪这类设备(仅有一个LED灯),所以测试很简陋,下一步是使用示波器这类东西对频率以及信号稳定性进行下测试。

小节:树莓派具有四路硬件输出PWM能力,但是四路中只能输出两个独立(占空比独立)的PWM,同时四路输出的频率均是恒定的。

上面大概了解清楚了树莓派3B的PWM结构,接下来就是探究如何使用Go语言进行设置。

因为拿到了手册,这里我想直接 *** 作寄存器的方式进行设置,也是顺便学习下Go语言处理寄存器的过程。首先需要拿到pwm 系列寄存器的基地址,但是翻了一圈手册,发现只有偏移,没有找到基地址。

经过了一段时间的努力后,决定写一个 树莓派3B golang包开源放在github上,只需要写相关程序进行调用就可以了,以下是相关demo(pwm)(在GPIO12 上输出PWM波,放上LED灯会有呼吸灯的效果,具体多少频率还没有进行测试)

以下是demo(pwm) 源码

当然可以进行仿真,不一定需要使用树莓派实物。实际上,很多物联网开发项目都是先进行仿真测试,确认无误后再进行实际的硬件搭建和测试。通过仿真,可以节约成本和时间,同时也可以更方便地调试和优化程序。
在物联网开发中,有很多仿真软件可以使用,例如Proteus、Virtual Breadboard、Fritzing等等。这些软件可以模拟电路和传感器的工作原理,帮助开发人员进行调试和验证。同时,还可以通过虚拟机等方式模拟树莓派的运行环境,进行软件的测试和调试。
当然,虽然仿真测试可以减少成本和时间,但是最终还是需要进行实际的硬件搭建和测试,以保证程序的正确性和可靠性。因此,树莓派实物的作用仍然是不可替代的。

一、通用系统

Raspbain Stretch With PIXEL

树莓派官方系统,带PIXEL图形界面。特点是兼容性和性能优秀。

Raspbain Stretch Lite

树莓派官方系统,不带图形界面。特点是兼容性和性能优秀,比PIXEL版本的安装包更小。

Ubuntu MATE
Ubuntu MATE 针对树莓派的版本,界面个性美观。

Snappy Ubuntu Core
Ubuntu 针对物联网(IoT)的一个发行版本。支持树莓派。

CentOS
CentOS 针对ARM的发行版。支持树莓派。

Windows IoT
微软官方针对物联网(IoT)的一个Windows版本。支持树莓派。

FreeBSD
FreeBSD 针对树莓派的发行版。

Kali
Kali 针对树莓派的发行版,黑客的最爱。

Pidora
在 Fedora Remix 基础上针对树莓派优化过的 *** 作系统。

ArchLinux
ArchLinux 针对树莓派平台的版本。

二、多媒体应用系统

LibreELEC
和OSMC一样的媒体中心,基于OpenELEC。用户体验出色。官

OSMC
前身是Raspbmc,Raspbmc就是基于Debian的Linux发行版。集成Kodi(XBMC/XBox Media Center)。是很好用的媒体中心。

OpenELEC
开源的媒体中心系统,基于Kodi。

XBian
媒体中心系统,基于Kodi。

Volumio
HIFI 音乐播放器,用户体验出色。支持Airplay。

RuneAudio
HIFI 音乐播放器,用户体验出色。支持Airplay。

三、游戏模拟器系统

LAKKA
集成了游戏模拟器的系统,用户体验出色。

Recalbox
集成了游戏模拟器的系统,可玩性高,集成了Kodi。

RetroPie
集成了游戏模拟器的系统,可玩性高。

四、其他系统

OpenWrt
OpenWrt针对树莓派的版本,用于搭建强大的路由器。

RISC OS
精简指令 *** 作系统,用于对实时性要求较高的场景。

Flint OS
chromium os *** 作系统,做了些许对树莓派3的优化,适用于Raspberry Pi3/B,据官方团队所说,由于性能原因 将不会有其他平台上能安装apk的功能。

树莓派 *** 作系统大全

Arch Linux ARM、Ark OS、ChameleonPi、FreeBSD、Happi Game Center、Instant WebKiosk、IPFire、Lakka、LibreELEC、Kali Linux、Kano OS、Minepion、Moebius、moOdeaudio、NetBSD、NOOBS、OpenELEC、openSUSE、OpenWrt、OSMC、Pardus ARM、Pidora、Pimusicbox、PiNet、Piplay、Puppy Linux、Raspberry Pi Fedora Remix、Raspbian、Rasplex、Raspbmc、Recalbox、Retropie、RISC OS、Runeaudio、Sailfish OS with Raspberry Pi 2、Slackware ARM、Tiny Core Linux、Ubuntu mate、Volumio、Windows 10 物联网核心版、Xbian、XBMC、xv6 等 (资料来源于 维基百科 )

Raspbian、NOOBS、Ubuntu MATE、Windows 10 IoT Core、Kali Linux、lakka、 LibreELEC、 OSMC、PiNet、Kano等


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/13237790.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-24
下一篇 2023-06-24

发表评论

登录后才能评论

评论列表(0条)

保存