标题: 请问一下怎么产生PWM波 [打印本页] 作者: 浙江第一帅 时间: 2018-10-30 16:46 标题: 请问一下怎么产生PWM波 请问一下怎么产生PWM波,我看用户手册里只有ECAP_APWM波的,请问怎么修改程序,可以变成产生pwm波???谢谢大家 * Q4 H" Z I* }( c9 k5 j4 }% L作者: 浙江第一帅 时间: 2018-10-30 17:00
/****************************************************************************/ z2 J! A) e' r
/* */( L9 q) y0 R3 Y+ ]% b! s' i- C# D
/* 宏定义 */9 P' Q. G" Y G5 y
/* */) h5 v/ R3 n' [4 E: u. @# D, v
/****************************************************************************/" ?8 i7 e, r# Q2 |0 u' b* R" a/ K( G" g
// 软件断点 0 f8 p5 m' w! F7 d#define SW_BREAKPOINT asm(" SWBP 0 ");. e: q+ E4 X6 `. F+ [7 O7 V: p
; ~& h3 x0 f6 V; N- B
// 时钟分频& I9 e) ^- c7 h0 B( d3 o
#define CLOCK_DIV_VAL 228 ' S, i: j5 o9 }( t+ X( D. p/ m6 W
/****************************************************************************/6 g4 Q2 }6 K1 F3 c8 }5 E
/* */ : b3 r- V. u3 _* Y5 b/* 全局变量 */1 J" |2 B- ] x% I* c: S
/* */ ; m% S$ S: Q4 P' L1 ~/****************************************************************************/ 5 s9 H$ L* z) gECAPCONTEXT ECAPResult;2 S, n6 g/ P0 `1 {
! L/ ?) E( D! O' n( u% ^# j
/****************************************************************************/. V% ]. C) S3 `
/* */$ g1 M5 C0 o9 n" B% V5 S" q
/* 函数声明 */5 j, ?. x! ~% k5 K/ B/ s
/* */) ~! P N5 D& N C I5 M: D( r
/****************************************************************************/ ' x7 ?) ]% K U// 外设使能配置3 H* _9 F: m; ]2 L# T
void PSCInit(void); 5 @7 E6 A: n0 w$ j3 g0 G + _4 j& x2 s5 W$ c p# [9 w// GPIO 管脚复用配置 2 S3 r0 \- k' o6 v3 Nvoid GPIOBankPinMuxSet(); & S) h6 F3 m2 s8 f+ C! Y6 E j) i, Q0 \: P& A; }. w: [& z// 产生波形$ p- E4 A0 [3 d' [/ v5 o3 F
void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio);: w7 G3 C* @9 @1 C* W
void ChopperWaveform(void);6 \8 Y$ u0 w+ @2 g+ L
" g) d/ N/ g* [. J9 Y// ECAP初始化和读函数" X3 Q; \, o+ J! X f0 l. D' @
void ECAPInit(void);8 F* n# N( H, Y* v. z
unsigned int ECAPRead(void);* q9 F# o I. n, z$ p& o
) q- _: J& |% C% O$ F, o) E3 A
//ARM 中断初始化 / G$ X0 K. h) E) X6 nvoid InterruptInit(void); b. g) p5 e1 N$ ^$ n' V
1 O! {% e. U7 k// PWM 中断初始化 / o0 h1 L# x( z, b m! avoid PWMInterruptInit(void); & P4 \7 |/ h7 M" t. o7 C, s// 中断服务函数+ p. W L8 `2 f! s/ M8 Q
// PWM 事件1 T! Y) c0 J; T
void PWMEventIsr(void); ) f. @! C0 v4 [3 D$ G' A// PWM 错误控制事件6 m' l* U. B) |7 ?, q9 D
void PWMTZIsr(void); 1 @7 ~4 f$ g+ N5 z# \* `5 k2 H' F. m3 ~
/****************************************************************************/$ {8 o; r$ R, X
/* */* X8 `2 ] e% J, h- l
/* 主函数 *// M1 o7 I" u* B5 ?% @
/* */ & C# N/ y0 Y, G+ g, s/****************************************************************************/ 1 I+ O( O( q# O* }; s4 Wint main(void)7 H( ~, `2 m6 u+ d" E7 k1 K
{ ( {4 j9 c! c' o* W7 G4 Y // 外设使能配置 " M1 v; N, N. P6 S PSCInit();- j* [' s; E+ N; F. J, Y2 h6 }9 W
9 h# {! s+ z7 e F; ?/ _
// 初始化串口终端 使用串口2$ E4 J& s2 Z! z8 X6 r/ ?
UARTStdioInit();" e* P, ]" b6 ]
{$ |' Q0 A& s0 k/ j/ J
// GPIO 管脚复用配置8 A. M: V; @) j: X
GPIOBankPinMuxSet(); $ \& ]' l' {- z/ Y / m% @: k1 y5 j2 L( ? // ARM 中断初始化 ( b, Z; `. f( s: n InterruptInit();5 O) Q5 Y% R' I) ~8 {
& @9 |* \" e( Z
// PWM 中断初始化 - N# \. A3 H( N8 A PWMInterruptInit(); ( s6 w ?7 u& x4 s1 v0 f . R2 K5 F6 |- H( k7 d unsigned char i;5 M: U$ D r* f& d
unsigned int j;: u1 N6 R: T8 d3 s
; |: J) n2 u; X UARTPuts("Tronlong PWM_ECAP Application......\r\n", -1); " u6 I$ ?8 r% A9 a4 u UARTPuts("------------------------------------------------------------\r\n", -1);& S; R# O& h$ d
UARTPuts(" C6748 PWM Test\r\n\r\n", -1); 1 r" `$ p+ b7 X$ x9 ? // 产生波形$ }2 s: U$ u, j5 z' `0 I0 ?* G
PWM1ABasic(25000,50);5 m R- ^' z: w4 l, k& E
2 ?9 \% Q+ Z+ K2 O+ r
UARTPuts(" C6748 PWM Test Over!\r\n",-1);" M& i" m* T {' ?/ z! q: U
UARTPuts("------------------------------------------------------------\r\n", -1); . g0 ]4 I h- U* }. B; t: k" I( z# t) \: T Y/ Q
0 z* P- v% [4 ^6 C. I U& K( F# t- b; T: N7 Z" T% B
UARTPuts("------------------------------------------------------------\r\n", -1);5 f. Q/ A0 a* C$ Z/ l
UARTPuts(" C6748 ECAP Test\r\n", -1);+ h# X1 M! Z9 u- {% I5 t
// ECAP 捕获初始化7 D, P) r" [2 R
ECAPInit(); : C/ a2 t, E- X; \! J, c+ F) e$ z9 m1 q5 D UARTPuts("Initialize ECAP.......\r\n",-1);: q9 d! g/ b5 ?$ o, v* x
for(i=0;i<5;i++)+ i9 }2 q) i' G/ w2 w U
{ + k' T2 g7 N. K for(j=0x00FFFFFF;j>0;j--); // 延时 , e) N. I4 Y4 N! v ECAPRead();7 [8 a' B5 C7 g H( Y _) i4 Y9 K
} 6 d0 ^6 ?0 D1 |- y3 F$ `" o UARTPuts("\r\n",-1);9 ?: Y9 q% s# H' d# J/ C! I+ I
UARTPuts(" C6748 ECAP Test Over!\r\n",-1); % \8 q/ q% G1 _ UARTPuts("------------------------------------------------------------\r\n", -1); / b# M1 C; L5 h $ U# M( `$ u* B5 A3 J! T' i // 主循环 - e; V7 d4 x+ ?& C' B7 b, q for(;;)4 o' t7 \+ s- o6 l& X
{ - b7 z* U" P9 ~+ E2 I ' R1 B$ M# R" ]/ C } 1 H8 Y7 i5 Z# c" {4 J} 2 U# D, Z) l! B! R K/ g) ]2 }, X: P6 k- A
/****************************************************************************/ 7 {1 X" L8 O& U! G% I! o, `; |/* */! P1 w+ d. c& A
/* PSC 初始化 */* ~ H9 o% q$ P; V2 Y/ @' x; l8 L; w! d
/* */ |, ?( q4 y. D/****************************************************************************/% D+ M6 Y M/ u* s8 s2 l7 D; `
void PSCInit(void) & n6 m0 a' Q8 Q( i{3 t) ]5 [) g9 w8 [3 n
// 使能 EHRPWM 和 ECAP 模块 8 _$ t# v) N3 v/ R // 对相应外设模块的使能也可以在 BootLoader 中完成 ' i7 v0 }; e1 \% j8 W& g PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_EHRPWM, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);. P$ S$ @( J4 R: t0 g9 t
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_ECAP0_1_2, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE); " |: Z$ @9 Y) B4 F}, Y$ e& Y( |7 q3 u& a4 ~+ T