目录
我使用了市面上一些现成封装的ESP32-C3开发板,但感觉不是很满意,所以决定自己画一个开发板。 当然原理图还是参考了乐鑫的官方文档《ESP32-C3系列芯片硬件设计指南》,但外围部分还是根据自己的需求放置了一些可能的模块、芯片或者传感器。
我之前用的AD有版权问题,而且不是免费软件,所以我选择了Easy EDA。 这也是我第一次使用Easy EDA进行设计,所以记录一下。
1. EDA基本操作 1.1 放置元件
打开Easy 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 原理图设计 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 复位
CHIP_EN 引脚可用于复位 ESP32-C3 系列芯片。 当 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 用于连接传感器。
图中可以看到使用了IO GPIO9。 这是因为该引脚与 ESP32-C3 的启动模式有关。 启动方式稍后会单独说明。
图中使用的RTS和DTR下载电路的对应关系如下(对于RESET我们给了上拉电阻,IO9内部有上拉电阻):
DTRRTS–>RESETIO9
–>
–>
–>
–>
官方文档还指出:
2.8 ESP32-C3 启动方式
为什么提到启动模式并标记为红色? 这对于绘画来说至关重要。 系统启动模式在官方《ESP32C3技术参考手册》中有介绍。 复位释放后,GPIO2、GPIO8、GPIO9共同控制Boot模式:
这三个引脚称为Strapping 引脚,其中GPIO9 默认连接内部上拉电阻。 如果需要更改 Strapping 引脚的默认值,用户可以使用外部下拉/上拉电阻,或者在上电复位期间使用主机 MCU 的 GPIO 来控制 ESP32-C3 Strapping 引脚电平。 复位解除后,捆扎销与普通销具有相同的功能。
简单说明后,我们要分别处理GPIO2、GPIO8、GPIO9。
GPIO9的直接电平与启动模式直接相关,因此在GPIO9上连接一个按钮。 默认为高电平。 需要时,按下按钮即可变低电平:
虽然GPIO2和GPIO8在很多开发板上并没有单独处理,也用于普通IO,但我这里没有使用它们,直接给它们加了上拉电阻:
2.9 ESP32-C3 外围部分
除了上面最小系统必须使用的引脚之外,我们接下来的外设还需要使用其他IO口。 那么如何选择合适的IO口呢? 我们首先要了解ESP32-C3的所有IO口功能。 首先标记我们使用过的IO端口和我们不打算使用的IO端口:
不看你不知道,但是看到了你一定会震惊,为什么只剩下4个IO口了……= =! (后续的用法并不像上面文字描述的那样,也不想回去再做一张图,因为有些GPIO还是得用,不然前面的想法还不够)
因此,在下面的外围部分的设计中,采用了跳线端子连接,以方便需要时用于其他功能。
我们先从简单的分配开始,看一下可用于ADC采样的引脚:
在ADC采样部分,我们仅使用GPIO0和ADC1采样进行测试。
2.9.1 ADC 采样
简单,光敏电阻,GPIO0,ADC1,通道0:
2.9.2 脉宽调制LED
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学习测试(5.RMT应用-SK6812全彩RGB LED灯驱动测试)
当然SK6812可以用PWM实现调光吗? 当然可以,你自己研究一下驱动就可以了。 对于初学者来说可能很难实现,等你熟悉了之后我再解释。
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 系列具有 3 个 SPI(SPI0、SPI1 和 SPI2)。 SPI0 和 SPI1 只能配置为 SPI 存储器模式,而 SPI2 可以配置为
可以配置成SPI内存模式,也可以配置成通用SPI模式。
但官方资料中有这样一段话:
所以即使我们使用带有内部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
按钮:GPIO7
LED:GPIO1
(后来设计的时候看到一个位置,加了一个电源指示灯。)
2.9.8 剩余IO
我一开始以为IO还剩下多少==! 我们现在好像已经没有剩下的IO了,但是我还是选择了一些引脚用排针来测试,比如:
虽然有些地方使用了排针,但这些IO还是单独引出:
2.10 完成原理图
这是我第一次使用立创。 我不太关注原理图的布局,但还是不得不赞叹操作确实简单。 这是一张完整的图片:
3. PCB设计
虽然嘉里创现在画4层板的原型比较便宜,但我想这次还是打算画双层板。 原因是:
如果我画双层板时出现信号问题(大多数情况都是这个问题),那么我可以根据测试进行修改;
如果我画四层板的时候没有问题,不保证以后画双层板的时候也没有问题,因为四层板的成本还是太高了。普通应用程序;
3.1 总体布局
我会尽力逐部分解释PCB设计。 原理图生成PCB后,首先要考虑的是各部分的总体布局。 我只是移动了一些部分,总体布局是:
后期布线时需要调整板子的尺寸、长度和宽度。 现在的板子是88mm * 73mm,太不合适了(不合适的原因是它至少必须是整数= =!)
我们简单介绍一下布局。 ESP32-C3 需要连接天线。 天线部分尽量不要有元件,也尽量不要覆铜,所以选择边角比较合适。 右边的U6也是无线射频芯片,需要天线。 同时,因此应放置在边缘和拐角处。
电源入口处的两个USB口必须并排在一端,因为两个射频芯片决定了位置,在上端,所以USB放在下面,因为两个USB都需要与ESP32连接通信-C3,所以自然选择更近的 ESP32-C3 的位置在左边,所以 USB 就放在左下角,三个按钮自然就在右下角(虽然按钮也需要连接ESP32-C3,按键的高低信号是相对于USB信号的,优先级一定要低)。
纠结了一段时间,看了几行,发现不对劲。 主要原因是ESP32-C3的IO口和USB口布局如上。 他们相距太远了。 双层板上过孔太多,USB通讯线不太好。 完美,改变布局:
3.2 芯片外围设备
先画出芯片附近的天线、晶振和Flash:
3.3 USB接口
然后画出与芯片通信的USB接口:
整个板子由USB口供电,供电部分通过D2和D3出来。 目前它处于该位置;
CP2102部分还需要3.3V电源;
芯片还有GPIO9和RESET引脚需要连接CP2102上的两个晶体管。
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测试板就完成了。
4. PCB获取 4.1 PCB实物图
贴片本身贴了一部分,然后自己焊接了一部分。 快速浏览一下:
4.2 初步测试结果
一键点亮,板子没有问题,我简单测试了几个功能:
1、LED测试正常,串口下载正常。 后续测试将逐步搭建开发环境;
2.USB无法下载,Arduino下无法设置==!
查资料发现,目前只有esp-idf master版本支持USB下载方式。
并且需要软件配置。 默认情况下,使用串口下载。 后面我会搭建开发环境,使用ESP-IDF进行开发。
3.WIFI测试正常
测试流程如下:
检测结果:
注意! wifi结果正常,但我修改了一处。 我最初设计的时候,我为天线π型网络部分预留的匹配电容是20pF,是焊接上去的,但实际上我没有计算匹配值,无法确定大小或是否需要。 。 我无法焊接它。 我一开始无法连接。 然后我想起我已经焊接了匹配的电容器。 去掉后就正常了。
4.蓝牙测试正常
对于蓝牙测试,我找到了一个扫描 iBeacon 的程序:
测试结果如下。 确实可以正常扫描周围环境中的iBeacon设备:
测试图: