多個傳感器如何使用單獨的I2C總線連接到Nucleo板
您有兩個傳感器,具有相同的I2C地址,您希望為每個傳感器使用單獨的I2C總線連接到Nucleo板。
您有一個微控制器和兩個相同的傳感器,這意味著它們具有相同的I2C地址。如果沒有多路復(fù)用器或配置傳感器的I2C地址的可能性,則無法將它們連接到相同的I2C總線。然而,STM32 Nucleo 64 F401RE板提供了幾個獨立的I2C總線,允許將每個傳感器連接到其單獨的I2C總線,以避免地址沖突。
在本例中,我們使用支持多個I2C總線的STM32 Nucleo 64 F401RE板。作為傳感器,我們有兩個盛思銳SCD41二氧化碳傳感器評估板。您可以使用任意兩個傳感器,無論它們是相同的產(chǎn)品還是具有相同I2C地址的不同傳感器。評估板很方便,因為我們可以將它們與評估套件中包含的電纜連接起來,允許我們在不焊接面包板的情況下連接所有東西。
一般工作原理
我們要連接的兩個SCD41傳感器的I2C地址為0x62,無法更改。因此,為了從微控制器與兩個傳感器通信,我們將為每個傳感器使用單獨的I2C總線。每個I2C總線需要一個引腳用于SDA線,一個引腳用于SCL線。在軟件方面,我們需要初始化每個I2C總線的“TwoWire”實例并配置引腳?!癟woWire”是標(biāo)準(zhǔn)Wire庫的一部分。作為最后一步,我們將創(chuàng)建傳感器驅(qū)動程序類的兩個實例,并使用標(biāo)準(zhǔn)I2C總線初始化一個實例,使用自定義I2C總線初始化另一個實例。
布線
STM32 Nucleo 64 F401RE板具有預(yù)定義的I2C引腳。我們連接到電路板的Arduino引腳頭,并使用I2C1和I2C2的預(yù)定義引腳。
關(guān)于STM32 Nucleo 64 F401RE板的更多信息可以在st.com上找到。
上拉電阻
在每對I2C線(即數(shù)據(jù)(SDA)和時鐘(SCL)線上安裝上拉電阻對于良好的信號質(zhì)量和健壯的通信非常重要。您可以在I2C上拉電阻介紹中了解更多信息。
Nucleo板和開發(fā)套件板都有內(nèi)建的上拉電阻。因此,我們需要將一個電阻連接到每條I2C通信線路上。在這個例子中使用了四個8.26歐姆電阻,并且使用面包板進行布線。
接線圖
R.1到R.4代表阻值為8.26歐姆的電阻器。
?SEK-SCD41 A引腳1至R.1 (SCL,黃色)
?r1到Nucleo Arduino連接器引腳15 (SCL,黃色)
?r1到Nucleo Arduino連接器3V3
?SEK-SCD41 A引腳2到Nucleo Arduino連接器GND
?SEK-SCD41 A引腳3到Nucleo Arduino連接器3V3(傳感器供電電壓,紅色電纜)
?SEK-SCD41 A引腳4到R.2 (SDA,綠色)
?R.2到Nucleo Arduino連接器引腳14 (SDA,綠色)
?R.2到核子Arduino連接器3V3
?SEK-SCD41 B引腳1至R.3 (SCL,黃色)
?R.3到Nucleo Arduino連接器引腳6 (SCL,黃色)
?R.3到Nucleo Arduino連接器3V3
?SEK-SCD41 B引腳2到Nucleo Arduino連接器GND(接地,黑色電纜)
?SEK-SCD41 B引腳3到Nucleo 3.3V(傳感器電源電壓,紅色電纜)
?SEK-SCD41 B引腳4到R.4 (SDA,綠色)
?R.4到Nucleo Arduino連接器引腳3 (SDA,綠色)
?R.4到核子Arduino連接器3V3
我們稍后在軟件中的配置必須記住的是我們用于I2C總線的引腳。
軟件設(shè)置
首先,您需要包含Wire庫:
為了用正確的引腳配置I2C總線,我們需要實例化兩個“TwoWire”實例,并傳遞用于I2C通信的引腳。
它們的作用域應(yīng)該是全局的,因此定義在‘ setup() ’和‘ loop() ’之外。
然后,通過I2C總線向傳感器發(fā)送命令的代碼需要知道哪個傳感器使用哪個總線。因此,您需要相應(yīng)地配置傳感器實例。首先,為每個傳感器創(chuàng)建一個驅(qū)動程序?qū)嵗?。它們的作用域?yīng)該是全局的,這樣就可以從‘ setup() ’和‘ loop() ’中引用它們。
然后,在‘ setup() ’函數(shù)中,為傳感器分配I2C總線:
現(xiàn)在可以向傳感器發(fā)送任何I2C命令,例如啟動測量和檢索值。
本文編譯自hackster.io