天天看點

imx6q開發闆的PWM蜂鳴器調試

開發闆:I.MX6Q  5155

Linux核心:嵌入式3.10.53

蜂鳴器:無源壓電式

日期:2019-6-29 18:50

調試目的:在開發闆上實作PWM驅動蜂鳴器蜂鳴。

調試過程如下:

 (0)首先運作開發闆Linux系統,檢視目前系統所使用的pwm裝置。

如下:

imx6q開發闆的PWM蜂鳴器調試

可見目前系統隻有背光是使用pwm實作,為了調試友善,可以通過背光來模拟蜂鳴器,使用背光裝置樹來驅動蜂鳴器,因為系統自帶了可以在使用者空間調試背光的brightness檔案(後面會用到),用這種方法可以利用brightness檔案以調試蜂鳴器。

(1)檢視硬體原理圖和datasheet,了解硬體相關資訊。

在IMX6Q原理圖(SPF-27516_C5)中搜尋pwm,發現了一處連接配接pwm的管腳,即DISP0_PWM。

imx6q開發闆的PWM蜂鳴器調試

從原理圖可知,DISP0_PWM連接配接的是SD1_DAT3,但我們還不能确定是不是該管腳是不是連接配接的背光。

(2)檢視背光裝置樹,确定背光連接配接管腳。

在sourceinsight中搜尋backlight,可在imx6qdl-sabresd.dtsi中得到以下資訊管腳

imx6q開發闆的PWM蜂鳴器調試

可知backlight連接配接的是pwm1。

在imx6qdl-sabresd.dtsi中搜尋pwm1,可得:

imx6q開發闆的PWM蜂鳴器調試

可知pwm1連接配接的管腳為pinctrl_pwm1_1。

繼續搜尋pinctrl_pwm1_1,可在imx6qdl.dtsi中得到以下資訊:

imx6q開發闆的PWM蜂鳴器調試

從MX6QDL_PAD_SD1_DAT3__PWM1_OUT可知,背光的pwm對應的管腳為SD1_DAT3,至此可确定原理圖中DISP0_PWM即是連接配接的背光引腳。

從以上DTS檔案資訊也可以知道,DTS檔案已經建好了pwm控制背光的裝置樹。

到這裡,我們确定了一個資訊,即背光連接配接的PWM1管腳是SD1_DAT3。已知我們的闆子有PWM1、PWM2、PWM3、PWM4四個PWM,現在PWM1已經使用,那麼能否用其他某一個PWM控制蜂鳴器?繼續下面探索。

(3)查閱datasheet,确定可用于蜂鳴器的PWM。

查閱datasheet,看是否有其他可用的pwm。在datasheet中得到以下資訊:

imx6q開發闆的PWM蜂鳴器調試

可知SD1_CMD管腳可以複用為PWM4_OUT輸出,是以可以使用pwm4來驅動蜂鳴器。在原理圖中查找SD1_CMD,得到如下資訊:

imx6q開發闆的PWM蜂鳴器調試

可以看出SD1_CMD管腳已經被連接配接到了蜂鳴器控制器上,是以我們可以對SD1_CMD進行配置,以實作pwm4驅動蜂鳴器。

(4)修改背光裝置樹,以實作PWM4驅動蜂鳴器。

       Ⅰ、修改imx6qdl.dtsi中pwm1節點,如下

imx6q開發闆的PWM蜂鳴器調試

這裡将本用于背光的PWM1管腳配置為用于蜂鳴器的PWM4管腳。

       Ⅱ、修改imx6qdl-sabresd.dtsi中pwm1節點,如下

imx6q開發闆的PWM蜂鳴器調試

這裡依樣畫葫蘆,根據原來pwm1的描述,修改為pwm4的描述。

        Ⅲ、修改imx6qdl-sabresd.dtsi中節點,如下

imx6q開發闆的PWM蜂鳴器調試

這裡依然使用了backlight的名字,這樣便可以使用系統自帶的檔案brightness檔案來調試蜂鳴器。其中的字段“pwms”指定了蜂鳴器的頻率(這裡我取370370,轉換為頻率為2700HZ),“brightness-levels”字段指定了占空比,分7級,輸入7最大,100%,蜂鳴器不會響(因為是無源蜂鳴器,輸入0也一樣不響),輸入6占空比為50%,蜂鳴器聲音最大。

到這一步,裝置樹的修改便已完成。

(5)測試

測試時,運作Linux系統後,輸入如下指令,在使用者空間進行測試。其中的brightness檔案是3.10.53系統提供的測試imx6q背光的檔案,通過往該檔案寫入0-7幾個數字可以調節背光亮度,如果我們前面的工作沒有出錯,那輸入非0或非7數字蜂鳴器就會發出蜂鳴聲。

imx6q開發闆的PWM蜂鳴器調試

測試結果:蜂鳴器無聲響,示波器測量蜂鳴器管腳亦無波形,可知未成功。

原因排查:

如下,

輸入dmesg | grep pwm指令檢視啟動資訊,得到如下資訊:

imx6q開發闆的PWM蜂鳴器調試

可以看到,MX6Q_PAD_SD1_CMD引腳正在被另一個裝置iomuxc所占用,無法配置設定給208c000.pwm(208c000為pwm4位址資訊,可在datasheet中查到),也就是我們的pwm4裝置,在DTS檔案中搜尋MX6Q_PAD_SD1_CMD,在imx6qdl-sabresd.dtsi中可得到如下資訊,

imx6q開發闆的PWM蜂鳴器調試

由最後一行資訊可知MX6Q_PAD_SD1_CMD在這裡被占用。

從資料手冊也可以看出,SD1_CMD可以有5種使用方式,其中就包含了GPIO1_IO18,如下表,

imx6q開發闆的PWM蜂鳴器調試

是以可以确定是GPIO_IO18占用了MX6Q_PAD_SD1_CMD管腳,将其屏蔽掉,再重新編譯裝置樹。

啟動系統,再輸入“echo 6 > /sys/bus/platform/devices/backlight.36/backlight/backlight.36/brightness” 指令,蜂鳴器發出聲響,成功!

最後再重複一遍,這種方法是在背光裝置樹的基礎上,修改相應管腳等資訊來實作PWM驅動蜂鳴器,這種方法可以利用系統中已有的調試背光用的brightness檔案,以在使用者空間調試蜂鳴器,友善快捷。但這樣占用了背光的裝置樹,将會使背光不能使用。若想同時使用PWM驅動背光和蜂鳴器,需要另外建立蜂鳴器自己的裝置樹,其方法也和上面所叙大同小異,隻是不修改背光的裝置樹而已,在此不多贅述,隻将最主要的修改部分貼出,如下

imx6q開發闆的PWM蜂鳴器調試

至此整個過程結束。

繼續閱讀