如何為編程愛好者設計一款好玩的智能硬件(三)——該選什么樣的MCU呢?


 

 

 

 

一、我的構想:如何為編程愛好者設計一款好玩的智能硬件(一)——即插即用、積木化、功能重組的智能硬件模塊構想

二、別人家的孩子:如何為編程愛好者設計一款好玩的智能硬件(二)——別人是如何設計硬件積木的!

 

三、MCU選型:

  搬磚的很勤勞、很努力也很能堅持,但大多數都只是賺血汗錢。我搬過磚,那是在高考完的暑假,在我的強烈要求下跟着我爸干了一暑假的泥水工。我們當時干的“業務”叫做“包磚塊”,就是多砌一塊磚多賺一點錢——和當前大環境下的碼農做外包有點類似!都是血汗錢丫!我和我爸每天早上6:00到工地,在太陽最毒的幾個月里,中午干到11:30,午飯在戶主家里隨便吃點,然后稍作休息,下午1:30開工,下午6:00收工,每次回去,腰酸背痛,洗個澡到頭就想睡!當時我沒啥技術就做個小工,要不斷的和灰、搬磚、送灰,保證兩個大工不缺資源。從那之后每次遇到比較艱難的事情,我都會想這世界還有比這更累的事嗎!

  回歸正題!之所以啰嗦上面那么多,我就是想引出一個話題:平台不對,越努力越疲憊(跳躍性有點大!),你成功的地方一定是你所熟悉與熱愛的地方。前兩篇我已經介紹想為編程愛好者設計的產品大致樣子,從本篇開始我們將開始動手實踐。而擺在眼前的問題就是該選擇怎樣一種平台!——硬件平台!(操作系統自己寫,所以不用選)

 

我的標准: 

  +上手快        滿足快速開始條件      

  +運算能力不能太差    要做自動重組系統,這個自然不能低

  +成本不能太高              玩具,自然不能太貴

  +通用GPIO盡量多     通用電子積木,多GPIO可保證模擬出更多的通信接口

 

FPGA(Field Programmable Gate Array):

  FPGA類似硬件中的變形金剛,一般采用硬件描述語言(硬件描述語言是:The FPGA configuration is generally specified using a hardware description language (HDL), similar to that used for an application-specific integrated circuit (ASIC). (Circuit diagrams were previously used to specify the configuration, as they were for ASICs, but this is increasingly rare.))

  FPGA由許多可編程的邏輯塊(很小的單元)和可重構的互聯結構組成。通過重構這些互聯結構便能改變邏輯塊的連接方式,一方面可以實現簡單的AND\OR\XOR等簡單邏輯和由基本簡單邏輯組成的復雜邏輯(想想離散數學,這些簡單邏輯可以構成語言,表達一定意思,也就能實現一定功能);另一方面邏輯單元往往具有存儲能力,這樣每個邏輯單元就不僅能夠實現簡單邏輯,還能工程觸發器,進而實現時序邏輯。就像用畫布制作游戲一樣,當timer加入后,整個場景便變得有趣活潑了!

  FPGA為啥成為硬件中的變形金剛呢?是因為——Technically speaking, an FPGA can be used to solve any problem which is computable. 用FPGA可以實現一個軟微處理器(這個應該是計算機組成原理的硬布線控制器與微程序控制器有關)。

  FPGA中的具體應用包括數字信號處理,軟件定義無線電,ASIC原型,醫學影像學,計算機視覺,語音識別,密碼學,生物信息學,計算機硬件仿真,射電天文學,金屬檢測和其他領域的范圍日益擴大。還有一個是硬件加速~

  我要設計的東西很需要一個夠靈活的開發板,而FPGA號稱變形金剛。我在大二上數電的時候,期末實驗就要用他設計各種稍微復雜的時序邏輯電路,我做的快一口氣彪到了最后一個——做個51單片機。當時就覺得這個變形金剛當之無愧了~后來發現有人用它寫了個arm指令集,做出了stm32,還移植一個uc-OS操作系統,更是對它刮目相看。但是,一方面由於它太趨於硬件層面,做復雜應用可能會花費比較多的時間;另一方面我也不太熟悉,現學現賣最后想編寫個操作系統在上面可能bug頻出。於是暫先不考慮這個~

 

51單片機: 

  我對51可謂玩得很6!它作為國內嵌入式開發者的啟蒙級單片機從未被代替過!無論你了不了解數電、模電、組成、體系甚至是C語言,你在淘寶上花100-200元買個開發板就能親手點亮個燈、得意時做個流水燈、玩6了配合各種傳感器做更有趣的東西。51開發板已然不是一個針對工程師來學習開發加快項目進度那么嚴肅的東西,它之所以沒有ardunio受人追捧也許在於它定位還是一個開發板、學校教具。(注:51是一個系列的單片機,開發板是51單片機+眾多輔助外設便於開發實踐各種功能的板子)

  我雖然很擅長51,但是如果在其中跑個能重組系統而且掛接多個外設是有點夠嗆的!不過可以暫留,我們可以轉換下思維,把能力弱的MCU只留出幾個簡單的接口,實現簡單功能:如無線button等。

 

STM32:

  該MCU基本上可以稱為單片機中的戰斗機了!看看stm32F103(增強型)的特性:

