亿加合和智能车制作

标题: 关于PLL超频的个人心得 [打印本页]

作者: chenrunshe_007    时间: 2010-3-14 11:59
标题: 关于PLL超频的个人心得
本帖最后由 chenrunshe_007 于 2010-3-18 00:23 编辑

废话少说,我们先来看两段代码:
  1. //Code1
  2. void SetBusClock(void)
  3. {
  4. CLKSEL=0X00;           // disengage PLL to system
  5. PLLCTL_PLLON=1;       // turn on PLL
  6. SYNR=0x00 | 0x02;    // VCOFRQ[7:6];SYNDIV[5:0];fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1);fPLL= fVCO/(2 × POSTDIV);fBUS= fPLL/2
  7. REFDV=0x80 | 0x01;  // REFFRQ[7:6];REFDIV[5:0]
  8. _asm(nop);               // BUS CLOCK=24MHz
  9. _asm(nop);
  10. while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
  11. CLKSEL_PLLSEL =1;  //engage PLL to system;
  12. }
复制代码
这时候有人说:你这不是废话吗,地球人都知道这段代码,根据公式,可以算出F_Bus=24MHz,不是我无聊没事干写这玩意来开刷大家,大家请耐心点再看另一段代码:
  1. //Code2
  2. void SetBusClock(void)
  3. {
  4. CLKSEL=0X00;         // disengage PLL to system
  5. PLLCTL_PLLON=1;    // turn on PLL
  6. SYNR=0x00 | 0x0B;     // VCOFRQ[7:6];SYNDIV[5:0];fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1);fPLL= fVCO/(2 × POSTDIV);BUS= fPLL/2
  7. REFDV=0x00 | 0x07;    // REFFRQ[7:6];REFDIV[5:0]
  8. _asm(nop);             // BUS CLOCK=24M
  9. _asm(nop);
  10. while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
  11. CLKSEL_PLLSEL =1;//engage PLL to system;
  12. }
复制代码
聪明的你看出这两段代码的区别了吧?对,第二段代码同样可以超频到24MHz,但是用了不同的方法,很久以前,我曾经在论坛上面看见过有人问过这个问题,说同样是超频到24MHz,16X(2+1)/(1+1)=24和16X(11+1)/(7+1)=24有什么区别?我当时还没太注意,经过试验发现真没什么区别,等到今年我调的时候就发现了,大家可以看得出如果用的是代码1,超频每次增加的基数是8MHz,而代码2可以小到2MHz,做LED和EM可能还没这个感受,做CCD的就会深刻的体验,超频每快2MHz对图像处理的好处。也就是说使用代码1,你想超频更多,就必须每次8MHz增加,而用代码2,每次你可以增加2MHz,慢慢增加直到不能再超为止,给大家说下我们的例子,我们用的是龙丘的112Pin的板子,用代码1的话只能超到88MHz,再往上怎么也超不到96MHz,而用代码2的话,可以开始试88、90、92、94、96……,最后最高发现可以在94MHz那里达到稳定,比原来预计的88MHz多了6MHz,如果大家用的是龙丘的80Pin的板子,那可能就能超得过96,或者更高了。这种细节大家不要小看它,很多有利的细节加在一起可能就能在成功之路上助你一臂之力。
不过本人倒是有个疑问,某权威说过,LED不用超频那么多,有24MHz够用了,我们用的是激光扫描探测方法,模拟CCD的处理,可能处理的信息会比较多,如果我能超到94MHz,那岂不是比24MHz快了整整将近4倍!在这种“诱惑”下,我们快把持不住了,所以也就超了,觉得好像也没有什么超的多就会不稳定的事情发生,童鞋们觉得怎么样。
1.追求运行速度还是追求稳定重要?
2.到底超频超得多是不是一定会导致运行不稳定?能帮本人解决这两个问题,不胜感激。

