Arduino 電平轉換 升壓 OUTPUT與9V/12V元件通訊

緣由

網絡上有很多怎麼讓Arduino的5V電平轉換成3.3V電平,從而和工做在3.3V下的芯片相互溝通的教程。可是若是想驅動高於5V電壓的芯片,就找不到教程了。所以今天我來介紹一種方式,能讓Arduino的OUTPUT口和須要5~12V的電子元件進行通訊。下文以12V爲例。git

效果

  • 可以達到單向(從Arduino到12V芯片)通訊的目的
  • Arduino引腳輸出的電平會被取反,即Arduino輸出HIGH,芯片卻收到LOW,反之亦然。

硬件準備

  1. Arduino一個
  2. 開關型NPN三極管(8050便可)一個
  3. 4.7K,10K電阻各一個(貌似不是這個阻值也能夠,只要不要過小便可)

電路鏈接

麪包板圖:網絡

(假設右邊那個nano是咱們須要驅動的12V的東西)oop

原理圖:測試

軟件開發

必定要記住:Arduino引腳輸出的電平會被取反,即Arduino輸出HIGH,芯片卻收到LOW,反之亦然!只要知道這一點,剩下的事情和開發普通OUTPUT引腳都差很少了。ui

咱們先弄一個測試工程試試看。spa

在測試工程中,咱們用萬用表的電壓表(20V擋位)來模擬12V芯片,即萬用表紅線接圖中藍線,萬用表黑線接地(圖中黑線)。由於芯片的INPUT模式至關於一個電壓表,因此能夠這麼替代來看效果。當12V芯片應當收到HIGH時,咱們的萬用表上就會出現接近12V的電壓;收到LOW則出現0V。.net

創建一個ino工程,代碼以下:3d

#define TEST_PIN 7

void setup(){
    pinMode(13,OUTPUT);
    pinMode(TEST_PIN,OUTPUT);
}

void loop(){
    digitalWrite(13,!digitalRead(13));
    digitalWrite(TEST_PIN,!digitalRead(TEST_PIN));
    delay(2000);
}

鏈接電路,查看效果。若是一切正常,你將會看到,當ino上的小燈亮起的時候,萬用表顯示0V;熄滅時顯示12V。code

原理說明(針對沒基礎的人)

三極管這東西高中物理竟然不教...所以我自學研究了半天才勉強搞懂一點點。感受不少書/教程講的都太複雜了,像什麼阿爾法值,貝塔值,放大倍數什麼的,真正應用的時候不必定用得上,所以我這裏簡單講一講三極管用得上的部分。blog

三極管有兩種類型,NPN和PNP,我這裏講一講NPN,即這篇文章中用到的那種。首先,咱們要記住這張圖和它的三個引腳對應的說法:C(集電極),B(基極),E(發射極)(想搞懂名稱的本身看原理去)。

咱們首先來看有箭頭的那一條路徑(B->E):這條路最簡單,徹底不用考慮C端發生了什麼,而是幾乎能夠當作一個B->E的二極管。B電壓大於E必定程度(即B到E有足夠大的電勢差,通常是0.3V之類),就會有電流,反之則沒有。咱們的電路中,B接的是Arduino引腳。所以,當Arduino HIGH時,BE有5V電位差,可是有一個限流電阻,所以有微小的電流;反之沒有。

而後再看另外一條路徑,C->E:這一條就悲催的多了,徹底被B->E那一條管着。若是BE沒有電流,無論發生什麼,CE都不會有電流,這是能夠當作C、E之間斷開了。若是BE有電流,纔會容許CE產生電流。在咱們的電路中,BE有電流則CE連通,即C點接地,因而12V芯片收到LOW;反之,收到HIGH。其實這一部分單獨看,就是一個上拉電阻。圖見下。

順便說一下「電流倒灌」的問題:若是如今三極管的部分換成一塊導體,那麼很明顯,C電壓高於B,所以會有灌入B的電流,從而形成Arduino出各類各樣的問題。可是咱們的電路中沒有這個問題(確實實踐測試過了),這是由於三極管能夠幫助B不被倒灌。可是據傳說,若是C電壓高於B太多,那麼倒灌照樣會發生。若是真的發生倒灌,一個(可能)可行的策略是在B處安裝一個整流二極管,不讓電流倒着流動。

鳴謝

感謝阿古(古做坊坊主)在在電路方面的指導!

相關文章
相關標籤/搜索