SPI 接口OLED 使用5V 信号驱动可能需要电平转换

这类OLED 模块一般都用I2C 驱动,此时信号电平用5V 好像也没什么问题,但是SPI 接口的OLED 使用5V 信号电平时可能完全不工作。

模块电路

以这种SPI 接口模块举例:

在这里插入图片描述

一般是叫做4 线SPI 接口,再加上VCCGND 和复位信号,一共就是7 针,如果模块内置了RC 延时电路,复位信号可以不接。其中,SPI 标准的三根线里只用了SCLK(SCK)MOSI(SDA),因为OLED 芯片不支持读取数据,只能向它输出,MISO 不接。在标准的SPI 接口以外,OLED 芯片增加了一个DCX 或者DC 信号,用来在SPI 传送数据时选择传送的是数据还是指令,和1602 屏幕的RS 信号是一个功能。再加上片选信号CS,就是所谓的4 线SPI。

模块的电路原理图差不多是这样:

在这里插入图片描述

可以看到四根SPI 数据线是直连到芯片上的,而无论是SSD1306 芯片的数据手册还是模块的手册里都没提这些数据引脚有没有5V 耐受能力。手册里提到的只是常规的输入电压不超过供电电压,而供电电压是3.3V,所以按理说应该是没有5V 耐受能力的,如果有的话,比如nrf24 芯片,它的手册里会直接写出来,毕竟也是个功能。

使用5V 电平驱动的问题

供电电压是3.3V 就不用提了。使用5V 电平的I2C 驱动时没什么问题,因为I2C 是开漏驱动,上拉能力弱,类似这样:

在这里插入图片描述

下拉的能力比较强,上拉的时候5V 经过4.7k 上拉电阻,电流稍微大一点就会被拉低,所以到模块这边电压会降低。而SPI 接口就不一样了,如果是用单片机的硬件SPI 接口,信号输出引脚的模式可能是推挽输出,高电平输出能力强,直连芯片的结果就是把5V 直接送到OLED 芯片引脚上。实测的结果是Arduino 用5V SPI 驱动OLED 模块时,模块的3.3V 电源轨升高到了接近3.9V,屏幕也没反应,显然是引脚上的5V 信号电平倒灌到电源了,原理如下图:

在这里插入图片描述

很多芯片有类似这种结构的引脚保护电路,当引脚输入电压高于电源电压时,上侧的二极管导通钳位,所以5V 输入会经过一个二极管和3.3V 电源接通。由于电源电压过高,屏幕不能工作,实测的结果是OLED 模块的电荷泵好像出了问题,电容上没有升压。当然这种情况下OLED 芯片出什么问题都很正常,好在并没有烧了。

电平转换

情况就是这么个情况,这几个信号引脚必须做一下电平转换,也很简单,因为是纯输出的信号,直接用电阻分压就够了,为了简化电路,我用的是两个排阻,刚好四根线:

在这里插入图片描述

RN2 上输入5V 信号时,RN1 的输出电压是3.333…V。因为分压要用两个排阻,比较麻烦,也可以不用电阻分压,去掉RN1,直接SPI 引脚上串联限流电阻,限制它的驱动能力,阻值合适的话应该也凑合能用。

另外做了个大号排阻在面板上试了一下,没有问题。

在这里插入图片描述

除了硬件方案,也可以来软的。考虑一下I2C 驱动没问题的原因,就是单片机硬件SPI 接口强制使用推挽输出模式,驱动能力太强了。所以可以用软件SPI,接口模式设置为弱上拉,或者随便什么上拉驱动能力很弱的模式,这样一来5V 信号输出到OLED 芯片时被拉低,对3.3V 电源轨影响不大,OLED 模块能正常工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值