以上仅代表个人意见,欢迎指出不足的地方。
PS:代码是引用龙丘的例程修改,特此做一下说明。
作者: chenrunshe_007    时间: 2010-3-14 12:06
踊跃发表意见,来者接招。
作者: chenrunshe_007    时间: 2010-3-14 12:07
觉得爽的话就顶,不爽也要踩一下表示。但看贴不回是不道德的行为。
作者: lyyyuna    时间: 2010-3-14 12:37
hao
作者: kechenwei918    时间: 2010-3-14 12:43
我现在在负责组装车,还没有开始调程序,不过说得有道理,谢谢分享,以后验证一下。
作者: chenrunshe_007    时间: 2010-3-14 12:45
回复 5# kechenwei918
加快速度啊,快3月份了,车子再不动起来就回影响后面的调试。
作者: francis    时间: 2010-3-14 13:18
看了,谢谢
作者: kechenwei918    时间: 2010-3-14 14:04
回复 6# chenrunshe_007


    是啊,现在有些不知所措啊,整天忙活着,谢谢提醒啊!
作者: longforljy    时间: 2010-3-14 16:41
zzz
作者: changhao    时间: 2010-3-14 17:15
我们总线一直是80MHZ 而且比较稳定 今天看到chenrunshe_007 的帖子 我觉得有必要再高点 呵呵
作者: DEMOK    时间: 2010-3-14 18:27
楼主研究得细致呀 学习了
作者: zouyf12    时间: 2010-3-14 21:31
效果是一样的,只是代码二可以微调频率,使之能很接近极限频率是吧? 可以这样理解吗?
作者: chenrunshe_007    时间: 2010-3-14 23:53
回复 9# longforljy
什么意思,是顶还是不顶?
作者: chenrunshe_007    时间: 2010-3-14 23:55
回复 10# changhao
不要受我误导啊,其实我也不懂到底超到这么高会不会对单片机影响很大导致程序跑飞。我们超到88MHz已经完全够用了,只不过人吗,有时候是贪心一点了。
作者: chenrunshe_007    时间: 2010-3-14 23:55
本帖最后由 chenrunshe_007 于 2010-3-15 09:57 编辑

回复 11# DEMOK
呵呵,比起你学长whut_wj差远了。
作者: chenrunshe_007    时间: 2010-3-14 23:56
回复 12# zouyf12
我觉得我说了半天的废话还不如这位仁兄一句真言令我醍醐灌顶。
作者: zouyf12    时间: 2010-3-15 01:38
额。。。我也没有仔细看了, 只是看了你说的,代码一每加一格是8M ,代码二每加一格是2M,所以,觉得就是一个像显微镜上的粗调旋钮和微调旋钮的区别
作者: zdhly0401    时间: 2010-3-15 09:17
思想不错,值得借鉴,但是16X(2+1)/(1+1)=24和16X(15+1)/(7+1)=24有什么区别?
答案是:前者=24,后者=32,呵呵
作者: daqixing    时间: 2010-3-15 09:40

作者: chenrunshe_007    时间: 2010-3-15 09:52
回复 17# zouyf12
That's rgiht.
作者: chenrunshe_007    时间: 2010-3-15 09:53
回复 18# zdhly0401
晕啊,忙起来竟然啊犯这种错误,好我改过来。
作者: DEMOK    时间: 2010-3-15 10:37
回复 15# chenrunshe_007


    呵呵  我师兄研三,我大三,确实有差距啊
作者: phuture    时间: 2010-3-17 23:24
挺有启发 谢楼主分享了
作者: chenrunshe_007    时间: 2010-3-18 00:13
本帖最后由 chenrunshe_007 于 2010-3-18 00:23 编辑

回复 23# phuture
问一个题外的问题,你是电子科大的,一定认识“陈虹佐”么,09年NEC国赛的特等奖?
作者: 民警加大学    时间: 2010-3-18 16:48
如果是参加比赛那就追求速度 如果是做成品的话 那就应该注重稳定性
   个人感觉!呵呵 我就参加比赛的 所以我很兴奋 !~~
作者: ssg322    时间: 2010-3-18 18:29
顶一下
作者: luson1321    时间: 2010-3-18 18:38
楼主,我是新手,想问问你
SYNR=0x00 | 0x02;    // VCOFRQ[7:6];SYNDIV[5:0];fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1);fPLL= fVCO/(2 × POSTDIV);fBUS= fPLL/2
REFDV=0x80 | 0x01;  // REFFRQ[7:6];REFDIV[5:0]
这两句是什么意思啊?
作者: chenrunshe_007    时间: 2010-3-18 19:21
本帖最后由 chenrunshe_007 于 2010-3-18 19:23 编辑

