开源一夏 | 自己画一块 ESP32-C3 的开发板(PCB 到手)
使用了一些市面上现成的封装好的 ESP32-C3 的开发板,感觉不是很满意,所以自己决定自己画一个开发板。原理图当然还是参考乐鑫的官方文件《ESP32-C3 系列芯片硬件设计指南》,但是外设部分还是根据自己的需求对应的放置了一些可能使用的模块,芯片,或者传感器。
以前使用的 AD 有版权问题,不是免费软件,所以选择了立创 EDA,这也是第一次使用立创 EDA 来设计,记录一下。
一、立创 EDA 基本操作
1.1 放置元器件
打开立创 EDA 登录账号,在原理图右键放置元件:
输入自己想要的元器件的型号,双击选中就好,:
或者通过左边基础库栏目直接放置,然后修改参数:
选型
这里选用的是 ESP32-C3,我计划使用的是下面那款带内置 Flash 的,封装是一样的:
1.2 自己画库
点击文件—— 新建 —— 原理图模块绘制原理图:
1.3 导入库
上面的步骤折腾了一会,现在重新在不熟悉的工具下画原理图库和封装库,简直是浪费时间,还好发现可以导入库,所以使用了以前的工程导入。但是需要注意的是,导入 Altium Designer 的原理图和 PCB 文件,需要将文件保存为 ASCII 格式 的原理图和 PCB 文件,这个没有截图,盗版的 Altium Designer 我已经不使用了! 原理图和 PCB 都可以选择另存为 ASCII 格式,然后导入的时候按照如下步骤:
可以选择只导入文件,只提取库,我选了最后一个选项看了下:
最后成功导入,因为导入的本来就是同一个工程文件下的原理图和 PCB,所以导入的库也能够自动关联,我需要的无线模块如下:
1.4 原理图转 PCB
1.5 PCB 设计部分说明
最小间隔:
切换层:小键盘 + / -
二、原理图设计
2.1 电源
ESP32-C3 系列芯片的管脚 11 和管脚 17 分别为 RTC IO 输入电源管脚和 CPU IO 输入电源管脚,工作电压范围为 3.0 V ~ 3.6 V。ESP32-C3 系列芯片的管脚 2、管脚 3、管脚 31 和管脚 32 为模拟电源管脚,工作电压范围为 3.0 V ~ 3.6 V。
2.2 复位
ESP32-C3 系列芯片的复位可使用 CHIP_EN 管脚。当 CHIP_EN 为低电平时复位。
2.3 外部晶振
ESP32-C3 系列芯片固件仅支持 40 MHz 晶振。
2.4 天线
其实天线部分是一个核心部分,需要认真对待,但是这个测试板我目的是为了把 ESP32-C3 当成替代 STM32 的一种方案,所以天线部分并没有针对性的去计算,预留了 π 型网络,使用 IPEX 接口:
2.5 USB
USB 使用 Type-C 接口,毕竟可预见的未来都是 Type-C:
2.6 电源入口
2.7 下载串口
U0TXD 线上需串联 499 Ω 电阻用于抑制 80 MHz 谐波。USB 转串口芯片,期初是准备用便宜的 CH340C,奈何缺货,因为只是测试样板,后来还是选用了 CP2102,虽然贵一些,但是在立创贴片居然是基础库,那么这就特别香了!
上图我串口 0 用了一个跳线帽,因为 ESP32-C3 只有 2 个串口,我一个串口用来连接我的一个无线模块,一个串口可能留给传感器,所以这里最终可能使用 USB 下载,然后串口 0 连接传感器使用。
图中可以看到使用到了 GPIO9 这个 IO,这是因为这个引脚和 ESP32-C3 的启动模式有关系,后面会单独讲解一下启动模式。
图中使用的 RTS 和 DTR 下载电路对应关系如下(RESET 我们给了上拉电阻,IO9 内部有上拉电阻):
官方文档也有说明:
2.8 ESP32-C3 的启动模式
为什么要提启动模式,而且标红,这个和画图至关重要,在官方《ESP32C3 技术参考手册》中关于系统启动模式有介绍,复位释放后,GPIO2、GPIO8 和 GPIO9 共同控制 Boot 模式:
这 3 个引脚称为 Strapping 管脚,其中 GPIO9 默认连接内部上拉电阻,如需改变 Strapping 管脚的默认值,用户可以应用外部下拉/上拉电阻,或者应用主机 MCU 的 GPIO 来控制 ESP32-C3 上电复位时的 Strapping 管脚电平。复位释放后,Strapping 管脚和普通管脚功能相同。
简单说明了一下,那么我们对于 GPIO2、GPIO8、GPIO9 就得单独处理一下了
GPIO9 直接的电平高低直接关系到启动模式,所以给 GPIO9 接一个按钮,默认高电平,需要的时候按下按钮变成低电平:
GPIO2,GPIO8 虽然很多开发板上都没有单独处理,而且也会将其用于普通 IO,我这里不使用,直接给一个上拉电阻:
2.9 ESP32-C3 外设部分
除了上面最小系统必须使用的引脚,我们接下来的外设需要使用其他的 IO 口,那么如何选择合适的 IO 口呢,这就得先了解一下 ESP32-C3 的所有的 IO 口功能了,先把我们所使用过的和不准备用的 IO 口标注出来:
不看不知道,一看吓一跳,怎么只剩下 4 个 IO 口了……= =!(后面的使用情况并没有按照上图文字所描述,不愿意再回头去做一次图了,因为有些 GPIO 还是得用起来,要不然以前那种想法完全不够)
所以在下面外设部分的设计中,使用了跳线端子连接,方便在需要的时候用于其他功能
先从简单的开始分配,看一下 ADC 采样能够使用的引脚:
在 ADC 采样部分,我们只用 GPIO0,使用 ADC1 采样做测试。
2.9.1 ADC 采样
简单点,光敏电阻,GPIO0,ADC1,通道 0:
2.9.2 PWMLED
LED PWM 可以使用任意 GPIO 管脚,六路独立 PWM 通道,如果按照上面的计划,最后只剩下 4 个能用,没法玩,所以这里还是参考官方的开发板,PWMLED 使用了 GPIO8:
说明(2022/1/18):当初这里的原理图说的是 PWM LED,使用的是 SK6812,其实此部分是有问题的
首先,在 SK6812 说明文档中,那么需要使用 5V 供电是比较标准的,手册中的参数:
其实际测试下来,3.3V 直接供电,不带限流电阻,发现是可以正常运行的,但是建议还是使用 5V 带限流电阻来使用:
再次,学习测试 ESP32-C3 过程中,发现在 ESP32-C3 的示例中 SK6812 的调光并不是用 PWM 来实现的,而是使用了 ESP32-C3 内部的 RMT <font color=#0033FF>红外遥控 (RMT)</font> 来实现。
测试拍了几张图片:
具体请参考博文:ESP32-C3 学习测试(五、RMT应用 — SK6812全彩RGB LED灯驱动测试)
当然,PWM 能不能实现 SK6812 调光呢?当然是可以的,只是需要自己研究下驱动,对于初学者来说,实现起来可能会比较困难,所以还是等到熟悉了以后再来说明。
2.9.3 串口外设 1- U1 连接无线模块
是自己需要用到一个 868 的无线射频模块,Enocean 模块,使用第二个串口,这里需要用 2 个 IO 口,下面的 I2C 还需要用 2 个 IO 口,真的是不太方便……,所以最后还是需要使用不准备用的几个 IO 口。
这里使用 GPIO4、GPIO5 作为与 Enocean 模块通讯的串口,但是考虑到引脚的复用,使用了跳线帽,防止后期需要用于其他功能,方便飞线:
2.9.4 串口外设 2- U0 连接传感器
串口通讯的传感器模块我开始已经想好了,使用的是下载串口 U0TXD,预留了跳线帽,这个后期测试的时候用传感器飞线测试,这里就不把传感器画上去了。
2.9.5 SPI 外设
我计划选用的型号是内置 Flash 的,所以上面设计中并没有按照官方手册放置片外 Flash,但是这里我把 SPI Flash 当做一个外设,来测试 ESP32-C3 的 SPI 的应用。这个 Flash 和 保存代码的 Flash 是不一样的,计划使用 SPI2。
ESP32-C3 系列共有三个 SPI(SPI0、SPI1 和 SPI2)。SPI0 和 SPI1 只可以配置成 SPI 存储器模式,SPI2 既可以配置成 SPI 存储器模式又可以配置成通用 SPI 模式。
SPI 存储器 (SPI Memory) 模式 SPI 存储器模式(SPI0,SPI1 和 SPI2)用于连接 SPI 接口的外部存储器。SPI 存储器模式下数据传输长度以字节为单位,最高支持四线 STR 读写操作。时钟频率可配置,STR 模式下支持的最高时钟频率为 120MHz。
SPI2 通用 SPI (GP-SPI) 模式 SPI2 作为通用 SPI 时,既可以配置成主机模式,又可以配置成从机模式。主机模式和从机模式均支持双线全双工和单线、双线或四线半双工通信。通用 SPI 的主机时钟频率可配置;数据传输长度以字节为单位;时钟极性 (CPOL) 和相位 (CPHA) 可配置;可连接 GDMA 通道。
但是官方资料中有这么一段:
所以即便我们使用内部带 Flash 的芯片,这些 IO 也和内部的 Flash 连接上了,不建议用于其他功能
说了一大堆,这样子 SPI 还用不了了,SPI 设备通讯一般至少需要 4 根线,SCLK, MOSI,MISO,CS,这 4 根线一用,没位置了(因为不熟悉复用功能,而且对 ESP32-C3 使用也是不熟悉,在不熟悉的前提下,设计以保险稳定为主,不要一味的贪图功能多,在后期熟悉芯片以后,可以针对性的复用引脚)。
这里我们的 SPI 外设部分就不占用其他引脚放了,但是我们把 SPI Flash 设计上去,到时候不焊接就可以:
2.9.6 I2C 外设
用常用的 HTU21D 温室度传感器,ESP32-C3 的 I2C 任意 GPIO 管脚 一个 I2C 通道,支持主机或从机模式,我这里选用 GPIO3 和 GPIO10:
2.9.7 用户按钮和 LED
按钮:GPIO7LED:GPIO1(后来设计的时候看到有位置,加了一个电源指示灯。)
2.9.8 剩余 IO
当初还以为有多少剩余 IO = =! 我们现在看来没有剩余的 IO,但是我还是选用了一些引脚用排针引出来测试,比如:
根据 GPIO2、GPIO8、GPIO9 观察复位后进入的不同模式。
USB 口启动后用于其他功能以后会怎样?
串口 0 先下载以后,再用作其他功能是否可以?
SPI Flash 使用的引脚想了想,还是不要动了,这几个引脚以后就不用!
GPIO4、GPIO5、GPIO6、GPIO7 调试接口能不能用起来?
虽然有些地方用了排针,这些个 IO 还是单独再引出一遍:
2.10 完成原理图
第一次使用立创,没有太讲究原理图的布局分块,但是还是得夸一下,操作确实挺简单的,放一张全图:
三、PCB 设计
虽然嘉立创现在 4 层板打样也便宜,但是我这次觉得还是计划画双层板子。理由就是:如果我画双层板子有信号问题(大多情况下是这种问题),那么我可以根据测试修改;如果我画 4 层板子没有问题,不能保证以后应用画双层板没有问题,因为普通应用,四层板成本还是太高了;
3.1 整体布局
PCB 设计部分我尽量一部分一部分说明,原理图生成 PCB 以后,第一得考虑的就是各个部分的大概布局了,我简单移动了几个部分,大概的布局:
板子的大小长宽根据后期布线的时候需要调整,现在板子 88mm * 73mm,太不合适了(不合适的原因就是至少要个整数吧= =!)
整理布局简单介绍一下,ESP32-C3 需要接天线,天线部分尽量不能有元器件,铜皮也尽量不要覆盖,所以选择边缘角落是比较合适的,右边的 U6 也是无线射频芯片,需要有天线,同理所以也是放边缘角落。
电源入口两个 USB 口肯定是并排防止在一端,因为两个射频芯片确定了位置,在上端,所以 USB 放在下面,因为两个 USB 都是需要和 ESP32-C3 连接通讯的,所以自然选择靠近 ESP32-C3 的位置,那就是左边,所以 USB 放在了左下角,然后 3 个按钮自然在右下角了(虽然按钮也是需要和 ESP32-C3 连接的,但是按钮的高低先平信号相对 USB 的信号,优先级肯定更低了)。
折腾了一会,看了几根线,发现有点问题,主要是看 ESP32-C3 的 IO 口和 USB 口上面那样布局,太远了了,而且双层板过孔太多,USB 通讯线路不太完美,换了一个布局:
3.2 芯片外围
先把芯片附近的天线,晶振,Flash 画好:
3.3 USB 接口
然后和芯片通讯的 USB 接口画好:整个板子是 USB 口供电的,供电部分通过 D2、D3 出来,目前暂时放在那个位置;CP2102 部分还有一个 3.3V 的电源需要过来;还有芯片的 GPIO9 和 RESET 引脚需要和 CP2102 上边的 2 个三极管链接。
3.4 电源和按钮
画完 USB,把按钮和电源入口画一下,3.3V 电源出口部分电路后期会根据走线的情况做调整:
3.5 剩余元件再次布局
完成上述步骤以后,余下的东西不太多了,可以相关的元器件一块一块的摆放,再次进行整体的布局:
3.6 完成布线
折腾了有一阵子,布线基本完成,除了 GND 还没有处理(铺铜打孔):
3.7 细节处理收尾
接下来的步骤就不一步一步贴图说明了,收尾根据自己的习惯完成下列各个步骤
1、元器件丝印摆放好;2、禁止铺铜区域设置好;3、需要开孔区域设置好;4、丝印添加;5、PCB 边框处理;6、铺铜;7、根据铺铜情况添加地孔;8、添加地孔;9、加泪滴;10、检查 DRC,修改错误;
最后完成效果图:
3.8 3D 效果图
最后完成的 3D 效果图,立创本身的元器件都有 3D 封装,有些元器件自己后来修改的没有 3D 效果:可以看到左边还算是比较充实,右边有点空洞,感觉还能再塞一两个模块;左下角 TX0 和 RX0 排针很扎心,因为排针太靠近天线会影响天线性能,排针本身就相当于小天线;背面没有放置元器件,能放在一面绝不放两面;放了个博客二维码,好像扫不出来啊= =!;
简单看看:
最后检查一遍,然后发出制板,后续等板子到手更新实物图。
至此,自己画的 ESP32-C3 测试板子全部完成。
四、PCB 到手
4.1 PCB 实物图
贴片本身贴好了一部分,然后自己焊接了一部分,简单看看:
4.2 初步测试结果
一键点亮,板子没有问题,简单测试了几个功能:
1、LED 测试正常,串口下载正常,后续的测试会搭建好开发环境一步一步来;
2、USB 下载不了,在 Arduino 下不会设置 = =!
查看资料才知道目前只在 esp-idf master 版本上支持 USB 下载方式。而且需要软件配置,默认都是使用串口下载,后面我会把开发环境搭建好,使用 ESP-IDF 开发。
3、WIFI 测试正常
测试程序如下:
测试结果:
4、蓝牙测试正常
蓝牙测试找了一个扫描 iBeacon 的程序:
测试结果如下,确实能够正常扫描到周边环境的 iBeacon 设备:
测试图:
版权声明: 本文为 InfoQ 作者【矜辰所致】的原创文章。
原文链接:【http://xie.infoq.cn/article/30387388381a0d915b2494f91】。文章转载请联系作者。
评论