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