在线时间0 小时
UID341784
注册时间2012-2-13
NXP金币0
该用户从未签到
新手上路

- 积分
- 43
- 最后登录
- 1970-1-1
|
PS:会陆续更新,如果有写得不好的地方,请多多包涵,并赐教
PWM章
使用Kinetis的PWM有感。
PWM是一门很重要的技术,应用十分广。比如,在电机,舵机,LED等等,基本上很多涉及到调节大小或者快慢的元件中都有PWM的一席之地。
超核电子的PWM.C文件很有人性化,都封装好了,不需要再次与寄存器打交道,只要输入频率和占空比就可以了。特别是涉及到计算寄存器数值是多少的时候,超核电子电子让kinetis自动运算填写寄存器,而且不溢出,使得我们再也不用考虑怎么填写这些繁琐的寄存器。
超核电子的代码:
/*数值计算,自动选择合适的分频及mod值*/
if(rate>=1000)
{ ps=1;mod=(clock*1000000/(rate*2));}
else if(rate>=500)
{ ps=2;mod=(clock*1000000/(rate*4));}
else if(rate>=250)
{ ps=3;mod=(clock*1000000/(rate*8));}
else
{ ps=4;mod=(clock*1000000/(rate*16));}
但是我们需要的不仅仅是不溢出,我们需要的在不溢出的前提下让kinetis的PWM的精度达到最大。
下面附上小弟的代码:
PS:经过示波器多次检验,无问题。
/*数值计算,自动选择合适的分频及mod值,防止mod寄存器溢出 */
clock_rate_ratio=clock/rate;
<span style="font-size: medium; "><span lang="EN-US"> if(clock_rate_ratio
|
|