完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
|
|
推挽输出和开漏输出
推挽输出: 输出逻辑0,则N-MOS激活; 输出逻辑1,则P-MOS激活。 开漏输出: 在不接上拉电阻时, 输出逻辑0,则N-MOS激活; 输出逻辑1,P-MOS不会激活, 不会输出高电平。 在接上拉电阻时, 输出逻辑0,则N-MOS激活; 输出逻辑1,P-MOS激活, 可以输出高电平。 也就是说开漏输出如果不接上拉电阻, 没有输出高电平的能力。 如果需要开漏输出有输出高电平的能力需要接一个上拉电阻。 目前很多单片机GPIO可以通过软件配置上拉电阻。 左图为开漏输出(接上拉电阻), 右图为推挽输出 |
|
|
|
开漏输出的作用
防止短路: 在一些情况下(比如总线), 多个GPIO口可能会连接在同一根线上, 存在某个GPIO输出高电平, 另一个GPIO输出低电平的情况。 如果使用推挽输出, 你会发现这个GPIO的VCC和另一个GPIO的GND接在了一起, 也就是短路了(凉凉了)。 如果换成开漏输出呢? VCC和GND多了个电阻, 这样电路就是安全的。所以总线一般会使用开漏输出。 线与: 开漏输出还能实现 线与 (自行百度), 减少一个与门, 简化电路. |
|
|
|
IIC为什么用开漏输出和上拉电阻
IIC协议支持多个主设备与多个从设备在一条总线上, 如果不用开漏输出, 而用推挽输出, 会出现主设备之间短路的情况。 至于为什么需要上拉电阻, 那是因为IIC通信需要输出高电平的能力。 为了实现多个主设备抢占总线时的仲裁.IIC只有两根线(SCL和SDA), 怎么判断哪个主设备占用总线(当然是先来后到了)。 假设主设备A需要启动IIC, 他需要在SCL高电平时, 将SDA由高电平转换为低电平作为启动信号。 主设备A在把SDA拉高后, 它需要再检查一下SDA的电平。 为什么? 因为线与。 如果主设备A拉高SDA时, 已经有其他主设备将SDA拉低了。 由于 1 & 0 = 0 那么主设备A在检查SDA电平时, 会发现不是高电平, 而是低电平。 说明其他主设备抢占总线的时间比它早, 主设备A只能放弃占用总线。 如果是高电平, 则可以占用。 这就是开漏输出在IIC通信中的另一个作用。 SDA是高电平, 说明主设备A可以占用总线, 然后主设备A将SDA拉低, 开始通信。 SDA是低电平, 说明有人已经捷足先登了, 主设备A不能占用总线, 结束通信。 因此, 模拟IIC一定要将GPIO端口设置为开漏输出并加上上拉电阻。(硬件IIC会自动配置为开漏输出)。 |
|
|
|
只有小组成员才能发言,加入小组>>
22622个成员聚集在这个小组
加入小组761 浏览 1 评论
12412 浏览 0 评论
5870 浏览 3 评论
17661 浏览 6 评论
2690 浏览 1 评论
989浏览 1评论
959浏览 1评论
3515浏览 1评论
809浏览 1评论
1339浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 15:25 , Processed in 0.645343 second(s), Total 52, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号