<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于NiosII的多通道PWM信號(hào)測量/產(chǎn)生器節(jié)點(diǎn)設(shè)計(jì)

          基于NiosII的多通道PWM信號(hào)測量/產(chǎn)生器節(jié)點(diǎn)設(shè)計(jì)

          作者:代剛 邵貝貝 清華大學(xué)freescale MCU/DSP應(yīng)用研究中心(北京100084) 時(shí)間:2008-07-08 來源:電子產(chǎn)品世界 收藏

            具體實(shí)現(xiàn)的流程如下:

            ·根據(jù)具體需要依次配置每個(gè)通道為測量或者產(chǎn)生通道,由配置控制器實(shí)現(xiàn),該控制器與處理器的控制器相連。

            ·使用一個(gè)基準(zhǔn)地址計(jì)數(shù)器給出的循環(huán)地址信號(hào)對(duì)所有的RAM讀寫進(jìn)行同步,該基準(zhǔn)地址計(jì)數(shù)器給出不同延遲周期的地址計(jì)數(shù),以修正RAM讀取產(chǎn)生的延時(shí)。

            ·PWM產(chǎn)生:將高/低電平周期數(shù)寫入預(yù)置高/低電平計(jì)數(shù)器,計(jì)數(shù)器自加器按基準(zhǔn)地址計(jì)數(shù)器給出的修正延遲的地址讀出計(jì)數(shù)并+1后重新寫入計(jì)數(shù)器RAM;比較器按基準(zhǔn)地址計(jì)數(shù)器給出的修正延遲地址計(jì)數(shù)讀出預(yù)置高/低電平周期數(shù)進(jìn)行比較決定輸出的是高/低電平。

            這種方法得到頻率為:

          本文引用地址:http://www.ex-cimer.com/article/85401.htm

            其中為該模塊的時(shí)鐘頻率,為預(yù)置數(shù)計(jì)數(shù)器,采用循環(huán)方式時(shí)一個(gè)周期的時(shí)間為通道數(shù)與預(yù)置數(shù)和之積;本節(jié)點(diǎn)中,因此,滿足測速測距模塊0~10KHz的設(shè)計(jì)需要;若需要更高頻率,可以提高fCLK或者進(jìn)行通道分組,以降低每組的Nch,占空比的精度與頻率有關(guān),頻率越低,可調(diào)精度越高。

            ·PWM測量:是PWM產(chǎn)生的逆過程,測量的精度與產(chǎn)生的PWM信號(hào)的精度相同。每隔一個(gè)脈沖更新一次測得的周期和占空比值,因此可用于周期快速變化PWM信號(hào)的測量。

            ·死區(qū)控制器:僅僅對(duì)應(yīng)于PWM產(chǎn)生部分,該模塊輸出的PWM信號(hào)初始間隔為1個(gè)TCLK,根據(jù)具體的需要配置相應(yīng)的延時(shí)即可。

          節(jié)點(diǎn)軟件設(shè)計(jì)

            上位機(jī)通過RS-485發(fā)送命令包來控制智能節(jié)點(diǎn)的動(dòng)作,該命令包順序由8bit標(biāo)識(shí)碼,8bit包長度,16bit目標(biāo)節(jié)點(diǎn)號(hào),16bit包編號(hào),命令區(qū)和16bit CRC16校驗(yàn)碼組成,處理器負(fù)責(zé)解包,校驗(yàn)CRC碼是否正確,并且根據(jù)命令動(dòng)作PWM控制器。當(dāng)需要讀取PWM周期和占空比測量值時(shí),處理器還需要把從高/低電平計(jì)數(shù)保存器RAM讀出的值組包發(fā)送給上位機(jī)。

            NiosII處理器采用中斷方式接受通過RS-485總線發(fā)來的命令包,中斷處理通過狀態(tài)機(jī)的方式處理每一個(gè)接收到的字節(jié),具體功能描述如下:

            ·檢查標(biāo)識(shí)碼,檢查是否為智能PWM節(jié)點(diǎn)類型的命令包,啟動(dòng)狀態(tài)機(jī),并打開定時(shí)器,防止當(dāng)命令包不完整時(shí)接受狀態(tài)機(jī)無法回到初始狀態(tài);

            ·讀取包長度信息,檢查是否目標(biāo)為本節(jié)點(diǎn),是則記錄包編號(hào);

            ·如果標(biāo)識(shí)碼不是智能PWM節(jié)點(diǎn)類型的命令包則不對(duì)命令進(jìn)行處理,是則將命令放入緩沖中待處理;

            ·檢查CRC校驗(yàn)碼是否正確,如正確,則將緩沖中的命令寫入命令隊(duì)列;如果不正確,則將錯(cuò)誤信息寫入待發(fā)送信息隊(duì)列。

            命令包括配置某位為PWM測量/產(chǎn)生,配置某位的預(yù)置數(shù)計(jì)數(shù)器,讀取某位的計(jì)數(shù)保存器三類。

            主循環(huán)中完成的工作是:

            ·檢查命令隊(duì)列中是否有未處理的命令并處理;

            ·檢查待發(fā)送信息隊(duì)列長度是否達(dá)到預(yù)定值,是則啟動(dòng)一次發(fā)送,將待發(fā)送信息打包發(fā)送給上位機(jī)。

          實(shí)驗(yàn)結(jié)果

            使用ModelSim進(jìn)行仿真,配置使用了10通道作為PWM信號(hào)輸出,隨機(jī)賦值了給每個(gè)通道不同的周期和占空比,得到的仿真結(jié)果如圖4所示。


          圖4 智能PWM信號(hào)產(chǎn)生器仿真結(jié)果圖

            將這10個(gè)通道與另外配置為PWM信號(hào)測量的10個(gè)通道相連接,進(jìn)行周期和占空比測量,得到的高低電平周期測量結(jié)果與實(shí)際值誤差限為,由此導(dǎo)致的頻率誤差為:

          當(dāng)取f=10KHz時(shí),Δf≈200Hz;取f=1KHz時(shí),Δf≈2Hz,頻率越低,測量精度越高。

          結(jié)語

            針對(duì)于列車控制系統(tǒng)半實(shí)物仿真平臺(tái)測速測距模塊的多通道PWM信號(hào)測量/產(chǎn)生的要求,本文提出了一種利用NiosII軟核處理器替代通訊用MCU的智能多通道PWM信號(hào)測量/產(chǎn)生器的設(shè)計(jì)方案,給出了利用實(shí)現(xiàn)多通道PWM信號(hào)測量/產(chǎn)生器模塊的方法,并且編寫了NiosII處理器的通訊控制軟件。

            本設(shè)計(jì)將應(yīng)用在北京全路通通信信號(hào)研究設(shè)計(jì)院列控實(shí)驗(yàn)室的實(shí)物測控接口平臺(tái)中,連接測速測距模塊,將仿真端與實(shí)物端相連。除此之外,本設(shè)計(jì)還可應(yīng)用在多電機(jī)控制等領(lǐng)域。

          參考文獻(xiàn):

          1.  徐光輝、程?hào)|旭、黃如等,基于的嵌入式開發(fā)與應(yīng)用,電子工業(yè)出版社, 2006.
          2.  李旭、謝運(yùn)祥,PWM技術(shù)實(shí)現(xiàn)方法綜述,電源技術(shù)應(yīng)用,2005,02:40~43

          pwm相關(guān)文章:pwm原理



          上一頁 1 2 下一頁

          關(guān)鍵詞: NiosII PWM FPGA SOPC 200807

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();