市面上控制器这么多,似乎每一个都很厉害…为什么有的控制器编写起来那么难,功能很少,有的简单易学,功能强大呢?各种控制器又有什么区别呢?经过我的思考,我个人把控制器分为三类!
第一类: 基于逻辑电路的控制器(FPGA)
FPGA(Field Programmable Gate Array)
我们都知道,电子设备无论功能多么强大,最基本的构成还是与非门,数据0和1,FPGA使用的是硬件语言,如VHDL去直接改变控制器的逻辑电路达到控制电路的目的,简单来说,和你用面包板,二极管,触发器自己做的逻辑电路一样……只不过FPGA可以重复烧写,就如同你把板子拔了,再插一遍一样,它对外部的控制,只基于你对它内部逻辑电路的改变。
第二类:基于指令集的控制器(单片机)
如果我们按照一定的要求去设计FPGA里面的逻辑电路,就可以为FPGA添加指令集,指令集操作比逻辑电路操作又高了一个层次,我们不用管电路是什么构造了,而只用改变输入电路的值0/1,就可以达到控制的效果,0和1按照一定规则排列,形成指令集。有了指令集,我们就可以用汇编语言对其进行操作,好多单片机就用汇编语言!我们把有固定指令集的处理器称为硬核处理器,无固定指令集,但是可以用硬件语言暂时为其编写一个指令集的处理器,称为软核处理器,比如基于FPGA的NIOS2,就是软核处理器,操作指令集比直接操作逻辑电路要容易。
第三类:基于操作系统的控制器(树莓派)
有了指令集,仍然不方便,我们希望有一种更人性化的方式,将我们的操作转换成指令,这就是操作系统。我们常常说,不同数码产品之间的操作系统不通用,为什么不通用?就是因为指令集不一样。有操作系统把我们看起来很方便的操作转换成指令,这就使得我们更加方便,比直接使用指令集要简单的多。树莓派的控制就是基于操作系统。
FPGA
首先说一下FPGA,FPGA叫做可编程门阵列。它的逻辑门,时序等都由开发者自己编程,是一个通过硬件描述语言在FPGA芯片上自定义集成电路的过程
优势:简单的说,它就相当于一张白纸,把需要做的东西全部自己做出来,自由度最高。理论上FPGA可以配置成任何需要的处理器。一般用于通信类的行业。
难点: 开发难度高,门槛也比较高。对数电模电的要求比MCU更高。花费的时间也是最长的。
arduino
Arduino是一个平台,Arduino所使用的芯片也是单片机,但是性能上与stm32还是有很大的差距。Arduino的编译环境-Arduino IDE。
优势:在于操作比较简单,不用操心寄存器的配置,有非常多的开源硬件库,即使没有专业功底,通过简单学习也能快速上手,网上有大量的Arduino+模块的配置资源,适合广大的DIY爱好者极客。
劣势: 做产品或者研究很不友好,成本高,内部硬件的可操作性比较差,简单高度抽象化带来就是效率低下以及资源开销大,模块数量上去后系统就撑不住了(芯片性能有限)。适用于未成年编程入门教育启蒙以及爱好者DIY,在市场应用中很少有arduino身影。
STM32
基于ARM Cortex-M3内核,现又开发了M7内核,运算速度,响应能力比较迅速。
优势: 开发工具,比较齐全,开发资料也比较丰富。基本上都不需要外部的硬件扩展。带有唤醒功能的低功耗模式,在功耗方面控制得比较好,另外,实时性比较强。工业上广泛使用,如汽车智能工业,微控制器、传感器、致动器、电机控制等。对于了解硬件底层有很大帮助。
劣势:没有操作系统,太过复杂的计算没有办法应对,对于视觉处理的能力不如树莓派。
RaspBerry
与嵌入式微控制器(STM32)相比,除了可以完成相同的IO引脚控制之外,因为运行有相应的操作系统,可以完成更复杂的任务管理与调度,能够支持更上层应用的开发,为了开发者提供了更广阔的应用空间。比如开发语言的选择不仅仅只限于C语言,连接底层硬件与上层应用,可以实现物联网的云控制和云管理。对于视觉处理,复杂数据处理有着很大的优势。
优势:开发速度非常快,有非常多的开源硬件库,只需要把模块和树莓派连接,再把网上相应的驱动软件下载下来就可以完成,性能突出,非常强大。STM32能做的树莓派应该都可以做。适用于采集,处理,识别,深度学习等
劣势:可能只是完成一个很小的IO控制功能却要运行一个庞大的操作系统作为支撑,牺牲了自己的性能优势,显得有些得不偿失。并且如果没有底层硬件和驱动的支持,我们的自由度就只限于SDK(软件开发工具包)的范畴了
视觉机器人
视觉机器人是一个软硬件紧密结合的工程,硬件方面单片机对于传感器的接口、对于电机的驱动、硬件三方库的资源、甚至编程速度都是会强过树莓派的。
所以:最优解就是树莓派做上层交互算法(处理视频流、音频流),单片机驱动全部硬件,二者通过总线连接交互(uart、i2c、spi、usb等)。机器人预计需要一个寒假的时间。