找回密码
 注册
关于网站域名变更的通知
查看: 666|回复: 1
打印 上一主题 下一主题

飞凌嵌入式LS1028A开发板如何输出PWM方波

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-5-31 15:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
最近,我收到了一个使用OK1028A-C输出pwm方波的需求.但是发现OK1028平台没有相关的说明,于是我着手写下了这篇文章。3 _+ c" Q& n3 U. j8 @

  P% S0 t5 g  s0 ~在查阅OK1028A-C原理图和《QorIQ LS1028A Reference Manual》后得知,LS1028默认有8个FlexTimer (FTM) ,每个FTM有8路pwm。
1 ?) o3 w; G" D8 y) A0 H
) d3 k) `- Q! O  J8 P

! E4 c) V+ j5 E) v
. G8 i1 ?  F6 Q2 v& P7 `7 i( a* p. D5 T/ R( f% N* b

8 A5 F% C  F6 C  J默认背光采用的是FTM1产生的pwm,我们使用FTM7做pwm测试。0 B7 B2 H) J' ^7 V: {1 [/ E
0 ]5 Q0 p3 X- x! S0 F
如下图所示:' L" a+ r$ q8 C' k

. C  M. E5 @& |' C, M
& e8 M2 v2 Z/ z3 Q" L& Z0 y( N4 l9 q) Z  N' P9 ~
5 o& s3 y$ r2 v

1 u1 f: G# l0 a3 O5 z$ L: wLS1028 RCWSR12寄存器的12-14为I2C4的管脚复用。
. A) @+ L' `7 ^

