文档详情

MCP4725单通道数模转换器的驱动设计与实现.doc

发布:2024-01-09约5.71千字共10页下载文档
文本预览下载声明

MCP4725单通道数模转换器的驱动设计与实现

在产品设计过程中,我们经常会遇到数模转换的应用需求。在本篇种我们就来讨论一下MCP4725单通道数模转换器的驱动设计与实现。

1、功能概述

  MCP4725是一个低功耗,高精度,单通道,12位缓冲电压输出数字到模拟转换器(DAC)与非易失性存储器(EEPROM)。它的板载精度输出放大器允许它实现轨到轨模拟输出摆动。

  DAC输入和配置数据可以被编程到非易失性存储器(EEPROM)由用户使用I2C接口命令。非易失性存储器特性使DAC设备能够在断电时保存DAC输入代码,并且在通电后立即提供DAC输出。当DAC设备被用作网络中其他设备的支持设备时,这个特性非常有用。MCP4725的引脚定义及排布如下:

  MCP4725有一个外部A0地址位选择引脚。这个A0引脚可以绑定到用户应用PCB板的VDD或VSS上。这个引脚被用户用来选择A0地址位。用户可以将这个引脚绑定到VSS(逻辑0),或VDD(逻辑1),或可以由数字逻辑级别主动驱动,如I2C主输出。

  MCP4725的地址字节由两个部分组成,第一部分为4位设备代码,固定设置为1100的,设备代码后面是三位为地址位(A2,A1,A0),如下图所示:

  A2和A1位的选择可由客户提供,作为订购过程的一部分。两位在出厂前设定好,如果客户没有特别要求的话,A2和A1会默认编程为“00”。而A0位则由A0引脚的逻辑状态决定。

  MCP4725设备包括一个上电复位(POR)电路,以确保可靠的上电,以及一个用于EEPROM编程电压的板载电荷泵。DAC引用是直接从VDD驱动的。在down模式下,输出放大器可以配置为已知的低、中或高阻输出负载,如下图。

  MCP472的写命令用于将配置位和DAC输入码加载到DAC寄存器,或写入设备的EEPROM。写命令类型由三个写命令类型位(C2、C1、C0)定义。写命令类型及其作用如下表所示。

2、驱动设计与实现

  在前一节中,我们梳理了MCP4725单通道数模转换器的基本技术参数。在这一节中,我们将依据这些技术参数来设计MCP4725单通道数模转换器的驱动程序。我们依然是基于对象的思想来实现之。

2.1、对象定义

  我们基于对象来实现驱动程序,所以我们就需要先得到对象,在这里我们首先将抽象出MCP4725单通道数模转换器的对象类型。一版来说,对象皆包含属性与操作两个方面的内容。在抽象对象类型的过程中,我们需要分析MCP4725单通道数模转换器都有哪些属性和操作。

  我们先来分析MCP4725单通道数模转换器的对象的属性。每一台I2C从设备都有一个设备地址,这个地址实际上标识了总线上设备的身份,MCP4725亦如此,所以我们将设备地址作为对象的一个属性。对于MCP4725单通道数模转换器,有一个掉电处理模式是需要配置的,为了掌握其配置状态我们将其作为对象的一个属性记录下来。

  接下来分析MCP4725单通道数模转换器的对象的操作。MCP4725单通道数模转换器的基本操作无非就是读写数据,而要实现读和写则依赖于具体的软硬件平台,所以我们将读和写MCP4725单通道数模转换器都作为对象的操作来实现。

  根据上述关于MCP4725单通道数模转换器对象属性和操作的分析,我们可以抽象得到其对象类型如下:

/*定义MCP4725对象类型*/typedefstructMcp4725Object{

uint8_tdevAddress;

Mcp4725PDModeTypepdMode;

void(*Write)(structMcp4725Object*mcp,uint8_t*wData,uint16_twSize);

void(*Read)(structMcp4725Object*mcp,uint8_t*rData,uint16_trSize);

}Mcp4725ObjectType;

  抽象了对象类型后就可声明对象变量,可是这个对象变量必须作必要的初始化才能使用。所以我们需要一个初始化函数来对其进行初始化。在此函数中,我们将检测变量的有效性和初始状态赋值,并对设备进行必要的配置。根据这些要求我们设计MCP4725单通道数模转换器的对象初始化函数如下:

/*MCP4725初始化配置*/voidMcp4725Initialization(Mcp4725ObjectType*mcp,//MCP4725对象变量

uint8_tslaveAddress,//从站设备的地址

Mcp4725PDModeTypepdMode,//掉电操作模

显示全部
相似文档