单片机解决方案调研

目标:模块化强;底层开发难度低、成本低;低功耗(电池供电);支持无线通信;具有一定的算力

本文主要讨论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年

211543xjgg8attjataqkgk

STM32系列单片机

stm32是st半导体公司向arm公司购买了核心(嵌入式)版权,加上自己的外设生产的一个系列的芯片。其特点是:功能强大、速度快、外设多。STM32比较常见的框架是ARM CORTEX-m3或m4。并且其:寄存器复杂,直接用汇编操作比较麻烦,但ST官方了提供封装的的库函数,现在还出了专门的代码生成软件cube来简化操作。

一个STM32常用型号之间对比:https://blog.csdn.net/ybhuangfugui/article/details/88266385

en.microcontrollers_FM141.jpg

上图为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则根据应用的情况选择,比如电机驱动、信号采集、通信等功能。另外,也会配备不同的应用底座及配件,方便用户做出高质量的研发。

官方github官方淘宝链接

img

比如其Basic款。其内含2.4G Wi-Fi和蓝牙4.0。外设接口有Type-c,I2C,GPIO和UART接口(数量较少)。

image-20200827162008345

简易方案

简易方案均假定使用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¥