ProtoBricks助乐高迈入数字时代

描述

作者:Joe Broms,ProtoBricks创始人及CEO

ProtoBricks是一款具有类似乐高外形的电路构建玩具,现已在市场上发布。对于我来说,这是6年基于爱好的努力的结果,作为发明家,我努力将想法变成爱好,并最终令其成为一个真正的产品。今天,我想关注产品的核心,也就是“hub”,以及Silicon Labs微控制器如何成为ProtoBricks电子产品的核心。

功能要求

ProtoBricks Hub是有12x6个螺柱的LEGO™大小的块,顶部有电触点和LED格栅。我们把一个两层PCB板放在块里面。电路板的底部有四个弹簧负载引脚:电源,GndUART TXUART RX,以及用于编程的裸板触点。顶部是充满魔力的地方; 边缘触点(螺柱)是电路的IO引脚。还有两行RGB LED(每个IO引脚一个)。最后,中心的那排需要做大部分的工作:测量电阻/电压,发送/接收UART消息,并在这些任务之间切换。这已经经历了许多修改,以满足最佳的外形,功能和成本。现在我们只需要一个可以完成任务的微控制器。

需要一款强大功能的微控器

要进一步满足要求,我需要选择至少有两个UART的微控制器。其中一个需要处理TXRX在不同时间翻转。我需要至少35GPIO引脚来处理裸露的IO,并为板上的其他芯片提供服务。我还需要在不同强度中点亮24RGB LED最后,我需要一个精确快速的ADC,用于通过精密电阻和计算电位器位置来检测块。

我还需要一种现场编程板的方式,并且可以在无需完全分开的情况下轻松地调试。

此外,所有的工作都需要使许多微控制器外设以100us的粒度启用,禁用,启动和停止。1KHz的速率下,我设置了一个很困难的最后期限来维修我的主电路仿真环路。最耗时的开发任务是组织和将任务分解成可以被正确优先排列成小而有状态的块。幸运的是,对于我来说,我已经从事C ++开发将近20年了,并且一直喜欢编写较低级别的代码并优化紧凑的循环。

最后,我选择了Silicon LabsEFM32G232,其具有128KB闪存,16KB RAM IO引脚,USART,良好的ADC和合理的价格的正确平衡。

Hub块内部

以下是我在开发过程中总结的亮点,特点和技巧:

世界首款块状兼容调试连接器

我们希望以非常紧凑的2x2螺柱的尺寸提供电源,UART和微控制器编程引脚,因此我用3D打印机构建了该板。现在我可以连接到我的板子,而无需每次都拆开我的块。 pogo引脚连接到SWCLKSWDIOSWORESET

调试块:中间的四个pogo引脚连接到微控器

去年的原型设计,使用Gecko开发板调试hub微控器

其中一个UART需要从RX翻转到TX,具体取决于块从左到右的位置。为此,我直接连接到相同的UART外设,但使用两个不同的引脚排列位置。我可以使用备用位置标志翻转UART,无需任何外部硬件或Busing每一分钱对于消费电子产品来说都是很重要的。块到块的通信使用115 KB的无外部晶振的UART我的测试中试着将其提高到1Mbps,而且大部分情况下运作良好,但我认为这大多是因为我电路板的设计。

外设切换

具有许多功能的中心排(电压读取器,电阻读取器,UART通信器)最终通过两个低欧姆模拟多路复用器(IDTQS3VH251)进行服务,然后将其馈入微控制器的UARTADC引脚。然后,所有这些都在微控制器上进行时间复用 - 打开/关闭ADCUART,内部分压器,寻址MUX EFM32能良好的完成任务:其在启用/禁用外设方面非常快,永远不会陷入一些奇怪的状态或时序问题。这节省了大量的时间,电路板空间和成本,相比之下,更多的专注于硬件!我唯一的问题是做我自己需要的。我需要在固件中编写一个相当复杂的调度程序来最佳地为所有的块提供服务。

输出数据

尽管如此,我仍然需要快速服务LED该任务通过使用配置为SPI的最后一个USART块完成。我将DMA上的数据尽可能快地(一次以1 Mbps的速率突发96位)连接到一连串的恒流LED驱动器。同时,我需要打开和关闭PMOS晶体管,为3LED供电,全部时分复用。一切都需要很快的刷新,因为我想通过PWM控制每个LED的强度。

最后,我试图为3个组(3 * 32 * 200= 19200 Hz刷新强度为200 Hz32级,一些自定义GPIO位在中断处理程序中全部翻转!这推动了这种设计可能的局限性。我想如果我添加了一个额外的移位寄存器或卸载服务,整个LED计算/移位到一个微型微控制器(EFM8 Busy Bee?),我可以得到我真正想要的8位强度水平和快于200赫兹的复用。

对于LED闪烁的灯光爱好者,200Hz对于LED复用来说太慢了。你一开始就没有注意到,但是在这个速度上有一些频闪效应问题:特别是在相机上。上个月我们进行了一次视频拍摄,经过一些测试,决定牺牲大部分的强度水平,以便更快的整体刷新(500-600 Hz)。我们拍摄了一个视频,进行慢动作捕捉时,600HzLED刷新是太慢了,但对于实时视频来说是很好的。

编译器和工具链支持

在编写了数千行代码之后,我可以报告编译器从未生成错误的输出。 YMMV,但我发现编译器和调试器非常强大。我能够断开和探测变量,并将堆栈框架放置在中断之外,而不会出现问题,并且很快。这大大加快了我的开发时间。  我仍然在使用Simplicity Studio 3,因为我不想变动我的工具链直到我的原型结束。我很期待4.0能够提供什么。

C++支持

C中的固件启动之后,我期望只需要适量的C ++语言。函数指针是非常好的,但是在我的许多函数的开头基本上传递了一个“this”指针后,事情开始变得很冗长。

幸运的是,Simplicity工作室添加了C ++支持。只需编写接口指针,我便可以传递一些高级块,大大减少了编码任务。我甚至可以在一些中断代码中调用一些C ++对象,而不会有问题。

浮点

有几个地方对浮点分割或乘法非常有帮助(例如我自己的ADC校准过程)。由于我使用的是ARM M3内核,它没有浮点单元,而是由软件生成。我一直在关注代码大小 - 它没有添加太多(我现在在90K的编译代码)。

最后,我很高兴地报告Silicon Labs MCU及软件套件非常适合我的任务,其很少在开发过程中引起问题(我不得不重新启动软件几次,但是与我的真实问题相比,这是很小的)。我能够集中力量建立我的产品,推动硬件的极限,并处理其他的挑战!

如果您有兴趣以实践和有趣的方式教孩子们了解数字逻辑,那么请从815日起查看ProtoBricksProtoBricks’ Indiegogo campaign,我们将发布所有Silicon Labs固件和板设计,以便任何人进行修改。

作者简介:Joe BromsProtoBricks的创始人及CEO,该公司使得用户可以将数字逻辑构建为类似乐高的设计。此处我们分享了他是如何将该愿景实现的。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分