如何为编程爱好者设计一款好玩的智能硬件(三)——该选什么样的MCU呢?
?
?
?
?
一、我的構(gòu)想:如何為編程愛(ài)好者設(shè)計(jì)一款好玩的智能硬件(一)——即插即用、積木化、功能重組的智能硬件模塊構(gòu)想
二、別人家的孩子:如何為編程愛(ài)好者設(shè)計(jì)一款好玩的智能硬件(二)——?jiǎng)e人是如何設(shè)計(jì)硬件積木的!
?
三、MCU選型:
搬磚的很勤勞、很努力也很能堅(jiān)持,但大多數(shù)都只是賺血汗錢。我搬過(guò)磚,那是在高考完的暑假,在我的強(qiáng)烈要求下跟著我爸干了一暑假的泥水工。我們當(dāng)時(shí)干的“業(yè)務(wù)”叫做“包磚塊”,就是多砌一塊磚多賺一點(diǎn)錢——和當(dāng)前大環(huán)境下的碼農(nóng)做外包有點(diǎn)類似!都是血汗錢丫!我和我爸每天早上6:00到工地,在太陽(yáng)最毒的幾個(gè)月里,中午干到11:30,午飯?jiān)趹糁骷依镫S便吃點(diǎn),然后稍作休息,下午1:30開(kāi)工,下午6:00收工,每次回去,腰酸背痛,洗個(gè)澡到頭就想睡!當(dāng)時(shí)我沒(méi)啥技術(shù)就做個(gè)小工,要不斷的和灰、搬磚、送灰,保證兩個(gè)大工不缺資源。從那之后每次遇到比較艱難的事情,我都會(huì)想這世界還有比這更累的事嗎!
回歸正題!之所以啰嗦上面那么多,我就是想引出一個(gè)話題:平臺(tái)不對(duì),越努力越疲憊(跳躍性有點(diǎn)大!),你成功的地方一定是你所熟悉與熱愛(ài)的地方。前兩篇我已經(jīng)介紹想為編程愛(ài)好者設(shè)計(jì)的產(chǎn)品大致樣子,從本篇開(kāi)始我們將開(kāi)始動(dòng)手實(shí)踐。而擺在眼前的問(wèn)題就是該選擇怎樣一種平臺(tái)!——硬件平臺(tái)!(操作系統(tǒng)自己寫(xiě),所以不用選)
?
我的標(biāo)準(zhǔn):?
+上手快 滿足快速開(kāi)始條件
+運(yùn)算能力不能太差 ?要做自動(dòng)重組系統(tǒng),這個(gè)自然不能低
+成本不能太高 ? ? ? ? ? ? ?玩具,自然不能太貴
+通用GPIO盡量多 ? 通用電子積木,多GPIO可保證模擬出更多的通信接口
?
FPGA(Field Programmable Gate Array):
FPGA類似硬件中的變形金剛,一般采用硬件描述語(yǔ)言(硬件描述語(yǔ)言是: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由許多可編程的邏輯塊(很小的單元)和可重構(gòu)的互聯(lián)結(jié)構(gòu)組成。通過(guò)重構(gòu)這些互聯(lián)結(jié)構(gòu)便能改變邏輯塊的連接方式,一方面可以實(shí)現(xiàn)簡(jiǎn)單的AND\OR\XOR等簡(jiǎn)單邏輯和由基本簡(jiǎn)單邏輯組成的復(fù)雜邏輯(想想離散數(shù)學(xué),這些簡(jiǎn)單邏輯可以構(gòu)成語(yǔ)言,表達(dá)一定意思,也就能實(shí)現(xiàn)一定功能);另一方面邏輯單元往往具有存儲(chǔ)能力,這樣每個(gè)邏輯單元就不僅能夠?qū)崿F(xiàn)簡(jiǎn)單邏輯,還能工程觸發(fā)器,進(jìn)而實(shí)現(xiàn)時(shí)序邏輯。就像用畫(huà)布制作游戲一樣,當(dāng)timer加入后,整個(gè)場(chǎng)景便變得有趣活潑了!
FPGA為啥成為硬件中的變形金剛呢?是因?yàn)椤猅echnically speaking, an FPGA can be used to solve?any problem?which is?computable. 用FPGA可以實(shí)現(xiàn)一個(gè)軟微處理器(這個(gè)應(yīng)該是計(jì)算機(jī)組成原理的硬布線控制器與微程序控制器有關(guān))。
FPGA中的具體應(yīng)用包括數(shù)字信號(hào)處理,軟件定義無(wú)線電,ASIC原型,醫(yī)學(xué)影像學(xué),計(jì)算機(jī)視覺(jué),語(yǔ)音識(shí)別,密碼學(xué),生物信息學(xué),計(jì)算機(jī)硬件仿真,射電天文學(xué),金屬檢測(cè)和其他領(lǐng)域的范圍日益擴(kuò)大。還有一個(gè)是硬件加速~
我要設(shè)計(jì)的東西很需要一個(gè)夠靈活的開(kāi)發(fā)板,而FPGA號(hào)稱變形金剛。我在大二上數(shù)電的時(shí)候,期末實(shí)驗(yàn)就要用他設(shè)計(jì)各種稍微復(fù)雜的時(shí)序邏輯電路,我做的快一口氣彪到了最后一個(gè)——做個(gè)51單片機(jī)。當(dāng)時(shí)就覺(jué)得這個(gè)變形金剛當(dāng)之無(wú)愧了~后來(lái)發(fā)現(xiàn)有人用它寫(xiě)了個(gè)arm指令集,做出了stm32,還移植一個(gè)uc-OS操作系統(tǒng),更是對(duì)它刮目相看。但是,一方面由于它太趨于硬件層面,做復(fù)雜應(yīng)用可能會(huì)花費(fèi)比較多的時(shí)間;另一方面我也不太熟悉,現(xiàn)學(xué)現(xiàn)賣最后想編寫(xiě)個(gè)操作系統(tǒng)在上面可能bug頻出。于是暫先不考慮這個(gè)~
?
51單片機(jī):?
我對(duì)51可謂玩得很6!它作為國(guó)內(nèi)嵌入式開(kāi)發(fā)者的啟蒙級(jí)單片機(jī)從未被代替過(guò)!無(wú)論你了不了解數(shù)電、模電、組成、體系甚至是C語(yǔ)言,你在淘寶上花100-200元買個(gè)開(kāi)發(fā)板就能親手點(diǎn)亮個(gè)燈、得意時(shí)做個(gè)流水燈、玩6了配合各種傳感器做更有趣的東西。51開(kāi)發(fā)板已然不是一個(gè)針對(duì)工程師來(lái)學(xué)習(xí)開(kāi)發(fā)加快項(xiàng)目進(jìn)度那么嚴(yán)肅的東西,它之所以沒(méi)有ardunio受人追捧也許在于它定位還是一個(gè)開(kāi)發(fā)板、學(xué)校教具。(注:51是一個(gè)系列的單片機(jī),開(kāi)發(fā)板是51單片機(jī)+眾多輔助外設(shè)便于開(kāi)發(fā)實(shí)踐各種功能的板子)
我雖然很擅長(zhǎng)51,但是如果在其中跑個(gè)能重組系統(tǒng)而且掛接多個(gè)外設(shè)是有點(diǎn)夠嗆的!不過(guò)可以暫留,我們可以轉(zhuǎn)換下思維,把能力弱的MCU只留出幾個(gè)簡(jiǎn)單的接口,實(shí)現(xiàn)簡(jiǎn)單功能:如無(wú)線button等。
?
STM32:
該MCU基本上可以稱為單片機(jī)中的戰(zhàn)斗機(jī)了!看看stm32F103(增強(qiáng)型)的特性:
※ 內(nèi)核:ARM32位Cortex-M3 CPU,最高工作頻率72MHz,1.25DMIPS/MHz。單周期乘法和硬件除法。?
※?存儲(chǔ)器:片上集成32-512KB的Flash存儲(chǔ)器。6-64KB的SRAM存儲(chǔ)器。?
※?時(shí)鐘、復(fù)位和電源管理:2.0-3.6V的電源供電和I/O接口的驅(qū)動(dòng)電壓。POR、PDR和可編程的電壓探測(cè)器(PVD)。4-16MHz的晶振。內(nèi)嵌出廠前調(diào)校的8MHz RC振蕩電路。內(nèi)部40 kHz的RC振蕩電路。用于CPU時(shí)鐘的PLL。帶校準(zhǔn)用于RTC的32kHz的晶振。?
※?低功耗:3種低功耗模式:休眠,停止,待機(jī)模式。為RTC和備份寄存器供電的VBAT。?
※?調(diào)試模式:串行調(diào)試(SWD)和JTAG接口。?
※?DMA:12通道DMA控制器。支持的外設(shè):定時(shí)器,ADC,DAC,SPI,IIC和UART。?
※?3個(gè)12位的us級(jí)的A/D轉(zhuǎn)換器(16通道):A/D測(cè)量范圍:0-3.6 V。雙采樣和保持能力。片上集成一個(gè)溫度傳感器。?
※?2通道12位D/A轉(zhuǎn)換器:STM32F103xC,STM32F103xD,STM32F103xE獨(dú)有。?
※?最多高達(dá)112個(gè)的快速I/O端口:根據(jù)型號(hào)的不同,有26,37,51,80,和112的I/O端口,所有的端口都可以映射到16個(gè)外部中斷向量。除了模擬輸入,所有的都可以接受5V以內(nèi)的輸入。?
※?最多多達(dá)11個(gè)定時(shí)器:4個(gè)16位定時(shí)器,每個(gè)定時(shí)器有4個(gè)IC/OC/PWM或者脈沖計(jì)數(shù)器。2個(gè)16位的6通道高級(jí)控制定時(shí)器:最多6個(gè)通道可用于PWM輸出。2個(gè)看門狗定時(shí)器(獨(dú)立看門狗和窗口看門狗)。Systick定時(shí)器:24位倒計(jì)數(shù)器。2個(gè)16位基本定時(shí)器用于驅(qū)動(dòng)DAC。?
※?最多多達(dá)13個(gè)通信接口:2個(gè)IIC接口(SMBus/PMBus)。5個(gè)USART接口(ISO7816接口,LIN,IrDA兼容,調(diào)試控制)。3個(gè)SPI接口(18 Mbit/s),兩個(gè)和IIS復(fù)用。CAN接口(2.0B)。USB 2.0全速接口。SDIO接口。?
?
CC2541藍(lán)牙4.0低功率藍(lán)牙解決方案:
之所以會(huì)介紹這個(gè),因?yàn)樵撃K不僅僅是一個(gè)藍(lán)牙通信模塊,還具有一個(gè)增強(qiáng)型51內(nèi)核,比較適合做小積木~看官方介紹:
CC2541 是一款針對(duì)低能耗以及私有 2.4GHz 應(yīng)用的功率優(yōu)化的真正片載系統(tǒng) (SoC) 解決方案。 它使得使用低總體物料清單成本建立強(qiáng)健網(wǎng)絡(luò)節(jié)點(diǎn)成為可能。 CC2541 將領(lǐng)先 RF 收發(fā)器的出色性能和一個(gè)業(yè)界標(biāo)準(zhǔn)的增強(qiáng)型 8051 MCU、系統(tǒng)內(nèi)可編程閃存存儲(chǔ)器、8kB RAM 和很多其它功能強(qiáng)大的特性和外設(shè)組合在一起。 CC2541 非常適合應(yīng)用于需要超低能耗的系統(tǒng)。 這由多種不同的運(yùn)行模式指定。 運(yùn)行模式間較短的轉(zhuǎn)換時(shí)間進(jìn)一步使低能耗變?yōu)榭赡?/span>
從上圖可以看出其引腳和通信接口也比較全。此外,TI還開(kāi)源了一個(gè)OSAL(相當(dāng)于一資源豐富的操作系統(tǒng)),基于此開(kāi)發(fā)設(shè)計(jì)會(huì)省不少功夫。此外此外,該芯片本身提供通信組網(wǎng)功能也是相當(dāng)誘人的~其實(shí)同類的芯片還有nRF51822(嵌入Contex-M0內(nèi)核,最大支持1拖8,相當(dāng)有誘惑力!);zigbee組網(wǎng)專家,不用說(shuō)了。
?
接下來(lái)計(jì)劃:
上面是幾款我比較熟悉的平臺(tái),至于ardunio、樹(shù)莓派....這里就不劃入計(jì)劃當(dāng)中了!經(jīng)過(guò)分析我們發(fā)現(xiàn)并沒(méi)有一款特別適合的平臺(tái)來(lái)開(kāi)發(fā)“X-積木”。例如:51有入手和操作都很快,我自身也比較熟悉等優(yōu)點(diǎn),但是如果用它來(lái)實(shí)現(xiàn)可以自由插拔多個(gè)外設(shè)模塊的中心處理設(shè)備,并能夠根據(jù)外圍設(shè)備的狀況重構(gòu)自身操作系統(tǒng)的平臺(tái),我感覺(jué)夠嗆!stm32能力能力很強(qiáng)、開(kāi)發(fā)簡(jiǎn)單等都比較令人滿意,但是一方面其成本稍高、低功耗不算太好、沒(méi)有現(xiàn)成比較豐富的開(kāi)源外設(shè)驅(qū)動(dòng),將會(huì)為后來(lái)開(kāi)發(fā)“X-積木”外設(shè)增加一些工作量;像藍(lán)牙4.0低功耗方案,雖然各方面也都挺不錯(cuò),而且有組網(wǎng)、藍(lán)牙、OSAL等加分項(xiàng),但是其處理能力相比stm32還是稍遜,并且OSAL用起來(lái)沒(méi)有uc-OS舒服;至于變形金剛FPGA,靈活性很高,但從底層一步步搭建會(huì)是一項(xiàng)巨大的工程!
綜上,我決定——
第一階段:暫選CC2541作為核心塊,先實(shí)現(xiàn)幾個(gè)簡(jiǎn)單的功能塊(如溫濕度模塊、光照模塊、顯示屏模塊、超聲波模塊、繼電器模塊、人體紅外線模塊等),并分別對(duì)各個(gè)外設(shè)模塊封裝成可以通過(guò)藍(lán)牙獲取其使用說(shuō)明和通信方式的API,然后嘗試開(kāi)發(fā)一個(gè)手機(jī)demo來(lái)通過(guò)藍(lán)牙搜集這些信息并展示。
第二階段:嘗試實(shí)現(xiàn)各模塊自由插拔,同時(shí)設(shè)計(jì)具有自動(dòng)重構(gòu)的操作系統(tǒng),能根據(jù)當(dāng)前MCU積木上連接的外設(shè)積木的類型,自動(dòng)合成對(duì)外API清單(正如第一篇介紹的那樣:上位機(jī)(如手機(jī))通過(guò)某種通信方式(如藍(lán)牙)實(shí)現(xiàn)和組合好的積木初次溝通,組合好的積木便會(huì)將當(dāng)前API清單發(fā)送給上位機(jī),上位機(jī)根據(jù)API清單規(guī)定實(shí)現(xiàn)和硬件的自由通信)
第三階段:還沒(méi)想好,先實(shí)現(xiàn)前兩階段再說(shuō)!壓力山大~
明天同一時(shí)間、同一地點(diǎn)——如何為編程愛(ài)好者設(shè)計(jì)一款好玩的智能硬件(四)——初嘗試·把溫濕度給收集了!
?
?
@beautifulzzzz
? ? 2015-9-7 持續(xù)更新中~
本文轉(zhuǎn)自beautifulzzzz博客園博客,原文鏈接:http://www.cnblogs.com/zjutlitao/p/4790193.html,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的如何为编程爱好者设计一款好玩的智能硬件(三)——该选什么样的MCU呢?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 股市买卖时间点
- 下一篇: 一起学并发编程 - 钩子函数(shutd