摘要:介绍应用MAX1247、MAX525与单片机构成的4入、4出A/D和D/A测控系统,并给出详细的编程软件、使用者可以将该软件直接嵌入自己的应用系统中。
关键词:A/D、D/A接口 单片机 接口软件
MAX1247是4通道模拟输入12位串行输出A/D转换器,MAX525是4通道模拟输出12位串行输入D/A转换器。这两种芯片特性有很多相似之处,可以和单睡机构成一个完整的4通道测控系统。由于是串入、串出,解决了单片机口线资源不足的缺点,适当的选择外围电路,能取代工控机组成的测控系统。
一、两种芯片的主要特性
(1)单电源供电,MAX1247电源从+2.7~+5.25V,MAX525为+5V。
(2)MAX1247为4通道单端或2通道差分模拟信号输入。MAX525为单通道二进制数据输入、4通道模拟信号输出。
(3)接口标准与SPI、QSPI或Microwire兼容,因此,两种芯片仅需7条口线(MAX1247为4条,MAX525为3条)即可完成4路模拟量输入、4路模拟量输出的数据采集和控制。
(4)均可由软件设定为低功耗模式。
(5)两种芯片的典型参考电压均为2.5V。
二、工作原理
1.引脚排列及功能
MAX525为D/A转换器,20引脚,SSOP封装如图1所示。
各引脚功能如下。
(1)AGND、DGND:模拟地和数字地。
(2)OUTA~OUTD:DAC的A~D通道模拟电压输出端。
(3)FBA~FBD:DAC的A~D通道模拟放大器负反馈端。
(4)REFAB、REFCD:AB和CD通道参考电压输入端,取值范围从0V到VDD-1.4V,典型值为2.5V。模拟输出电压为Vref×(NB/4096)×G(NB)为输入待转化的二进制数据,G为增益),因此,AB、CD端的参考电压不同,满度输出的电压范围也不同。
(5)SCLK:串行时钟输入端。
(6)DIN:串行二进制数据输入端。
(7)DOUT:串行二进制数据输出端。该数据为MAX525移位寄存器的数据,CPU可以读此数据,校正DAC转换结果。
(8)UPO:应用编程逻辑输出。
(9)PDL:电源关闭端。如果接低电平,写入控制命令字(1100XXXXXXXXXX)以后,参考电压输入和输出放大器全部为高阻状态,正常使用为高电平。
(10)CS:片选输入端(低电平有效)。CL:复位端,低电平时,清除所有DAC寄存器和输入寄存器,复位所有的输出放大器为低电平输出。
MAX1247为A/D转换器,16引脚,QSOP封装,如图2所示。
各引脚功能如下:
(1)VDD:正电源电压端。
(2)CH0~CH3:采样模拟输入端。
(3)COM:模拟地。
(4)SHDN:三级关闭输入端。当其接地时,芯片处于低拉耗模式;当其接高电平时,内部缓冲放大器处于内部补偿模式;当其浮置时,内部缓冲放大器处于外部补偿模式。
(5)VREF:参考电压输入端。
(6)SCLK:串行时钟输入端。
(7)CS:芯片选择,低有效。
(8)DOUT:串行数据输出端。
(9)AGND:模拟地。
(10)DGND:数字地。
(11)REFADJ:参考缓冲放大器输入端。若接VDD,则内部缓冲放大器无效。
(12)DIN:串行二进制数输入端。
(13)SSTRB:转换结束信号。在内部时钟模式下,开始转换时,SSTRB变为低电平,转换结束后变高。在外部时钟模式下,当CS为高电平时,SSTRB为高阻;当CS为低电平时,在控制字节最后一位之后以及在转换成二进制数的最高有效之前,SSTRB为高电平。工作命令字及原理可参考《电测与仪表》杂志2000年第2期。
2.控制格式
每一路DAC是由1个输入寄存器和1个DAC寄存器组成双缓冲输入,串行数据控制格式是由16位组成,如表1所列。
表1 命令字格式
MSB LSB | ||
16位串行数据 | ||
地址位 | 控制位 | 数据位 |
A1 A0 | C1 C0 | A11 D0 |
表2 串口编程命令
16位串行字 | 功 能 | ||
A1 A0 | C1 C0 | D11 D0 | |
0
0 0 1 1 0 1 1 |
0
1 0 1 0 1 0 1 |
12位数据 12位数据 12位数据 12位数据 |
A寄存器装载数据,DAC寄存内容不改变 B寄存器装载数据,DAC寄存内容不改变 C寄存器装载数据,DAC寄存器内容不改变 D寄存器装载数据,DAC寄存内容不改变 |
0
0 0 1 1 0 1 1 |
1
1 1 1 1 1 1 1 |
12位数据 12位数据 12位数据 12位数据 |
A寄存器装载数据,所有DAC寄存内容刷新 B寄存器装载数据,所有DAC寄存内容刷新 C寄存器装载数据,所有DAC寄存内容刷新 D寄存器装载数据,所有DAC寄存内容刷新 |
0 1 | 0 0 | XXXXXXXX | 数据从各自输入寄存器移入DAC寄存器 |
1 0 | 0 0 | 12位DAC数据 | 从移位寄存装入所有DAC寄存器 |
1 1 | 0 0 | XXXXXXXX | 关闭模式(PDL=1) |
0 0 | 1 0 | XXXXXXXX | UPO变低 |
0 1 | 1 0 | XXXXXXXX | UPO变高 |
0 0 | 0 0 | XXXXXXXX | DAC寄存器空操作 |
1 0 | 1 0 | XXXXXXXX | 模式0时,DOUT在SCLK下降沿输出时钟信号 |
1 1 | 1 0 | XXXXXXXX | 模式1时,DOUT在SCLK上升模块输出时钟信号 |
表2给出各种工作时的命令格式工,供用户编程参考。
3.电路连接方式
MAX1247和MAX525与单片机V78E58连接方式如图3所示。W78E58为台湾华邦公司生产的8位单片机,内含32KB Flash/EEPROM,其引脚功能与8051系列单片机完成兼容。图3中4个三极管为恒流源变换,可将DAC输出的模拟信号变换成4~20mA的恒流,由P1~P4输出,24V外接电源。两种芯片的参考电压输入端一般为2.5V,须另外由电路提供。
注意:MAX525有两种参考电压输入端:REFCD、REFAB,其值可以不同。
三、软件
下面给出C语言编程的系统软件,见dacdaclel(MAX1247A/D转换子程序)和dacdac(MAX525DAC子程序)。
#include
#include
#include
#define uchar unsigned char
sbit P1_0=P1^0; /*定义P1~7为W78E58的P1口*/
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
void dcadac(unsigned long dacdata 1,dacdata2)
{uchar ee=0;
unsigned long xdata dacdatatransfer=0;
P1_6=0;
Resetdog(); /*调用看门狗复位子程序*/
P1=P1&0xdf; /*片选CS置低电平*/
for(ee=0;ee<4;ee++){
P1_6=0;
P1=P1&0xef;
dacdatatransfer=dacdata1;
dacdatatransfer=((dacdatatransfer>>(3-ee))&0x01)<<3;
P1=P1ldacdatatransfer;
P1_6=1;
}
P1_6=0;
For(ee=0;ee<12;ee++){
P1_6=0;
resetdog();
P1=P1&0xef;
dacdatatransfer=dacdata2;
dacdatatransfer=((dacdatatransfer>>(11-ee))&0x01)<<3;
P1=P1ldacdatatransfer;
P1_6=1;
}
P1_6=0;
P1=P1l0x20;
}
该子程序可完成两路DAC模拟电压输出,欲转换的12位二进制数据已经分别存放于变量dacdac1、dacdac2中。
/*流量A/D转换一次,其中P1-1为片选端,P1-0为时钟输入端,P1-2为数据输入,P1-3为数据输出*/
void adcadc() {
P1_1=0;
P1_0=0;
adaddress=0x9e; /*送控制命令字:启动、选择1通道,单极性转化、单极性模拟输入方式*/
for(l=0;l<8;l++){
adaddresstransfer=adaddress;
adaddresstransfer=(adaddresstransfer>>(7-1))&0x01;
P1_3=adaddresstransfer; /*右移动1次,以后送到P1-2口*/
P1_0=0; /*此处为送时钟信号*/
for(kkl=0;kkl<2;kkl++); /*空操作*/
P1_0=1;
for(kkl=0;kkl<2;kkl++);
P1_0=0; /*时钟信号周期等于等于4条指令时间*/
}
P1_1=0;
for(l=0;l<6;l++);
P1_1=0;
lldatatransfer=0;
P1_0=1;
for(l=0;l<12;l++){
P1_0=0;
P1_0=1;
lldatatransfer=P1_2; /*读出串行12位数据*/
lldatatransfer=lldatatransfer<<(11-l);
lldata[lldatacounter]=lldata[lldatacounter]lldatatransfer;
}
lldatatransfer=lldata[lldatacounter];
for(l=0;l<4;l++){
P1_0=0;
P1_0=1;
}
P1_1=1;
}
/*该子程序完成4路A/D变换,结果存放在变量lldatatransfe中*/
四、应用
在石油系统,需要在线测量石油的含水、含气及流量、温度等。本文所述内容,已应用于新型DRH原油含水、含气分析仪二次智能仪表,达到设计指标要求。
上一篇:USB系统结构与应用设计
下一篇:一种用N+1个I/O口实现的N×N矩阵式键盘
- 热门资源推荐
- 热门放大器推荐