【开坑国产单片机GD32系列,带你零死角玩转GD32】
第五章 GD32F103C8T6串口开发板设计指南(一)
(1)前言
磨刀不误砍柴工;
(2)Letter Shell介绍
在第四章中,已经说过会筛选彦祖们的提议,更新相关的内容,先前有几位不愿透露姓名的彦祖在后台私信我,给了我以下几个更新建议:
1.开源项目Letter Shell在GD32平台上的移植;
2.基于GD32的录音笔软硬件设计;
3.基于GD32的USB键鼠软硬件设计;
4.基于GD32的智能家居软硬件设计;
5.基于GD32的智能手环软硬件设计;
首先感谢以上几位彦祖(为什么没有热巴呢?)的支持,以下公布这5位彦祖的照片,以表示我的谢意!
综合考虑过这五个项目的情况后,我决定先更新第一个的内容,毕竟最容易,即开源项目Letter Shell在GD32平台上的移植,这里先介绍一下Letter Shell。
应该有不少彦祖使用过诸如Ubuntu,Centos等Linux操作系统,就我个人而言,让我印象最为深刻的,自然是Linux不同于Windows的命令行式操作界面,初觉大为不便,因为创建文件都需要输入相应的命令(不过现在可以在图形界面下创建了),但随着使用的深入,特别是由于公司业务需要,将MCU程序开发环境移植到Ubuntu上之后,在使用ARM-GCC编译器,对MCU程序进行编译链接的过程中,发现原来在Windows下使用的Keil/IAR,对我隐瞒了太多细节,原以为编译链接只是几个按钮的事情,没想到到了Linux中,却需要自己编写makefile脚本,但这也让我第一次对MCU程序的编译链接过程有了较为深入的了解,对于Linux下的终端界面和Linux Shell工具,也有了不一样的看法。
而此次需要移植的项目Letter Shell,就是一款类似于Linux Shell的嵌入式开源项目,它可以很容易地嵌入到单片机程序中,只要自己编写好串口的收发函数,以及定时器函数,就可以像Linux Shell一样,和MCU内核交互,调用MCU程序中的函数。
这里可能有些彦祖看迷糊了,什么叫做和MCU内核交互?
假设我们在程序中实现了LED的驱动函数,屏幕文本显示的驱动函数,那么只需要在Letter Shell的函数中把LED的驱动函数,屏幕文本显示的驱动函数注册一下(其实就是把Letter Shell的函数指针指向这两个函数),然后在PC端的串口助手中,输入和Letter Shell事先约定好的串口命令,那么就可以调用这两个函数,就像Linux Shell一样调用内核中的函数一样,此外Letter Shell还支持命令自动补全,快捷键功能定义,命令权限管理,用户管理,变量支持等功能。
好!说了这么多,那我们是不是要开始移植了? 然后并没有,正如我们这期标题所说的,这期帖子的主要内容,是GD32F103C8T6串口开发板的硬件设计指南,而Letter Shell的移植,会被放到第六章,相信各位彦祖现在最想说的是:你是不是在扯淡?
由于Letter Shell只需要使用串口功能,用主流的那些单片机开发板来测试,实在是杀鸡用牛刀了,所以为了这期帖子,我专门画了嫖了嘉立创三块板子的打板费,陆续设计了三块基于GD32的串口开发板,有需要的彦祖可以找我要Gerber文件,先展示一下这三块板子:
最终使用的3号板子,包含一个CMSIS-DAP下载器,以及GD32F103C8T6串口开发板,下载器的源码和制造文件如果有彦祖感兴趣,也可以私信我,接下来就以3号板子为对象,介绍这款串口开发板的设计方案,内容会比较多,感兴趣的彦祖可以耐心看完,工欲善其事必先利其器嘛!
(3)串口开发板硬件设计指南
(3.1)串口开发板功能介绍
由于主要是针对Letter Shell的移植以及操作系统的移植,所以板上资源不多,主要如下图所示:
串口开发板的构成,目前就是上图所示的各个框图,以及背后一颗小尺寸纽扣电池,后期会把CMSIS-DAP下载器也集成到该串口开发板上,由于是手工焊接,所以有些地方不怎么美观,嘉立创的SMT太贵了,舍不得舍不得!接下来我们就从功能分析,器件选型,原理图设计,PCB设计等方面,讨论以上框图中的功能。
(3.1.1)电源接口
由于是串口开发板,而我们平时使用串口对单片机进行调试的时候,一般就是将USB转TTL模块(某宝上一搜一堆的那个)与MCU的TX,RX,GND相连,(这里连接GND的目的是为了统一USB转TTL模块与MCU之间的电平,如果不接GND的话,串口通讯就会出现异常),然后将USB转TTL模块连接到电脑的USB口,就好像下面这张图: 这种调试方式,MCU和USB转TTL模块是分别供电的,中间通过导线连接,如果周围的线比较少,那倒没啥,如果周围一堆供电或者通信用的导线,或者线缆,那指定是一件让人抓狂的事情,另一种调试方式,就是将USB转TTL电路集成到产品上,然后通过一条MicroUSB,或者Type-C数据线连接,还有一种性价比更高的,就是利用MCU自带的USB模拟出一个虚拟串口(其实CH340G就是这么干的),直接通过MicroUSB或者Type-C连接到电脑,利用USB虚拟出一个虚拟串口的内容,我们会在==基于GD32的USB键鼠软硬件设计==这个项目中讨论,这里不细说。 而GD32串口开发板把线都取消了,直接插在电脑的USB口上,没有中间商赚差价,当然啦!前提是开发板本身可以设计得比较小巧,不然得把USB插口干断了。 这个时候就会有彦祖问了,这个USB插头怎么选型?毕竟在网上一搜,型号一大堆,想选但又怕翻车,所以这里大致介绍一下USB接口,这个我们既熟悉又陌生的小东西。
USB接口主要分为三类:标准USB接口,Mini USB接口,Micro USB接口,具体信息如下:
==【标准USB接口】==
这个可以说我们生活中最常见的USB接口了,又分为Type-A和Type-B两种,它俩长这样: 其中Type-A和Type-B,根据支持的USB标准不一样,又可以分为USB 2.0和USB 3.0标准USB接口。所以根据接口的颜色,我们很容易区分该接口是支持USB 2.0还是支持USB 3.0的。Type-A型接口主要应用于鼠标、键盘、U盘等设备上,彦祖们可以看看鼠标的USB接口,大部分都是Type-A(2.0),而Type-B在打印机上应用较多,比如下面这张图,就是典型的Type-B接口:
==【Mini USB接口】==
不同于标准USB接口的大大咧咧,Mini USB接口,是一种小型的USB接口,其指标与标准USB相同,但是加入了ID针脚(用于区分设备是主机还是外设),以支持OTG(On The Go,该功能允许在没有主机的情况下,实现设备间的数据传送)功能,毕竟不是什么时候都有台电脑在身边的,而Mini USB接口主要分为Mini-A和Mini-B两种,长下面这样:
Mini USB接口由于相对较小的体型,常见于一些小型设备上,比如MP3、MP4、收音机等,早期的老人机也有相当一部分采用了这个接口,高中时期,教室后面的插座上,一堆充电的手机用的都是这个接口,别问我是怎么知道的。
==【Micro USB接口】==
Micro USB接口,属于Mini USB的升级版本,插拔寿命提高到了10000次,相比Mini USB接口,在宽度几乎不变的情况下,高度减半,更为小巧。Micro USB接口也可分为Micro-A和Micro-B两种,长的就下面这样: 这个彦祖们应该是不陌生的吧?相信大家都认识,只是不知道它的专业名称,在智能手机发展的前期,绝大多数的智能手机(苹果除外嗷),都采用了Micro-B型接口作为充电和数据接口。
==【Type-C接口】==
Type-C接口,是近几年USB-IF组织推出的新型USB接口,该接口最明显的特点,就是可以正反插拔了,并且在充电功率,通讯协议上,都有了很大的提升,长的就是下面这样了: 这里只是做一个大致的介绍,让彦祖们能够分清谁是谁,如果需要更详细的资料的话,CSDN和知乎上有更详细的介绍,我们这里选用的是USB Type-A接口,主要有两个原因,第一,是因为目前大部分电脑都携带有USB Type-A的接口,使用起来比较方面,可以直接插在上面,第二是因为后面的USB转串口电路所使用的协议转换IC支持的就是USB2.0,这里提一嘴,USB协议是可以向下兼容的,哪怕电脑的USB接口是USB3.0协议,我们也可以把一个USB2.0协议的设备插在上面,比如鼠标啥的,都是可以正常使用的。
(3.1.2)电源部分
电源可以说是整个系统的核心了,电源的性能关乎系统的整体性能,所以在选型和设计上,要格外花力气。 电源设计的第一步,就是要确定系统的工作电压以及功耗要求,单片机系统一般是采用5V/3.3V/1.8V作为系统工作电压,但是诸如手机充电器,5V-1A直流电源适配器 都只提供一种电压,如果单片机需要1.8V电压,传感器需要3.3V电压,屏幕需要5V电压,电机需要12V电压,这种情况如何处理呢?
这种情况下,就需要升降压电路,对外部电源进行处理,而根据外部电源的不同,所采用的升降压方案也是有很大区别的,接下来我们根据电源电压范围,系统功耗和升降压电路的关系,讨论一下电源设计方案(纯属个人意见,欢迎纠错和指导)。 单片机系统及其外围电路常见的输入电源电压如上图所示,电源方案设计的第一步就是先确定输入电压的范围,我们按照上图顺序,依次讨论在各个电压范围下电源方案的设计思路。
==(a)+12V,电源适配器/开关电源== 一般+12V的电源,都是采用下图所示的电源适配器:
底部铭牌上有一个重要信息,就是输出的电压和电流的额定值,为12V/1A,也就意味着这个适配器的最大允许输出电压是12V,最大允许输出电流是1A,如果用它给需要12V/2A的设备供电,那这个电源适配器和设备就只能 好!现在已经知道该电源适配器最大可以输出12V/1A,那如果我们要获得需要的5V/3.3V/1.8V电压,接下来该怎么做?对的!就是电源芯片选型了,那相关芯片的选型信息怎么获得呢?有以下几个去处彦祖们可以去逛逛
立创商城: 点击前往
华秋商城: 点击前往
我们的升降压方案是:先将12V降压至5V,再将+5V降至+3.3V,最后再将+3.3V将至+1.8V,总共三个阶段,每一个阶段所使用芯片的类型和工作原理都有差异。 第一次降压,由+12V将至+5V,这个就要求降压芯片能够承受至少+12V的电压,以及最大1A的电流输入,有一些常见的电源模块上使用的芯片就无法满足要求,比如下图这个: (实物拍摄)
该模块使用的是AMS1117-3.3降压芯片,在立创上下载其数据手册,在电气参数这一栏会发现如下信息:
从这两张图可以得知,该芯片最大的输入电压是18V,最大输出电流是800mA,也许有些彦祖会说,这不是差不多嘛,凑活凑活也能用呀!我刚开始也是这么想的,直到我看到板子被烧穿了,才知道,这些数据都是极限值呀!一般来说AMS1117-3.3这款芯片输出电流到达200mA的时候,你就可以用它暖手了,到达500mA的时候,你拿着的,就不是一个电源了,而是一个爆竹了,彦祖,你也不想板子上有一个爆竹吧?
接下来我们介绍一下常用的电源芯片分类,电源芯片可以分为LDO芯片,比如AMS1117-3.3,以及DC-DC芯片,这里的LDO是低压降的意思,低压降线性稳压器(LDO)的成本低,噪音小,静态电流(也就是输出端啥都没有接的状态)比较小,它需要的外接元件也很少,通常只需要一两个旁路电容用来滤除外部输入的噪声和纹波,一些性能优秀的LDO线性稳压器可以达到静态电流6μA,电压降最小也只有100mV,电压降指的是输入电压减去输出电压的值,假如输入是5V,输出是3.3V,那么电压降就是1.7V,一旦输入电压减去输出电压小于==最小电压降==,那么便无法工作,AMS1117-3.3的最小电压降是1.25V。
而DC-DC的意思是(Direct Current)直流到直流,也就是把一个直流电压转换到另一个直流电压,可不只是降压了,还可以升压,讲道理只要符合这个说法的,都可以叫DC-DC转换器,当然也包括LDO。但是更精确的定义时:通过开关方式,把一个直流电压转换到另一个直流电压的器件叫DC-DC,这里的开关方式其实就是通过电感来实现的,像我们经常在一些设备的PCB板上发现这样的电感: 这些都是DC-DC芯片配备的电感,DC-DC芯片相较于LDO,一般支持更宽的输入电压范围,更大的电压降,更大的输出电流,以及灵活的升降压方式,但是DC-DC芯片的输出脉动和开关噪音较大,散热也是个问题,并且价格也不低
所以如果输入电压和输出电压很接近,比如要求输入5V,输出3.3V,那最好是选用LDO稳压器,由于LDO独特的工作效率,在输入电压和输出电压很接近的场合,工作效率很高,输出信号干净,成本也低,所以在一些轻量级设备,mp3,mp4等应用场景使用得很多,但是,如果输入电压和输出电压不是很接近,比如要求输入12V,输出5V这种场景,就要考虑采用开关型的DC-DC了。 到了这一步,彦祖们是不是以为就可以正式去进行DC-DC芯片的选型了?其实还有一个很关键的信息我们还没考虑,==焊接难度!==,毕竟都让贴片厂帮我们焊的话,钱包不支持,所以大部分时候,能自己焊就自己焊,有些彦祖可能会觉得,像这样的PCB板看起来很帅!满满科技风,拿手上都得用双手,一天摸个几十遍。
但是,真要自己去焊,那就可以领略到什么叫做:有一种脑干缺失的美了
就好比以下这种封装的芯片,不知道彦祖们能不能焊上,反正我是抱着赌的心态去操作的。
所以如果自己焊的话,最好多选择一些诸如LQFP,SOP,TSSOP,SOIC这种引脚明显,方便焊接的芯片,诸如QFN,BGA,UQFN等封装,虽说外表简洁,但是焊接起来,烙铁,热风枪轮番上阵的话,难保芯片不会过热损坏,而且调试起来也不方便,所以如果没有特殊要求的话,还是选择前者更方便一些。 说了这么多,现在我们已经获得了12V转5V电路的芯片选型指标了,即:
(I)采用DC-DC降压芯片。 (II)DC-DC芯片的允许输入电压范围至少要大于12V。 (III)DC-DC芯片的允许输出电流范围至少要大于1A。 (IV)采用易于焊接的封装。 (IV)控制成本,且要保证供货稳定(之前项目MCU断供,加班加点换MCU,人麻了)。
依据这些指标,我们可以在立创商城的DC-DC电源芯片一栏,进行参数的选择。
我们在==功能选择==中选择降压型,==输入电压==其实可以不用管他,虽然我们花了不少篇幅去讨论它,相当一部分的DC-DC芯片都支持12V输入,==输出电压==也不用专门设置,因为DC-DC芯片的输出电压是可以通过改变电阻阻值调节,接下来就是==输出通道==选择,一般是一个通道,最后就是==参考封装==,选中的SOT-23-5,SOP8/SOIC8都是易于焊接的封装,那些不易于焊接的封装后期会出一个教程,给大家参考参考。 选完之后,就会有一些适合的型号。 大家可以再根据对成本的要求,或者焊接难度的要求,选一个合适的,这里我使用最多的,就是TPS54202DDCR,封装小巧,价格合适,参数也符合要求,记得下载相应的数据手册,里面有原理图模板,如果初次使用的话,照着参数画就行了。 好的,我们已经通过前面的DC-DC电路,将12V电源降至+5V,那剩下的+3.3V和+1.8V该如何获得?前面说过,当输入电压(VIN)和输出电压(VOUT)差值较小的时候,可以直接使用LDO芯片,对+5V进行降压操作,但是在在这之前,要再回头看一看DC-DC电路,我们之前说过DC-DC芯片的输出脉动和开关噪音较大,如果不经过处理直接输送给一些诸如屏幕,传感器之类的电路,可能会因为噪声或者电压波动而导致电路工作异常,引起欠压或者关机,所以我们通常会在DC-DC电源芯片的输出脚上并联几个几十uF的电容,上图的TPS54202DDCR参考电路也是在输出端并联了两个22uF的电容,这里需要了解到的是,此处的电容负责吸收输出脉动和噪声,让他们扑通一下掉进电容这个大水桶,然后由于水桶比较大,这些水花不会影响到水桶向外流出水流的状态,水桶,也就是电容,就可以稳定地向外输出一个几乎固定的电压。 好!我们现在回过头来看LDO芯片的原理图设计,这里其实我们前面已经讨论过了,这里通常采用AMS1117-3.3,HT7533等5V转3.3V芯片,如果需要获得1.8V的话,AMS1117-1.8也是符合要求的,到了这一步,其实选型就简单许多了,最终的参考原理图如下:
当然,你要是希望效果比较明显,易于观察的话,也可以在各个电压输出端安放一些LED,用来表明输出电压正常,然后也可以放置一些电压测试点,省得用万用表的表笔在芯片的jio jio上戳来戳去。
==(b)+4.755.25V,USB接口/电源适配器==
其实4.755.25V这个奇怪的电压范围就是USB接口的电压范围,之前见过有人直接把USB接口的电源接到STC单片机上,结果STC单片机就好像抽风一样,原因就是USB电压的波动范围超过了STC单片机允许的电压波动范围,让单片机出现了重复开关机的现象。
这一部分的降压电路可以直接照搬上一个内容的+5V转3.3/1.8V电路,莫得问题。
==(c)+3.23.7V,锂电池==
看电压范围我们可以发现,锂电池最高是3.7V,仅仅比3.3V高出了0.4V,就算是以低压差为优势的LDO,在0.4V的压差面前,大部分的LDO都无法使用,况且还要提供5V和12V电压,所以可以采用以下方案
市面上常见的锂电池主要有18650锂电池,聚合物锂电池:
彦祖们应该发现在这两个电池上面都标注了诸如“3.7V”和“650mAh”这样的参数,这两个参数表示的是锂电池在充满电的情况下,输出电压是3.7V左右(实测会有100mV左右的误差),并且可以保持650mA的输出电流一小时,或者保持100mA的输出电流6.5小时,当电池电压下降到3.2V左右时,电池电量接近枯竭,这个时候就该充电了。
所以要根据设备的电流使用情况和续航要求,选择适当的锂电池,这里我们没有特殊要求。
那要如何选择将3.2V3.7V升到+5V的DC-DC芯片呢?其实套数和之前选择12V降至5V的DC-DC芯片一样,在立创的待选框中选择,这里就不多说了,给大家推荐一些我常用的DC-DC升压芯片:
TPS63020DSJR这款芯片唯一的缺点就是焊接起来不太方便,但是价格和性能没得说,另外说一句,立创上的芯片卖的普遍偏贵,这款芯片在某宝上3元/片。
SDB628,这款芯片的输入电压范围很广,输出电压范围最高也达到了28V,所以我们将5V升到12V的DC-DC芯片选择的也是他,并且他易于焊接,价格更美丽,某宝上甚至不到一元就能买到一片,可以适用普通应用场景了。 还有一个很重要的点,DC-DC芯片的输出电压是依靠FB引脚上的参考电压而确立的,通常采用电阻分压的方式获得这个参考电压,所以用于分压的电阻精度至少要达到1%,就别用5%精度的电阻了,因为这样会让输出电压的范围有较大的波动,我们这里可以简单计算一下,一般DC-DC芯片的数据手册会提供一个输出电压计算公式,我们这里以SDB628为例,公式为:
如果要获得+12V的输出,通过计算可以得出R1/R2 = 19,假设R1 = 190KΩ,R2 = 10KΩ,如果R1和R2的精度为5%,也就是说最坏的情况是R1 = 190105% = 199.5KΩ,R2 = 1095% = 9.5KΩ,将这两个值代入公式,得到输出电压是13.2V,别看就差了1.2V,有些设备对电压要求很严格,多0.5V就得现场螺旋升天,所以多花点钱,买高精度电阻,彦祖,你也不想设备螺旋升天吧? 获得12V之后,接下来的3.3V和1.8V就可以利用LDO对5V进行降压,到这里,便获得了12V,5V,3.3V和1.8V,原理图上面也都是有的,彦祖们自己随便拿,我请客,如果还有其他问题,欢迎私信我,一起讨论。
==(d)+3.0V,纽扣电池== 这里就不建议搞什么12V,5V之类的电压,因为纽扣电池的容量实在太感人,但凡是有升压的想法,就是太看得起它了,况且升压降压都是有转换效率的,也就是说,能量会有损耗,大部分时候是发热导致的,所以就纽扣电池那点电量,估计都不够发热的。 所以最好是采用LDO降压至1.8V左右,给低功耗MCU供电还是可以的,本身纽扣电池的应用场景就是低功耗场景,所以除此之外,就别难为他了。
(4)中场总结
到这里GD32F103C8T6串口板的必要硬件电路已经介绍完了,需要相关资料的彦祖直接私信我,剩下的USB转串口,主控,SWD,BOOT,以及各类模块的电路,我们在后续使用时在逐一介绍,不然全在这一章写的话,内容太多(我要回家相亲了),年后开工就继续更新!最后祝大家新年快乐!