wiringPi庫的pwm配置及使用說明

本文介紹樹莓派(raspberry pi)在linux c 環境下的硬件pwm配置及使用方法。linux

1. 下載安裝wiringPi

此步驟建議參考官網指南,wiringPi提供了對樹莓派的硬件IO訪問,包括GPIO/I2C/PWM等,下載安裝後本地會出現wiringPi文件夾,根目錄下有/examples 可供參考。函數

2. 樹莓派PWM硬件

以raspberry pi 3b 爲例,嘗試在命令行下輸入 pinout,可查看當前pi的io映射圖佈局

這是當前pi的gpio佈局,卻不是wiringPi的IO映射表,所以參考時需注意,好在搜索一番便找到一張raspberry 3b的wiringpi IO映射表命令行

圖中的gpio1(pwm0) 及 gpio23(pwm1) 即爲咱們須要傳輸給wiringpi的硬件pwm輸出腳3d

3. wiringPi pwm 接口說明

在examples/pwm.c 或 wiringPi/wiringPi.c中可查看pwm的相關接口,但卻沒有詳細的調用說明,通過一番查閱,得出接口的使用方法爲:blog

  • pwmSetClock():設置pwm的工做時鐘。19.2MHz晶振爲pwm提供時鐘輸入,wiringpi在初始化gpio時默認採用32倍分頻(參考wiringPI.c 中的pinMode() 代碼),所以不調用此函數,pwm的默認工做時鐘爲600KHz.
  • pwmSetRange():設置pwm的輸出週期。以600KHz的工做時鐘爲例,假設pwm輸出頻率爲freq,則range = 600000/freq.
  • pwmSetMode():設置pwm的工做模式,wiringPi.h頭文件中包含此2種模式 PWM_MODE_MS/PWM_MODE_BAL,但並未作任何解釋。。.那就看手冊《BCM2837-ARM-Peripherals.pdf》吧

    從描述來看,MSEN=0彷佛用來傳輸N/M數據, MSEN=1纔是設置佔空比輸出,所以處的pwm輸出模式選擇PWM_MODE_MS
  • pwmWrite():設置pwm的輸出佔空比。由於一個週期長度爲range,所以佔空比的範圍爲0~range.

此外,wiringPi也提供了軟件PWM輸出,因爲屏蔽了硬件相關信息,其接口理解也更爲方便,在此再也不贅述。接口

相關文章
相關標籤/搜索