首先我們做一個(gè)模塊,輸入信號T,代表輸出時(shí)鐘周期,輸出時(shí)鐘周期嚴(yán)格等于T,對于熟悉FPGA的小伙伴應(yīng)該很容易。下面是小編的代碼。簡單的說就是建立一個(gè)狀態(tài)機(jī),對輸入周期參數(shù)在產(chǎn)生時(shí)鐘的每個(gè)周期,第一時(shí)刻更新值,然后進(jìn)入下一個(gè)狀態(tài)計(jì)數(shù),計(jì)數(shù)到和輸入周期一致的時(shí)候又回到初始狀態(tài)。
上面這個(gè)模塊就是我們的控制對象,也就是說,我們要想辦法讓他的時(shí)鐘頻率Fo = 系統(tǒng)給定時(shí)鐘頻率Fi*N,也就是說: 輸出時(shí)鐘周期To = 系統(tǒng)時(shí)鐘周期Ti/N。
小編采用如下環(huán)路實(shí)現(xiàn)。從中可以看出,小編的方法反饋控制的是周期,所以一切參數(shù)都轉(zhuǎn)化到周期上,輸入和反饋,輸出都是通過周期控制。從圖中可以得出結(jié)論輸出時(shí)鐘周期To=N/(M*N+1)
輸入時(shí)鐘要求穩(wěn)定,并且比系統(tǒng)時(shí)鐘慢的越多越好,因?yàn)檫@樣測量更準(zhǔn)確。下面就是我們測量時(shí)鐘周期的代碼。反饋非常重要,因?yàn)樗婕暗秸麄€(gè)反饋環(huán)路的精度和運(yùn)作效率。除以N的部分我們在另一個(gè)模塊實(shí)現(xiàn),因?yàn)闇y量時(shí)鐘周期的模塊是相對獨(dú)立的輸入和反饋都要用到,獨(dú)立出來可以加強(qiáng)代碼可重用性。這段代碼就是在每個(gè)輸入時(shí)鐘上升沿電腦時(shí)候更新周期值。以保證周期的準(zhǔn)確性。
控制對象和輸入,反饋參數(shù)產(chǎn)生都已經(jīng)好了,剩下的就是按照控制框圖搭建反饋環(huán)路。代碼如下圖,代碼中的Ti是在頂層產(chǎn)生的,輸入時(shí)鐘被測量后才把Ti給到環(huán)路輸入。第34行是將反饋的時(shí)鐘周期乘以反饋增益1/N,35行是將反饋誤差乘以開環(huán)增益1/M。至此整個(gè)環(huán)路已經(jīng)搭建完成!
這里附上小編頂層代碼,這里從30行開始的模塊就是產(chǎn)生上文說的Ti用的,輸入時(shí)鐘直接測量后,變成是種病周期T輸入到feedback模塊。
那么實(shí)際效果咋樣呢,能工作嗎?工作起來是啥樣子?小編接下來就測試給大家看。測試代碼如下,輸出時(shí)鐘周期在反饋的代碼里面找,輸入時(shí)鐘周期是給定的,這兩個(gè)找出來對比看看與理論差多遠(yuǎn)就知道了,這里M = 10,N=10。
仿真結(jié)果如下,看圖1可知輸出時(shí)鐘周期穩(wěn)定后為To = 102ns,輸入時(shí)鐘為Ti=1002ns,所以To/Ti = 0.1。而理論值為N/(MN+1)=10/(1010+1)=0.099。
誤差err = |0.1-0.099|/0.1=1% !
我們看看下圖的波形,輸出時(shí)鐘周期的震蕩是不是很像連續(xù)系統(tǒng)的二階震蕩環(huán)節(jié)的階躍響應(yīng)?只不過超調(diào)不大,震蕩周期比較少。這是因?yàn)槲覀兊拈_環(huán)其實(shí)是一階,加了反饋之后成了二階系統(tǒng)。和控制原理書上很近似(看看離散控制部分會更覺得近似)。
-
鎖相環(huán)
+關(guān)注
關(guān)注
35文章
584瀏覽量
87742 -
FPGA設(shè)計(jì)
+關(guān)注
關(guān)注
9文章
428瀏覽量
26512 -
負(fù)反饋電路
+關(guān)注
關(guān)注
1文章
35瀏覽量
9273 -
二階系統(tǒng)
+關(guān)注
關(guān)注
1文章
16瀏覽量
9574
發(fā)布評論請先 登錄
相關(guān)推薦
評論