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

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 定制化PSoC實(shí)現(xiàn)8通道SAR ADC采樣16通道

          定制化PSoC實(shí)現(xiàn)8通道SAR ADC采樣16通道

          作者: 時(shí)間:2016-10-16 來源:網(wǎng)絡(luò) 收藏

          通過ADC進(jìn)行信號采樣是MCU應(yīng)用的常見任務(wù),這可以將連續(xù)模擬信號轉(zhuǎn)換為一系列離散的數(shù)字?jǐn)?shù)據(jù)供MCU處理。在某些應(yīng)用中,單個(gè)ADC需要以高采樣率對多個(gè)通道進(jìn)行采樣。例如電源監(jiān)測系統(tǒng)的管理子系統(tǒng)需要對多個(gè)穩(wěn)壓電源的輸出進(jìn)行采樣,以監(jiān)測系統(tǒng)的工作狀態(tài);再如在基于傳感器的應(yīng)用中,MCU需要對多個(gè)傳感器進(jìn)行采樣以實(shí)現(xiàn)系統(tǒng)反饋。

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

          我們有位客戶想使用一片賽普拉斯的PSoC4實(shí)現(xiàn)用1MSps采樣率采樣16個(gè)通道的設(shè)計(jì),16個(gè)通道的總采樣時(shí)長不能超過19μs。但PSoC4內(nèi)置的多路復(fù)用器(SARMUX)只支持8個(gè)通道。本文將介紹如何通過PSoC內(nèi)部的可編程模塊克服這一設(shè)計(jì)難題。

          分析設(shè)計(jì)需求

          首先我們需要仔細(xì)分析設(shè)計(jì)需求。客戶把16個(gè)輸入的完整采樣視為一個(gè)采樣周期。如圖1所示,一個(gè)采樣周期的最大時(shí)長限制為19μs。每個(gè)采樣周期之間可使用中斷服務(wù)請求(ISR)存儲(chǔ)采樣結(jié)果。

          1.jpg

          圖1:對16通道采樣的時(shí)序。

          若要用一個(gè)8通道SAR來實(shí)現(xiàn)這個(gè)目標(biāo),我們需要使用PSoC4片內(nèi)的通用可編程數(shù)字模塊(UDB)實(shí)現(xiàn)定制設(shè)計(jì)。該設(shè)計(jì)使用PSoC4片內(nèi)的數(shù)字信號互聯(lián)(DSI)實(shí)現(xiàn)多路復(fù)用器切換采樣通道,并且在采樣周期結(jié)束時(shí)將采樣結(jié)果緩沖在基于數(shù)據(jù)通路(datapath)的FIFO中,然后通過中斷服務(wù)子程序(ISR)全部讀取出來。

          數(shù)據(jù)通路是UDB模塊中最靈活的部分。每個(gè)UDB模塊包含一個(gè)數(shù)據(jù)通路,每個(gè)數(shù)據(jù)通路包含一個(gè)具有多個(gè)寄存器的8位ALU。UDB結(jié)構(gòu)和數(shù)據(jù)通路功能的詳細(xì)介紹請參閱PSoC4技術(shù)參考手冊。每個(gè)數(shù)據(jù)通路可實(shí)現(xiàn)一個(gè)8字節(jié)FIFO。我們需要四個(gè)FIFO來緩沖16個(gè)12位SAR采樣結(jié)果。

          2.jpg

          圖2:16通道SAR采樣。

          圖2顯示的是基于DSI的多路復(fù)用器,能在多個(gè)輸入之間自動(dòng)切換當(dāng)前的采樣通道。圖3顯示的是硬件FIFO的概覽圖。

          3.jpg

          圖3:用于緩沖采樣結(jié)果的四個(gè)8字節(jié)FIFO。

          配置SAR組件

          SAR被配置成單端模式采樣單個(gè)輸入通道,輸入電壓范圍在0~Vdd之間,1MSps采樣率。在收到采樣觸發(fā)信號后,SAR就開始輸入信號采集,采集結(jié)束后產(chǎn)生一個(gè)“SDONE”信號,該信號被送入DSI網(wǎng)絡(luò),并被命名為“ADC_SDONE”。 Creator標(biāo)準(zhǔn)組件庫中提供的SAR組件無法支持輸出采樣結(jié)果到DSI總線上。因此,我們需要把SAR組件導(dǎo)入到項(xiàng)目中并加以修改,如圖4中的紅色部分所示。

          4.jpg

          圖4:詳細(xì)設(shè)計(jì)—修改SAR組件。

          圖5所示的是SAR組件的輸出連接。在SAR_Start函數(shù)之后,我們還需要添加一行代碼,使得SAR能將采樣結(jié)果輸出到DSI網(wǎng)絡(luò),如下所示:

          // start SAR component and wait for conversion trigger

          SAR_Start();?

          // enable SAR sampling result output on DSI

          *((reg32 *)(SAR_SAR_CHAN_CONFIG_IND + (uint32)(0 2))) |=

          SAR_DSI_OUT_EN;

          5.jpg

          圖5:詳細(xì)設(shè)計(jì)—SAR的輸出連接。

          基于DSI的多路復(fù)用器

          如圖6中藍(lán)色部分所示,通過DSI控制的硬件多路復(fù)用器取代SARMUX,以用于切換16個(gè)通道。采用SWITCH_CLK時(shí)鐘觸發(fā)Count7單元,以生成通道選擇信號,這樣每次通道轉(zhuǎn)換可分為兩個(gè)階段:信號采集和轉(zhuǎn)換。

          6.jpg

          圖6:基于DSI的MUX和觸發(fā)信號生成。

          信號采集完成之后,信號將保持在SAR中,此時(shí)可切換輸入通道。因此用于顯示信號采集階段完成的SDONE可用于通道切換。實(shí)際上,SWITCH_CLK是基于DSI信號“ADC_SDONE”(SDONE)定義的時(shí)鐘,其設(shè)置見圖6的“cydwr”頁面。

          7.jpg

          圖7:設(shè)計(jì)范圍資源的時(shí)鐘定義。

          Count7單元屬于定制組件,不在標(biāo)準(zhǔn)組件庫的范圍內(nèi)。它是一個(gè)遞減計(jì)數(shù)器,輸出當(dāng)前的計(jì)數(shù)器值給DSI。其默認(rèn)值初始值為0x7F。因此通道選擇的范圍是從#15到#0。在主程序中添加以下代碼實(shí)現(xiàn)對Count7的控制。

          /* Enter critical section */

          interruptState = CyEnterCriticalSection();

          /* Set the Count Start bit */

          MYCOUNT7_AUX_CTL |= (1 5);

          /* Exit critical section */

          CyExitCriticalSection(interruptState);

          // set default value of count7 as 0x7F

          MYCOUNT7_COUNTER = MYCOUNT7_PERIOD;

          生成SAR的采樣觸發(fā)

          第1步:在完成當(dāng)前采樣工作之前生成下一個(gè)觸發(fā)信號

          由于針對SAR只有一個(gè)實(shí)際輸入,因此一旦完成對當(dāng)前通道的采樣,SAR就需要為下一次采樣觸發(fā)信號。許多信號都適用于此目的,但觸發(fā)信號選擇應(yīng)遵循以下兩個(gè)規(guī)則:

          1. 在觸發(fā)信號和當(dāng)前采樣完成之間不應(yīng)存在間隔,甚至觸發(fā)信號可以提前發(fā)生,這樣就可以降低延遲。

          2. 觸發(fā)信號必須確保不會(huì)破壞當(dāng)前采樣工作。

          根據(jù)上述規(guī)則,可選擇SDONE和EOC用于觸發(fā)。但使用EOC將使每通道采樣時(shí)間至~1.4μs,這是因?yàn)橛|發(fā)信號上升沿時(shí)刻和SAR開始采樣之間存在開銷。SAR需要至少5個(gè)SARADC_CLK時(shí)鐘來將DSI觸發(fā)信號轉(zhuǎn)換為信號采樣開始。我們的設(shè)計(jì)要求更加苛刻。EOC信號與SARADC_CLK上升沿同步。在穿過DSI網(wǎng)絡(luò),并到達(dá)SAR的SOC(開始轉(zhuǎn)換)之后,就已經(jīng)略滯后于采樣時(shí)鐘的上升沿。因此,它需要6個(gè)SARADC_CLK時(shí)鐘或大約340ns觸發(fā)產(chǎn)生耗時(shí)。

          我們必須尋求另一種觸發(fā)信號。幸運(yùn)的是在SAR工作時(shí),其可存儲(chǔ)一個(gè)觸發(fā)信號,但僅限一個(gè),用于下一次掃描。因此我們可以使用SDONE觸發(fā)轉(zhuǎn)換。讓觸發(fā)產(chǎn)生耗時(shí)與SAR轉(zhuǎn)換時(shí)間并行,SAR就可在當(dāng)前轉(zhuǎn)換完成之前存儲(chǔ)該觸發(fā)事件?,F(xiàn)在對16通道的采樣我們能有1μs的轉(zhuǎn)換時(shí)間(見圖12中的SDONE周期)。

          第2步:在每次采樣周期結(jié)束時(shí)暫時(shí)停止觸發(fā)信號生成

          在每次采樣周期結(jié)束時(shí),我們需要暫時(shí)停止觸發(fā)信號生成,否則持續(xù)不斷的采樣將使FIFO溢出。如圖6的紅色部分所示,在選擇通道0時(shí),需關(guān)閉同步的D觸發(fā)器(DFF)以暫時(shí)停止觸發(fā)器輸出。而在FIFO被ISR清空后,則需使用0x7F重置Count7單元,從而重新啟用DFF輸出。同時(shí),應(yīng)使用固件觸發(fā)的方式在新周期中開始第一通道的采樣,如圖8所示。

          8.jpg

          圖8:SAR ADC時(shí)序。

          FIFO控制

          UDB可配置為8字節(jié)FIFO,用于存儲(chǔ)來自DSI網(wǎng)絡(luò)的數(shù)據(jù)。圖9顯示了配置數(shù)據(jù)通路的概覽圖。FIFO時(shí)鐘將數(shù)據(jù)采樣到FIFO。F0 Load和F1 Load負(fù)責(zé)啟用或禁用FIFO。兩個(gè)狀態(tài)信號可提示FIFO Full事件。

          9.jpg

          圖9:針對8字節(jié)FIFO的數(shù)據(jù)路徑配置。

          圖10所示的是FIFO的工作時(shí)序。12位SAR結(jié)果分別存儲(chǔ)在LSB_FIFO和MSB_FIFO中。Count7單元可對從15到0的通道進(jìn)行排序。因此通道15到8存儲(chǔ)于FIFO上部,通道7到0存儲(chǔ)于FIFO下部。加載信號根據(jù)FULL狀態(tài)和啟用信號而生成。

          10.jpg

          圖10:FIFO時(shí)序。

          最后四個(gè)通道的結(jié)果一旦存儲(chǔ)完畢后就會(huì)觸發(fā)ISR讀取FIFO。FIFO Enable使用Count7單元的位(如圖11的紅色部分所示),同時(shí)該位也與SWITCH_CLK(SDONE)同步。這樣可確保EN變化不會(huì)破壞FIFO采樣。

          11.jpg

          圖11:為FIFO生成EN的詳細(xì)設(shè)計(jì)。

          設(shè)計(jì)測試

          圖12所示的是一個(gè)采樣周期。十六個(gè)SDONE和EOC脈沖表示通道轉(zhuǎn)換。十六個(gè)FIFOCLK和一個(gè)FIFO的FULL信號可對最后四個(gè)結(jié)果進(jìn)行緩沖,用于說明FIFO的工作狀態(tài)。請注意,SDONE和FIFOCLK之間的間隔是1μs。

          12.jpg

          圖12:測試結(jié)果——一個(gè)采樣周期中的信號。

          圖13是多個(gè)采樣周期的波形。將數(shù)據(jù)從FIFO存儲(chǔ)到SRAM的兩個(gè)周期之間的間隔是大約9.56μs。

          13.jpg

          圖13:測試結(jié)果——多個(gè)采樣周期。



          關(guān)鍵詞: PSoC ADC 采樣

          評論


          相關(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); })();