单片机解决方案调研
目标:模块化强;底层开发难度低、成本低;低功耗(电池供电);支持无线通信;具有一定的算力
本文主要讨论3种不同解决方案。Arduino,stm32和C51系列。列出的这三种都是我有过使用经历的。我经验较多的是stm32,没有用arduino做过比较大型的东西。
实际上三者并不能直接比较,Arduino算是一个硬件平台,他的早期,也是最广泛的核心是基于AVR单片机(这种芯片我没单独用过)。
后两者stm32与C51则是两种特定系列的单片机了。
Arduino | stm32 | C51 | |
---|---|---|---|
模块化 | 强(有很多各种各样现成的模块) | 中(配合开发板使用,可以达到部分模块化的效果) | 中(同stm32) |
运算能力 | 中、高(一般使用AVR的算力差,现在有支持STM32系列的和esp32的了) | 中、高 | 低 |
功耗 | 低、电池供电足够 | 低(极低)、电池供电足够 | 极低、电池供电足够 |
开发难度 | 低、开发速度快、代码易于迭代更新,不必考虑寄存器层面编程 | 较高(寄存器复杂,但ST提供封装的的库函数) | 中(硬件资源少,编程难度高) |
价格 | 较高 | 中 | 极低 |
支持无线通信 | 支持 | 支持 | 支持 |
优点 | 开放周期较短,模块化强,代码移植性强,社区丰富 | 功能强大,增加功能灵活,社区丰富 | 极其便宜,功耗低 |
缺点 | 扩展模块可选有限;算力有限; | 开发难度大;程序移植性差; | 算力低下,框架老旧 |
总结&建议 | 可选方案。方便开发,算力比较OK;但价格较高。 | 可选方案。芯片功能极其强大;但开发周期和难度可能较长。 | 不建议使用,如果要批量生成且算力要求不高,可以考虑 |
Arduino
Arduino准确的说是一个单片机及其外设的集合,比较经典板子的主控是ATMEL出的AVR单片机,比51系列性能强一点。这个集合之所以出名在于其操作简单,不需要涉及很多底层、寄存器层面的编程。例如,stm32库函数的一大堆命令,在这里只需要一句即可完成功能,并且有相当丰富的外设模块。
总体而言做原型,快速开发的时候,硬件搭设方便,基本不用去设计电路板,画板子之类的,基本上导线连接模块就OK了。代码比较简单易懂的。基本不涉及到寄存器级的操作。总得来说就是开发快。小量定制化还是划算,做产品或者较多数量的成本很高;且由于其代码的高度封装会导致程序效率底下以及资源开销大。
我个人对于Arduino的使用不是很多,还需进一步调研。
该图为比较常见的Arduino型号的单片机的性能参数。原文链接 原文发布于2017年
STM32系列单片机
stm32是st半导体公司向arm公司购买了核心(嵌入式)版权,加上自己的外设生产的一个系列的芯片。其特点是:功能强大、速度快、外设多。STM32比较常见的框架是ARM CORTEX-m3或m4。并且其:寄存器复杂,直接用汇编操作比较麻烦,但ST官方了提供封装的的库函数,现在还出了专门的代码生成软件cube来简化操作。
一个STM32常用型号之间对比:https://blog.csdn.net/ybhuangfugui/article/details/88266385
上图为ST官网对于其系列芯片的简介与分类。
我对于STM32系列芯片的使用比较有经验,我使用的型号为主要为:STM32F1系列和F4系列。
STM32F407这款芯片,使我们机器人队使用的主控芯片,其最高主频可达168MHz(远远大于Arduino的常见型号的16MHz),可见其算力的强大。
我们队内并没有使用STM32系列的开发板,而是买了裸的芯片,之后自己设计了电路板(设计部分我不是很擅长),画板子、印板子、焊板子、改板子这样进行开发,导致开发一代新的主控板周期比较长。
不过市面上也有很多STM32现成的开发板,预留了很多IO接口,初步观察感觉基本满足需求,价格适中,如STM32F4系列的开发板不足100元。使用这种开发板一般也不需要自己设计电路,只需购买不同的模块即可交互使用。
左图的为我近期购买的STM32F1系列的的开发板;右图为STM32F4系列的开发板。例如左边的F1开发板,可以看到这种开发板也像Arduino一样支持很多的扩展功能,而且只需要插接即可。
整体而言,使用STM32系列也绝对可以实现我们的预期目标,使用开发板也基本可以避免电路的设计等工作。由于STM32系列芯片本身功能强大,其上限应该是高于Arduino方案的。但其开发难度会比Arduino方案难上不少。这里指的STM32开发方案是指使用STM32 CUBEMX硬件配置和生成代码模板(HAL库),之后在代码模板上进行开发(一般使用IAR作为IDE)。
Arm Cortex
Cortex-M分为:M0,M0+,M3,M4,M7
M0,M0+:基础版本,无高性能的MCU;
M3:目前最主流的设计内核选型,应用范围广;
M4:相比于M3的内核来说,M4处理器添加了DSP,和专门的FPU(浮点数处理单元);重点解释一下:对于CPU(不是SOC)来说,运算浮点类型的数据是很麻烦的一件事,在选型的时候,如若用应用的领域需要大量浮点数据的运算的时候,那么就要选择M4的内核,M4会大大提高处理器性能和运算速度,而如果要要处理的浮点数据不多,则可以直接选择M3内核处理器。
M7:性能好和功耗高兼具,适合追求极致性能项目;
Arduino 与 STM32
通过进一步的了解,我发现了arduino支持了STM32的开发!即可以使用Arduino的IDE来编程。这样可能会降低部分开发难度。
github链接https://github.com/rogerclarkmelbourne/Arduino_STM32。目前支持STM32F4和F1系列,其可以将Stm32F103(主要)系列单片机刷入Arduino的Bootloader,并且使用Arduino的编译器和IDE来完成代码的编写,省去了一大部分配置寄存器和学习的时间,完整的性能和灵活性还有待探究。
同时也有一个类似于arduino+STM32的project,其链接如下。https://www.leaflabs.com/maple。该板子在淘宝有售,其芯片使stm32f103 arm cortex-M3 32位处理器,主频最高可达72MHz,远远大于常见的Arduino的8位(AVR)MCU。
Leaf Maple 是一个类似Arduino的开发平台,使用的Cotrex M3内核的32位MCU,所以要比Arduino的8位(AVR)MCU强悍很多,有更高的主频,更丰富的资源。 Leaf Maple也提供了一个类似Arduino IDE的IDE, 并且很多简单上层函数兼容Arduino的函数库,让移植库和代码变得相当简单。比起使用CubeMX+IAR来开发一个STM32项目,使用leaf maple会节省很多时间,更适合初学者和需要快速原型开发的用户。
Arduino新品M5Stack(使用esp32)
Arduino的生态总体来讲还是很好用的,目前了解到一款模块化极强,性能出色,上市时间不长的支持Arduino开发平台的开发板。M5系列。
M5Stack是一种模块化、可堆叠扩展的开发板,每个模块一般为5cmX5cm的尺寸,这也是M5Stack名字的由来。与常规的开发板不同,M5Stack更注重产品形态的完整性,更注重用户的应用场景和研发的简易性,M5没有密密麻麻的飞线,没有错乱无章的接口插头,不需要繁琐的开发流程,简简单单、轻轻松松地完成高质量的电子原型创作。(官方介绍)
M5Stack主要采用ESP32芯片体系,CORE主机内已集成了240M双核主频CPU(esp32)、 WiFi、蓝牙、2.0寸彩色屏幕LCD、扬声器、按键、TF卡、陀螺仪以及内置电池(部分有)。CORE基本满足一般的功能需求,功能模块Function Module则根据应用的情况选择,比如电机驱动、信号采集、通信等功能。另外,也会配备不同的应用底座及配件,方便用户做出高质量的研发。
比如其Basic款。其内含2.4G Wi-Fi和蓝牙4.0。外设接口有Type-c,I2C,GPIO和UART接口(数量较少)。
简易方案
简易方案均假定使用2个加速度传感器,并且保证支持WIFI通信,均基本不需要大量焊接(基本做线之类的还是需要的)
Arduino(M5Stack) | STM32 | |
---|---|---|
CORE MCU Unit | M5Stack Basic 支持I2C总线,内置WiFi 200¥ | STM32F103最小开发板 100¥ |
Senor | ADXL345三轴加速度 * 2 (I2C总线 ±16g 13位分辨率) 30¥ | MPU6050 三轴加速度+三轴陀螺仪 I2C接口 25¥ |
WiFi | ATK-ESP8266 串口转WIFI模块 28¥ | |
Battery | 内置110mAh 锂电池 | 5V锂电池 20¥ |