【原創(chuàng)】樹(shù)莓派3B開(kāi)發(fā)Go語(yǔ)言(四)-自寫(xiě)庫(kù)實(shí)現(xiàn)pwm輸出

在前一小節(jié)中介紹了點(diǎn)亮第一個(gè)LED燈,這里我們準(zhǔn)備進(jìn)階嘗試下,輸出第一段PWM波形敦第。(PWM也就是脈寬調(diào)制,一種可調(diào)占空比的技術(shù)店量,得到的效果就是:如果用示波器測(cè)量引腳會(huì)發(fā)現(xiàn)有方波輸出芜果,而且高電平、低電平的時(shí)間是可調(diào)的融师。)

這里爪爪熊準(zhǔn)備寫(xiě)成一個(gè)golang的庫(kù)右钾,并開(kāi)源到github上,后續(xù)更新將直接更新到github中诬滩,如果你有興趣可以簡(jiǎn)書(shū)和我聯(lián)系霹粥。 github.com/dpawsbear/bear_rpi_go

一、樹(shù)莓派的PWM

我在很多的教程中都看到說(shuō)樹(shù)莓派的PWM(硬件)只有一個(gè)GPIO能夠輸出疼鸟,就是 GPIO1后控。這可是不小的打擊,因?yàn)槲蚁胧褂弥辽偎膫€(gè) PWM 空镜,還是不死心浩淘,想通過(guò)硬件手冊(cè)上找尋蛛絲馬跡,看看究竟怎么回事吴攒。

手冊(cè)上找尋東西稍等下講述张抄,這里先提供一種方法測(cè)試 樹(shù)莓派3BPWM 方法:用指令控制硬件PWM。

#pwm 輸出頻率為4.8Mhz/1024 = 4.6875khz
gpio mode 1 pwm    # 設(shè)置 gpio1 引腳為pwm模式
gpio pwm-ms        # 設(shè)置 pwm 的模式為 pwm-ms Mark-space
gpio pwmr 1024     # 設(shè)置 pwm 滿計(jì)數(shù)為1024
gpio pwmc 4        # 設(shè)置 pwm 的頻率 4:4.8MHZ
gpio pwm  1 512    # 設(shè)置 pwm 的占空比 為 512/1024 (50%)占空比

這里通過(guò)指令的方式掌握了基本的pwm設(shè)置技巧洼怔,決定去翻一下手冊(cè)看看到底PWM怎么回事署惯,這里因?yàn)闆](méi)有 BCM2837 的手冊(cè),根據(jù)之前文章引用官網(wǎng)所說(shuō)镣隶, BCM2835BCM2837 應(yīng)該是一樣的极谊。這里我們直接翻閱 BCM2835 的手冊(cè)诡右,直接找到 PWM 章節(jié)。找到了如下圖:

image.png

圖中可以看到在博通的命名規(guī)則中 GPIO 12轻猖、13帆吻、18、19咙边、40猜煮、41、45败许、52王带、53 均可以作為PWM輸出。但是只有兩路PWM0 PWM1檐束。根據(jù)我之前所學(xué)知識(shí)辫秧,不出意外應(yīng)該是PWM0 和 PWM1可以輸出不一樣的占空比,但是頻率應(yīng)該是一樣的被丧。因?yàn)闆](méi)有示波器盟戏,暫時(shí)不好測(cè)試。先找到下面對(duì)應(yīng)圖:

image.png

根據(jù)以上兩個(gè)圖對(duì)比可以發(fā)現(xiàn)如下規(guī)律:

PWMn BCM引腳 GPIO引腳(NAME) 板子引腳 復(fù)用模式
PWM0 GPIO 12 GPIO26 32 ALT0
PWM0 GPIO 18 GPIO 1 12 ALT5
PWM1 GPIO 13 GPIO23 33 ALT0
PWM1 GPIO 19 GPIO24 35 ALT5

對(duì)照上面的表可以看出從 BCM2837 中印出來(lái)的能夠使用在PWM上的就這幾個(gè)了甥桂。

為了驗(yàn)證個(gè)人猜想是否正確柿究,這里先直接使用指令的模式,模擬配置下是否能夠正常輸出黄选。

# 指令方式模擬配置 gpio為pwm
gpio mode  1 pwm
gpio mode 26 pwm
gpio mode 23 pwm
gpio mode 24 pwm
gpio pwm-ms
gpio pwmr 1024
gpio pwm   1 100
gpio pwm  26 512
gpio pwm  23  10
gpio pwm  24 256

