高手杂谈:用Lua编写计算ML51单片机PWM时钟源的程序

Posted 嵌入式ARM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高手杂谈:用Lua编写计算ML51单片机PWM时钟源的程序相关的知识,希望对你有一定的参考价值。


比如你想生成的PWM的时钟信号频率为10K,然后你就可以利用10K的PWM时钟源计数生成周期为(1~4095)*(1/10000)的PWM波形了。


其实再次修改程序,你还可以计算PWM周期计数器与高电平相关的值。


目前提供Lua脚本的


function get(my)--这个是选择系统的时钟源,这里默认选择内置的24M时钟HIRC Fhirc=24000000--下面几个变量都是临时变量使用,初始化多少都行  CKDIV=0 Fsys=0 pre=1 Fpwm=0 i=0  for CKDIV=0,255 do for i=0,7 do
pre=2^i if(CKDIV==0) then Fsys=Fhirc elseif((CKDIV>0)and(CKDIV<=0xFF)) then Fsys=Fhirc/(2*CKDIV) end Fpwm=Fsys/pre if(my==Fpwm) then print("pre="..pre.."CKDIV="..CKDIV) end end endend
get(10000)

高手杂谈:用Lua编写计算ML51单片机PWM时钟源的程序

发现有两组参数可以满足需求
pre=16.0CKDIV=75
pre=8.0CKDIV=150

高手杂谈:用Lua编写计算ML51单片机PWM时钟源的程序

CKDIV是这里,选择内部的RC振荡器后的分频


CKDIV = 75;
PWM0_ClockSource(PWM_FSYS,16);

或者

CKDIV = 150;
PWM0_ClockSource(PWM_FSYS,8);

function get(my)--这个是选择系统的时钟源,这里默认选择内置的24M时钟HIRC Fhirc=24000000--下面几个变量都是临时变量使用,初始化多少都行  CKDIV=0 Fsys=0 pre=1 Fpwm=0 i=0  for CKDIV=0,255 do for i=0,7 do
pre=2^i if(CKDIV==0) then Fsys=Fhirc elseif((CKDIV>0)and(CKDIV<=0xFF)) then Fsys=Fhirc/(2*CKDIV) end Fpwm=Fsys/pre if(my==Fpwm) then print("PWM时钟频率为"..my.."Hz".." 需要设置".."pre="..pre..", CKDIV="..CKDIV) end end endend
get(10000)print("-----------------------------------")get(15000)print("-----------------------------------")get(20000)

优化了一下显示形式,输出结果,可以看出为了达到某个结果,实际上可以通过多组分频组合实现。

PWM时钟频率为10000Hz 需要设置pre=16.0, CKDIV=75PWM时钟频率为10000Hz 需要设置pre=8.0, CKDIV=150-----------------------------------PWM时钟频率为15000Hz 需要设置pre=32.0, CKDIV=25PWM时钟频率为15000Hz 需要设置pre=16.0, CKDIV=50PWM时钟频率为15000Hz 需要设置pre=8.0, CKDIV=100PWM时钟频率为15000Hz 需要设置pre=4.0, CKDIV=200-----------------------------------PWM时钟频率为20000Hz 需要设置pre=8.0, CKDIV=75PWM时钟频率为20000Hz 需要设置pre=4.0, CKDIV=150

END

本文系21ic论坛蓝V作者gaoyang9992006原创


推荐阅读


以上是关于高手杂谈:用Lua编写计算ML51单片机PWM时钟源的程序的主要内容,如果未能解决你的问题,请参考以下文章

高手帮注释下这一条单片机输出PWM信号程序,谢谢

时钟程序单片机

51单片机实现pwm对电机调速

用STC单片机的PCA做定时器,输出PWM

单片机RGB调色程序 要求基于PWM(STC系列单片机c语言)可以实现至少60种颜色调节,有多种模

基于80C51单片机,编写电子时钟,要求有电路图、PCB图和代码(C语言或者VB)