模數(shù)轉(zhuǎn)換在嵌入式電子產(chǎn)品中是一項(xiàng)非常重要的任務(wù),因?yàn)榇蠖鄶?shù)傳感器以模擬值的形式提供輸出并將它們饋送到只理解二進(jìn)制值的微控制器,我們必須將它們轉(zhuǎn)換為數(shù)字值。因此,為了能夠處理模擬數(shù)據(jù),微控制器需要模數(shù)轉(zhuǎn)換器。
在本教程中,我們將學(xué)習(xí)如何將 PCF8591 ADC/DAC 模塊與 Raspberry Pi 連接。
所需組件
PCF8591 ADC模塊
100K 鍋
跨接電纜
假設(shè)您安裝了最新的 Raspbian OS 的 Raspberry Pi,并且您知道如何使用 putty 等終端軟件通過(guò) SSH 連接到 Pi。如果您是 Raspberry Pi 新手,請(qǐng)按照本文 開(kāi)始使用 Raspberry Pi。盡管如此,如果您遇到任何問(wèn)題,那么有大量的 Raspberry Pi 教程 可以提供幫助。
PCF8591 ADC/DAC 模塊
PCF8591 是一個(gè) 8 位模數(shù)或 8 位數(shù)模轉(zhuǎn)換器模塊,這意味著每個(gè)引腳可以讀取高達(dá) 256 的模擬值。它還具有 LDR 和板上提供的熱敏電阻電路。該模塊有四個(gè)模擬輸入和一個(gè)模擬輸出。它適用于I 2 C 通信,因此有用于串行時(shí)鐘和串行數(shù)據(jù)地址的 SCL 和 SDA 引腳。它需要2.5-6V的電源電壓并且具有低待機(jī)電流。我們也可以通過(guò)調(diào)節(jié)模塊上電位器的旋鈕來(lái)控制輸入電壓。板上還有三個(gè)跳線。J4接選擇熱敏電阻接入電路,J5接選擇LDR/光敏電阻接入電路J6連接選擇可調(diào)電壓接入電路。板上有兩個(gè) LED D1 和 D2-D1 顯示輸出電壓強(qiáng)度,D2 顯示電源電壓強(qiáng)度。輸出或電源電壓越高,LED D1 或 D2 的強(qiáng)度越高。您還可以使用 VCC 或 AOUT 引腳上的電位器來(lái)測(cè)試這些 LED。
Raspberry Pi 中的 I2C 引腳
為了將PCF8591與 Raspberry Pi 一起使用,首先要做的是了解 Raspberry Pi I2C 端口引腳并在 Raspberry pi 中配置 I2C 端口。
下面是樹(shù)莓派 3 Model B+ 的引腳圖, 本教程使用I2C 引腳 GPIO2 (SDA) 和 GPIO3 (SCL) 。
在樹(shù)莓派中配置 I2C
默認(rèn)情況下,I2C 在 Raspberry Pi 中是禁用的。所以首先必須啟用它。在 Raspberry Pi 中啟用 I2C
1. 轉(zhuǎn)到終端并鍵入 sudo raspi-config。
2. 現(xiàn)在樹(shù)莓派軟件配置工具出現(xiàn)了。
3. 選擇 接口選項(xiàng) ,然后啟用 I2C。
4. 啟用 I2C 后重啟 Pi。
使用樹(shù)莓派掃描 PCF8591 的 I2C 地址
現(xiàn)在為了開(kāi)始與 PCF8591 IC 通信,Raspberry Pi 必須知道它的 I2C 地址。要找到地址,首先將 PCF8591 的 SDA 和 SCL 引腳連接到 Raspberry Pi 的 SDA 和 SCL 引腳。還要連接 +5V 和 GND 引腳。
現(xiàn)在打開(kāi)終端并輸入以下命令以了解連接的 I2C 設(shè)備的地址,
sudo i2cdetect –y 1 或 sudo i2cdetect –y 0
現(xiàn)在找到 I2C 地址后,是時(shí)候構(gòu)建電路并安裝必要的庫(kù)了,以便將 PCF8591 與 Raspberry Pi 一起使用。
將 PCF8591 ADC/DAC 模塊與 Raspberry Pi 連接
PCF8591與樹(shù)莓派接口的電路圖很簡(jiǎn)單。在這個(gè)接口示例中,我們將從任何模擬引腳讀取模擬值并將其顯示在 Raspberry Pi 終端上。我們可以使用 100K 的罐子來(lái)更改這些值。
將 VCC 和 GND 連接到樹(shù)莓派的 GPIO2 和 GPIO。接下來(lái),將 SDA 和 SCL 分別連接到 GPIO3 和 GPIO5。最后用AIN0連接一個(gè)100K的電位器。您還可以添加16x2 LCD來(lái)顯示 ADC 值,而不是在終端上顯示。
用于模數(shù)轉(zhuǎn)換 (ADC) 的 Python 程序
首先,導(dǎo)入用于I2 C 總線通信的smbus庫(kù)和時(shí)間庫(kù),以在打印值之間提供休眠時(shí)間。
導(dǎo)入 smbus 導(dǎo)入時(shí)間
現(xiàn)在定義一些變量。第一個(gè)變量包含 I2C 總線的地址,第二個(gè)變量包含第一個(gè)模擬輸入引腳的地址。
地址 = 0x48 A0 = 0x40
接下來(lái),我們制作了庫(kù) smbus 的函數(shù) SMBus(1) 的對(duì)象
總線 = smbus.SMBus(1)
現(xiàn)在,第一行告訴 IC 在第一個(gè)模擬輸入引腳上進(jìn)行模擬測(cè)量。第二行將在模擬引腳讀取的地址存儲(chǔ)在變量值中。最后打印值。
while True: bus.write_byte(address,A0) value = bus.read_byte(address) print(value) time.sleep (0.1)
現(xiàn)在終于將 python 代碼保存在帶有 .py 擴(kuò)展名的文件中,并使用以下命令在樹(shù)莓派終端中運(yùn)行代碼“
蟒蛇文件名.py
現(xiàn)在終于將 python 代碼保存在帶有 .py 擴(kuò)展名的文件中,并使用以下命令在樹(shù)莓派終端中運(yùn)行代碼“
在運(yùn)行代碼之前,請(qǐng)確保您已啟用 I 2 C 通信并且所有引腳都如圖所示連接,否則會(huì)顯示錯(cuò)誤。模擬值必須開(kāi)始顯示在終端上,如下所示。調(diào)整鍋的旋鈕,你會(huì)看到數(shù)值的逐漸變化。
import smbus
導(dǎo)入時(shí)間
地址 = 0x48
總線 = smbus.SMBus(1)
while True:
bus.write_byte(address,A0)
value = bus.read_byte(address)
print(value) time.sleep
(0.1)
-
adc
+關(guān)注
關(guān)注
98文章
6395瀏覽量
543788 -
模數(shù)轉(zhuǎn)換器
+關(guān)注
關(guān)注
26文章
3100瀏覽量
126699 -
PCF8591
+關(guān)注
關(guān)注
3文章
67瀏覽量
32740
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論