视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
如何对PWM编程
2025-09-29 22:27:37 责编:小OO
文档
相关知识讲解:

PWM就是脉冲脉宽调制,输出的波形就是一些不同占空比的方波,波形周期和占空比你都可以设定。占空比(Duty Ratio)在一串理想的脉冲周期序列中(如方波),正脉冲的持续时间与脉冲总周期的比值。看下图,T是周期,高电平时间t除以周期T就叫占空比。

所以说对于PWM,我们最终想要设定的参数就是周期T和占空比。

先看PWM相关寄存器:

PWM使能寄存器PWME:

PWME[7:0]=1;相应的PWM模块使能,否则禁止。

PWM极性寄存器PWMPOL:

PPOL[7:0]=1,PWM通道输出在开始的时候为高电平,为0说明开始时为低电平。

PWM时钟选择寄存器PWMCLK:

PCLK*=1,使用时钟SA或SB作为时钟源,PCLK*=0,使用时钟A或B作为时钟源。如下图。

PWM预分频时钟选择寄存器PWMPRCLK:

由上图可以看出f A =f BUS / 2PCKA[2:0], f B =f BUS / 2PCKB[2:0].

SA寄存器PWMSCLA,用来设置SA时钟源频率

SA的时钟频率f SA=f A/(2*PWMSCLA),如果PWMSCLA=0x00,f SA=f A/512.

PWM中间对齐使能寄存器PWMCAE:

CAE[7:0]=1,采用中间对齐模式;CAE[7:0]=0,采用左对齐模式。

PWM通道周期寄存器(PWMPERX)

具体按如下公式计算,左对齐时:PWM周期=通道时钟周期*PWMPERX;

中间对齐时:PWM周期=通道时钟周期*2*PWMPERX;

PWM占空比寄存器PWMDTYX:

PWM的占空比按如下公式计算:

PWM占空比计算和极性寄存器PWMPOL有关,当PPOLx=0时,占空比=(周期寄存器值减去占空比寄存器值)除以周期寄存器值;当PPOLx=1时,占空比=占空比寄存器值除以周期寄存器值。

设置步骤:

先选择相应的时钟源

设置对齐方式设置周期和占空比

启动通道

实际应用:

目标:输出一个周期为400ms,占空比为50%的方波。

分析:首先利用PLL将周期设置为40M,

然后选择时钟源

PWMCLK = 0xFF; /* 选择时钟源SA,SB*/

PWMPRCLK = 0x77; /* clock A,B =总线时钟/128 */

PWMSCLA = 0; /* clock SA = Clock A/512 */

PWMSCLB = 0; /* clock SB = Clock B/512 */

这个时候时钟SA或SB为40M/128/512 = 610HZ

1/610HZ=1.ms

我们选择中间对齐模式:

PWMCAE = 0xFF; /* 输出时是中间对齐的*/

PWMPOL = 0xFF; /*输出以高电平开始---___*/

接下来就要选择周期了:

中间对齐时:PWM周期=通道时钟周期*2*PWMPERX;因为要设置周期为400ms,所以400ms = (1000/610)ms * 2 *PWMPERX,由此可以算出PWMPER=122=0x7A.

PWMPER0=0x7A;

接下来设置占空比:

当PPOLx=1时,占空比=占空比寄存器值除以周期寄存器值。50%= PWMDTY0/122, 所以PWMDTY0=61=0x3D

PWMDTY0=0x3D;

接下来启用PWM通道0:

PWME=0x01;

赶紧试试吧!下载本文

显示全文
专题