微控制器只處理數字值,但在現實世界中我們必須處理模擬信號。這就是為什么 ADC(模數轉換器) 可以將現實世界的模擬值轉換為數字形式,以便微控制器可以處理信號。但是,如果我們需要來自數字值的模擬信號怎么辦,那么就來了 DAC(數模轉換器)。
DAC 可用于許多應用 ,例如電機控制、控制 LED 燈的亮度、 音頻放大器、視頻編碼器、數據采集系統等。
我們已經 將 MCP4725 DAC 模塊與 Arduino和 STM32 連接起來。今天我們將使用相同的 MCP4725 DAC IC 來設計一個 使用 Raspberry Pi 的數模轉換器。假設您已經在 Raspberry PI 上安裝了最新的操作系統,并且可以通過 SSH 訪問它。
所需組件
樹莓派 3 B+(安裝了 Raspbian 操作系統)
MCP4725 DAC集成電路
16x2 液晶顯示器
面包板
連接電線
MCP4725 DAC 模塊(數模轉換器)
MCP4725 IC 是一款 12 位數模轉換器模塊 ,用于生成(0 至 5V)的輸出模擬電壓,并通過 I2C 通信進行控制。它還帶有板載非易失性存儲器 EEPROM。
該 IC 具有 12 位分辨率。這意味著我們使用(0 到 4096)作為輸入來提供相對于參考電壓的電壓輸出。最大參考電壓為 5V。
計算輸出電壓的公式
O/P 電壓 = (參考電壓/分辨率) x 數字值
例如 ,如果我們使用 5V 作為參考電壓,假設數字值為 2048。因此要計算 DAC 輸出。
O/P 電壓 = (5/ 4096) x 2048 = 2.5V
MCP4725的引腳排列
下面是 MCP4725 的圖像,清楚地標明了引腳名稱。
該 IC 可以使用 I2C 通信進行控制,只需要兩條線 SCL 和 SDA。默認情況下,MCP4725 的 I2C 地址為 0x60。現在我們了解了 Raspberry pi 中的 I2C 通信。
Raspberry Pi 中的 I2C 引腳
為了將 MCP4725 與 Raspberry Pi 一起使用,首先要做的是了解 Raspberry Pi I2C 端口引腳并在 Raspberry pi 中配置 I2C 端口。
下面是樹莓派 3 Model B+ 的引腳圖,本教程使用I2C 引腳 GPIO2 (SDA) 和 GPIO3 (SCL) 。
在樹莓派中配置 I2C
默認情況下,I2C 在 Raspberry Pi 中是禁用的。所以首先必須啟用它。在 Raspberry Pi 中啟用 I2C
1. 轉到終端并鍵入sudo raspi-config。
2. 現在樹莓派軟件配置工具出現了。
3. 選擇接口選項,然后啟用 I2C。
4. 啟用 I2C 后重啟 Pi。
使用樹莓派掃描 MCP4725 的 I2C 地址
現在為了開始與 MCP4725 IC 通信,Raspberry Pi 必須知道它的 I2C 地址。要找到地址,首先將 MCP4725 的 SDA 和 SCL 引腳連接到 Raspberry Pi 的 SDA 和 SCL 引腳。還要連接 +5V 和 GND 引腳。
現在打開終端并輸入以下命令以了解連接的 I2C 設備的地址,
?
sudo i2cdetect –y 1或sudo i2cdetect –y 0
?
現在找到 I2C 地址后,是時候安裝必要的庫了,以便將MCP4725 與 Raspberry Pi 一起使用。
將 MCP4725 Adafruit 庫安裝到 Raspberry Pi 中
為了將MCP4725 DAC 板與 Raspberry Pi 的 I2C 總線一起使用,使用了 Adafruit MCP4725 庫。要下載并安裝庫,請按照下列步驟操作:
1. 確保 Raspberry Pi 已連接到活躍的互聯網。
2.接下來打開一個終端并一一運行以下行。
?
sudo apt-get install git build-essential python-dev git clone https://github.com/adafruit/Adafruit_Python_MCP4725.git cd Adafruit_Python_MCP4725 sudo python setup.py install
?
3. 安裝成功后,Adafruit MCP4725 庫現在可以在任何 python 腳本中使用該行導入
?
導入 Adafruit_MCP4725
?
安裝 Adafruit LCD 顯示庫
此項目中使用 LCD 來顯示 DAC 和模擬電壓值,因此要在 Raspberry Pi 中下載并安裝 LCD 庫,請按照以下步驟操作:
1.打開一個終端窗口,并逐行運行以下幾行。
?
apt-get install git git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git cd Adafruit_Python_CharLCD sudo python setup.py install
?
2. 安裝 LCD 庫后,現在可以使用以下行從任何 python 腳本中使用 Adafruit_python_CharLCD
?
導入 Adafruit_CharLCD 作為 LCD?
?
現在 Raspberry Pi 已準備好為數模轉換器編寫代碼,所以讓我們連接電路,如下圖所示。
電路圖和連接
下面給出了將DAC IC MCP4725 與 Raspberry Pi 一起使用的電路圖:
(16x2) LCD 和 Raspberry Pi 之間的電路連接
MCP4725 和樹莓派之間的電路連接
完整的設置將如下所示:
為數模轉換編程 Raspberry Pi
本教程末尾提供了用于 Raspberry Pi 的完整 Python 代碼。只需使用任何 SSH 客戶端(如 Putty)或任何 FTP 客戶端(如 FileZilla)將其上傳到樹莓派,或者您可以通過連接監視器將程序直接寫入樹莓派。在此處了解有關對樹莓派編程的更多信息。
為數模轉換編程 Raspberry Pi
本教程末尾提供了用于 Raspberry Pi 的完整 Python 代碼。只需使用任何 SSH 客戶端(如 Putty)或任何 FTP 客戶端(如 FileZilla)將其上傳到樹莓派,或者您可以通過連接監視器將程序直接寫入樹莓派。在此處了解有關對樹莓派編程的更多信息。
在這個程序中,一個 0-4096 的數字值通過 I2C 總線從 Raspberry Pi 發送到 MCP4725,以產生 0 到 5V 的模擬輸出電壓,可以用萬用表進行驗證。數字和模擬值都顯示在16x2 LCD上。在我們的程序中,使用for循環(0,150,300,450…4050)以 150 的增量發送數字值。讓我們詳細看看這個程序。
首先包括所有必需的庫。這里使用了 LCD、MCP4725 和時庫。
?
import Adafruit_CharLCD as LCD import Adafruit_MCP4725 導入時間
?
接下來定義 LCD 引腳以及編號。行和列。我們知道 16X2 LCD 有 2 行 16 列。在此處了解有關將LCD 與 Raspberry Pi 連接的更多信息。
?
lcd_rs = 25 lcd_en = 24 lcd_d4 = 23 lcd_d5 = 17 lcd_d6 = 18 lcd_d7 = 22 lcd_backlight = 4 # 定義 16x2 LCD 的 LCD 列和行大小。 lcd_columns = 16 lcd_rows = 2 lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,lcd_columns, lcd_rows, lcd_backlight)
?
接下來在 LCD 上顯示一些歡迎信息 5 秒鐘。
?
lcd.message('Circuit Digest') time.sleep (2.0) lcd.message('\nDAC using Rpi') time.sleep (5.0) lcd.clear()
?
在下一行中,使用 MCP4725 DAC IC 的 I2C 地址創建了一個 DAC 實例。我的板子地址是0x60,根據你的板子改。
?
dac = Adafruit_MCP4725.MCP4725(地址=0x60)
?
接下來,在while循環中使用for循環來更改通過 I2C 總線發送到 MCP4725 的數字值 x。for循環范圍是 (0,4095,150)?。x 值從 0 到 4050 變化,增量為 150。
?
而 True: 對于范圍內的 x(0,4097,150):
?
使用以下行將數字值發送到 MCP4725
?
dac.set_voltage(x)
?
根據數字值,使用公式計算模擬值,其中 5 是參考電壓,x 是數字值。
?
電壓 = x/4096.0*5.0
?
然后數字值和模擬值顯示在 LCD 上,延遲 2 秒,使用以下行
?
lcd.cursor_pos = (0,0) lcd.message("DAC 值:" + str(x)) lcd.message("\nAnalogVolt: %.2f" % 電壓) time.sleep (2)
?
這里數字值顯示在液晶顯示屏的第一行,模擬值顯示在第二行。萬用表也連接到 MCP4725 輸出引腳以驗證模擬電壓。
import Adafruit_CharLCD as LCD
import Adafruit_MCP4725
導入時間
lcd_rs = 25
lcd_en = 24
lcd_d4 = 23
lcd_d5 = 17
lcd_d6 = 18
lcd_d7 = 22
lcd_backlight = 4
# 定義 16x2 LCD 的 LCD 列和行大小。
lcd_columns = 16
lcd_rows = 2
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
lcd_columns, lcd_rows, lcd_backlight)
lcd.message('Circuit Digest') time.sleep
(2.0)
lcd.message('\nDAC using Rpi') time.sleep
(5.0)
lcd.clear()
dac = Adafruit_MCP4725.MCP4725(address=0x60)
而真:
對于范圍內的x(0,4097,150):
打印(x)
dac.set_voltage(x)
lcd.cursor_pos =(0,0)
lcd.message(“DAC值:”+ str(x))
電壓= x/4096.0*5.0
lcd.message("\nAnalogVolt: %.2f" % 電壓) time.sleep(
2)
lcd.clear()
評論
查看更多