通過(guò)上面一系列指令模擬發(fā)現(xiàn)蝇摸,(GPIO1、GPIO26)办陷、(GPIO23貌夕、GPIO24)是綁定在一起的,調(diào)節(jié)任意一個(gè)民镜,另外一個(gè)也會(huì)發(fā)生變化啡专。也即是PWM0、PWM1雖然輸出了兩路制圈,可以理解成兩路其實(shí)都是連在一個(gè)輸出口上们童。這里由于沒(méi)有示波器或者邏輯分析儀這類設(shè)備(僅有一個(gè)LED燈),所以測(cè)試很簡(jiǎn)陋鲸鹦,下一步是使用示波器這類東西對(duì)頻率以及信號(hào)穩(wěn)定性進(jìn)行下測(cè)試慧库。

小節(jié):樹(shù)莓派具有四路硬件輸出PWM能力,但是四路中只能輸出兩個(gè)獨(dú)立(占空比獨(dú)立)的PWM馋嗜,同時(shí)四路輸出的頻率均是恒定的齐板。

二、使用go語(yǔ)言操作PWM

上面大概了解清楚了樹(shù)莓派3B的PWM結(jié)構(gòu),接下來(lái)就是探究如何使用Go語(yǔ)言進(jìn)行設(shè)置覆积。

因?yàn)槟玫搅耸謨?cè)听皿,這里我想直接操作寄存器的方式進(jìn)行設(shè)置,也是順便學(xué)習(xí)下Go語(yǔ)言處理寄存器的過(guò)程宽档。首先需要拿到pwm 系列寄存器的基地址,但是翻了一圈手冊(cè)庵朝,發(fā)現(xiàn)只有偏移吗冤,沒(méi)有找到基地址。

經(jīng)過(guò)了一段時(shí)間的努力后九府,決定寫(xiě)一個(gè) 樹(shù)莓派3B golang包開(kāi)源放在github上椎瘟,只需要寫(xiě)相關(guān)程序進(jìn)行調(diào)用就可以了,以下是相關(guān)demo(pwm)(在GPIO.12 上輸出PWM波侄旬,放上LED燈會(huì)有呼吸燈的效果肺蔚,具體多少頻率還沒(méi)有進(jìn)行測(cè)試)

2.1 使用方法

go get github.com/dpawsbear/bear_rpi_go

cd $gopath/src/github.com/dpawsbear/bear_rpi_go/example

go build -ldflags "-w -s" pwm.go

sudo ./pwm

以下是demo(pwm) 源碼

package main

import (
    "fmt"
    rpi "github.com/dpawsbear/bear_rpi_go"
    "time"
)

func main(){
    fmt.Println("starting...")
    if 0 != rpi.Bcm2837_init() {
        rpi.Bcm2837_close()
        panic(55)
        return
    }



    //test for pwm (GPIO.12 and GND)
    rpi.Bcm2837_gpio_fsel(rpi.RPI_3B_GPIO_J8_12,uint8(rpi.BCM2837_GPIO_FSEL_ALT5))

    rpi.Bcm2837_pwm_set_clock(rpi.BCM2837_PWM_CLOCK_DIVIDER_16)

    rpi.Bcm2837_pwm_set_mode(0, 1, 1 )

    rpi.Bcm2837_pwm_set_range(0,1024 )

    rpi.Bcm2837_pwm_set_data(0,10 )

    var data uint32 = 1
    for{
        for {
            time.Sleep(time.Millisecond*2)
            data ++
            if data > 768{
                break
            }
            rpi.Bcm2837_pwm_set_data(0,data )
        }
        for {
            time.Sleep(time.Millisecond*2)
            data --
            if data < 2 {
                data = 1
                break
            }
            rpi.Bcm2837_pwm_set_data(0,data )
        }

    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市儡羔,隨后出現(xiàn)的幾起案子宣羊,更是在濱河造成了極大的恐慌,老刑警劉巖汰蜘,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仇冯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡族操,警方通過(guò)查閱死者的電腦和手機(jī)苛坚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)色难,“玉大人泼舱,你說(shuō)我怎么就攤上這事〖侠颍” “怎么了娇昙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)依沮。 經(jīng)常有香客問(wèn)我涯贞,道長(zhǎng),這世上最難降的妖魔是什么危喉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任宋渔,我火速辦了婚禮,結(jié)果婚禮上辜限,老公的妹妹穿的比我還像新娘皇拣。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布氧急。 她就那樣靜靜地躺著颗胡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吩坝。 梳的紋絲不亂的頭發(fā)上毒姨,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音钉寝,去河邊找鬼弧呐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嵌纲,可吹牛的內(nèi)容都是我干的俘枫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼逮走,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鸠蚪!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起师溅,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茅信,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后险胰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體汹押,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年起便,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棚贾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡榆综,死狀恐怖妙痹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鼻疮,我是刑警寧澤怯伊,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站判沟,受9級(jí)特大地震影響耿芹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挪哄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一吧秕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迹炼,春花似錦砸彬、人聲如沸颠毙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛀蜜。三九已至,卻和暖如春增蹭,著一層夾襖步出監(jiān)牢的瞬間滴某,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工沪铭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壮池,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓杀怠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親厅克。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赔退,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容