單片機IO口不夠,我想用一個IO口既實現(xiàn)輸入功能又實輸出功能,但是出問題了

最近設(shè)計一個產(chǎn)品,由于功能比較多,所用的單片機的IO已經(jīng)用完,但是還有一個功能需要用到一個IO口控制。

這個功能是這樣的,檢測到充電時,就關(guān)掉電池的供電,而充電IC有一個充電檢測腳,則好用了單片機最后的一個IO腳。單片機IO不夠,如果這個功能一定要有的,省不掉,那豈不是要更換單片機,換成IO口比較多的單片機。但是換單片機成本又要增加了,老板那邊不是很樂意。

在這左右為難的時候,我突然冒出了一個想法,能不能用一個IO口既可以實現(xiàn)輸入功能,又可以實現(xiàn)輸出功能。我琢磨了一下,好像可以用充電IC那個充電檢測IO去實現(xiàn)這個想法。因為充電IC那個充電檢測腳是開漏輸出的,我打算讓這個充電檢測腳經(jīng)過一個電阻連接到單片機的IO上,再經(jīng)過一個電阻連接到一個控制電池電源的MOS管的一個三極管的基極上,如下圖所示。

單片機IO口不夠,我想用一個IO口既實現(xiàn)輸入功能又實輸出功能,但是出問題了的圖1
?
單片機IO口不夠,我想用一個IO口既實現(xiàn)輸入功能又實輸出功能,但是出問題了的圖2
?

工作原理計劃是這樣的,單片機的IO(PB9)設(shè)置成輸入模式,并且設(shè)置成上拉。當(dāng)沒有充電時,充電IC的充電檢測腳輸出高電平,三極管Q21導(dǎo)通,MOS管Q20導(dǎo)通,電池電源供電。當(dāng)充電時,充電IC的充電檢測腳輸出低電平,IO(PB9)檢測到低電平,認(rèn)為設(shè)備進入了充電狀態(tài),就開始做一些充電時的相關(guān)操作,并且這時Q21截止,MOS(Q20)也就截止,電池電源斷開,從而實現(xiàn)了文章開始所說的功能。

想法是美好的,但現(xiàn)實是殘酷的。當(dāng)PCB板做回來后,不管是不是充電狀態(tài),單片機PB9檢測到的狀態(tài)一直都是低電平。

經(jīng)排查,發(fā)現(xiàn)是三極管導(dǎo)通時,基極電壓變成0.6V,因為單片機的IO設(shè)置成輸入模式時,上拉是弱上拉,驅(qū)動能力弱,限流電阻壓降小,最終到IO的電壓是0.6V加上電阻的壓降,達不到高電平的電壓范圍。所以充電時,PB9電壓是0V,單片機檢測到低電平,不充電時,PB9電壓雖然比0.6V大一些,但是單片機識別出來還是低電平,因此不管是充電還是不充電,PB9檢測到的都是低電平。

為了解決這個問題,我思考了很久。最后被我想出了一個辦法,就是把三極管Q21換成N溝道MOS管。因為三極管是電流控制電壓的器件,輸入阻抗低,而MOS管是電壓控制電流的器件,輸入阻抗高,這樣輸入高電平時,電平不會被拉低。

最后,更換器件,驗證功能正常。

登錄后免費查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項目客服
  • 培訓(xùn)客服
  • 平臺客服

TOP

1
1