找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3679|回復(fù): 1
收起左側(cè)

旋轉(zhuǎn)LED POV轉(zhuǎn)速自適應(yīng)實(shí)現(xiàn)方法

[復(fù)制鏈接]
ID:397957 發(fā)表于 2018-9-14 15:03 | 顯示全部樓層 |閱讀模式
先來(lái)一張自行車車輪上的POV效果圖(圖案是自己畫的,哈哈,獻(xiàn)丑了)

自行車車輪上的POV效果圖
1.jpg

        在制作自行車上的POV LED顯示時(shí),最讓人頭疼的是車輪的轉(zhuǎn)速不勻問(wèn)題,如何在隨時(shí)改變轉(zhuǎn)速的情況下保證能正常顯示是POV制作中的難題。
        經(jīng)我若干時(shí)間的試驗(yàn),采用自適應(yīng)調(diào)節(jié)的方法,很好解決了這個(gè)問(wèn)題,實(shí)際運(yùn)行效果很好。并同時(shí)應(yīng)用在我的新版“硬盤時(shí)鐘”的程序中。
        根據(jù)POV顯示原理,我們需要讓LED的閃亮頻率與旋轉(zhuǎn)的頻率同步。
        自適應(yīng)調(diào)節(jié)的算法的思想就是在外部中斷處理程序里,先給定時(shí)器T0一個(gè)合適的初始值,通過(guò)定時(shí)器T0處理程序給T0的中斷的次數(shù)計(jì)數(shù),當(dāng)旋轉(zhuǎn)一周完成后,根據(jù)實(shí)際中斷次數(shù)與預(yù)設(shè)的N比較,根據(jù)比較結(jié)果,在外部中斷處理程序中對(duì)T0的初設(shè)值進(jìn)行修正,直到定時(shí)器T0的中斷次數(shù)達(dá)到N為止。
       整個(gè)調(diào)節(jié)過(guò)程是動(dòng)態(tài)的,程序中并不需要知道旋轉(zhuǎn)一周的具體時(shí)間值。
        一般在中斷處里程序里應(yīng)盡量簡(jiǎn)化運(yùn)算,減少程序代碼量。我這里巧妙的使用了這樣一個(gè)修正值:
       D=D+(S-N)*2;
        其中N為預(yù)設(shè)的固定值。
       當(dāng)S>N時(shí),修正值D增大,使定時(shí)器T0的時(shí)間值增大,隨之N值減小。
       當(dāng)S<N時(shí),修正值D減小,使定時(shí)器T0的時(shí)間值減小,隨之N值增大。
       當(dāng)S=N時(shí),修正值不產(chǎn)生變化。

      程序程序片段如下:

     /*外部中斷0處理函數(shù)*/
     void intersvr0(void) interrupt 0 using 1
         {
           D=D+(S-N)*2;    //修正值
           Pt=600+D;         //得到定時(shí)器T0的初設(shè)值
           S=0;                  //計(jì)數(shù)器清零,將重新計(jì)數(shù)
         }

        /*定時(shí)中斷0處理函數(shù)*/
       void timer0(void) interrupt 1 using 1
       {
          TH0=-Pt/256;TL0=-Pt%256;   //設(shè)置定時(shí)器T0的初設(shè)值
          S++;                                        //計(jì)數(shù)
         }
回復(fù)

使用道具 舉報(bào)

ID:295290 發(fā)表于 2021-3-19 09:46 | 顯示全部樓層
Pt=600+D;    這里的加600是什么作用, 還有N值要取多少呢,有沒(méi)有經(jīng)驗(yàn)值,或取值的方法?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表