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