※ 內核:ARM32位Cortex-M3 CPU,最高工作頻率72MHz,1.25DMIPS/MHz。單周期乘法和硬件除法。
※ 存儲器:片上集成32-512KB的Flash存儲器。6-64KB的SRAM存儲器。
※ 時鍾、復位和電源管理:2.0-3.6V的電源供電和I/O接口的驅動電壓。POR、PDR和可編程的電壓探測器(PVD)。4-16MHz的晶振。內嵌出廠前調校的8MHz RC振盪電路。內部40 kHz的RC振盪電路。用於CPU時鍾的PLL。帶校准用於RTC的32kHz的晶振。
※ 低功耗:3種低功耗模式:休眠,停止,待機模式。為RTC和備份寄存器供電的VBAT。
※ 調試模式:串行調試(SWD)和JTAG接口。
※ DMA:12通道DMA控制器。支持的外設:定時器,ADC,DAC,SPI,IIC和UART。
※ 3個12位的us級的A/D轉換器(16通道):A/D測量范圍:0-3.6 V。雙采樣和保持能力。片上集成一個溫度傳感器。
※ 2通道12位D/A轉換器:STM32F103xC,STM32F103xD,STM32F103xE獨有。
※ 最多高達112個的快速I/O端口:根據型號的不同,有26,37,51,80,和112的I/O端口,所有的端口都可以映射到16個外部中斷向量。除了模擬輸入,所有的都可以接受5V以內的輸入。
※ 最多多達11個定時器:4個16位定時器,每個定時器有4個IC/OC/PWM或者脈沖計數器。2個16位的6通道高級控制定時器:最多6個通道可用於PWM輸出。2個看門狗定時器(獨立看門狗和窗口看門狗)。Systick定時器:24位倒計數器。2個16位基本定時器用於驅動DAC。
※ 最多多達13個通信接口:2個IIC接口(SMBus/PMBus)。5個USART接口(ISO7816接口,LIN,IrDA兼容,調試控制)。3個SPI接口(18 Mbit/s),兩個和IIS復用。CAN接口(2.0B)。USB 2.0全速接口。SDIO接口。 

  除此之外,如果把uc-OS移植過來,用其開發邏輯復雜的應用程序也是比較方便;如果把uc-GUI移植過來,開發復雜用戶交互界面也比較方便~這個各方面都不錯,作為候選選手靜待佳音!

 

CC2541藍牙4.0低功率藍牙解決方案:

  之所以會介紹這個,因為該模塊不僅僅是一個藍牙通信模塊,還具有一個增強型51內核,比較適合做小積木~看官方介紹:

  CC2541 是一款針對低能耗以及私有 2.4GHz 應用的功率優化的真正片載系統 (SoC) 解決方案。 它使得使用低總體物料清單成本建立強健網絡節點成為可能。 CC2541 將領先 RF 收發器的出色性能和一個業界標准的增強型 8051 MCU、系統內可編程閃存存儲器、8kB RAM 和很多其它功能強大的特性和外設組合在一起。 CC2541 非常適合應用於需要超低能耗的系統。 這由多種不同的運行模式指定。 運行模式間較短的轉換時間進一步使低能耗變為可能

  從上圖可以看出其引腳和通信接口也比較全。此外,TI還開源了一個OSAL(相當於一資源豐富的操作系統),基於此開發設計會省不少功夫。此外此外,該芯片本身提供通信組網功能也是相當誘人的~其實同類的芯片還有nRF51822(嵌入Contex-M0內核,最大支持1拖8,相當有誘惑力!);zigbee組網專家,不用說了。

 

接下來計划:

  上面是幾款我比較熟悉的平台,至於ardunio、樹莓派....這里就不划入計划當中了!經過分析我們發現並沒有一款特別適合的平台來開發“X-積木”。例如:51有入手和操作都很快,我自身也比較熟悉等優點,但是如果用它來實現可以自由插拔多個外設模塊的中心處理設備,並能夠根據外圍設備的狀況重構自身操作系統的平台,我感覺夠嗆!stm32能力能力很強、開發簡單等都比較令人滿意,但是一方面其成本稍高、低功耗不算太好、沒有現成比較豐富的開源外設驅動,將會為后來開發“X-積木”外設增加一些工作量;像藍牙4.0低功耗方案,雖然各方面也都挺不錯,而且有組網、藍牙、OSAL等加分項,但是其處理能力相比stm32還是稍遜,並且OSAL用起來沒有uc-OS舒服;至於變形金剛FPGA,靈活性很高,但從底層一步步搭建會是一項巨大的工程!

  綜上,我決定——

  第一階段:暫選CC2541作為核心塊,先實現幾個簡單的功能塊(如溫濕度模塊、光照模塊、顯示屏模塊、超聲波模塊、繼電器模塊、人體紅外線模塊等),並分別對各個外設模塊封裝成可以通過藍牙獲取其使用說明和通信方式的API,然后嘗試開發一個手機demo來通過藍牙搜集這些信息並展示。

  第二階段:嘗試實現各模塊自由插拔,同時設計具有自動重構的操作系統,能根據當前MCU積木上連接的外設積木的類型,自動合成對外API清單(正如第一篇介紹的那樣:上位機(如手機)通過某種通信方式(如藍牙)實現和組合好的積木初次溝通,組合好的積木便會將當前API清單發送給上位機,上位機根據API清單規定實現和硬件的自由通信)

  第三階段:還沒想好,先實現前兩階段再說!壓力山大~

  明天同一時間、同一地點——如何為編程愛好者設計一款好玩的智能硬件(四)——初嘗試·把溫濕度給收集了!

 

 

 

@beautifulzzzz

    2015-9-7 持續更新中~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM