树莓派、Arduino、传统单片机开发板该如何选择
树莓派、Arduino、传统单片机简介
几十年前的电子爱好者,最喜欢的就是电烙铁、面包板和收音机;十几年前,出现了单片机,于是玩具就成了电烙铁、面包板和单片机;到了2015年,贴片技术的不断普及,让面包板不再那么有用武之地,经济的发展也让现成的板卡价格降到了一个合理的范围,购买现成的电路板,甚至自己打样电路板来使用,已经成为了一个趋势。现在,我们面前的选择就空前的丰富,一方面,是以Arduino和树莓派为首的开源硬件阵营,另一方面,则是以STM32、51和S3C2440为首的传统单片机开发板阵营。笔者根据自己的使用体验,与读者简单谈一谈它们在开发应用上的区别。
分类无论属于哪个阵营,它们用的CPU都得分成MCU(微控制器,或者称为单片机)和MPU(微处理器)两类,它们的本质区别在于MMU(内存管理单元),也就是对于虚拟内存空间的支持。树莓派和S3C2440就属于MPU类的,而Arduino和STM32就属于MCU类的。它们在运算能力上有巨大的差距。
1、树莓派
树莓派由注册于英国的慈善组织“RaspberryPi基金会”开发,Eben·Upton/埃·厄普顿为项目带头人。2012年3月,英国剑桥大学埃本·阿普顿(EbenEpton)正式发售世界上最小的台式机,又称卡片式电脑,外形只有信用卡大小,却具有电脑的所有基本功能,这就是RaspberryPi电脑板,中文译名‘树莓派’。这一基金会以提升学校计算机科学及相关学科的教育,让计算机变得有趣为宗旨。基金会期望这一款电脑无论是在发展中国家还是在发达国家,会有更多的其它应用不断被开发出来,并应用到更多领域。在2006年树莓派早期概念是基于Atmel的ATmega644单片机,首批上市的10000“台”树莓派的“板子”,由中国台湾和大陆厂家制造。
树莓派就是将你电脑机箱里的大部分东西都集成到了一块电路板上的微型电脑,接上显示器鼠标键盘等等东西和你的电脑没啥实质的区别,操作系统不一样这个是基于linux的系统。
2、Arduino
Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。它适用于爱好者、艺术家、设计师和对于“互动”有兴趣的朋友们。
通俗的讲:arduino就是主要以以AVR单片机为核心控制器的单片机应用开发板(当然也有其他核心的例如STM32版本的但是不是官方的,还有intel的伽利略),或者是学习板啥的,但是Arduino开发人员开发了简单的函数,还有许多应用库,这样就不用直接去操作寄存器了,使得没有很好的单片机基础的人员也可以使用Arduino做出自己想要的东西。Arduino的开发人员还开发了一个简洁的IDE(集成开发环境)也就是写代码,编译,调试,下载的上位机软件。
3、传统单片机
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
单片机在国外叫MCU微型控制器,就是将CPURAMROM等等集成到一块芯片上构成单片微型计算机。
性能天梯分析详解
无论属于哪个阵营,它们用的CPU都得分成MCU(微控制器,或者称为单片机)和MPU(微处理器)两类,它们的本质区别在于MMU(内存管理单元),也就是对于虚拟内存空间的支持。树莓派和S3C2440就属于MPU类的,而Arduino和STM32就属于MCU类的。它们在运算能力上有巨大的差距。
基于上面的分类,如果把它放到一个天梯图内,我们就能得到这样一张开源硬件的比较图。
性能天梯图
需要注意的是,这张图只比较了它们的纯运算性能,越靠上的,运算性能越强,但是这张图并不是按照比例画的,实际上,树莓派的运算性能可以达到Arduino的100倍。接下来,我就根据上面的两种分类方法来讲讲它们的区别。
性能的差距
广大的电子爱好者可能一直有一个疑问,那就是树莓派和单片机或者树莓派和Arduino的选择问题,其实也就是MPU和MCU的选择问题。
这里又得分两种情况讨论,一类是没有学过任何东西,想直接拿树莓派入门的,另一类是在玩过Arduino或者51单片机之后想要玩玩更高端平台发。
先讲讲第一类。对于第一类玩家,如果已经有了编程基础,可以直接试着玩树莓派,如果只是把树莓派当成一个小型PC或者低功耗服务器,完全没有问题。对于编程水平好的,我更推荐CubieBoardCC80或者JetsonTK1,因它们的性能会强大很多,玩起来会更加舒服。如果没有编程基础或者想要玩软硬结合的,还是建议从PC编程或者Arduino、单片机开始学习。
对于第二类,选择就不那么简单了。首先要知道,在过去(其实抛开开源硬件,现在也是一样),MPU是一种很复杂的东西,一般得熟练掌握单片机之后才能去接触MPU。而且MPU通常涉及到Linux内核的修改、Linux驱动的开发、Linux软件的编写这类事情,需要的知识储备很多。对于一般爱好者来说,玩MPU完全就是天方夜谭。但是MPU又是那么吸引人,数百兆的主频,数十兆的存储空间,是MCU根本无法想象的。MPU就像是一台真正的PC,而MCU只能算个玩具。国外的开源硬件大佬自然也看见了这一点,于是就有了树莓派这样的产品。树莓派就是融合了开源硬件易用性和MPU强大功能的产品。现在,对于想要玩高端平台的爱好者,最主要的选择就是树莓派和STM32(虽然它们根本不是一个量级的东西,但是由于2440类的东西开发难度太大,业余爱好者一般较少涉足)。那么我们就来对比下,树莓派和STM32分别能做什么,都能做的东西开发起来有什么区别。
只有树莓派能做的:机器视觉、视频解码、3D游戏等。
STM32和树莓派都能做的:飞控、3D打印控制、音频解码、网络监控、物联网传感器等等。
只有STM32能做的:基本没有。
小结
STM32能做的,树莓派都能做树莓派能做的,STM32不一定能做。
再来看看对于都可以做的东西,两者开发上有什么区别。以网络视频监控为例吧。STM32的开发流程是这样的:硬件选型→设计PCB→焊接→调试硬件→编写DCMI和RMII驱动→移植TCP/IP协议栈→调整摄像头驱动→编写网页服务器程序→完成。其中涉及的代码量非常大,不过好在都比较基础,爱好者还能应付一下。而树莓派的开发流程则完全不一样:买一台树莓派和一个摄像头→把摄像头连接到树莓派上→在树莓派上安装一个监控软件→完成,简直就像玩一样,半个小时就能完成。
对于爱好者来说,树莓派确实是利器,不用很长的时间就能实现很棒的效果,自己写程序也不是太复杂,就参考PC上的Linux程序编写教程就可以,因为网络协议、图形库这些都是现成的,省去了很多麻烦。不过,有利也有弊,树莓派是个高度封装的东西,如果想要借此学习ARMLinux的基础开发,我还是劝你转投2440的怀抱,因为树莓派说是开源硬件,但是实际上它的底层Bootloader和核心数据手册是闭源的,对于应用开发没有影响,但是学习原理就要命了。另一点,就是成本。如果你做的这个东西要量产,那么成本就变得很重要,基于STM32的网络监控方案可以比基于树莓派的方案成本低一半以上,这可是十分吸引人的。当然我只是举个例子,实际上,目前市场上网络监控用的既不是STM32,也不是树莓派,而是专门定制的ARM9。
那么对于爱好者,STM32有什么意义呢?看起来似乎上面提到的两个弊端都没什么关系啊。让我说的话,STM32的优点就是更为基础,这个理由和上面对于51单片机的观点是类似的,玩STM32可以学到更多基础的知识,脚踏实地慢慢来,路上的风景也很精彩啊,从零开始,看着自己的作品一点点完善,难道不是一件很有趣的事情吗?功利地说,如果要从事电子工程师的工作,这些知识和经验将会十分有用,因为工作也是和基础的东西打交道,无论是MCU还是MPU都一样,将要面对的,是赤裸裸的原理图和源代码,而不是apt-getinstall。