干貨 | OK1028A-C如何輸出PWM方波?
最近,我收到了一個(gè)使用OK1028A-C輸出pwm方波的需求.但是發(fā)現(xiàn)OK1028平臺(tái)沒(méi)有相關(guān)的說(shuō)明,于是我著手寫(xiě)下了這篇文章。
在查閱OK1028A-C原理圖和《QorIQ LS1028A Reference Manual》后得知,LS1028默認(rèn)有8個(gè)FlexTimer (FTM) ,每個(gè)FTM有8路pwm。
默認(rèn)背光采用的是FTM1產(chǎn)生的pwm,我們使用FTM7做pwm測(cè)試。
如下圖所示:
LS1028 RCWSR12寄存器的12-14為I2C4的管腳復(fù)用。
如下圖所示:
I2C4管腳可以復(fù)用為六種管腳功能。OK1028A-C將管腳設(shè)置為can2 的rx 和tx ,在原理圖《OK1028A-C_V1.1》中可以看到T6_CAN2_RX、U7_CAN2_TX。
我們可以通過(guò)修改rcw文件,將I2C4設(shè)置為pwm管腳。
OK1028A-C默認(rèn)是支持pwm功能的,所以我們無(wú)需移植驅(qū)動(dòng),所做的工作只是修改pinmux和在設(shè)備樹(shù)中增加pwm的相應(yīng)設(shè)備節(jié)點(diǎn)即可。修改packages/firmware
/rcw/ls1028ardb/RSQPP0x85bb/rcw1500gpu600.rcw中IIC4_PMUX的設(shè)置,將pin設(shè)置為pwm輸出。
將IIC4_PMUX=2修改為 IIC4_PMUX=4
如下圖所示:
完成上述設(shè)置后我們需要修改設(shè)備樹(shù)代碼,增加PWM配置。我們的修改的文件路徑如下:
packages/linux/linux/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi。
然后添加pwm7設(shè)備
Pwm7: pwm@2860000 {compatible = "fsl,ls1028a-ftm-pwm";
reg = <0x0 0x2860000 0x0 0x10000>;
#pwm-cells = <3>;
clock-names = "ftm_sys";
clocks = <&ftm_sysclk>;
};
? 啟動(dòng)OK1028A-C系統(tǒng)
root@forlinx:~#cat /sys/kernel/debug/pwm 查看我們當(dāng)前的pwm設(shè)備如下圖所示:
我們現(xiàn)在打開(kāi)了一個(gè)pwm控制器,可以看到FTM1支持8個(gè)通道,而背光使用的是pwm-1通道。將我們修改后的設(shè)備樹(shù)文件和firmware編譯,燒寫(xiě)到飛凌LS1028A-C開(kāi)發(fā)板,啟動(dòng)系統(tǒng)。
root@forlinx:~#cat /sys/kernel/debug/pwm 查看我們當(dāng)前的pwm設(shè)備。
如下圖所示:
此時(shí),雖然我們添加的pwm設(shè)備打開(kāi)了,但和pwm0設(shè)備還是有差別的,新添加的pwm設(shè)備的每一路通道都沒(méi)有設(shè)置周期和占空比。
所以下一步我們不需要再增加驅(qū)動(dòng)代碼,而是利用sys即可直接設(shè)置pwm參數(shù)。Pwmchip8是我們添加的pwm設(shè)備。
? 使能使用的pwm通道
root@forlinx:~#echo 1 > /sys/class/pwm/pwmchip8/export 初始化 pwm通道1root@forlinx:~#echo 2 > /sys/class/pwm/pwmchip8/export 初始化 pwm通道2
root@forlinx:~#cat /sys/kernel/debug/pwm 命令查看我們當(dāng)前的pwm設(shè)備:
如果想取消相應(yīng)pwm通道的話(huà),可以使用“echo 1 > /sys/class/pwm/pwmchip8/unexport”
“echo 2 > /sys/class/pwm/pwmchip8/unexport”命令。
因?yàn)槲覀兠看沃荒苁鼓芤宦穚wm,所以先配置和打開(kāi)pwm1。root@forlinx:~#echo 1000000 > /sys/class/pwm/pwmchip8/pwm1/period 配置pwm1 period為1000000,單位為ns,即1kHZ。
root@forlinx:~#echo 500000 > /sys/class/pwm/pwmchip8/pwm1/duty_cycle 配置 duty_cycle 為500000,一個(gè)周期中on的時(shí)間即占空比,單位為ns,占空比50%
root@forlinx:~#echo 1 > /sys/class/pwm/pwmchip8/pwm1/enable 使能root@forlinx:~#cat/sys/class/pwm/pwmchip8/pwm1/{enable,period,duty_cycle} 命令可以查看我們的pwm使能狀態(tài),周期,和占空比。
如下圖所示:
? 用示波器測(cè)試T6_CAN2_RX產(chǎn)生1khz的方波
由于每次只能使能一路pwm,所以我們要使能pwm2,就需要先關(guān)閉pwm1。
root@forlinx:~#echo 0 > /sys/class/pwm/pwmchip8/pwm1/enable
root@forlinx:~#echo 1000000 > /sys/class/pwm/pwmchip8/pwm2/period 配置period為1000000
root@forlinx:~#echo 500000 > /sys/class/pwm/pwmchip8/pwm2/duty_cycle 配置duty_cycle為500000。root@forlinx:~#echo 1 > /sys/class/pwm/pwmchip8/pwm2/enable 使能root@forlinx:~#cat/sys/class/pwm/pwmchip8/pwm2/{enable,period,duty_cycle}
? 用示波器測(cè)試U7_CAN2_TX產(chǎn)生1khz的方波
在我們使用OK1028A-C時(shí),由于管腳復(fù)用,很多功能模塊的管腳沒(méi)有引出,但是模塊的驅(qū)動(dòng)是支持的。這種情況下,我們只需要修改rcw相應(yīng)的pinmux配置和設(shè)備樹(shù)文件就可以使用相應(yīng)的功能了。
好了,以上便是我對(duì)OK1028A-C開(kāi)發(fā)板如何實(shí)現(xiàn)PWM輸出方波的方法,有什么需要幫助和了解的可以在左側(cè)在線(xiàn)客服留言。
相關(guān)產(chǎn)品 >
-
OK1028A-C開(kāi)發(fā)板
LS028A 系列-LS1028開(kāi)發(fā)板 雙核Cortex-A72 設(shè)計(jì) TSN網(wǎng)絡(luò)支持 ,工業(yè)級(jí) LS1028A開(kāi)發(fā)板 提供了一個(gè)用于設(shè)計(jì)和評(píng)估LS1028A處理器設(shè)計(jì)核心板的平臺(tái)。支持TSN的以太網(wǎng)交換機(jī)和以太網(wǎng)控制器,可支持融合的IT和OT網(wǎng)絡(luò);支持CANFD、UART 、USB3.0、PCIe3.0、SATA3.0、IIS、IIC、SPI 等常用總線(xiàn)接口,并支持一個(gè)最大分辨率4K的DP接口。ls1028a 適用于工業(yè)路由器、TSN、SD-WAN、 5G CPE 、邊緣計(jì)算網(wǎng)關(guān) 、IP-PBX等產(chǎn)品,以及工業(yè)互聯(lián)、智慧工廠、工業(yè)安全、信息安全、智慧交通、能源物聯(lián)網(wǎng) 等應(yīng)用領(lǐng)域。 了解詳情 -
FET1028A-C核心板
LS1028A-C核心板基于NXP LS1028A處理器設(shè)計(jì),雙核ARM Cortex - A72,主頻最高1.6GHz,板載2GB DDR4 RAM,8GB ROM;原生支持6個(gè)Gbit Ethernet,支持TSN的以太網(wǎng)交換機(jī)和以太網(wǎng)控制器,可支持融合的IT和OT網(wǎng)絡(luò);支持CAN FD、UART、USB3.0、PCIe3.0、SATA3.0、IIS、IIC、SPI等常用總線(xiàn)接口,并支持一個(gè)最大分辨率4K的DP接口。適用于工業(yè)路由器、TSN、SD-WAN、5G CPE、邊緣計(jì)算網(wǎng)關(guān)、IP-PBX等產(chǎn)品,以及工業(yè)互聯(lián)網(wǎng)、智慧工廠、工業(yè)安全、信息安全、智慧交通、能源物聯(lián)網(wǎng)等應(yīng)用領(lǐng)域。 了解詳情