![]() |
發布時間: 2018-12-20 17:13
正文摘要:按STC15單片機芯片手冊IO復位后要輸出低電平的話,需在IO口串一個470歐姆以上的電阻并接一個1K/2K/3K的下拉電阻,我按照這樣做好像沒啥用!程序初始化的時候將IO:P20~P27 設置成強推挽輸出。上電后不 ... |
wulin 發表于 2018-12-20 21:13 這個方法相當有用,感謝樓主分享經驗。 為了這個高電平脈沖,折騰了很久了,現在終于完美解決。 |
51單片機這個功能還是有不足的,為何不返回來想呢,或在NPN前再加1級PNP的三極管不就可以了嗎,我用51單片機作項目都是這樣處理的 |
wulin 發表于 2018-12-21 09:47 如果只需要1個端口上電復位后低電平可以用P2.0,在下載用戶程序時硬件選項中設置。 ![]() |
dzbj 發表于 2018-12-21 12:07 我也試過加一個1K的下拉電阻,然后將470歐用作三極管基極的限流,然而并沒有什么用,而且限流電阻小三極管都進入放大區了。打電話去51那邊他們那邊銷售也說不清給個技術的電話 打了幾次沒通就沒打 了 |
你這個電路和STC官網以前給的不一樣 不知道是不是STC官網筆誤 這么接相當于把輸出端口分壓了 我大概算了一下 如果限流470歐 下拉3k 輸出電壓是4.3v 如果1k下拉就只有3.4v 感覺這樣有接多東西驅動起來不太好 過去STC給的說法是這樣:51單片機復位后所有端口都是弱上拉 為了防止誤動 可以在輸出端口接下拉電阻 1~3k 并將端口設置成推挽輸出模式 就是說不要那個470歐以上的電阻或者放在下拉電阻之后作為限流用 端口必須參照手冊的PxM0/PxM1設置成推挽 否則拉不起來 我一般推NMOS 2.2k下拉+10k限流 管腳電壓一般在4.5v~4.8v之間 截止STC8x系列的手冊 沒有看到如何配置寄存器能成為復位后直接輸出低 |
aking991 發表于 2018-12-21 09:42 加個PNP是沒啥問題,之前一直不想外加多余的器件 |
wulin 發表于 2018-12-21 09:47 104 我之前試過。加在三極管B極,另一端接地,也是不能完全消除。要完全消除那還是得像之前那個大神說的加個反相器。多謝大神指教! |
luanhong 發表于 2018-12-21 08:59 可以這樣理解,按此方法在實際應用中沒有發現異常。如果在下拉電阻兩端并聯103~104小電容能有效消除小脈沖,但會影響外部瞬態響應特性。這是要根據實際需求取舍的, |
51單片機這個功能還是有不足的,為何不返回來想呢,或在NPN前再加1級PNP的三極管不就可以了嗎,我用51單片機作項目都是這樣處理的 |
wulin 發表于 2018-12-20 21:13 程序我試過,剛才又按您的程序試了一下,還是有個小脈沖,尖峰電壓降低了 原來是24V 現在上不到24V就往下降了。我的理解的芯片手冊的意思是。復位后沒進入程序前,所有的 IO都會成為準雙向口的高電平。但其輸出能力較弱,所以測量輸出電壓還是有3.3V但是其驅動電流較低,帶不動晶體管?能這樣理解嗎?但是電壓器件還是能帶的動 ? |
angmall 發表于 2018-12-20 19:57 外加器件有很多種方法 ![]() |
這是你理解錯了。如果想P20~P27 設置成強推挽輸出并且開機瞬間沒有尖脈沖按手冊推薦的方法是可行的。只要初始化代碼寫得正確完全可以滿足需求。單片機加電復位后P2默認準雙向(弱上拉)高電平,由于有下拉電阻使得I/O實際輸出電壓很低不足以使晶體管導通。進入main程序首先設P2全是低電平,延時幾微秒再設P2全是強推挽,這時不會有高電平輸出。在應用程序中需要輸出高電平時因強推挽輸出I/O口內阻小足以抵消下拉電阻影響保持高電平驅動晶體管。 void main() { //進入main時I/O口全都是高電平 //初始化設置 P2=0x00;//先設P2全是低電平 _nop_();//延時幾微秒 _nop_(); _nop_(); _nop_(); P2M0 = 0xff;//后設P2全是強推挽 P2M1 = 0x00; while(1) { } } |
51單片機上電的時候,默認都是高電平的,你想輸出低電平的話可以加一個反相器。 一看就知道,是外行設計的電路。這才需要零初始狀態。 開關設計成低電平驅動的,這樣就可以避免這種情況 |