旋转POV LED显示的自适应调节算法

发光二极管

13人已加入

描述

  在制作自行车上的POV LED显示时,最让人头疼的是车轮的转速不匀问题,如何在随时改变转速的情况下保证能正常显示是POV制作中的难题。

  经我若干时间的试验,采用自适应调节的方法,很好解决了这个问题,实际运行效果很好。并同时应用在我的新版“硬盘时钟”的程序中。

  根据POV显示原理,我们需要让LED的闪亮频率与旋转的频率同步。

  自适应调节的算法的思想就是在外部中断处理程序里,先给定时器T0一个合适的初始值,通过定时器T0处理程序给T0的中断的次数计数,当旋转一周完成后,根据实际中断次数与预设的N比较,根据比较结果,在外部中断处理程序中对T0的初设值进行修正,直到定时器T0的中断次数达到N为止。

  整个调节过程是动态的,程序中并不需要知道旋转一周的具体时间值。

  一般在中断处里程序里应尽量简化运算,减少程序代码量。我这里巧妙的使用了这样一个修正值:

  D=D+(S-N)*2;

  其中N为预设的固定值。

  当S>N时,修正值D增大,使定时器T0的时间值增大,随之N值减小。

  当S时,修正值D减小,使定时器T0的时间值减小,随之N值增大。

  当S=N时,修正值不产生变化。

  程序程序片段如下:

  /*外部中断0处理函数*/

  void intersvr0(void) interrupt 0 using 1

  {

  D=D+(S-N)*2; //修正值

  Pt=600+D; //得到定时器T0的初设值

  S=0; //计数器清零,将重新计数

  }

  /*定时中断0处理函数*/

  void timer0(void) interrupt 1 using 1

  {

  TH0=-Pt/256;TL0=-Pt%256; //设置定时器T0的初设值

  S++; //计数

  }

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
张鹏8 2022-11-13
0 回复 举报
是不是应该将预设的N值往实际的旋转中断次数的S值中并,而不是S值等于N值? 收起回复
张鹏8 2022-11-13
0 回复 举报
请问N值是不是写的有问题,最后是不是要达到s=n呀? 收起回复
全部评论

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分