$ {  s* y/ ^% {  X  e; h如下图所示:+ I  L2 V# a- D, v- E" b# D

2 }2 ^! b* d: h$ k2 C9 y; e4 F  S
2 c( d& Q( {& K

- \3 t/ N8 V3 Z6 Y7 B: O
6 M9 {' s& S1 p& T1 D' {. s, o; sI2C4管脚可以复用为六种管脚功能。OK1028A-C将管脚设置为can2 的rx 和tx ,在原理图《OK1028A-C_V1.1》中可以看到T6_CAN2_RX、U7_CAN2_TX。- M) J& z3 P' z4 k( d# B

& G- ^1 X! C5 t7 p5 t4 i. d) D: A我们可以通过修改rcw文件,将I2C4设置为pwm管脚。
; f& e' a5 E5 C7 y+ n+ @6 d
8 |, D- k7 F1 Z
OK1028A-C默认是支持pwm功能的,所以我们无需移植驱动,所做的工作只是修改pinmux和在设备树中增加pwm的相应设备节点即可。修改packages/firmware& p) |' h' x; n8 B0 n, w- x

% @/ L- B# v( }! G- Q+ x0 U1 X/rcw/ls1028ardb/RSQPP0x85bb/rcw1500gpu600.rcw中IIC4_PMUX的设置,将pin设置为pwm输出。
- O- x+ \8 g+ ]* K$ p
  Y$ s( Z5 n; f4 `5 m5 N
将IIC4_PMUX=2修改为 IIC4_PMUX=4
/ O7 t3 L: y: d  X7 [$ p
# n( {6 S5 a; `8 v2 t% M+ i
如下图所示:" n) P, F7 _$ G  M8 h+ W6 M+ P' j0 C
" R% h7 w0 D9 I! }$ |8 z
, z. g3 V2 H! m9 _& z

! T" L/ s  m% ~% a
9 G) X7 Z9 b; o& l& P6 t$ W3 \( \, A0 _) L% W& B! {+ f- q2 K9 M6 c
完成上述设置后我们需要修改设备树代码,增加PWM配置。我们的修改的文件路径如下:
& m8 M- K! }& k9 f, N# q

9 u8 A7 @! {5 v2 @& Lpackages/linux/linux/arch/ARM64/boot/dts/freescale/fsl-ls1028a.dtsi。
9 ~9 ]" l4 p) I, Y: ]. W: e

, t+ _5 E. |. x% T$ `" F7 W然后添加pwm7设备
! X9 @9 k  S1 a' V4 d

+ l0 O2 Z# j$ i! KPwm7: pwm@2860000 {
1 Q! F- x1 d, A( |& Q

! W7 S9 J( Y# E+ f9 s" x( ?4 O6 ^                        compatible = "fsl,ls1028a-ftm-pwm";1 V  D7 _, J. C* N* R  W
4 T  Q8 d, ^- ]6 A5 n+ Y* U7 h, }
                        reg = <0x0 0x2860000 0x0 0x10000>;0 M9 Z$ @# C8 P6 @. J8 V! K$ U
0 u0 `6 o/ T' C# ?+ F% X9 q
                        #pwm-cells = <3>;
3 u5 I0 X7 Q* R# r$ x/ a

7 i2 z" V5 D& S1 b8 {                        clock-names = "ftm_sys";
% Q# ~% n/ I# u1 d# C6 F: u
8 q( Q0 f5 `4 ]1 z& g
                        clocks = <&ftm_sysclk>;
+ }7 k  O4 ~1 Q+ H% o

6 ], j- X( t  K0 w' o                };
3 k- S2 o$ F9 C2 S1 W. }  T! i! g3 F

: J1 g3 C% t# M0 t5 y0 D) ^如下图所示:4 M' F! R: Y- ?) D

1 |; g$ g* O; i* x
% R3 R9 W9 ^' X* y' z+ [% s0 Q5 q$ G5 J/ {, X+ a
' _7 w" o5 ]) I5 S' S4 ^

1 ~0 H! B% P( ]▐  启动OK1028A-C系统$ T' a& t/ h! ^1 i! ?. i3 Z
5 F9 x- k' u7 Q8 P' ^8 U
root@forlinx:~#cat /sys/kernel/debug/pwm 查看我们当前的pwm设备* b$ ^* N; e& `2 L% u

& ^/ T, I# i+ ^如下图所示:2 J; R5 N5 w' v
- R" e1 B9 I: ?

- c6 [2 F" o  f; M' @. g
4 U+ l5 o5 v5 e9 P! F5 R% m2 o, m' O* c% B8 U9 ]

( x. }/ s7 T2 b: `6 o6 T+ w  O我们现在打开了一个pwm控制器,可以看到FTM1支持8个通道,而背光使用的是pwm-1通道。将我们修改后的设备树文件和firmware编译,烧写到飞凌LS1028A-C开发板,启动系统。5 B! t. R6 q5 \/ `

: u& I9 U; O& }* Hroot@forlinx:~#cat /sys/kernel/debug/pwm 查看我们当前的pwm设备。
5 Y, a5 k5 z% H% U& y0 ]4 k0 ~, f
" S0 x  }& A$ ?, u6 G
如下图所示:
/ g4 d" ]* R% B1 Q

9 P( }" B3 o% L: m' U8 J5 g& W$ k$ X( }# J

. a. R. r. d4 }" ^; A1 b7 N
: s' v4 K: l) ?
0 p) |  G$ \' r4 m6 j2 S此时,虽然我们添加的pwm设备打开了,但和pwm0设备还是有差别的,新添加的pwm设备的每一路通道都没有设置周期和占空比。
5 R+ w1 u: C0 R+ [1 d! j
' |& T1 f$ }" h' |/ e
所以下一步我们不需要再增加驱动代码,而是利用sys即可直接设置pwm参数。Pwmchip8是我们添加的pwm设备。. z) u- |1 N8 S" A- ~

; w5 K3 h2 j5 P- H* j
0 y! b# |9 B4 p5 X
/ V: o8 b3 u: H: k) e) P1 O
; B, C, k3 w, [3 o* }* Q
, E8 g1 Y% S0 k% B▐  使能使用的pwm通道& M  b2 f- ^+ |. z# ~