回复 27# luson1321
你好,
SYNR=0x00 | 0x02;
REFDV=0x80 | 0x01;
都是为了设置SYNR、REFDV的值,“|”前面的是设置超频范围的控制字,主要是看“|”后面的值才是关键的,是设置超频的具体值,计算公式为:
F_Bus=2*F_Osc*(SYNR+1)/(REFDV+1)/2
F_Bus为超频后的总线频率;
F_Osc为晶振频率,一般为16MHz;
SYNR和REFDV即我所说的SYNR=0x00 | 0x02和REFDV=0x80 | 0x01“|”后面的值,分别为0x02和0x01;
具体请查看Datasheet。
作者: chiusir    时间: 2010-3-18 21:47
不错,我顶你!
作者: chiusir    时间: 2010-3-18 21:53
回复 25# 民警加大学


    不错,历届比赛以来,很多队伍本来是很优秀的,但他们在稳定性上的失误使得与更高的奖项失之交臂,这种队伍我现场看到不少的,所以,稳定最重要!
作者: chenrunshe_007    时间: 2010-3-19 00:30
本帖最后由 chenrunshe_007 于 2010-3-19 00:32 编辑

回复 29# chiusir
不敢当,还引用了你的例程。
如果是稳定性最重要的话,你的112Pin的板超到多少合适?我超到90M还可以稳定运行么?
作者: juyan    时间: 2010-3-19 09:19
这么高的频率!
作者: chenrunshe_007    时间: 2010-3-19 12:48
回复 32# juyan
如果用80Pin封装的板子还可以比96MHz更高,具体能高到多少没试过,你可以试一下。
作者: alaso12    时间: 2010-3-19 14:03
不错,有借鉴价值。感谢lz
作者: 786892880    时间: 2010-3-19 15:31
楼主你好,我用的也是龙丘的板子,同样的程序放在112pin的板子上可以稳定运行,但是用到80pin的板子上就乱了。不知道要是什么问题。
还有我们曾经测试过,在CCD同一场数据内,其他非采集函数可以重复运行十几遍(64M),所以我觉得在满足采集要求的情况下,稳定性是最重要的。
作者: shenxueli    时间: 2010-3-19 16:59
定下!
作者: lxh7792    时间: 2010-3-19 17:24
不错哈
作者: 91910909    时间: 2010-3-19 18:04
看了 ~不知光电组的有没有效果
作者: chenrunshe_007    时间: 2010-3-19 18:09
回复 38# 91910909
效果肯定没有CCD明显。
作者: chenrunshe_007    时间: 2010-3-19 18:10
回复 35# 786892880
应该是硬件的问题,具体你要问龙丘才行。
确实应该考虑稳定性的重要,单方面追求速度感觉有点像买六合彩。
作者: zou317    时间: 2010-3-19 18:50

作者: limit    时间: 2010-3-19 18:59
谁知道超频的极限是多少?
作者: qnbs1    时间: 2010-3-19 19:09
呵呵 。。我们的车还没开始呢
作者: chenrunshe_007    时间: 2010-3-19 20:21
回复 43# limit
所以你要用我的方法测一下啊,等你的数据。
作者: 吾陪你    时间: 2010-3-19 23:27
茫然
作者: shallam    时间: 2010-3-20 00:29
xuexi
作者: 凌阳    时间: 2010-3-20 08:14
楼主太猛了,领会领会,向楼主学习!
不过其实我一直都觉得代码越简洁越好。车再快也不会超过4m,太快的运行速度有时候也不一定有多少意义。当然这还依赖具体的调试,也许94就是比较适合,我们还没到那么高呢,呵呵
作者: cat888    时间: 2010-3-20 09:06
datasheet 上说 SYNR尽量高,REFDV尽量低,不知道有什么原因。
作者: verify    时间: 2010-3-20 09:06
看了,
作者: chenrunshe_007    时间: 2010-3-20 09:09
回复 49# cat888
我好像没注意到,具体在那一页?
作者: buaastar    时间: 2010-3-20 10:26
有机会我试试~
作者: 96107015    时间: 2010-3-20 12:50
不明白这样有什么区别
作者: cat888    时间: 2010-3-20 12:55
回复 51# chenrunshe_007

重新看了下,我理解错了,应该是SYNDIV和REFDIV都尽量低。
P250:
    Several examples of IPLL divider settings are shown in Table8-13. Shaded rows indicated that these
