比如你想生成的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)?
發現有兩組參數可以滿足需求
pre=16.0CKDIV=75
pre=8.0CKDIV=150
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時鐘源的程序
文章出處:【微信公眾號:嵌入式ARM】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
單片機
+關注
關注
6040文章
44587瀏覽量
636785 -
PWM
+關注
關注
114文章
5194瀏覽量
214347 -
Lua
+關注
關注
0文章
81瀏覽量
10570
原文標題:高手雜談:用Lua編寫計算ML51單片機PWM時鐘源的程序
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論