飞思卡尔的PWM程序祥细步骤和讲解

飞思卡尔的PWM程序祥细步骤和讲解,第1张

void

PWM_Init(void)

{

//初始化

PWMPRCLK_PCKA

=

0x2

/*16383000Hz/2=8192000Hz

*/

PWMPRCLK_PCKB

=

0x2

/*8192000Hz/4

=2048000Hz

*/

PWMCTL_CON01

=

0X1

/*

0

&

1

16位精度PWM工作

*/

PWMPOL_PPOL1

=

0x1

/*

极性为先高后低

与占空比相同

*/

PWMCAE

=

0x00

/*

operate

in

left

aligned

output

mode.

*/

}

void

setPWM01(word

per,byte

start)

{

per

=

(word)(2048000/per)

PWMPER01

=

(word)per

/*

设置脉冲周期

*/

PWMDTY01

=

(word)(per/2)

/*

设置脉冲占空比为50%

*/

if(start==1)PWME_PWME1

=

1

/*

脉冲发送开始

*/

else

PWME_PWME1

=

0

/*

脉冲停止发送

*/闹稿

}

发脉碰败冲时调用

setPWM01(频液吵孝率,1)

哥们,这个已经很详细了;

大概说说吧,PWM[54]是定义的一组PWM脉宽输出数组,PWM脉宽输出是0-255;0的时候脉宽输出最大,255的时候脉宽输出最小;

然后那个初始化PCA,初始化定时器0就不说了,你自己下一个手册看下就明白;

然后是中断,每中断一次index加1,然后判断index是不是等于54,意思就是PWM[54]整个数组里面的PWM是不是都送了一次CCAP寄存器;如果都数组都送了一次,将index置零,从头开始送;标志位取反,如果标志位zf=1,让P14输出PWM,P13关闭;,如果zf=0,让P13输出PWM,P14关闭;if(zf==0)后面的语句就是让PWM[54]中的每一个数都送CCAP寄存器一次;

其实按这个程序注释的话,他本意是PWM波形从小变大P14输出,PWM波形有大变小P13输出;但是这个程序的实际效果是P14由小巧戚芹变大再由大变小。然后P14关闭,P13由小变大再由大变小

如此循环;

你最关心的PWM怎么输出:就是这两个语句,CCAP0H=pwm[index] CCAP1H=pwm[index] index每中断一次加1,那么index是由0加到54,假如说index=0 ,那孝毕么CCAP0H=pwm[0],pwm[0]对应数字里面的255,寄存器CCAP0H=255;这个寄存器等于255,PWM输出就是一个小脉宽;下一次中断CCAP0H=240了,脉宽有增加了一点;至于CCAP0H送一个数据就有脉宽输出,这个是由单片机硬件本身仔氏决定的;你看看手册就知道了;

这个已经说得很明白了吧;累死,打字都打了20分钟;


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12306713.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存