【Day7】:GPIO输入输出(下)

昨天讲完了基本的输入输出模式,而事实上输出有分成两种,开漏输出与推挽输出,我们来实际看一下这两种模式的区别吧。

认识电晶体

电晶体很像水关中的阀门,平时处於关闭状态,施加微小的力,就可以启动阀门,使大量的水流通过。
https://ithelp.ithome.com.tw/upload/images/20210911/20141525fGBZQe6kLS.jpg
例如:控制马达时,我们不可以用GPIO脚直接供给马达,因为单晶片是无法通过那麽大的电流,因此我们可以用电晶体的方式,只要提供微小的电流来控制阀门,就可以让这个水阀通过大电流,使马达转动。

电晶体有三只接脚,分别为B(基极)、C(集极)、E(射极),另外电晶体又分成NPN与PNP。对於N型半导体来说,当B极输入高电位时,C、E两极导通,而P型则相反。

对於数位电路来说,电晶体我们当作开关来使用,也就是导通与不导通,暂且不讨论使用小电流驱动大电流的这种方式。

推挽输出&开漏输出

实际上的推挽输出与开漏输出是使用MOS场效电晶体来设计,下图是其等效电路。
https://ithelp.ithome.com.tw/upload/images/20210911/20141525IOKRnns5ss.jpg
当输出高电位时,上方电晶体导通,下方不导通,此脚位对外输出高电位;当输入低电位时,上方不导通,下方导通,脚位对外输出低店位。两个电晶体轮流导通,一个负责灌电流一个复杂拉电流。在STM32推挽输出模式下低电位为0V,高电位为3.3V。
而在开漏输出模式时,上方的电晶体完全不工作。如果输出为0,则下方电晶体导通,脚位被下拉到0V;若控制输出为高电位时,两个电晶体都关闭,因此脚位不是高电位也不是低电位,为浮动的。因此这种模式下并没有办法输出高电位,需要自己将脚位上拉。
一般在使用时我们都是使用推挽输出,那开漏输出既然没有办法真正的输出高电位,有什麽好处呢?
由於开漏输出的高电位是使用外部上拉的方式,因此你可以上拉至任何你想要的电压,以符合需求,例如某些晶片需要输入5V,但STM预设的输出都是3.3V,此时你就可以使用开漏输出,将脚位上拉至5V。

设定

实际使用时,可以先将脚位设成GPIO输出,接着在左侧System core底下的GPIO选择刚刚配置的脚位,底下可以做设定,GPIO mode设为Output Open Drain开漏模式。使用时记得要外部上拉,否则这个脚位是没办法输出高电位的喔!可以做个小实验,设成开漏模式时,用电表去测量脚位输出的变化,当程序输出高电位时,去测量脚位,应当量到0.xxV,而不是3.3V,此时脚位是浮动的。
https://ithelp.ithome.com.tw/upload/images/20210912/20141525t9bwCwHpti.jpg

小结

迄今为止,我们已经可以对脚位做最一般的输出输入。而事实上,利用这些功能搭配上L298N我们就可以控制步进马达了呢!有兴趣的可以试试看,不过我们还是等到之後学到了PWM的输出再来用A4988控制会比较容易一些。


<<:  事件处理(Day7)

>>:  D-9. Rails API-Only 实作 && House Robber

android studio 30天学习笔记-day 10-rxjava2+retrofit

前言 retrofit负责请求网路资料请求,rxjava负责异步执行、thread之间的切换,今天实...

[DAY 18] _UART传输

这是算是大家最常见串列通讯,他原理较简单方便,现在韧体工程师在除错或为简单验证资料,大家知道TX、R...

帮 Line Bot 加上身份验证(3)

昨天将产出的验证码写进了 Google Sheet,但我们还需要另一个功能:输入验证码找出所在Row...

找LeetCode上简单的题目来撑过30天啦(DAY24)

好像有台风要来,天气变得有点冷 题号:24 标题:Swap Nodes in Pairs 难度:Me...

资视就是力量 - Highcharts / 尾声

终於,花了一个月的时间,我们从零开始认识 Highcharts 到现在已经能够配合 Vue.js 一...