当前位置:网站首页>5V串口接3.3V单片机串口怎么搞?
5V串口接3.3V单片机串口怎么搞?
2022-07-07 09:52:00 【嵌入式Linux,】
写在前面:两个单片机由于电平不同,串口通信可能会失败,这时候需要通过电平转换电路来解决,本文给出了两种方法,一种是通过三极管搭建,另一种是MOS管搭建,在硬件工程师的笔试中也经常会出现这样的题目。
3.3V单片机和5V单片机通信的思路
3.3V单片机 | 通信方向 | 5V单片机 |
---|---|---|
发送逻辑1(对应电压3.3V) | → | 接受逻辑1(对应电压5V) |
发送逻辑0(对应电压0V) | → | 接受逻辑0(对应电压0V) |
接受逻辑1(对应电压3.3V) | ← | 发送逻辑1(对应电压5V) |
接受逻辑0(对应电压0V) | ← | 发送逻辑0(对应电压0V) |
MOS管转换电路
工作原理:
1、当3V3单片机发送逻辑1,即3V3_TX=3.3V,Ugs=0V,MOS管截止,5V_RX通过R2上拉到+5V,5V_RX=5V;
2、当3V3单片机发送逻辑0,即3V3_TX=0V,Ugs=3V,MOS管导通,5V_RX会被拉低,5V_RX=0V;
那有人说了,5V的数据怎么发送给3V3单片机呢?是不是将信号方向及电源更换即可,我们来看一下。
工作原理:
1、当5V单片机发送逻辑1,即5V_TX=5V,Ugs=0V,MOS管截止,3V3_RX通过R1上拉到3V3,3V3_RX=3.3V;
2、当5V单片机发送逻辑0,即5V_TX=0V,Ugs=5V,MOS管导通,3V3_RX被拉低,所以3V3_RX=0;
以上分析似乎合情合理,其实如下电路不可用,上面的第2点其实是没有问题的,主要是第1点,当MOS管截止时,5V_TX的5V电压会经过MOS管的体二极管到达3V3_RX,使3V3_RX的电压高于3.3V(4V多,取决于体二极管的导通压降)。这样的话,一方面4V多的电压与3.3V有压差,经过R1电阻会有耗电;另一方面,4V多的电压也可能损坏3.3V单片机的RX管脚。
利用仿真软件仿真,可以看到MOS管截止时,输出是4.44V,明显高于3.3V,验证了上述的观点。
仿真上述不可用电路
那如何设计5V发送到3.3V单片机呢?其实也简单,两个器件搞定,如下是电路图。
1、5V_TX=5V时,二极管D1截止,3V3_RX=3.3V;
2、5V_TX=0V时,二极管D1导通,3V3_RX≈0.6V;实际3V3_RX是多少,取决于D1的正向导通压降,因为要得到更低的电压,一般D1选择肖特基二极管,肖特基优点就是导通压降小。
三极管转换电路
工作原理:
1、当3V3单片机发送逻辑1,即3V3_TX=3.3V,NPN三极管截止,5V_RX通过R2上拉到+5V,5V_RX=5V;
2、当3V3单片机发送逻辑0,即3V3_TX=0V,NPN三极管导通,5V_RX会被拉低,所以5V_RX=0V;
利用三极管,5V单片机发送给3.3V单片机,是不是电源和信号互换就可以,和MOS管电路一样,如下电路同样不能用。
原因是当5V_TX为5V时,发射极反偏,但是5V通过电阻R1由三极管的基极到达三极管的集电极,造成集电极正偏,和MOS管电路一样,使3V3_RX电压高于3.3V(4V多),大家可以仿真一下,这里我就不仿真了。
如下,给出了5V单片机向3.3V单片机发送的电路图,用两个NPN三极管搭建。
工作原理:
1、当5V单片机发送逻辑1,即5V_TX=5V,Q1导通,Q2的基极被拉低,Q2截止,所以3V3_RX=3.3V;
2、当5V单片机发送逻辑0,即5V_TX=0V,Q1截止,Q2导通,所以3V3_RX=0V;
可以看到,我并没有画两个NMOS管搭建5V单片机向3.3V单片机发送的电路,其实将上图中的三极管换成NMOS管,就能实现,在实际的电路设计中,为减少成本,应尽量考虑用较少的器件搭电路,所以一般就用二极管方案。
今天的文章到这里就结束了。。。
哦不,上面的问题并没有结束
我转发这篇文章的原因是晚上和朋友讨论到这个问题,我们还因为这个问题开了个腾讯会议。
如果要连接的是3.3V的单片机串口,我们第一时间应该想到我们也用3.3V的单片机,两个3.3V的单片机供电上肯定是不会有问题的。而现在市面上很多ARM芯片,都是3.3V的GPIO口电压,5V单片机作为初级入门电平,已经慢慢被取代,当然,之后还有1.8V的单片机。
—— The End ——
边栏推荐
- 【全栈计划 —— 编程语言之C#】基础入门知识一文懂
- STM32F1与STM32CubeIDE编程实例-MAX7219驱动8位7段数码管(基于SPI)
- Fleet tutorial 19 introduction to verticaldivider separator component Foundation (tutorial includes source code)
- Programming examples of stm32f1 and stm32subeide -315m super regenerative wireless remote control module drive
- Cmu15445 (fall 2019) project 2 - hash table details
- 相机标定(2): 单目相机标定总结
- Case study of Jinshan API translation function based on retrofit framework
- Complete collection of common error handling in MySQL installation
- SwiftUI Swift 内功之如何在 Swift 中进行自动三角函数计算
- Electron adding SQLite database
猜你喜欢
The database synchronization tool dbsync adds support for mongodb and es
【系统设计】指标监控和告警系统
人大金仓受邀参加《航天七〇六“我与航天电脑有约”全国合作伙伴大会》
Solve the problem that vscode can only open two tabs
聊聊SOC启动(七) uboot启动流程三
In my limited software testing experience, a full-time summary of automation testing experience
Swiftui swift internal skill how to perform automatic trigonometric function calculation in swift
使用MeterSphere让你的测试工作持续高效
18 basic introduction to divider separator component of fleet tutorial (tutorial includes source code)
【全栈计划 —— 编程语言之C#】基础入门知识一文懂
随机推荐
. Net Maui performance improvement
《论文阅读》Neural Approaches to Conversational AI(1)
QT | multiple windows share a prompt box class
Use metersphere to keep your testing work efficient
【问道】编译原理
【滤波跟踪】基于matlab捷联惯导仿真【含Matlab源码 1935期】
La voie du succès de la R & D des entreprises Internet à l’échelle des milliers de personnes
The running kubernetes cluster wants to adjust the network segment address of pod
Electron adding SQLite database
聊聊SOC启动(六)uboot启动流程二
核舟记(一):当“男妈妈”走进现实,生物科技革命能解放女性吗?
正在运行的Kubernetes集群想要调整Pod的网段地址
超标量处理器设计 姚永斌 第8章 指令发射 摘录
Flet教程之 15 GridView 基础入门(教程含源码)
C#中在路径前加@的作用
超标量处理器设计 姚永斌 第9章 指令执行 摘录
Design intelligent weighing system based on Huawei cloud IOT (STM32)
本地navicat连接liunx下的oracle报权限不足
Learning notes | data Xiaobai uses dataease to make a large data screen
R language uses the quantile function to calculate the quantile of the score value (20%, 40%, 60%, 80%), uses the logical operator to encode the corresponding quantile interval (quantile) into the cla