
分类
技术干货
把ESP32 C3的ELRS接收机升级到12个PWM通道的一些构想
简介
不使用叠封 Flash,改用外挂 SOP8 Flash,释放 GPIO11、12、13。 复用 USB(GPIO18/19),释放 2 个 IO。 射频模块 BUSY 线可省,释放 1 个 IO。
简介:不使用叠封 Flash,改用外挂 SOP8 Flash,释放 GPIO11、12、13。 复用 USB(GPIO18/19),释放 2 个 IO。 射频模块 BUSY 线可省,释放 1 个 IO。之前我设计并开源的“全是模块”接收机(No-SMD-Riciver)很受无人机圈的玩家欢迎,各路飞友的复刻量接近好几百个(20元ELRS接收机!目前各方面性价比最强,文档最全! - 立创开源硬件平台 (oshwhub.com))。但是有人抱怨通道数不足,只有6通道。我们可以使用以下这套较为复杂的方案,把原先的6通道拓展到12通道。

之前做6通道,是因为使用的是Supermini开发板,它的IO引出量只够做6通道。不过,我们可以使用这个IO全引出的合宙公版ESP32 c3开发板。
首先是Flash闪存的问题,你现在买的SuperMini开发板,焊接的是那种用SIP技术(型号FH4或FN4)叠封Flash的c3芯片,它里边的Flash是由GPIO11供电的,官方文档说是为了能让供电可以通过软件关断。但在航模上,光是电机的功率就是flash芯片的上万倍,完全没必要搞低功耗。所以我们可以把它当做普通IO,而不是给flash供电。
其次在flash数据方面。它的SPI数据线会占用4个IO,这必不可少。但是它还有两根不那么重要的,一个是WP写保护,还有一个HD数据保持。这两个会占用GPIO12和13两个IO,我们可以把它用于输出PWM。
所以说如果你不去使用叠封flash版本的芯片,并且只连四根SPI数据线到芯片,而不是原先的七根,就可以腾出三个IO。但是需要外挂一个SOP8的flash。
关于那个GPIO11,芯片内部的原理图写的很明确,默认属于VDD_SPI电源输出,如果你想把它腾出用作普通IO,需要进行一个较为麻烦的操作:先安装 esptool 工具,再将开发板切换至下载模式,执行指令 espefuse.py -p [串口号] burn_efuse VDD_SPI_AS_GPIO 1 ,输入“BURN”确认即可完成配置,配置后可作为普通 GPIO。
但是现在有一个最大的不确定性,就是我不知道关于SPI闪存驱动的部分是固化在ESP芯片出厂的ROM里面,还是ELRS他们后期去做驱动层的封装的,关于ELRS固件对于那个GPIO 11,12,13调用问题也不清楚内部是什么逻辑,我又看不懂原码。
其次就是USB了,在C3芯片的USB数据线是GPIO18/19,在SuperMini开发板里固定用于那个Type c座子。但实际上你飞机上天之后那个玩意又不插,所以那个东西绝对是应该被引出来做普通信号输出的。但SuperMini不行,我们需要使用合宙公版开发板。这样就腾出来了5个。

还可以再腾出一个,就是把射频模块的BUSY线用来给pwm输出。在之前已经详细讲过射频模块与Esp32之间要连接七根数据线,其中四个spi,一个RST重启,一个DIO中断,一个BUSY占线忙。为什么我们可以省掉BUSY呢?因为在这里,射频芯片主要做接收功能,而不是发送功能,所以他不可能会把数据缓冲区忙到噎死,不用加噎死报警(狗头)。
这样我们就把原来的6通道升级到12通道了。

不过说实话,其实我们根本就没有必要为了这几个IO的问题绞尽脑汁,因为IO可以拓展的,比如用74hc595移位寄存器芯片实现3通道转8通道输出,或者用PY32等5毛钱的便宜MCU做拓展。不过就以ELRS团队那德行,应该不会支持的,之前的E80双频模块事件就是这样。恐怕我们中国玩家开发出来,又得被迫另建分支。






评论