settings are not recommended. The following rules help to achieve optimum stability and shortest lock
time:
Use lowest possible fvco/fref ratio (SYNDIV value).
Use highest possible REFCLK frequency fref
作者: lmmarkham001    时间: 2010-3-20 13:18
看看
作者: chenrunshe_007    时间: 2010-3-20 14:17
回复 54# cat888
很明显就是:The following rules help to achieve optimum stability and shortest lock,应该是为了达到最佳的稳定以及最短的时钟周期。看来我得重新考虑一下了。
作者: tlong_1919    时间: 2010-3-20 15:04
顶!!!!!!!!!!!!!!!!!!!!
作者: tlong_1919    时间: 2010-3-20 15:34
好!!!!!!!!!!!!!!!!!!!!
作者: fbhsy    时间: 2010-3-22 22:16
谢谢,我们的超起来了
作者: fbhsy    时间: 2010-3-22 22:16
值得学习哈
作者: 山孩子    时间: 2010-3-23 00:14
回复 28# chenrunshe_007
不好意思问下

    超频范围的控制字 有什么作用?
  设置的时候要注意什么?
作者: chenrunshe_007    时间: 2010-3-23 07:39
回复 61# 山孩子
Datasheet上有明确的解析,具体我忘记了,好像是为了更好地达到稳定,但经过本人测试,发现当频率超过60MHz(范围最大只有120MHz/2=60MHz)以后,设不设好像无所谓,反正至少目前来讲没出问题,但为了保险起见还是设了好。
作者: 小什羊    时间: 2010-3-23 08:24
说的好啊 谢谢lz的分享
作者: Tangly    时间: 2010-3-23 09:21
现在还没着,但兄弟,很不错,辛苦了
作者: 632693521    时间: 2010-3-23 15:34
真待好好验证一番,若真的是这样的话,就万分感谢与你!
作者: geagler    时间: 2010-3-24 18:18
好方法。。顶
作者: 黄海飓风    时间: 2010-3-24 21:30
hao!
作者: lansedeyueliang    时间: 2010-3-26 09:11
很显然的诱惑!
作者: dkmy    时间: 2010-3-26 12:10
我都没敢超到50M...

听你们这一说    倒是给了我不小的诱惑.......

哦,我做的是CCD的~~
作者: chenrunshe_007    时间: 2010-3-26 12:35
回复 69# dkmy
你这个头像太强了。
作者: tjj    时间: 2010-3-27 12:12
顶顶
作者: xiaohaipolang    时间: 2010-4-1 22:20
你果然是牛人
作者: 单尾鱼    时间: 2010-4-2 23:06
这样啊
作者: librae8226    时间: 2010-4-3 09:09
谢谢!@!!!
作者: justing88    时间: 2010-4-3 09:53
编辑过的就是爽
作者: panpan0823    时间: 2010-4-3 10:29
新手,刚刚开始研究程序~发现老手就是不一样,细致入微,多多学习
作者: jacklgl    时间: 2010-4-3 10:33
这贴不能不顶啊
作者: jacklgl    时间: 2010-4-3 10:33
这贴不能不顶啊
作者: 632693521    时间: 2010-4-4 09:45
大虾啊,受教了!
作者: 632693521    时间: 2010-4-4 10:30
本帖最后由 632693521 于 2010-4-4 10:33 编辑

回复 1# chenrunshe_007

先回答你的两个问题:
第一,当然是追求稳定更重要些,一切比赛,首要目的是要成功跑完全场,然后再追求速度;前者没问题情况下才考虑速度;个人理解!
第二,超频多了当然会导致系统运行不稳定,一般来说,好些器件,程序用不了那么高的超频,而且,若是搞的话,在ATD,PWM等模块分频时还要麻烦些,而且一些通道处理速度没那么快,例如,对于AD转换来说,它的转换周期包括采样时间和运算时间。如果频率太高,则采样时间过短。这对于输出阻抗比较大或信号频率比较高的信号来说,就会产生较大的采样误差,那么AD转换的精度就会受较大的影响。
本人关于PLL还是有些问题不懂,还希望你多多指教:
                当你选择倍频时(PLLSEL=1),你的系统频率是等于锁相环频率(PLLCLK),
                当你不选择倍频时(PLLSEL=0),你的系统频率是等于振荡器频率(OSCCLK),而你的总线频率(Bus Clock)是始终等于你系统频率的1/2;    OSCCLK(振荡器频率,即你的晶振)
      问题1:若是一般不设置的话,PLLSEL默认是?;若是0的话,我用的是xs128的板子,16M晶振,那么Bus Clock=8M?那设置PLL还有什么意义?
     问题2:楼上说想提高超频,那不知可提高频率不要超过VCO的上限,是多少??fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1);fPLL= fVCO/(2 × POSTDIV);fBUS= fPLL/2 ;与PLLCLK = 2 x OSCCLK x [SYNR + 1]/[REFDV + 1] 岂不是不一样?不知道两者的区别,是型号不同的原因吗??
   问题3:POSTDIV是指?一般编程我也没用到这个,用的是REFDV寄存器;
  问题比较碎,谢谢了!!
