概述
不再支持本指南中的示例。請(qǐng)查看MCP3008和ADS1x15指南,了解CircuitPython和Python的用法。
Raspberry Pi是一款出色的小型臺(tái)式計(jì)算機(jī),可用于控制數(shù)字輸入和輸出。但是,當(dāng)您想讀取模擬信號(hào)(例如從熱敏電阻,電位計(jì)或許多其他類型的傳感器獲得的信號(hào))時(shí)會(huì)怎么做?不要放棄!通過將一個(gè)小型的模數(shù)轉(zhuǎn)換器(ADC)芯片連接到Pi,您可以為Raspberry Pi程序打開模擬信號(hào)的世界!
本指南將為您展示從中讀取模擬值的兩個(gè)不錯(cuò)的選擇帶有Raspberry Pi的Python。您可以使用簡單的MCP3008模擬到數(shù)字轉(zhuǎn)換器(ADC)來讀取10位精度的多達(dá)8個(gè)模擬輸入通道?;蚴褂酶呒?jí)的ADS1x15系列ADC讀取12至16位精度和可編程增益級(jí)的4個(gè)通道-哇!您將立即使用Python庫和示例來啟動(dòng)并運(yùn)行這些示例,以從這兩個(gè)ADC讀取模擬輸入。
在開始之前,您需要熟悉使用Raspberry的基礎(chǔ)知識(shí)。 Pi喜歡加載操作系統(tǒng),建立網(wǎng)絡(luò)并使用SSH連接到終端。查閱“學(xué)習(xí)Raspberry Pi”系列以獲取更多信息。
在開始指南之前,請(qǐng)確保Raspberry Pi正在運(yùn)行最新的Raspbian Jessie操作系統(tǒng)(完整版或精簡版)。
繼續(xù)學(xué)習(xí)如何使用MCP3008或ADS1015/ADS1115模擬與Raspberry Pi進(jìn)行數(shù)字轉(zhuǎn)換。
MCP3008
不再支持本指南中的示例。查閱MCP3008電路Python和Python使用指南:https://learn.adafruit.com/mcp3008-spi-adc/python-circuitpython
MCP3008是低成本的8通道10位模數(shù)轉(zhuǎn)換器。該ADC的精度類似于Arduino Uno的精度,并且具有8個(gè)通道,您可以從Pi讀取很多模擬信號(hào)。如果您只需要讀取簡單的模擬信號(hào),例如溫度或光傳感器,則此芯片是一個(gè)不錯(cuò)的選擇。如果需要更高的精度或功能,請(qǐng)查看下一頁的ADS1x115系列。但是,請(qǐng)勿使用舊指南中的代碼,因?yàn)樵撝改弦褩売?。本指南將向您展示安裝和使用新的Python代碼與MCP3008 ADC進(jìn)行通信的簡便方法。
MCP3008數(shù)據(jù)表也是重要的資料,可以方便地獲取和使用。
接線
MCP3008使用以下方法連接到Raspberry Pi SPI串行連接。您可以使用硬件SPI總線或任何四個(gè)GPIO引腳和軟件SPI與MCP3008通訊。由于軟件SPI可以與Pi上的任何引腳配合使用,因此它的靈活性略高一些,而硬件SPI則稍快一些,但由于只能與特定的引腳配合使用而靈活性較差。如果不確定使用哪個(gè)軟件,我建議您使用SPI軟件,因?yàn)樗菀自O(shè)置。
在將芯片連接到Pi之前,首先需要將其放入面包板。如果您尚未使用裸露的DIP芯片(如MCP3008),然后再將其壓入面包板,則其支腳會(huì)跨越面包板中間的空通道。這樣,您可以從面包板上觸及芯片的每個(gè)分支。
請(qǐng)注意,芯片的方向很重要!確保將其與半個(gè)圓形的縮進(jìn)并指向頂部。參見下面的照片作為示例:
一旦芯片位于面包板中,就可以將其連接到Pi了。 MCP3008芯片的每個(gè)分支都有以下名稱:
記住切屑的方向,您必須用半圓像上面的圖一樣向頂部縮進(jìn)!
軟件SPI
要通過軟件SPI連接將MCP3008連接到Raspberry Pi,您需要進(jìn)行以下連接:
MCP3008 VDD 到 Raspberry Pi 3.3V
MCP3008 VREF 到 Raspberry Pi 3.3V
MCP3008 AGND 到 Raspberry Pi GND
MCP3008 DGND 到 Raspberry Pi GND
MCP3008 CLK 至 Raspberry Pi引腳18
MCP3008 DOUT 至 Raspberry P我將23針
MCP3008 DIN 固定為 Raspberry Pi針24
MCP3008 CS/SHDN 到 Raspberry Pi引腳25
請(qǐng)注意,您可以將MCP3008 CLK,DOUT,DIN和CS/SHDN引腳交換到任何其他免費(fèi)數(shù)字GPIO Raspberry Pi上的針腳。您只需要修改示例代碼即可使用您的密碼。
硬件SPI
要首先使用硬件SPI,請(qǐng)確保已使用raspi-config工具啟用了SPI。確保啟用SPI接口和加載SPI內(nèi)核模塊都回答是,然后重新啟動(dòng)Pi。在繼續(xù)之前,運(yùn)行 ls -l/dev/spi * 命令時(shí),請(qǐng)檢查是否可以看到/dev/spidev0.0和/dev/spidev0.1設(shè)備。
Nowwire將MCP3008連接到Raspberry Pi的方法如下:
MCP3008 VDD 到 Raspberry Pi 3.3V
MCP3008 VREF 到 Raspberry Pi 3.3V
MCP3008 AGND 到 Raspberry Pi GND
MCP3008 DGND 到 Raspberry Pi GND
MCP3008 CLK 到 Raspberry PiSCLK
MCP3008 DOUT 到 Raspberry PiMISO
MCP3008 DIN 到 Raspberry Pi MOSI 》
MCP3008 CS/SHDN 到 Raspberry PiCE0
庫安裝
使用軟件或軟件將MCP3008連接到Raspberry Pi之后硬件SPI無線即可開始安裝Adafruit MCP3008 Python庫。
您可以使用一些命令從Python軟件包索引中安裝該庫,也可以從GitHub上的源安裝該庫。從下面選擇以下選項(xiàng)之一。如果不確定我建議從GitHub上的源代碼安裝,因?yàn)樗€會(huì)下載使用該庫的示例。
請(qǐng)注意,在安裝該庫之前,必須先連接Raspberry Pi 通過有線或無線網(wǎng)絡(luò)連接到Internet。
源代碼安裝
要從Github上的源代碼安裝,請(qǐng)連接到Raspberry Pi上的終端并運(yùn)行以下命令:
下載:文件
復(fù)制代碼
sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus git
cd ~
git clone https://github.com/adafruit/Adafruit_Python_MCP3008.git
cd Adafruit_Python_MCP3008
sudo python setup.py install sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus git
cd ~
git clone https://github.com/adafruit/Adafruit_Python_MCP3008.git
cd Adafruit_Python_MCP3008
sudo python setup.py install
您應(yīng)該看到庫安裝成功,并顯示類似以下消息:
如果您看到錯(cuò)誤,請(qǐng)仔細(xì)檢查所有先前的命令是否都已運(yùn)行,并且它們沒有因錯(cuò)誤而失敗。
Pyt hon軟件包索引安裝
要從Python軟件包索引安裝到Raspberry Pi上的終端并執(zhí)行以下命令:
下載:文件
復(fù)制代碼
sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus python-pip
sudo pip install adafruit-mcp3008 sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus python-pip
sudo pip install adafruit-mcp3008
看到如下消息,說明已成功安裝該庫:
請(qǐng)注意,如果您是從Python軟件包索引中安裝的,則不會(huì)具有該庫的示例代碼。您需要手動(dòng)將這些MCP3008示例下載到Pi,然后在下一部分中運(yùn)行它們。
庫的用法
要學(xué)習(xí)如何使用庫,我將逐步介紹其中包含的一些示例代碼。如果您從源代碼下載并安裝了這些庫,則這些示例位于examples文件夾中。通過在Pi上運(yùn)行,切換到該文件夾:
下載:文件
復(fù)制代碼
cd ~/Adafruit_Python_MCP3008/examples cd ~/Adafruit_Python_MCP3008/examples
注意:如果您使用pip命令從Python軟件包索引中安裝了該庫,則不會(huì)具有示例代碼,則需要手動(dòng)將其下載到Pi。
我們將首先查看simpletest.pyexample,這是讀取和顯示ADC通道值的基本示例。首先,讓我們打開文件以將其配置為使用軟件或硬件SPI。運(yùn)行以下命令以在nano文本編輯器中打開文件:
下載:文件
復(fù)制代碼
nano simpletest.py nano simpletest.py
現(xiàn)在向下滾動(dòng)到頂部附近的以下代碼塊:
下載:文件
復(fù)制代碼
# Software SPI configuration:
CLK = 18
MISO = 23
MOSI = 24
CS = 25
mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)
# Hardware SPI configuration:
# SPI_PORT = 0
# SPI_DEVICE = 0
# mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE)) # Software SPI configuration:
CLK = 18
MISO = 23
MOSI = 24
CS = 25
mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)
# Hardware SPI configuration:
# SPI_PORT = 0
# SPI_DEVICE = 0
# mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
默認(rèn)情況下,此代碼段將芯片配置為使用上一部分中所述的軟件SPI配置。如果您在軟件SPI設(shè)置中使用了不同的引腳,請(qǐng)確保將CLK,MISO,MOSI,CS的值更改為所使用的引腳。
如果您使用的是硬件SPI,則需要注釋掉軟件SPI部分,取消注釋硬件SPI部分。對(duì)于硬件SPI,配置應(yīng)如下所示:
下載:文件
復(fù)制代碼
# Software SPI configuration:
# CLK = 18
# MISO = 23
# MOSI = 24
# CS = 25
# mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)
# Hardware SPI configuration:
SPI_PORT = 0
SPI_DEVICE = 0
mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE)) # Software SPI configuration:
# CLK = 18
# MISO = 23
# MOSI = 24
# CS = 25
# mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)
# Hardware SPI configuration:
SPI_PORT = 0
SPI_DEVICE = 0
mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
現(xiàn)在通過按 Ctrl-o ,輸入,然后按 Ctrl-x 退出。您可以通過在終端上運(yùn)行 simpletest.py 代碼:
下載:文件
復(fù)制代碼
sudo python simpletest.py sudo python simpletest.py
該示例將打印出包含所有ADC的表格渠道及其價(jià)值。每半秒鐘將打印出具有最新通道值的新行。例如,您可能會(huì)看到以下輸出:
每列表示一個(gè)不同的通道,第一行的標(biāo)題顯示通道號(hào)(從0到7,共8個(gè)通道)。每個(gè)通道的值是該通道的ADC值。這是一個(gè)介于0到1023之間的數(shù)字,其中0表示信號(hào)處于接地電平,而1023表示信號(hào)處于AREF值(3.3V)或更高。在這兩個(gè)值之間是成比例的,因此512的值約為3.3/2或1.65伏。
按 Ctrl-c 可以停止示例。
嘗試將電位計(jì)連接到模擬輸入之一。將電位計(jì)的中間分支(抽頭)連接到模擬輸入,然后將另一分支連接到Pi 3.3V,另一分支連接到Pi接地。運(yùn)行示例,并旋轉(zhuǎn)電位計(jì)。您應(yīng)該看到ADC值發(fā)生變化,并且隨著電位計(jì)的電壓降低而降低,而隨著電壓的升高而升高!
要了解代碼的工作原理,請(qǐng)打開 simpletest.py 再次以nano為例?,F(xiàn)在向下滾動(dòng)到底部的主循環(huán):
下載:文件
復(fù)制代碼
print(‘Reading MCP3008 values, press Ctrl-C to quit.。.’)
# Print nice channel column headers.
print(‘| {0:》4} | {1:》4} | {2:》4} | {3:》4} | {4:》4} | {5:》4} | {6:》4} | {7:》4} |’.format(*range(8)))
print(‘-’ * 57)
# Main program loop.
while True:
# Read all the ADC channel values in a list.
values = [0]*8
for i in range(8):
# The read_adc function will get the value of the specified channel (0-7)。
values[i] = mcp.read_adc(i)
# Print the ADC values.
print(‘| {0:》4} | {1:》4} | {2:》4} | {3:》4} | {4:》4} | {5:》4} | {6:》4} | {7:》4} |’.format(*values))
# Pause for half a second.
time.sleep(0.5) print(‘Reading MCP3008 values, press Ctrl-C to quit.。.’)
# Print nice channel column headers.
print(‘| {0:》4} | {1:》4} | {2:》4} | {3:》4} | {4:》4} | {5:》4} | {6:》4} | {7:》4} |’.format(*range(8)))
print(‘-’ * 57)
# Main program loop.
while True:
# Read all the ADC channel values in a list.
values = [0]*8
for i in range(8):
# The read_adc function will get the value of the specified channel (0-7)。
values[i] = mcp.read_adc(i)
# Print the ADC values.
print(‘| {0:》4} | {1:》4} | {2:》4} | {3:》4} | {4:》4} | {5:》4} | {6:》4} | {7:》4} |’.format(*values))
# Pause for half a second.
time.sleep(0.5)
代碼可能看起來有些復(fù)雜,但是大多數(shù)復(fù)雜性來自打印表格。請(qǐng)注意,該行讀取ADC通道值并將其保存在列表中:
values [i] = mcp.read_adc(i)
正在從MCP3008 Python庫調(diào)用 read_adc()函數(shù)。該函數(shù)采用一個(gè)參數(shù),即要讀取的通道號(hào)(值0至7)。結(jié)果,該函數(shù)將返回該通道的當(dāng)前ADC值。
以您自己的代碼讀取ADC通道與調(diào)用 read_adc()函數(shù)一樣容易!傳遞通道以進(jìn)行讀取,它將返回該值。使用MCP3008函數(shù)庫讀取模擬值實(shí)際上就是所有這些!
如果您很好奇,可以像運(yùn)行simpletest.py一樣檢查并運(yùn)行differential.pyexample。修改配置以適合您的布線,無論是軟件SPI還是硬件SPI。然后,在運(yùn)行示例時(shí),它將調(diào)用 read_adc_difference()函數(shù),并使用該函數(shù)讀取芯片的通道0和1之間的電壓差。有時(shí)候讀取兩個(gè)信號(hào)的差異很有用,以幫助減少模擬信號(hào)中的噪聲和其他偽像。
MCP3008 Python庫已包含所有這些內(nèi)容!
ADS1015/ADS1115
不再支持本指南中的示例。查閱有關(guān)CircuitPython和Python使用的ADS1x15指南:https://learn.adafruit.com/adafruit-4-channel-adc-breakouts/python-circuitpython
ADS1015和ADS1115是出色的模數(shù)轉(zhuǎn)換器,易于使用Raspberry Pi的I2C通訊總線進(jìn)行使用。 ADS1015是具有4個(gè)通道的12位ADC,而ADS1115是具有4個(gè)通道的高精度16位ADC。兩者均具有從2/3x到16x的可編程增益,因此您可以放大小信號(hào)并以更高的精度讀取它們。如果您想從MCP3008或其他簡單的ADC上獲得更好的提升,那么ADS1x15系列是一個(gè)不錯(cuò)的選擇!
在開始使用之前,請(qǐng)務(wù)必遵循ADS1x15指南通過焊接組裝ADC板
您可能還會(huì)對(duì)以下芯片的數(shù)據(jù)表感興趣:
ADS1015數(shù)據(jù)表
ADS1115數(shù)據(jù)表
接線
ADS1015 ADS1115和ADS1115使用相同的I2C通信協(xié)議讀取模擬值。您可以按照下面所述的完全相同的方式將每個(gè)芯片連接到Pi。
在將ADC連接到Pi之前,請(qǐng)確保使用raspi-config在Raspberry Pi上啟用I2C。在啟用I2C并使用i2cdetect命令檢查ADC可見之后,再向前移動(dòng)。
按如下所示將ADC連接到Pi:
ADS1x15VDD 至 Raspberry Pi 3.3V
ADS1x15GND 至 Raspberry Pi GND
ADS1x15 SCL 至 Raspberry Pi SCL
ADS1x15 SDA 至 Raspberry Pi SDA
庫安裝
將ADS1x15連接到Raspberry Pi之后,就可以安裝Adafruit ADS1x15 Python庫了。
您可以使用一些命令從Python包索引中安裝該庫,或者可以從GitHub上的源代碼安裝該庫。從下面選擇以下選項(xiàng)之一。如果不確定我建議從GitHub上的源代碼安裝,因?yàn)樗€會(huì)下載使用該庫的示例。
請(qǐng)注意,在安裝該庫之前,必須先連接Raspberry Pi 通過有線或無線網(wǎng)絡(luò)連接到Internet。
源代碼安裝
要從Github上的源代碼安裝,請(qǐng)連接到Raspberry Pi上的終端并運(yùn)行以下命令:
下載:文件
復(fù)制代碼
sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus git
cd ~
git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
cd Adafruit_Python_ADS1x15
sudo python setup.py install sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus git
cd ~
git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
cd Adafruit_Python_ADS1x15
sudo python setup.py install
您應(yīng)該看到庫安裝成功,并顯示以下類似消息:
如果您看到錯(cuò)誤,請(qǐng)仔細(xì)檢查所有先前的命令是否都已運(yùn)行,并且它們沒有因錯(cuò)誤而失敗。
Pyt hon軟件包索引安裝
要從Python軟件包索引安裝到Raspberry Pi上的終端并執(zhí)行以下命令:
下載:文件
復(fù)制代碼
sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus python-pip
sudo pip install adafruit-ads1x15 sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus python-pip
sudo pip install adafruit-ads1x15
看到一條類似以下消息,說明已成功安裝該庫:
請(qǐng)注意,如果您是從Python軟件包索引中安裝的,則不會(huì)具有該庫的示例代碼。您需要手動(dòng)將這些ADS1x15示例下載到Pi,然后在下一部分中運(yùn)行它們。
庫的用法
要學(xué)習(xí)如何使用庫,我將逐步介紹其中包含的一些示例代碼。如果您從源代碼下載并安裝了這些庫,則這些示例位于 examples 文件夾中。通過在Pi上運(yùn)行,切換到該文件夾:
下載:文件
復(fù)制代碼
cd ~/Adafruit_Python_ADS1x15/examples cd ~/Adafruit_Python_ADS1x15/examples
注意:如果您使用pip命令從Python軟件包索引中安裝了該庫,則不會(huì)具有示例代碼,則需要手動(dòng)將其下載到Pi。
我們將首先查看simpletest.pyexample,這是讀取和顯示ADC通道值的基本示例。首先,讓我們打開文件以配置我們使用的芯片。運(yùn)行以下命令以在nano文本編輯器中打開文件:
下載:文件
復(fù)制代碼
nano simpletest.py nano simpletest.py
現(xiàn)在向下滾動(dòng)到頂部附近的以下代碼塊:
下載:文件
復(fù)制代碼
# Create an ADS1115 ADC (16-bit) instance.
adc = Adafruit_ADS1x15.ADS1115()
# Or create an ADS1015 ADC (12-bit) instance.
#adc = Adafruit_ADS1x15.ADS1015()
# Note you can change the I2C address from its default (0x48), and/or the I2C
# bus by passing in these optional parameters:
#adc = Adafruit_ADS1x15.ADS1015(address=0x49, bus=1) # Create an ADS1115 ADC (16-bit) instance.
adc = Adafruit_ADS1x15.ADS1115()
# Or create an ADS1015 ADC (12-bit) instance.
#adc = Adafruit_ADS1x15.ADS1015()
# Note you can change the I2C address from its default (0x48), and/or the I2C
# bus by passing in these optional parameters:
#adc = Adafruit_ADS1x15.ADS1015(address=0x49, bus=1)
此代碼將示例配置為使用ADS1115芯片或ADS1015芯片。未注釋的最上面一行選擇通過創(chuàng)建ADS1115對(duì)象來使用ADS1115芯片。它下面是帶注釋的行,該行創(chuàng)建了一個(gè)ADS1015對(duì)象以使用ADS1015芯片。取消注釋右行,具體取決于所使用的芯片。
例如,如果您使用的是ADS1015,則代碼如下所示:
下載:文件
復(fù)制代碼
# Create an ADS1115 ADC (16-bit) instance.
# adc = Adafruit_ADS1x15.ADS1115()
# Or create an ADS1015 ADC (12-bit) instance.
adc = Adafruit_ADS1x15.ADS1015()
# Note you can change the I2C address from its default (0x48), and/or the I2C
# bus by passing in these optional parameters:
#adc = Adafruit_ADS1x15.ADS1015(address=0x49, bus=1) # Create an ADS1115 ADC (16-bit) instance.
# adc = Adafruit_ADS1x15.ADS1115()
# Or create an ADS1015 ADC (12-bit) instance.
adc = Adafruit_ADS1x15.ADS1015()
# Note you can change the I2C address from its default (0x48), and/or the I2C
# bus by passing in these optional parameters:
#adc = Adafruit_ADS1x15.ADS1015(address=0x49, bus=1)
最后一條注釋行顯示了更高級(jí)的用法,例如選擇自定義I2C地址或總線號(hào)。您通常不需要更改這些值。
現(xiàn)在按 Ctrl-o ,輸入,然后按 Ctrl- x 退出。您可以通過在終端上執(zhí)行來運(yùn)行 simpletest.py 代碼:
下載:文件
復(fù)制代碼
sudo python simpletest.py sudo python simpletest.py
該示例將打印出包含所有ADC的表格渠道及其價(jià)值。每半秒鐘將打印出具有最新通道值的新行。例如,您可能會(huì)看到如下輸出:
每列代表一個(gè)不同的通道,第一行的標(biāo)題顯示通道號(hào)(從0到3,總共4個(gè)通道)。每個(gè)通道的值是該通道的ADC值。這個(gè)數(shù)字的范圍是16位ADS1115上的-32768到32767或12位ADS1015上的-2048到2047。值0表示信號(hào)處于接地(參考)電平,值32767(或ADS105上的2047)表示信號(hào)等于或高于電流增益的最大電壓值(默認(rèn)為4.096V),以及-32768(或ADS1015上的-2048)表示它是低于參考電壓的負(fù)電壓(例如,如果處于差分模式)。在這兩個(gè)值之間是成比例的,因此16384的值約為4.096/2或2.048V。
按 Ctrl-c 可以停止示例。
嘗試將電位計(jì)連接到模擬輸入之一。將電位計(jì)的中間分支(抽頭)連接到模擬輸入,然后將另一分支連接到Pi 3.3V,另一分支連接到Pi接地。運(yùn)行示例,并旋轉(zhuǎn)電位計(jì)。您應(yīng)該看到ADC值發(fā)生變化,并且隨著電位計(jì)的電壓降低而降低,而隨著電壓的升高而升高!
要了解代碼的工作原理,請(qǐng)打開 simpletest.py 再次以nano為例。向下滾動(dòng)到本部分代碼:
下載:文件
復(fù)制代碼
# Choose a gain of 1 for reading voltages from 0 to 4.09V.
# Or pick a different gain to change the range of voltages that are read:
# - 2/3 = +/-6.144V
# - 1 = +/-4.096V
# - 2 = +/-2.048V
# - 4 = +/-1.024V
# - 8 = +/-0.512V
# - 16 = +/-0.256V
# See table 3 in the ADS1015/ADS1115 datasheet for more info on gain.
GAIN = 1 # Choose a gain of 1 for reading voltages from 0 to 4.09V.
# Or pick a different gain to change the range of voltages that are read:
# - 2/3 = +/-6.144V
# - 1 = +/-4.096V
# - 2 = +/-2.048V
# - 4 = +/-1.024V
# - 8 = +/-0.512V
# - 16 = +/-0.256V
# See table 3 in the ADS1015/ADS1115 datasheet for more info on gain.
GAIN = 1
該代碼配置了ADC在讀取信號(hào)時(shí)將使用的增益。增益會(huì)放大信號(hào),因此更容易讀取小的微弱信號(hào)。增益還控制芯片可以讀取的電壓范圍。增益值為1時(shí),電壓范圍為4.096伏。這意味著芯片可以讀取-4.096伏至+4.096伏的值。您可以選擇較高的增益來以較高的精度讀取較弱的信號(hào)(因?yàn)閷⑹褂酶嗟奈粊肀硎据^小的值范圍)。
為信號(hào)選擇正確的增益非常重要,值得考慮一下您可能會(huì)看到的電壓范圍。增益太高會(huì)使您的信號(hào)超出ADC的最大電壓并產(chǎn)生不準(zhǔn)確的結(jié)果,增益太低會(huì)使信號(hào)掩埋在噪聲中,從而難以讀取。仔細(xì)選擇!
現(xiàn)在向下滾動(dòng)到底部的主循環(huán):
下載:文件
復(fù)制代碼
print(‘Reading ADS1x15 values, press Ctrl-C to quit.。.’)
# Print nice channel column headers.
print(‘| {0:》6} | {1:》6} | {2:》6} | {3:》6} |’.format(*range(4)))
print(‘-’ * 37)
# Main loop.
while True:
# Read all the ADC channel values in a list.
values = [0]*4
for i in range(4):
# Read the specified ADC channel using the previously set gain value.
values[i] = adc.read_adc(i, gain=GAIN)
# Note you can also pass in an optional data_rate parameter that controls
# the ADC conversion time (in samples/second)。 Each chip has a different
# set of allowed data rate values, see datasheet Table 9 config register
# DR bit values.
#values[i] = adc.read_adc(i, gain=GAIN, data_rate=128)
# Each value will be a 12 or 16 bit signed integer value depending on the
# ADC (ADS1015 = 12-bit, ADS1115 = 16-bit)。
# Print the ADC values.
print(‘| {0:》6} | {1:》6} | {2:》6} | {3:》6} |’.format(*values))
# Pause for half a second.
time.sleep(0.5) print(‘Reading ADS1x15 values, press Ctrl-C to quit.。.’)
# Print nice channel column headers.
print(‘| {0:》6} | {1:》6} | {2:》6} | {3:》6} |’.format(*range(4)))
print(‘-’ * 37)
# Main loop.
while True:
# Read all the ADC channel values in a list.
values = [0]*4
for i in range(4):
# Read the specified ADC channel using the previously set gain value.
values[i] = adc.read_adc(i, gain=GAIN)
# Note you can also pass in an optional data_rate parameter that controls
# the ADC conversion time (in samples/second)。 Each chip has a different
# set of allowed data rate values, see datasheet Table 9 config register
# DR bit values.
#values[i] = adc.read_adc(i, gain=GAIN, data_rate=128)
# Each value will be a 12 or 16 bit signed integer value depending on the
# ADC (ADS1015 = 12-bit, ADS1115 = 16-bit)。
# Print the ADC values.
print(‘| {0:》6} | {1:》6} | {2:》6} | {3:》6} |’.format(*values))
# Pause for half a second.
time.sleep(0.5)
代碼可能看起來有些復(fù)雜,但其中大部分是復(fù)雜的是從打印表格開始的。請(qǐng)注意,該行讀取ADC通道值并將其保存在列表中:
values [i] = adc.read_adc(i,gain = GAIN)
此行正在從ADS1x15Python庫調(diào)用 read_adc()函數(shù)。該函數(shù)采用一個(gè)參數(shù),即要讀取的通道號(hào)(0到3的值),以及可選的增益值(默認(rèn)為1)。結(jié)果,該函數(shù)將返回該通道的當(dāng)前ADC值。
以您自己的代碼讀取ADC通道與調(diào)用 read_adc()函數(shù)一樣容易!傳遞通道以進(jìn)行讀取,它將返回該值。這就是使用ADS1x15庫讀取模擬值的全部內(nèi)容!
如果您很好奇,可以像運(yùn)行simpletest.py一樣檢查并運(yùn)行differential.pyexample。修改配置以選擇您的芯片。然后,在運(yùn)行示例時(shí),它將調(diào)用 read_adc_difference()函數(shù),并使用該函數(shù)讀取芯片的通道0和1之間的電壓差。有時(shí)讀取兩個(gè)信號(hào)的差異很有用,以幫助減少模擬信號(hào)中的噪聲和其他偽像。
此外,continuous.pyexample演示了如何打開連續(xù)讀取模式并讀取ADC值流。如果您只是從芯片中讀取值并且不想一直擔(dān)心調(diào)用 read_adc()函數(shù),則此功能很有用。
最后,比較器.pyexample顯示了一種更高級(jí)的芯片模式,當(dāng)ADC值在特定范圍內(nèi)時(shí),它們可以啟用ALERT輸出引腳。范圍。再次,注釋和數(shù)據(jù)表應(yīng)該可以幫助您使用此功能。
ADS1x15Python庫已包含所有內(nèi)容!
責(zé)任編輯:wv
-
模數(shù)轉(zhuǎn)換器
+關(guān)注
關(guān)注
26文章
3359瀏覽量
128274 -
樹莓派
+關(guān)注
關(guān)注
121文章
2009瀏覽量
107477
發(fā)布評(píng)論請(qǐng)先 登錄
Analog Devices Inc. AD9217射頻模數(shù)轉(zhuǎn)換器數(shù)據(jù)手冊(cè)

ad7760模數(shù)轉(zhuǎn)換器(ADC)數(shù)據(jù)手冊(cè)
國產(chǎn)模數(shù)轉(zhuǎn)換器100%替換ADS1278應(yīng)用于振動(dòng)和模態(tài)分析

國產(chǎn)模數(shù)轉(zhuǎn)換器SC1642——ADS1258優(yōu)質(zhì)國產(chǎn)替代方案

LTC2245和國產(chǎn)模數(shù)轉(zhuǎn)換器SC2245特征以及應(yīng)用優(yōu)勢分享

24位模數(shù)轉(zhuǎn)換器SC1641——AD7793的優(yōu)質(zhì)國產(chǎn)替代方案

請(qǐng)問模數(shù)轉(zhuǎn)換器ADS8344的多通道采樣是同步的嗎?
模數(shù)轉(zhuǎn)換器ADI AD7606與SC1467的深度對(duì)比和應(yīng)用分析

使用ADS1115模數(shù)轉(zhuǎn)換器時(shí),它的PGA的增益是如何設(shè)置的?
高速模數(shù)轉(zhuǎn)換器基礎(chǔ)知識(shí)

集成式電流檢測模數(shù)轉(zhuǎn)換器

評(píng)論