如何为编程爱好者设计一款好玩的智能硬件(三)——该选什么样的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接口。
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 持续更新中~