當前位置:編程學習大全網 - 源碼下載 - 原創樹莓派3B開發Go語言(四)-自寫庫實現pwm輸出

原創樹莓派3B開發Go語言(四)-自寫庫實現pwm輸出

在前壹小節中介紹了點亮第壹個LED燈,這裏我們準備進階嘗試下,輸出第壹段PWM波形。(PWM也就是脈寬調制,壹種可調占空比的技術,得到的效果就是:如果用示波器測量引腳會發現有方波輸出,而且高電平、低電平的時間是可調的。)

這裏爪爪熊準備寫成壹個golang的庫,並開源到github上,後續更新將直接更新到github中,如果妳有興趣可以和我聯系。 github.com/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)(在GPIO.12 上輸出PWM波,放上LED燈會有呼吸燈的效果,具體多少頻率還沒有進行測試)

以下是demo(pwm) 源碼

  • 上一篇:傳說中如何隨便刷裝備
  • 下一篇:從36個漲停板到虧損11億 從培養10個億萬富翁到老賴 暴風塌陷之路
  • copyright 2024編程學習大全網