: c; Y" {- Q) _7 ~, Froot@forlinx:~#echo 1 > /sys/class/pwm/pwmchip8/export 初始化 pwm通道1  
8 ^6 `+ y* c* s' L

3 Z/ o; v0 u) N; Groot@forlinx:~#echo 2 > /sys/class/pwm/pwmchip8/export 初始化 pwm通道2  [' U$ s; a8 c; T7 ?
7 C$ e- v3 z* G1 O( ]% ~7 t
root@forlinx:~#cat /sys/kernel/debug/pwm命令查看我们当前的pwm设备:
1 {. i$ t3 y1 R( V4 N

* j* L7 C, w. C0 k! ?
. e8 m+ j7 c. F  M: U0 B$ p
& `' i6 t" f& G' ]: a- g& u2 S* v+ [7 @! x6 T4 w
  s7 J! R: |2 h9 ~& X) [0 ?
如果想取消相应pwm通道的话,可以使用“echo 1 > /sys/class/pwm/pwmchip8/unexport”
# a: {( @. k4 ]( J) F7 f

- o7 R2 m9 X( u, T5 Q“echo 2 > /sys/class/pwm/pwmchip8/unexport”命令。5 U% {( F7 Q; w- V; C. d

" F5 g5 V0 I# m* \( f  B因为我们每次只能使能一路pwm,所以先配置和打开pwm1。% ~+ D' l  E1 f
0 S8 f, V* e0 `
root@forlinx:~#echo 1000000 > /sys/class/pwm/pwmchip8/pwm1/period 配置pwm1 period为1000000,单位为ns,即1kHZ。5 t8 C) \% h8 F' M! s) s( T  \! B
- |* T/ ]3 Z+ w: J8 Q4 r% e3 a
root@forlinx:~#echo 500000 > /sys/class/pwm/pwmchip8/pwm1/duty_cycle 配置 duty_cycle 为500000,一个周期中on的时间即占空比,单位为ns,占空比50%) O3 M* z) b0 t3 ]9 r

. K0 u( o. a9 V6 u7 b% v6 P2 G/ q# D. ~root@forlinx:~#echo 1 > /sys/class/pwm/pwmchip8/pwm1/enable 使能
' y/ q7 B9 t2 Q6 }1 S& _; ^5 n

, m$ m2 b; Z5 u- D" _root@forlinx:~#cat/sys/class/pwm/pwmchip8/pwm1/{enable,period,duty_cycle} 命令可以查看我们的pwm使能状态,周期,和占空比。0 W8 ^, W  U1 q5 k1 n- m9 p2 u+ H- k
; z& E+ o+ _4 ~" {. ^3 w. I
如下图所示:, R- P& \6 ?1 Y5 ?) R3 y
* A0 q' r2 L- k' H, c0 P. ?
: B5 P& b: x& Y# H# @7 f7 W5 Y5 u
$ y; }# ?$ I2 o( H( F. J

$ _: Q) O/ J& h. c+ f3 z
: M$ _, h3 C+ _: n9 _' g$ r▐  用示波器测试T6_CAN2_RX产生1khz的方波
0 \2 K. J) ?6 U/ T5 [5 p: ?' k
- \1 l# y( G. n& ~" z: w4 g/ }
由于每次只能使能一路pwm,所以我们要使能pwm2,就需要先关闭pwm1。  T. z9 a2 G8 C# A

2 ^) i3 S' e/ I- E2 Wroot@forlinx:~#echo 0 > /sys/class/pwm/pwmchip8/pwm1/enable3 ?. U( i* E! s2 ~* [6 Q, c" U  p
6 v3 |9 U9 X; ^0 d% ?* H! \
root@forlinx:~#echo 1000000 > /sys/class/pwm/pwmchip8/pwm2/period 配置period为1000000* a: Y9 e: _5 A
0 }# @/ _/ e' T' h
root@forlinx:~#echo 500000 > /sys/class/pwm/pwmchip8/pwm2/duty_cycle 配置duty_cycle为500000。root@forlinx:~#echo 1 > /sys/class/pwm/pwmchip8/pwm2/enable 使能
/ W# D( h# T, ]

6 }0 x' H3 l1 Lroot@forlinx:~#cat/sys/class/pwm/pwmchip8/pwm2/{enable,period,duty_cycle}
/ j* }) ~% ?; }8 U7 N! |( l
) U' M  H3 N# m& @) C0 s+ s; S6 n4 Y( M1 C

2 w3 L' l2 H* U) e* x' [7 D" Z. ^& V$ v/ s. o# j+ P
3 U5 B( D" @& ]" [% ~$ c# K

7 p+ V, }  @/ W7 E8 J▐  用示波器测试U7_CAN2_TX产生1khz的方波5 l8 u2 u, }7 u6 @2 H6 }; Z

9 L5 C) `; O8 d$ n在我们使用OK1028A-C时,由于管脚复用,很多功能模块的管脚没有引出,但是模块的驱动是支持的。这种情况下,我们只需要修改rcw相应的pinmux配置和设备树文件就可以使用相应的功能了。
* Q) [+ W- Q4 l! C
, ~* I) r" `8 ^) L; V5 ]

3 P" Z# U" {! I

该用户从未签到

2#
发表于 2021-6-1 09:58 | 只看该作者
LS1028A开发板如何输出PWM方波
, U! c& g3 X: I' q- ]6 K
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 09:40 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表