微控制器只处理数字值,但在现实世界中我们必须处理模拟信号。这就是为什么 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()
评论
查看更多