一、前言
今天看到網(wǎng)絡(luò)上一個(gè)短視頻,一位面試官詢問學(xué)生,這個(gè)單片機(jī)電路有什么問題??如何解決?
這個(gè)問題就在于工作在3.3V下的STM32單片機(jī)是無法關(guān)斷 PNP 三極管的,這是因?yàn)樗陌l(fā)射極連接到5V電壓。面試官看到學(xué)生無法回答如何來解決這個(gè)問題,于是給出了解決這個(gè)穩(wěn)妥的答案,那就是將 STM32的端口設(shè)置為 漏極開路模式,這樣就可以關(guān)斷三極管了。
實(shí)際是,這個(gè)問題真正的答案是在三極管的基極增加一個(gè) 4.7k歐姆左右的分壓電阻,才能夠?qū)崿F(xiàn)對(duì)連接到5V的PNP三極管的開關(guān)控制。下面讓我們通過實(shí)驗(yàn)來檢查一下吧。
二、測(cè)試電路
為了測(cè)試IO的開關(guān)電壓特性,將 F103單片機(jī)的四個(gè)端口引至外部實(shí)驗(yàn)面包板。設(shè)計(jì)單面電路板,適合一分鐘制板。
ADTest2024OctoberTeSTSTMIO.PcbDoc
▲ 圖1.2.1 測(cè)試PCB
??一分鐘之后得到測(cè)試電路板,焊接電路,將四個(gè) IO端口連接到測(cè)試面包板上。設(shè)置四個(gè)IO口,分別是 漏極開路、推挽輸出、帶有上拉電阻的輸入端口,帶有下拉電阻的輸入端口。端口的特性,在 CubeMX 中進(jìn)行設(shè)置。下面就可以分別測(cè)試這四個(gè)端口的輸出耐壓了。
三、漏極輸出
測(cè)試漏極開路輸出端口。周期在該端口輸出 0 和 1??梢钥吹皆摱丝诘男盘?hào)波形呈現(xiàn)周期低電平以及浮動(dòng)干擾信號(hào)。在OB輸出1 的時(shí)候,該端口呈現(xiàn)高阻狀態(tài)。下面,測(cè)試一下漏記開路的時(shí)候能夠上拉到多高的電壓。
d:NutdiskMicroVideoG4M1727837766_1920_1080.MP4
▲ 圖1.3.1 OD輸出端口的波形
??使用一個(gè) 10k歐姆電阻,將 漏極開路的 IO 連接到 5V。此時(shí),該端口的電壓為 3.7V。通過內(nèi)部結(jié)構(gòu)可以看到,在端口有鉗位二極管,將輸入端口電壓鉗位的工作電壓。只有某些5V容忍端口,鉗位二極管上拉到 更高的 電壓,此時(shí)輸入電壓才能夠達(dá)到5V。不過現(xiàn)在 F103 單片機(jī)的這個(gè)端口只能上拉到 3.3V。
在F103數(shù)據(jù)手冊(cè)中,關(guān)于GPIO的 5V 容忍性 說明中,只有輸入端口才能夠容忍5V輸入。一旦端口設(shè)置為輸出狀態(tài),該端口就不再允許電壓達(dá)到5V了。下面我們測(cè)量一下輸入端口是否允許電壓超過5V。
四、輸入端口
將10k歐姆的電阻修改在輸入端口,仍然上拉到5V,該端口電壓還是被鉗位在 3.7V。由此可見,該輸入端口也不是5V容忍的端口。下面查看一下 STM32的數(shù)據(jù)手冊(cè),確認(rèn)該端口是否為 5V容忍的。
在STMF103數(shù)據(jù)手冊(cè)中,現(xiàn)在實(shí)驗(yàn)所使用的PB12到PB15端口 都是5V容忍的。這就奇怪了,為什么上拉電阻達(dá)到 5V,該端口的電壓無法上升的5V呢。無論是輸入端口還是 漏極開路端口。
五、驅(qū)動(dòng)LED
將一個(gè)紅色 LED 串聯(lián)330 歐姆電阻,上拉到 5V,連接到單片機(jī)的輸出端口。可以發(fā)現(xiàn) 無論是 漏極開了 ,還是推挽輸出,LED都可以正常閃爍。這有可能是因?yàn)?LED的 開啟電壓超過 1.3V,所以,3.3V工作的單片機(jī)可以關(guān)斷這個(gè)連接到5V電壓的LED。
▲ 圖1.5.1 驅(qū)動(dòng)上拉5V的LED
??上面是測(cè)試了直接驅(qū)動(dòng)上拉到5V的LED的情況。下面,再測(cè)試一下使用 PNP三極管驅(qū)動(dòng)LED的情況??词欠衲軌?qū)?PNP三極管進(jìn)行關(guān)斷。
使用 8550 這顆 PNP 三極管搭建電路,可以看到,LED 并沒有閃爍。這說明,使用 3.3V 的單片機(jī),驅(qū)動(dòng) PNP 三極管,是無法將三極管關(guān)斷的。
下面給電路增加一個(gè)基極分壓電阻。這個(gè)電阻為 4.7k歐姆,這樣在剩余的電壓中,分壓到三極管基極只有 0.43V。就不足以將PNP三極管打開了。測(cè)試一下這種情況。可以看到,此時(shí)LED開始閃爍。這說明只要增加一個(gè)基極分壓電阻,便可以控制PNP三極管的打開與關(guān)斷了。
※ 總??結(jié) ※
本文測(cè)試了 3.3V工作的單片機(jī) 控制5V負(fù)載的情況。單片機(jī)IO口可以直接控制連接到5V的LED的打開與關(guān)斷,如果控制PNP三極管,通過增加基極分壓電阻,也可以實(shí)現(xiàn)PNP三極管的打開與關(guān)斷。