作者:Joe Broms,ProtoBricks創(chuàng)始人及CEO
ProtoBricks是一款具有類(lèi)似樂(lè)高外形的電路構(gòu)建玩具,現(xiàn)已在市場(chǎng)上發(fā)布。對(duì)于我來(lái)說(shuō),這是6年基于愛(ài)好的努力的結(jié)果,作為發(fā)明家,我努力將想法變成愛(ài)好,并最終令其成為一個(gè)真正的產(chǎn)品。今天,我想關(guān)注產(chǎn)品的核心,也就是“hub”,以及Silicon Labs微控制器如何成為ProtoBricks電子產(chǎn)品的核心。
ProtoBricks Hub是有12x6個(gè)螺柱的LEGO?大小的塊,頂部有電觸點(diǎn)和LED格柵。我們把一個(gè)兩層PCB板放在塊里面。電路板的底部有四個(gè)彈簧負(fù)載引腳:電源,Gnd,UART TX,UART RX,以及用于編程的裸板觸點(diǎn)。頂部是充滿魔力的地方; 邊緣觸點(diǎn)(螺柱)是電路的IO引腳。還有兩行RGB LED(每個(gè)IO引腳一個(gè))。最后,中心的那排需要做大部分的工作:測(cè)量電阻/電壓,發(fā)送/接收UART消息,并在這些任務(wù)之間切換。這已經(jīng)經(jīng)歷了許多修改,以滿足最佳的外形,功能和成本。現(xiàn)在我們只需要一個(gè)可以完成任務(wù)的微控制器。
要進(jìn)一步滿足要求,我需要選擇至少有兩個(gè)UART的微控制器。其中一個(gè)需要處理TX和RX在不同時(shí)間翻轉(zhuǎn)。我需要至少35個(gè)GPIO引腳來(lái)處理裸露的IO,并為板上的其他芯片提供服務(wù)。我還需要在不同強(qiáng)度中點(diǎn)亮24個(gè)RGB LED。最后,我需要一個(gè)精確快速的ADC,用于通過(guò)精密電阻和計(jì)算電位器位置來(lái)檢測(cè)塊。
我還需要一種現(xiàn)場(chǎng)編程板的方式,并且可以在無(wú)需完全分開(kāi)的情況下輕松地調(diào)試。
此外,所有的工作都需要使許多微控制器外設(shè)以100us的粒度啟用,禁用,啟動(dòng)和停止。在1KHz的速率下,我設(shè)置了一個(gè)很困難的最后期限來(lái)維修我的主電路仿真環(huán)路。最耗時(shí)的開(kāi)發(fā)任務(wù)是組織和將任務(wù)分解成可以被正確優(yōu)先排列成小而有狀態(tài)的塊。幸運(yùn)的是,對(duì)于我來(lái)說(shuō),我已經(jīng)從事C ++開(kāi)發(fā)將近20年了,并且一直喜歡編寫(xiě)較低級(jí)別的代碼并優(yōu)化緊湊的循環(huán)。
最后,我選擇了Silicon Labs的EFM32G232,其具有128KB閃存,16KB RAM。 IO引腳,USART,良好的ADC和合理的價(jià)格的正確平衡。
Hub塊內(nèi)部
以下是我在開(kāi)發(fā)過(guò)程中總結(jié)的亮點(diǎn),特點(diǎn)和技巧:
我們希望以非常緊湊的2x2螺柱的尺寸提供電源,UART和微控制器編程引腳,因此我用3D打印機(jī)構(gòu)建了該板。現(xiàn)在我可以連接到我的板子,而無(wú)需每次都拆開(kāi)我的塊。 pogo引腳連接到SWCLK,SWDIO,SWO和RESET。
調(diào)試塊:中間的四個(gè)pogo引腳連接到微控器
去年的原型設(shè)計(jì),使用Gecko開(kāi)發(fā)板調(diào)試hub微控器
其中一個(gè)UART需要從RX翻轉(zhuǎn)到TX,具體取決于塊從左到右的位置。為此,我直接連接到相同的UART外設(shè),但使用兩個(gè)不同的引腳排列位置。我可以使用備用位置標(biāo)志翻轉(zhuǎn)UART,無(wú)需任何外部硬件或Busing。每一分錢(qián)對(duì)于消費(fèi)電子產(chǎn)品來(lái)說(shuō)都是很重要的。塊到塊的通信使用115 KB的無(wú)外部晶振的UART。我的測(cè)試中試著將其提高到1Mbps,而且大部分情況下運(yùn)作良好,但我認(rèn)為這大多是因?yàn)槲译娐钒宓脑O(shè)計(jì)。
具有許多功能的中心排(電壓讀取器,電阻讀取器,UART通信器)最終通過(guò)兩個(gè)低歐姆模擬多路復(fù)用器(IDTQS3VH251)進(jìn)行服務(wù),然后將其饋入微控制器的UART和ADC引腳。然后,所有這些都在微控制器上進(jìn)行時(shí)間復(fù)用 - 打開(kāi)/關(guān)閉ADC,UART,內(nèi)部分壓器,尋址MUX。 EFM32能良好的完成任務(wù):其在啟用/禁用外設(shè)方面非常快,永遠(yuǎn)不會(huì)陷入一些奇怪的狀態(tài)或時(shí)序問(wèn)題。這節(jié)省了大量的時(shí)間,電路板空間和成本,相比之下,更多的專注于硬件!我唯一的問(wèn)題是做我自己需要的。我需要在固件中編寫(xiě)一個(gè)相當(dāng)復(fù)雜的調(diào)度程序來(lái)最佳地為所有的塊提供服務(wù)。
盡管如此,我仍然需要快速服務(wù)LED。該任務(wù)通過(guò)使用配置為SPI的最后一個(gè)USART塊完成。我將DMA上的數(shù)據(jù)盡可能快地(一次以1 Mbps的速率突發(fā)96位)連接到一連串的恒流LED驅(qū)動(dòng)器。同時(shí),我需要打開(kāi)和關(guān)閉PMOS晶體管,為3組LED供電,全部時(shí)分復(fù)用。一切都需要很快的刷新,因?yàn)槲蚁胪ㄟ^(guò)PWM控制每個(gè)LED的強(qiáng)度。
最后,我試圖為3個(gè)組(3 * 32 * 200)= 19200 Hz刷新強(qiáng)度為200 Hz的32級(jí),一些自定義GPIO位在中斷處理程序中全部翻轉(zhuǎn)!這推動(dòng)了這種設(shè)計(jì)可能的局限性。我想如果我添加了一個(gè)額外的移位寄存器或卸載服務(wù),整個(gè)LED計(jì)算/移位到一個(gè)微型微控制器(EFM8 Busy Bee?),我可以得到我真正想要的8位強(qiáng)度水平和快于200赫茲的復(fù)用。
對(duì)于LED閃爍的燈光愛(ài)好者,200Hz對(duì)于LED復(fù)用來(lái)說(shuō)太慢了。你一開(kāi)始就沒(méi)有注意到,但是在這個(gè)速度上有一些頻閃效應(yīng)問(wèn)題:特別是在相機(jī)上。上個(gè)月我們進(jìn)行了一次視頻拍攝,經(jīng)過(guò)一些測(cè)試,決定犧牲大部分的強(qiáng)度水平,以便更快的整體刷新(500-600 Hz)。我們拍攝了一個(gè)視頻,進(jìn)行慢動(dòng)作捕捉時(shí),600Hz的LED刷新是太慢了,但對(duì)于實(shí)時(shí)視頻來(lái)說(shuō)是很好的。
在編寫(xiě)了數(shù)千行代碼之后,我可以報(bào)告編譯器從未生成錯(cuò)誤的輸出。 YMMV,但我發(fā)現(xiàn)編譯器和調(diào)試器非常強(qiáng)大。我能夠斷開(kāi)和探測(cè)變量,并將堆棧框架放置在中斷之外,而不會(huì)出現(xiàn)問(wèn)題,并且很快。這大大加快了我的開(kāi)發(fā)時(shí)間。 我仍然在使用Simplicity Studio 3,因?yàn)槲也幌胱儎?dòng)我的工具鏈直到我的原型結(jié)束。我很期待4.0能夠提供什么。
在C中的固件啟動(dòng)之后,我期望只需要適量的C ++語(yǔ)言。函數(shù)指針是非常好的,但是在我的許多函數(shù)的開(kāi)頭基本上傳遞了一個(gè)“this”指針后,事情開(kāi)始變得很冗長(zhǎng)。
幸運(yùn)的是,Simplicity工作室添加了C ++支持。只需編寫(xiě)接口指針,我便可以傳遞一些高級(jí)塊,大大減少了編碼任務(wù)。我甚至可以在一些中斷代碼中調(diào)用一些C ++對(duì)象,而不會(huì)有問(wèn)題。
有幾個(gè)地方對(duì)浮點(diǎn)分割或乘法非常有幫助(例如我自己的ADC校準(zhǔn)過(guò)程)。由于我使用的是ARM M3內(nèi)核,它沒(méi)有浮點(diǎn)單元,而是由軟件生成。我一直在關(guān)注代碼大小 - 它沒(méi)有添加太多(我現(xiàn)在在90K的編譯代碼)。
最后,我很高興地報(bào)告Silicon Labs MCU及軟件套件非常適合我的任務(wù),其很少在開(kāi)發(fā)過(guò)程中引起問(wèn)題(我不得不重新啟動(dòng)軟件幾次,但是與我的真實(shí)問(wèn)題相比,這是很小的)。我能夠集中力量建立我的產(chǎn)品,推動(dòng)硬件的極限,并處理其他的挑戰(zhàn)!
如果您有興趣以實(shí)踐和有趣的方式教孩子們了解數(shù)字邏輯,那么請(qǐng)從8月15日起查看ProtoBricks的ProtoBricks’ Indiegogo campaign,我們將發(fā)布所有Silicon Labs固件和板設(shè)計(jì),以便任何人進(jìn)行修改。
作者簡(jiǎn)介:Joe Broms是ProtoBricks的創(chuàng)始人及CEO,該公司使得用戶可以將數(shù)字邏輯構(gòu)建為類(lèi)似樂(lè)高的設(shè)計(jì)。此處我們分享了他是如何將該愿景實(shí)現(xiàn)的。
-
mcu
+關(guān)注
關(guān)注
146文章
17002瀏覽量
350328 -
Silicon
+關(guān)注
關(guān)注
0文章
130瀏覽量
38533
原文標(biāo)題:內(nèi)建Gecko MCU的ProtoBricks助樂(lè)高邁入數(shù)字時(shí)代
文章出處:【微信號(hào):SiliconLabs,微信公眾號(hào):Silicon Labs】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論