比如你想生成的PWM的時鐘信號頻率為10K,然后你就可以利用10K的PWM時鐘源計數(shù)生成周期為(1~4095)*(1/10000)的PWM波形了。
其實再次修改程序,你還可以計算PWM周期計數(shù)器與高電平相關的值。
目前提供Lua腳本的
function get(my)--這個是選擇系統(tǒng)的時鐘源,這里默認選擇內(nèi)置的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)?
發(fā)現(xiàn)有兩組參數(shù)可以滿足需求
pre=16.0CKDIV=75
pre=8.0CKDIV=150
CKDIV是這里,選擇內(nèi)部的RC振蕩器后的分頻
CKDIV = 75; PWM0_ClockSource(PWM_FSYS,16); 或者 CKDIV = 150; PWM0_ClockSource(PWM_FSYS,8);
function get(my)--這個是選擇系統(tǒng)的時鐘源,這里默認選擇內(nèi)置的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)? 優(yōu)化了一下顯示形式,輸出結果,可以看出為了達到某個結果,實際上可以通過多組分頻組合實現(xiàn)。??
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原創(chuàng)
原文標題:高手雜談:用Lua編寫計算ML51單片機PWM時鐘源的程序
文章出處:【微信公眾號:嵌入式ARM】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
單片機
+關注
關注
6064文章
44932瀏覽量
647494 -
PWM
+關注
關注
116文章
5409瀏覽量
218265 -
Lua
+關注
關注
0文章
83瀏覽量
10883
原文標題:高手雜談:用Lua編寫計算ML51單片機PWM時鐘源的程序
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
基于51單片機的手動數(shù)字時鐘

評論