作者: 蓝海之鸟    时间: 2010-4-4 11:27
哈哈,受教了。
作者: 断天涯    时间: 2010-4-4 13:03
受教了
作者: shuxinxiaozi    时间: 2010-4-9 11:06
楼主很不错的嘛!
作者: chenrunshe_007    时间: 2010-4-9 14:02
本帖最后由 chenrunshe_007 于 2010-4-9 14:05 编辑

回复 80# 632693521
1.PLLSEL默认为0,Datasheet 214页上面讲的很清楚;如果为0即不使能PLL超频,Bus Clock=8M,所以才要设置PLLSEL=1嘛,还有问题么?
2.POSTDIV默认为0时,fPLL= fVCO,Datasheet 237页上面讲的很清楚“If POSTDIV = $00 then fPLL is same as fVCO (divide by one)”,兄弟没过4级吧?你代fPLL= fVCO进去算一下就知道两条式子其实是一样的,应该上过高数了吧?证明过程自己去弄弄。
3.你还是没有仔细看Datasheet238页,POSTDIV在上面讲的很清楚,看Datasheet是王道啊,高手一般精通Datasheet。
作者: 632693521    时间: 2010-4-9 19:38
回复 84# chenrunshe_007


    唉呀,是该好好看看datasheet了!
作者: lengjing3    时间: 2010-4-9 22:15
多谢
作者: 过去时石头    时间: 2010-4-10 13:10
这都是宝贵的经验,谢谢楼主
作者: lberry    时间: 2010-4-10 20:21
学习了!
作者: nigel1946    时间: 2010-4-12 20:48

作者: silence_lut    时间: 2010-4-13 11:16
楼主你好,新人,有些疑问,你说在超频时每次增加2M,是怎么增加的,是还有别的代码,还是MCU自己每次一直加2M?
还是SYNR=6 REFDV=1 ?
作者: wangguoxiao    时间: 2010-4-13 12:26
楼主:有一个频率范围设定是怎么回事?
作者: chenrunshe_007    时间: 2010-4-13 18:27
回复 90# silence_lut
你按照我的代码2来写,SYNR每增加1,超频增加2MHz。
作者: chenrunshe_007    时间: 2010-4-13 18:30
回复 91# wangguoxiao
频率范围设定是为了使PLL更好地趋向稳定。Datasheet里面有详解,这个帖子之前有同学跟我讨论过,你翻翻看。
作者: fq1888    时间: 2010-4-13 22:52
我们组的摄像头现在超频到40M感觉就够用了。60*20的数组可以处理下来,直观上来说,超频少点 更稳定啊、
作者: kurui365    时间: 2010-4-13 23:10
很实用的方法
超频问题值得研究 现在还没发言权
作者: chenrunshe_007    时间: 2010-4-14 00:23
回复 94# fq1888
确实应该这样,我们准备也要降到45MHz,刚好折半,程序好改。
作者: wt373455698    时间: 2010-4-14 21:36

作者: xiaoyang06022    时间: 2010-4-15 13:18
看来,谢谢楼主!
作者: huachou    时间: 2010-4-15 21:59
要好好学习  谢谢大哥 顶一个
作者: huachou    时间: 2010-4-15 22:01
x128 不是最大的总线速度40m 吗?  还可以超的80m  ,我也得试试  ,谢谢各位了。
作者: chenrunshe_007    时间: 2010-4-16 00:12
回复 100# huachou
那是理论上的最高超频。由此可见理论跟实践是有一定差距的。




欢迎光临 亿加合和智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2