<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式系統順利開(kāi)發(fā)的硬件獨立性設計方案

嵌入式系統順利開(kāi)發(fā)的硬件獨立性設計方案

作者: 時(shí)間:2017-06-06 來(lái)源:網(wǎng)絡(luò ) 收藏
  所有最終都要連接到外部與執行器或內部功能模塊與外設等硬件,以實(shí)現輸入輸出、數據存儲及通信功能。每種中的每個(gè)硬件都有其自己的特性,需要設計人員認真對待。

  中使用的硬件如果發(fā)生任何變化,即便是僅僅添加或去除一個(gè)輸入或輸出端口,也會(huì )影響到嵌入式軟件,有時(shí)甚至會(huì )造成非常嚴重的影響。如果在設計過(guò)程后期才做出上述變動(dòng),那么就可能導致產(chǎn)品不能及時(shí)上市。解決這一問(wèn)題的辦法,就是在系統設計過(guò)程中確保完全的。

  設計(design-out the hardware)就是指將所有控制和算法軟件與硬件接口軟件相分離。我們應有效地設計與硬件有關(guān)的邏輯封裝器和接口,這樣不管什么時(shí)候用邏輯部件來(lái)替換正在使用中的特定硬件,也不會(huì )影響控制和算法軟件。

  通過(guò)便于理解的邏輯接口(函數、宏、符號)將硬件提取出來(lái),這不僅有助于提高設計的可移植性,而且還能使開(kāi)發(fā)人員集中精力解決實(shí)際的應用問(wèn)題,甚至在明確采用什么硬件之前就能開(kāi)始設計工作。這聽(tīng)起來(lái)似乎比較簡(jiǎn)單,您可能認為現在您或您的工作團隊正是這么做的。

  不過(guò),我們不妨來(lái)認真研究一下當前的設計項目(或者曾經(jīng)喜歡的項目),看看要是更換其中的微控制器,會(huì )出現什么情況。如果改用不同的微控制器,尤其是不同廠(chǎng)商的微控制器的話(huà),要是會(huì )對項目造成嚴重影響,那么您在設計過(guò)程中就沒(méi)有實(shí)現。

  為了成功實(shí)現硬件獨立性設計,我們必須在設計過(guò)程中保持清醒的頭腦。我們不必等硬件完全設計好了再開(kāi)始開(kāi)發(fā)嵌入式軟件,也不必等到明確所有要求后最終確定硬件選擇,而是可以將中的硬件選擇與設計方案相分離,這樣在市場(chǎng)嶄露頭角的時(shí)候我們就可以開(kāi)始設計工作,從而有助于贏(yíng)得關(guān)鍵客戶(hù)。說(shuō)到底,有哪些設計項目中硬件是真的一成不變的呢?最后總是會(huì )出現硬件變動(dòng)的情況。

  用這種方法開(kāi)始設計工作有助于提高整體靈活性,這既是由于硬件幾乎隨時(shí)“能夠”替換,同時(shí)也是由于我們不用擔心硬件的替換問(wèn)題了。此外,由于硬件特定的功能位于封裝器與接口中,因此這有助于簡(jiǎn)化調試工作,也增加了不同項目之間 IP 的重復利用率。

  “硬件獨立性設計” 是什么意思?

  最簡(jiǎn)單地說(shuō),的硬件獨立性設計就是在邏輯上把嵌入式應用軟件與所有硬件直接相連的軟件相分離。所謂“所有”硬件就是指物理設計或選定微控制器發(fā)生變化時(shí)可能發(fā)生的任何變化因素。

  顯然這包括選定微控制器中支持硬件的所有器件,如模數轉換器(ADC)和通信接口(UART、SPI、I2C、USB、CAN 等)。不過(guò)如果物理系統設計還包括與執行器,那么它們的變動(dòng)也會(huì )影響軟件,因此必須確保其 為硬件獨立性設計。

  此外,不要忘了輸入/輸出端口與嵌入式存儲器等常見(jiàn)元件。如果它們發(fā)生變動(dòng),也會(huì )影響應用(比方說(shuō)用于記錄數據日志或存儲配置選擇的非易失性存儲器,或提供內部上拉或內置驅動(dòng)電路的輸入端口)??傊?,所有硬件都要做到獨立系統設計。

  有的讀者可能會(huì )想,硬件獨立性設計方案到底有什么新穎之處?幾千年以前,睿智的所羅門(mén)國王曾經(jīng)說(shuō)過(guò):“太陽(yáng)下面沒(méi)有什么東西是新的。”硬件獨立性設計背后的理念實(shí)際并不是什么新東西。自從現代嵌入式系統設計出現以來(lái)(我認為大約是在 1980 年吧),工程師一直在圍繞硬件構建封裝器與接口。

  本文要說(shuō)明的是,我們應當把這種方法發(fā)揮到邏輯極致,否則我們的項目就仍然會(huì )受限于硬件,就不能在需要時(shí)靈活地更改硬件。我希望您通過(guò)本文能夠充分認識到硬件選擇對嵌入式設計的影響,并能夠了解到在今后設計中消除硬件變化影響的一些小竅門(mén)。

  從何做起?

