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