本文引用地址:http://dyxdggzs.com/article/201706/349484.htm
  開(kāi)始項目設計時(shí),您至少要有一些基本的想法或要求。我們應著(zhù)手設計一種獨立于硬件的系統。系統應當實(shí)現什么功能?最終目標是什么?需要哪些驅動(dòng)、監控功能?如果加入硬件的話(huà),就要把整個(gè)信號鏈中的各個(gè)部分組成一個(gè)有機的整體。

  您會(huì )發(fā)現,所有彼此相互連接的硬件實(shí)際上都是替換硬件情況下潛在的問(wèn)題來(lái)源。我們要用封裝器或接口將所有硬件隔離起來(lái)。就馬達控制設計而言,我們不妨來(lái)看看它的算法,看看要用哪些數據來(lái)確定驅動(dòng)指令。

  為了控制算法,不管采用什么硬件,不管是幾安培的負載電流,還是每分鐘多少轉的轉速,還是百分比驅動(dòng)命令,都必須確保邏輯性。

  通過(guò)硬件和算法相結合,負載電流轉換為電壓,ADC 對其采樣后轉換成數字計數,再通過(guò)數學(xué)函數轉換為毫安;上面每個(gè)步驟都需要進(jìn)行“包裝”,避免底層硬件改變時(shí)影響軟件應用。

  如果在設計過(guò)程中完全遵循上述步驟,那么最終我們就能實(shí)現兩個(gè)目的。首先,我們能明確硬件與最終系統的關(guān)系,并了解到類(lèi)似但不同的新項目如何從現有的設計方案受益。其次,如果需要設計全新的項目,采用完全不同的應用類(lèi)型,那么仍能參考現有的項目,只需對其加以調整,就能滿(mǎn)足新項目的要求,只需根據新式應用替換或刪除有關(guān)層即可。

  以前,微控制器的高級大型電路板支持套件需要專(zhuān)業(yè)工作組或電腦天才來(lái)做特殊處理,而他們又總是因為工作太忙而難以作出必要的調整,現在,我們可以支持邏輯解構,逐步滿(mǎn)足各相關(guān)功能需求,確保滿(mǎn)足整體需求。

  記得上大學(xué)時(shí),即便考試答題時(shí)沒(méi)有得出正確的答案,但如果演算過(guò)程邏輯清晰、條理分明、系統而有組織,并加以適當注解,那么仍能在考試中獲得一定的分數。這個(gè)道理與硬件獨立性設計方案的道理是一樣的。

  我們不需要做到特別嚴格的有組織性,只需將封裝器與接口在邏輯上進(jìn)行集中,就能方便地替代實(shí)際硬件。舉例來(lái)說(shuō),如果我們把所有與微控制器直接相關(guān)的封裝器與接口集中在一個(gè)地方,而不是將其分散在不同的文件中,那么就能在最后關(guān)頭輕松更換微控制器。

  通過(guò)實(shí)例說(shuō)明工作原理

  我們不妨通過(guò)一個(gè)應用實(shí)例來(lái)說(shuō)明上述道理。在這個(gè)應用中,我們根據溫度來(lái)控制風(fēng)扇轉速,一步步完成相關(guān)設計工作,確保硬件獨立性設計。在開(kāi)始項目設計之前,我們已知:1) 我們需要獲得溫度讀數。 2) 我們需要根據溫度計算出所需的風(fēng)扇轉速。 3) 我們需要讀取當前風(fēng)扇轉速。 4)我們需要根據當前風(fēng)扇命令以及實(shí)際風(fēng)扇轉速與理想轉速之間的誤差計算出新的風(fēng)扇命令。5)我們需要向風(fēng)扇輸出新的命令。

  圖1給出了該系統的邏輯方框圖。矩形塊表示依賴(lài)于硬件,而橢圓形則表示獨立于硬件。根據該圖所示的邏輯關(guān)系,控制工程師可以利用 MatLab 等模擬套件開(kāi)始系統開(kāi)發(fā)工作,而設計結果則能直接輸入最終設計方案(尤其是用 C 語(yǔ)言等幾乎所有微控制器都支持的高級語(yǔ)言編寫(xiě)的情況,更是如此)。

  隨著(zhù)項目開(kāi)發(fā)的進(jìn)展,我們決定采用熱敏電阻作為溫度(因為熱敏電阻成本低且能滿(mǎn)足特殊屬性需要)。

  我們從下圖2可以看出,“獲取溫度”這個(gè)矩形塊又擴展為依賴(lài)于硬件且與熱敏電阻設計相關(guān)的不同功能塊,其中包括熱敏電阻的硬件特性及其接口電路等。

  溫度在熱敏電阻中以電阻表示;在信號調節電路中,電阻則表示為電壓,通過(guò) ADC 轉換,電壓則轉換為 0 至 4095 之間的數值;在軟件中,該數值則轉換為機器可存儲和顯示的溫度值(比方說(shuō)定點(diǎn)值溫度,間隔為0.1℃)。

  我們將溫度放入數據存儲系統中,讓數據值更新同步于控制算法,這樣溫度就能與控制算法一樣保持最新,從而確保將軟硬件更好地隔離開(kāi)來(lái)。

  隨后,我們在設計方案中發(fā)現,使用熱敏電阻的話(huà)微控制器將不能滿(mǎn)足溫度熱點(diǎn)的要求,一直在熱敏電阻與微控制器引腳之間運行模擬線(xiàn)路的話(huà),就會(huì )造成太多噪聲并導致信號損耗。

  因此,我們決定在溫度區采用集成電路 LM75 I2C 作為溫度傳感器,將溫度進(jìn)行本地轉化,并向I2C 總線(xiàn)提供數字值作為從設備。


  現在,為了獲得溫度值,如下圖 3所示,我們必須在微控制器中啟用 I2C 主通信硬件,讀取 LM75 中的一組寄存器,并將溫度的原生表達法(最低有效位為 0.125℃)轉化為此前選定的溫度表達法(定點(diǎn)值溫度,間隔為 0.1℃)。

  由于我們實(shí)現了控制軟件隔離,即便采用新的溫度讀取方法,控制應用軟件也不會(huì )因為硬件改變而受到影響。

  有關(guān)LM75的特性可以集中在上圖3所示的藍色矩形框中,我們可在不影響控制軟件的前提下對其加以檢查和驗證。

  舉例來(lái)說(shuō),一些設備會(huì )在 I2C 主機每次讀取溫度值/寄存器時(shí)啟動(dòng)新的轉換,如果讀取速度過(guò)快或者過(guò)于頻繁,那么LM75 就難以完成轉換??刂扑惴▌t不用擔心這些問(wèn)題。

  微控制器的抽取

  我們在上面的實(shí)例中有意識地改變了微控制器外部的硬件,說(shuō)明外部硬件轉變不會(huì )影響控制軟件。同樣,即便微控制器內部硬件發(fā)生變化,也不會(huì )造成影響。

  如果我們如圖 2 所示先設計熱敏電阻,隨后再改動(dòng)我們的微控制器,那么配置和讀取 ADC 的命令就會(huì )變化,對輸入進(jìn)行多路復用和采樣的寄存器序列也會(huì )變化,進(jìn)而計數到溫度的轉換也會(huì )發(fā)生改變。

  不過(guò),由于這些變動(dòng)僅限于矩形之中(表示函數和/或宏定義以及調用),因此我們只需將原來(lái)矩形框中的內容用新微控制器所需的新指令替換即可。這樣,即便硬件發(fā)生了變化,軟件仍然絲毫不受影響。

  然而我并沒(méi)有談到改用不同廠(chǎng)商的微控制器時(shí)可用什么嵌入式設計工具來(lái)進(jìn)行相關(guān)調整的問(wèn)題。事實(shí)上,許多廠(chǎng)商都提供了硬件初始化的設置向導,選擇同一廠(chǎng)商推出的新產(chǎn)品相對而言簡(jiǎn)化了硬件更換過(guò)程。

  就簡(jiǎn)化硬件獨立性設計方案而言,微控制器廠(chǎng)商在自身的軟件開(kāi)發(fā)工具中采用硬件提取技術(shù),從而進(jìn)一步簡(jiǎn)化了這一工作。用戶(hù)可從目錄項中根據應用需求選擇微控制器的外設功能,并可根據設計方案需求的變化進(jìn)行添加與刪減。

  利用 PWM1 或 ADC 等通用實(shí)例名,用戶(hù)可改變硬件的具體功能細節,并讓工具來(lái)管理第一層提取或封裝器。舉例來(lái)說(shuō),在圖 2 中,如果我們需要增量型(積分型)ADC,而不是采用 SAR(逐次逼近)ADC的話(huà),那么工具就能自動(dòng)改變中間淺藍色的矩形。

  我們還能在更高級層面上進(jìn)行提取。舉例來(lái)說(shuō),利用面向 PSoC 混合信號陣列產(chǎn)品的 PSoC Designer 與 PSoC Express 可視化嵌入式設計工具,軟件默認采用硬件提取方法,并自動(dòng)生成所有層(請見(jiàn)上圖2與圖3中的藍色部分)。


  如欲修改熱敏電阻,用戶(hù)可在 PSoC Express 的目錄中選擇“熱敏電阻”,并定義“計算所需速度”的控制算法,開(kāi)發(fā)工具就會(huì )給出哪些 PSoC 器件可以為該應用提供必需的資源。

  選擇某個(gè)器件時(shí),工具會(huì )以定點(diǎn)格式在一定的數據結構中生成必要的固件來(lái)讀取、轉換并存儲熱敏電阻的溫度,并提供給“計算所需速度”算法。

  如果熱敏電阻的規范發(fā)生變化,那么用戶(hù)可選擇其他的 PSoC 器件,從而調整存儲容量、引腳數量、成本等。只顯示具有應用必需資源的器件,而且能在不影響控制算法的情況下重新生成硬件提取層。

  或許在未來(lái)的什么時(shí)候,所有項目開(kāi)發(fā)工作都可以制定出合理的計劃,市場(chǎng)營(yíng)銷(xiāo)工作可以提前部署,明確客戶(hù)到底需要什么產(chǎn)品,而且計劃不會(huì )發(fā)生變化,具有預期特性的應用軟件正好與選定的微控制器的存儲空間相符。

  不過(guò)在這一天到來(lái)之前,我們就應通過(guò)封裝器和硬件層將所有硬件與控制軟件相隔離,這樣就能在很大程度上簡(jiǎn)化嵌入式系統的設計工作。

  放眼窗外,深呼吸,仰望長(cháng)空,雄鷹展翅,隨時(shí)準備攻擊捕獲獵物。時(shí)不我待,我們必須集中精力,全力以赴滿(mǎn)足緊迫的市場(chǎng)需求,堅決打贏(yíng)最后關(guān)頭調整硬件選擇這一仗,滿(mǎn)足最苛刻的客戶(hù)需求。


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>