高精度数模转换器AD420及其与MSP430的接口技术

合集下载

MSP430单片机之ADC

MSP430单片机之ADC

一张图看懂MSP430单片机之ADC原创一,基础知识ADC即Analog to Digital Converter模数转换,把模拟信号进行量化,转换为数字量。

对于软件工程师来说,ADC内部的转换原理可以忽略,只需要了解其对外呈现的接口。

AD输入与输出之间的关系为:MSP430的ADC12内核模块是12位的,其最大输出为2^12 – 1 = 4095。

以VR-为参考点,当VIN小于或者等于VR-时得到的AD码值为0,当VIN大于或者等于VR+时,得到的AD码值为4095,当VIN处于VR-和VR+之间时,按线性比例转换。

这样,从MCU中读出AD码值,即可根据公式倒推回去计算出输入的模拟量电压。

二,ADC总体框图再补一张中文版的:三,分块解释1,ADC内核先来看看ADC最核心的部分。

当然少不了电压参考源VR+和VR-,以及模拟量输入部分。

模拟量输入部分是和“采样保持”电路连在一起的,这一部分后面再细说。

除此之外,与ADC内核相关的,还有以下几个信号:1,ADC12CLK。

在MCU中,任何模块都少不了时钟,ADC模块也不例外,必须有时钟信号它才能工作。

它有4个时钟源可以选择,并且可以1~8分频。

2,ADC12ON,这个是ADC内核的总开关,只有当ADC12ON这一位为1时,ADC内核模块才工作。

如果想要关闭ADC内核以降低功耗,可以将ADC12ON置为0.3,SAMPCON,采样控制信号。

该信号接至Convert,当SAMPCON为低电平时,ADC内核进行AD转换。

4,BUSY,用于指示内核模块是否正处于AD转换过程中。

2,采样保持。

MSP430模数转换ADC

MSP430模数转换ADC

SREF2 SREF1 SREF0 0 0 1
#SREF_1
17
举例 :ADC12 通道 0 使用内部 1.5V 参考电压源
BIS #REFON , &ADC12CTL0 ; turn on 2.5V ref ; Vr+=Vref+ BIS.B #SREF_1 , &ADC12MCTL0
SREF2 SREF1 SREF0 0 0 1
#SREF_1
18
举例:VR+ 使用外部正参考电压源 VeREF+ or BIS.B #SREF_2 , &ADC12MCTL0 BIS.B #SREF_3 , &ADC12MCTL0
SREF2 SREF1 SREF0 0 1 x
#SREF_2 or #SREF_3
19
ADC12工作时钟(ADC12CLK)编程设置
ADC12模块是一个转换速度高达 200ksps、采样时间可编程 的12-bit逐次逼近型模数转换器。由12-bit的SAR核、采样保 持电路、模拟开关、参考电压产生与选择电路、 ADC 时钟 选择电路、采样与转换控制电路、16个转换结果存储缓冲器 及其对应的16个存储控制寄存器、中断系统、片上集成温度 传感器等组成。 ADC12可以在没有CPU的参与下,独立实 现多达 16 次的采样、转换和存储操作。 ADC12 模块可以独 立断电,以便于低功耗设计。 MSP430X13X,MSP430X14X,MSP43015X 和 MSP430X16X 等 芯片中均有ADC12模块。
采样保持输入信号的宽度
0~1×ADC12CLK
tsample = 采样定时器输出信号的宽度 4×ADC12CLK≤tsample ≤1024×ADC12CLK

【MSP430趣谈】MSP430第十二讲之ADC(上)

【MSP430趣谈】MSP430第十二讲之ADC(上)

【MSP430趣谈】MSP430第十二讲之ADC(上)首先我们需要明白一个问题是什么是ADC,中文翻译过来就是模数转换器,从他的英文名的话我们会更加好记,Analog-to-Digital Converter。

简而言之就是将模拟量转换为数字量。

在我们的生活中大部分是模拟量,比如说温度、压力、声音、或者图像等等。

现在大部分的传感器都将一些模拟量转化为电压量来进行测量,这里不再举例,因为太多了,大家在学会这一讲之后,可以试着去读一个土壤湿度传感器的值(前提是你有的话)。

现在大家应该可以明白是什么了吧!一句话,就是把电压值转化成数字量(会不会有点笼统,暂且可以这么理解)。

我们现在看下ADC有一些什么性能指标?1.采样率这是一个什么概念呢?因为对于模拟量来说,在时域上面是连续的(时域是指x轴为时间t的一个坐标域,比如你用示波器看到的波形就是指在时域上面的波形),而对于我们的数字量来说它就是一个离散的量,也就是说它必然是会产生一个时间间隔,没有办法做到连续,做到连续的话数据量就是无穷大(会不会说的有点玄乎,希望大家可以明白。

)所以就引出采样率这样的一个东西,简单说就是多久采集一次信号,又可以称之为采样频率。

2. 分辨率大家如果去查ADC的芯片,都会说到该芯片是几位的ADC,那么这个是用来干嘛的呢?比如说我们介绍的FR5969提供了一个12位的ADC,改怎么理解呢,12位的ADC第一个寄存器来说,那么他可以存储多少个数呢?就是212个数,假设我们现在给一个2.5V的电压值,那么我们可以得到他的分辨率就是2.5/212 = 0.0006也就是说它可以测量到0.0006V的电压。

3.转化时间这个比较复杂,因为涉及到ADC的构成以及工作原理,所以下面我们需要专门来讲一讲ADC的电路工作原理。

首先第一个我们需要知道的是采样定理,对于现在大部分的规模电路乃至超大规模电路,都基本的是以数字为主的,但是实际的大部分参量是模拟的,所以就需要解决这之间的桥梁问题。

MSP430单片机构成ΣΔ型AD转换器原理及实现方法

MSP430单片机构成ΣΔ型AD转换器原理及实现方法

* !$$(+,A,%)/#$)
(0)
在一定的误差范围内,有 !>?@ * !’(,则:
!’( *(+,A,(%)+%()/#$)
* !$$(+,A,%)/#$)
(/)
虽然 %)+ * %)! *’’’和 %(+ * %(!
*’’’不一定成立,但总体效果上看,可以认为它
们是等宽的’由- 个高电平和. ,- B!型 /E转换器原理及实现方法
刘 刚,刘风 ,于 军
(吉林化工学院 自动化系,吉林 吉林 ?"!(!!)
摘要:主要介绍 83D*"(微功耗单片机构成 !B!型 /E转换器的原理,给出了对应的电路图和程序框
图&83D*"(单片机主要特点是功耗极低、片内含有比较器,可以使用很少的零件构成 !B!型 /E 转换
器即增加了成本,又存在单片机与 /E 转换器连
字值&对含有比较器的单片机可以使用很少的零 件构成 !B!型 /E转换器,得较高的分辨率&
(")83D*"(系列单片机是美国德州仪器公 司?AA)年以后逐步开发出来的?)位微功耗单片 机(86-)&主要特点是功耗极低、开发方便、产品 系列化,可随使用要求不同选择相应产品&本文介 绍的 !B! 型 /E 转换电路由 83D*"(1*?" 单片 机构成,其片内结构如图?所示&
相似文献(9条)
1.期刊论文 崔明.佟刚.吴志勇.CUI MING.TONG GANG.WU ZHIYONG 基于MSP430的纸张耐压强度检测系统 -微计
算机信息2007,23(29)
基于MSP430单片机开发了一种新型的纸张耐压强度检测系统.采集的微弱信号通过两级放大器放大,测量时自动变换量程,提高了检测结果的精 度和稳定性.利用MSP430单片机片上外围部件集成度高的特性,使系统结构紧凑,节约了成本.增强的用户接口界面,使操作简便.

MSP430AD转换

MSP430AD转换

MSP430AD转换对AD 转换的理解对SHI 加一个上升沿的信号则初始化AD 转换,An analog-to-digital conversion is initiatedwith a rising edge of the sampleinput signal SHI. The source for SHI is selected with the SHSx bits andincludes the following:The ADC12SC bit The Timer_A Output Unit 1The Timer_B OutputUnit 0The Timer_B Output Unit 1The polarity of the SHI signal source can be inverted with the ISSH bit. TheSAMPCON signal controls the sample period and start of conversion. WhenSAMPCON is high, sampling is active. The high-to-low SAMPCON transitionstarts the analog-to-digital conversion, which requires13 ADC12CLKcycles.Two different sample-timing methods are defined by control bit SHP, extendedsample mode and pulse mode其中扩展采样模式(SHP=0):即SHI 信号直接决定采样时间,参看DATASHEET 和时序图脉冲采样模式时,SHI 只负责输入一个上升沿信号来触发采样,而采样时间由ADC12CLK 及SH0_X 或SHT1_X 决定,转换存储器:MSP430 有16 个转换存储器,对应16 个8 位的存储控制寄存器,在储存控制寄存器ADC12MCTLX 中涉及到EOS, INCH,SREF。

msp430学习的深度解析和总结

msp430学习的深度解析和总结

msp430学习的深度解析和总结一、MSP430开发环境建立1.安装IAR dor msp430 软件,软件带USB仿真器的驱动。

2.插入USB仿真器,驱动选择安装目录的/drivers/TIUSBFET3.建立一个工程,选择"option"选项,设置a、选择器件,在"General"项的"Target"标签选择目标器件b、选择输出仿真,在"Linker"项里的"Output"标签,选择输出"Debug information for C-SPY",以输出调试信息用于仿真。

c、若选择"Other",Output下拉框选择"zax-m"即可以输出hex文件用以烧录,注意,此时仿真不了。

d、选择"Debugger"项的"Setup"标签,"Driver"下拉框选择"FET Debugger"e、选择"FET Debugger"项的"Setup"标签,"Connection"下拉框选择"Texas Instrument USB-I"4.仿真器的接口,从左到右分别为" GND,RST,TEST,VCC"二、IO口数字输入/输出端口有下列特性:每个输入/输出位都可以独立编程。

允许任意组合输入、输出。

P1 和P2 所有8 个位都可以分别设置为中断。

可以独立操作输入和输出数据寄存器。

可以分别设置上拉或下拉电阻。

在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。

MSP430单片机AD转换实验

MSP430单片机AD转换实验

AD转换实验一、转换原理MSP430F149勺A/D转换器原理请参考相关书籍。

实验板上与AD相关的硬件电路:RV310K------------ 3-3\J6P61SI?2Al)输入电路RV4III-10K f > 2 ;|||二、转换程序1、程序1:转换结果发送到PC主程序中进行A/D初始化,中断服务程序读A/D转换结果,主程序中通过串口发送结果。

“ main 、c ”主程序与中断程序:/*********************************************************程序功能:将ADC 对P6、0端口电压的转换结果按转换数据与对应的 模拟电压的形式通过串口发送到PC 机屏幕上显示通信格式 :N 、 8、 1, 9600测试说明 :打开串口调试精灵 ,正确设置通信格式 ,观察接收数据 **********************************************************/ #include <msp430 、 h> #include "allfunc 、 h" #include "UART0_Func 、 c" #include "ADC_Func 、 c" #define Num_of_Results 32 uint results[Num_of_Results]; // 保存 ADC 转换结果的数组uint average; uchar tcnt = 0; /*********************** void main( void ){uchar i; uchar buffer[5];WDTCTL = WDTPW + WDTHOLD; // 关狗 /* 下面六行程序关闭所有的 IO 口 */ P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT=0XFF;P3DIR = 0XFF;P3OUT=0XFF;P4DIR = 0XFF;P4OUT=0XFF;P5DIR = 0XFF;P5OUT=0XFF;P6DIR = 0XFF;P6OUT = 0XFF; P6DIR |= BIT2;P6OUT |= BIT2; // P6DIR|=BIT6;P6OUT&=~BIT6; //InitUART(); Init_ADC(); _EINT(); buffer[4] = '\0';主函数 *********************关闭电平转换关闭数码管显示while(1){LPM1;Hex2Dec(average,buffer);for(i = 0; i < 4; i++) buffer[i] += 0x30;PutString0("The digital value is: ");PutString(buffer);Trans_val(average,buffer); buffer[3] = buffer[2]; buffer[2] = buffer[1];buffer[1] = 0x2e - 0x30; for(i = 0; i < 4; i++) buffer[i] += 0x30;PutString0("The analog value is: "); PutString(buffer);}}/******************************************* 函数名称:ADC12ISR功能:ADC中断服务函数,在这里用多次平均的计算P6、0 口的模拟电压数值参数: 无返回值: 无********************************************/ #pragmavector=ADC_VECTOR __interrupt void ADC12ISR (void) { static uchar index = 0;results[index++] = ADC12MEM0; // Move results if(index == Num_of_Results) {uchar i;average = 0;for(i = 0; i < Num_of_Results; i++){ average += results[i];average >>= 5; // 除以 32index = 0; tcnt++;if(tcnt == 250) // 主要就是降低串口发送速度 { LPM1_EXIT; tcnt = 0; } }}“ADC_Func 、 c ” A/D 转换相关程序 : #include <msp430 、 h> typedef unsigned int uint; /******************************************** 函数名称 :Init_ADC 功 能: 初始化 ADC 参 数: 无 返回值 : 无********************************************/ void Init_ADC(void) {P6SEL |= 0x01; // ADC12CTL0 =ADC12ON+SHT0_15+MSC; // ADC12CTL1 =SHP+CONSEQ_2; // ADC12IE = 0x01; // ADC12CTL0 |= ENC; // ADC12CTL0 |= ADC12SC; //}/******************************************** 函数名称 :Hex2Dec功 能:将16进制ADC 专换数据变换成十进制表示形式参数:Hex_Val--16 进制数据 ptr--指向存放专换结果的指针返回值 : 无 ********************************************/ void Hex2Dec(uint Hex_val,uchar *ptr) { ptr[0] = Hex_val / 1000;ptr[1] = (Hex_val - ptr[0]*1000)/100; ptr[2] = (Hex_val - ptr[0]*1000 - ptr[1]*100)/10;使能ADC 通道打开ADC 设置采样时间 使用采样定时器 使能ADC 中断 使能专换 开始专换、 41ptr[3] = (Hex_val - ptr[0]*1000 - ptr[1]*100 - ptr[2]*10);}/******************************************* 函数名称 :Trans_val功 能:将16进制ADC 专换数据变换成三位 10进制真实的模拟电压数据 , 并在液晶上显示参数:Hex_Val--16 进制数据返回值 : 无********************************************/ void Trans_val(uint Hex_Val,uchar *ptr){unsigned long caltmp; uint Curr_Volt; uchar t1;caltmp = Hex_Val;caltmp = (caltmp << 5) + Hex_Val; //caltmp = Hex_Val * 33 caltmp = (caltmp << 3) + (caltmp << 1); //caltmp = caltmp * 10 Curr_Volt = caltmp >> 12; 〃Curr_Volt = caltmp / 25 ptr[0] = Curr_Volt / 100;//Hex->Dect1 = Curr_Volt - (ptr[0] * 100); ptr[1] = t1 / 10;ptr[2] = t1 - (ptr[1] * 10);}“UARTO_Func c ”串口程序: #include <msp430 、h> typedef unsigned char uchar;/******************************************* 函数名称 :InitUART 功 能:初始化UART 端 口参 数: 无 返回值 : 无********************************************// P3 、 4,5 =// Enable USART0 T/RXD// 8-bit character// UCLK = ACLK// 32k/9600 - 3 // // Modulationvoid InitUART(void){P3SEL |= 0x30; ME1 |= URXE0 + UTXE0;UCTL0 |= CHAR; UTCTL0 |= SSEL0; UBR00 = 0x03; UBR10 = 0x00; UMCTL0 = 0x4A;变换USART0 TXD/RXD// Initialize USART state machine}/*******************************************函数名称:Send1Char功能:向PC机发送一个字符参数:se ndchar--要发送的字符返回值:无********************************************void Send1Char(uchar sendchar){while (!(IFG1 & UTXIFG0)); //TXBUF0 = sendchar;等待发送寄存器为空} /******************************************* 函数名称:PutSting功能:向PC机发送字符串并换行指令参数:ptr--指向发送字符串的指针返回值: 无********************************************/void PutString(uchar *ptr){while(*ptr != '\0'){Send1Char(*ptr++); //}while (!(IFG1 & UTXIFG0));TXBUF0 = '\n'; //} /******************************************* 函数名称:PutSting0功能:向PC机发送字符串,无换行参数:ptr--指向发送字符串的指针返回值: 无********************************************/ void PutString0(uchar *ptr){while(*ptr != '\0'){Send1Char(*ptr++); // }}发送数据发送换行指令发送数据2、程序2: 转换结果显示在1602 显示模块上UCTL0 &= ~SWRST;“ main、c” 程序#include <msp430x14x 、h> #include "cry1602 、h" typedef unsigned char uchar; typedef unsigned int uint;/************** 宏定义***************/#define DataDir P2DIR#define DataPort P2OUT#define Busy 0x80#define CtrlDir P6DIR#define CLR_RS P6OUT&=~BIT3; //RS = P6 、3#define SET_RS P6OUT|=BIT3;#define CLR_RW P6OUT&=~BIT4; //RW = P6 、4#define SET_RW P6OUT|=BIT4;#define CLR_EN P6OUT&=~BIT5; //EN = P6 、5#define SET_EN P6OUT|=BIT5;/*******************************************函数名称:DispNchar功能:让液晶从某个位置起连续显示N个字符参数: x-- 位置的列坐标y-- 位置的行坐标n-- 字符个数ptr-- 指向字符存放位置的指针返回值: 无******************************************void DispNChar(uchar x,uchar y, uchar n,uchar *ptr) uchar i;for (i=0;i<n;i++){Disp1Char(x++,y,ptr[i]);if (x == 0x0f){x = 0;y A= 1;}}}/*******************************************函数名称:LocateXY功能: 向液晶输入显示字符位置的坐标信息参数:x-- 位置的列坐标y-- 位置的行坐标返回值: 无******************************************void LocateXY(uchar x,uchar y) {uchar temp;temp = x&0x0f; y &=0x01;如果在第 2 行if(y) temp |= 0x40; //temp |= 0x80;LcdWriteCommand(temp,1);}/******************************************* 函数名称:Disp1Char功能: 在某个位置显示一个字符参数:x-- 位置的列坐标y-- 位置的行坐标data-- 显示的字符数据返回值: 无********************************************/ voidDisp1Char(uchar x,uchar y,uchar data) {LocateXY( x, y );LcdWriteData( data );} /******************************************* 函数名称:LcdReset功能: 对1602 液晶模块进行复位操作参数: 无返回值: 无********************************************/ voidLcdReset(void){CtrlDir |= 0x07; //DataDir = 0xFF; //控制线端口设为输出状态数据端口设为输出状态// 规定的复位操作LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 1); LcdWriteCommand(0x08, 1); LcdWriteCommand(0x01, 1); LcdWriteCommand(0x06, 1); LcdWriteCommand(0x0c, 1);}/******************************************* 函数名称 :LcdWriteCommand 功 能: 向液晶模块写入命令 参数 :cmd-- 命令 , chk-- 就是否判忙的标志返回值 : 无********************************************/void LcdWriteCommand(uchar cmd,uchar chk) {/******************************************* 函数名称 :LcdWriteData 功 能: 向液晶显示的当前地址写入显示数据 参数 :data-- 显示字符数据返回值 : 无 ********************************************/ void LcdWriteData( uchar data ) {WaitForEnable(); // 等待液晶不忙 SET_RS; CLR_RW; _NOP(); DataPort = data;// 将显示数据写入数据端口CLR_RS;CLR_RW; _NOP();DataPort = cmd; _NOP();//将命令字写入数据端口SET_EN; _NOP(); _NOP(); CLR_EN;}//产生使能脉冲信号检测忙信号 ?// 显示模式设置 // 显示关闭 // 显示清屏// 写字符时整体不移动 // 显示开 , 不开游标 , 不闪烁,1: 判忙 ,0: 不判if (chk) WaitForEnable(); //_NOP();SET_EN; // 产生使能脉冲信号_NOP();_NOP();CLR_EN;}/*******************************************函数名称:WaitForEnable功能:等待1602 液晶完成内部操作参数: 无返回值: 无********************************************/void WaitForEnable(void){P2DIR &= 0x00; // 将P4 口切换为输入状态CLR_RS;SET_RW;_NOP();SET_EN;_NOP();_NOP();while((P2IN & Busy)!=0); // 检测忙标志CLR_EN;P2DIR |= 0xFF; // 将P4 口切换为输出状态}/*******************************************函数名称:Delay5ms功能: 延时约5ms参数: 无返回值: 无******************************************** void Delay5ms(void){uint i=40000;while (i != 0)y-- 位置的行坐标i--;}}/******************************************* 函数名称 :Delay400ms 功 能: 延时约 400ms参 数: 无 返回值 : 无 ******************************************** void Delay400ms(void){uchar i=50;uint j;while(i--){j=7269;while(j--);}}“ cry1602、c ” 程序#include <msp430x14x 、 h> #include "cry1602 、 h" typedef unsigned char uchar; typedef unsigned int uint; 宏定义 ***************/P2DIRP2OUT0x80P6DIRn--字符个数 ptr--指向字符存放位置的指针 返回值 : 无********************************************/ void DispNChar(uchar x,uchar y, ucharn,uchar *ptr) { uchar i; for (i=0;i<n;i++) /************** #define DataDir #define DataPort #define Busy#define CtrlDir//RS = P6#define CLR_RS P6OUT&=~BIT3; #define SET_RS P6OUT|=BIT3;#define CLR_RW P6OUT&=~BIT4;#define SET_RW P6OUT|=BIT4;#define CLR_EN P6OUT&=~BIT5;#define SET_EN P6OUT|=BIT5;/******************************************* 函数名称 :DispNchar功 能:让液晶从某个位置起连续显示 N 个字符 参 数:X--位置的列坐标//RW = P6 、//EN = P6 、{Disp1Char(x++,y,ptr[i]);if (x == 0x0f){x = 0;y A= 1;}}}/*******************************************函数名称:LocateXY功能: 向液晶输入显示字符位置的坐标信息参数:x-- 位置的列坐标y-- 位置的行坐标返回值: 无********************************************/void LocateXY(uchar x,uchar y){uchar temp;temp = x&0x0f;y &= 0x01;if(y) temp |= 0x40; // 如果在第2 行temp |= 0x80;LcdWriteCommand(temp,1);}/*******************************************函数名称:Disp1Char功能: 在某个位置显示一个字符参数:x-- 位置的列坐标y-- 位置的行坐标data-- 显示的字符数据返回值: 无******************************************void Disp1Char(uchar x,uchar y,uchar data) {LocateXY( x, y );LcdWriteData( data );} /******************************************* 函数名称:LcdReset 功能: 对1602 液晶模块进行复位操作参数: 无返回值: 无******************************************void LcdReset(void){CtrlDir |= 0x07; //DataDir = 0xFF; //********************************************/void LcdWriteCommand(uchar cmd,uchar chk) { if (chk) WaitForEnable(); // 检测忙信号?CLR_RS;CLR_RW; _NOP(); 控制线端口设为输出状态数据端口设为输出状态LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 1);LcdWriteCommand(0x08, 1);LcdWriteCommand(0x01, 1);LcdWriteCommand(0x06, 1);LcdWriteCommand(0x0c, 1);}/******************************************* 函数名称:LcdWriteCommand 功能: 向液晶模块写入命令参数:cmd-- 命令,chk-- 就是否判忙的标志返回值: 无// 规定的复位操作// 显示模式设置// 显示关闭// 显示清屏// 写字符时整体不移动// 显示开, 不开游标, 不闪烁,1: 判忙,0: 不判SET_EN; //_NOP();_NOP();CLR_EN;}/******************************************* 函数名称 :LcdWriteData功能: 向液晶显示的当前地址写入显示数据 参 数 :data-- 显示字符数据返回值 : 无********************************************/ void LcdWriteData( uchar data ){WaitForEnable(); // 等待液晶不忙SET_RS;CLR_RW; _NOP();SET_EN; //_NOP();_NOP();CLR_EN; }***************************************** 函数名称 :WaitForEnable功 能:等待 1602 液晶完成内部操作 参 数: 无返回值 : 无********************************************/ void WaitForEnable(void){P2DIR &= 0x00; // 将 P4 口切换为输入状态 CLR_RS;SET_RW;_NOP(); SET_EN;_NOP();_NOP();while((P2IN & Busy)!=0); // 检测忙标志 DataPort = cmd;_NOP();// 将命令字写入数据端口 产生使能脉冲信号 DataPort = data;// _NOP();将显示数据写入数据端口产生使能脉冲信号CLR_EN;P2DIR |= 0xFF; // 将P4 口切换为输出状态}/*******************************************函数名称:Delay5ms 功能: 延时约5ms参数: 无返回值: 无********************************************/void Delay5ms(void){uint i=40000; while (i != 0){i--;}}/*******************************************函数名称:Delay400ms 功能: 延时约400ms参数: 无返回值: 无********************************************/void Delay400ms(void){uchar i=50; uint j;while(i--) {j=7269; while(j--);。

高精度数模转换器AD420及其与MSP430的接口技术

高精度数模转换器AD420及其与MSP430的接口技术
Sh o o l tcl n fr ainE n e n, i n agbsit o i c n e h o g, ri 5 0 7C i ) c olfEe r a adI om t e r g He o ̄i t t e fS e eadTc n l y bn10 2 ,hn ci n o i l n tu c n o Ha a
Ke r s y wo d :AD 2 ; D/ o v r; MS 4 0 c re t o p 40 A c n et P 3 ; u rn o l
1 概 述
A 4 0是 A I 司生产 的高精度 、低功 耗全 数 D2 D公
进行 配置 。当需要 输 出 电压信 号时 , 能从 一个 隔 它也
a d i h sS Ia d M irwi o ail n e a eI i o v ne t o u ea d h shg e o ma c n n t a P n co r c mp t e itr c . sc n e in s ,n a ih p r r n e a d e b f t t f
摘 要 :D 2 A 4 0是 具有 灵活 串行数 字接 口的 l 6位数 模 转换 器 .它带 有 S I Mi o i P和 c wr r e总线接 口. 使
用方便 、 性价 比高。 绍 了 A 4 0的 引脚功 能 、 气特 性 , 介 D2 电 阐述 了 AD 2 4 0与 MS 4 0的接 口技 术 。 P3 并
给 出 了在 MS 4 0控 制 下的 实 际应 用电路及 程序 。 P3
关 键 词 : D 2 ; D A转换 : MS 4 0 A 40 / P 3 ;电流环
中图分 类号 :N 9 ,P 6 T 7 ̄ T 3 8 2
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

高精度数模转换器AD420及其与MSP430的接口技术
1 概述
AD420是ADI公司生产的高精度、低功耗全数字电流环输出转换器。

AD420的输出信号可以是电流信号,也可以是电压信号。

其中电流信号的输出范围为4mA~20mA,0mA~20mA或0mA~24mA,具体可通过引脚RANGE SELECTl,RANGE SELECT2进行配置。

当需要输出电压信号时,它也能从一个隔离引脚提供电压输出,这时需外接一个缓冲放大器,可输出0V~5V,0V~10V,±5V或±10V电压。

AD420具有灵活的串行数字接口(最大速率可达3.3 Mb/s),使用方便、性价比高、抑制干扰能力强,非常适合用于高精度远程控制系统。

AD420与单片机的接口方式有2种:3线制和异步制。

单片机系统通过AD420可实现连续的模拟量输出。

其主要特点如下:
∙宽泛的电源电压范围为12 V~32 V,输出电压范围为0V~-2.5 V;
∙带有3线模式的SPI或Microwire接口,可采集连续的模拟输入信号,采用异步模式时仅需少量的信号线;
∙数据输出引脚可将多个AD420器件连接成菊链型;
∙上电初始化时,其输出最小值为0 mA,4 mA或O V;
∙具有异步清零引脚,可将输出复位至最小值(0mA、4 mA或0V);
∙BOOST引脚可连接一个外部晶体管来吸收回路电流,降低功耗;
∙只需外接少量的外部器件,就能达到较高的精度。

AD420采用24引脚SOIC和PDIP封装,表1是其引脚功能说明。

2 工作原理
在AD420中,二阶调节器用于保持最小死区。

从调节器发出的单字节流控制开关电流源,两个连续的电阻电容装置进行过滤。

电容为电流输出额外增加的器件。

输出电流则简单显示为4 mA~20 mA,OmA~20mA或0mA~24mA。

AD420采用BiCMOS工艺,能够适合高性能的低电压数字逻辑和高电压模拟电路。

如果需要,AD420同样能够提供电压输出代替电流环输出。

增加了一个额外的电压放大器使用户得到OV~5 V,0V~10V,±5V或±10V的电压。

AD420有一个环路故障检测电路。

当开环或者供电电压不足使IOUT电压超过限制电压时会产生警报。

故障检测端为低电平触发,所以可以用一个上拉电阻器同时连接至多个AD420的故障检测端,上拉电阻器可以接至VLL端或外接5 V逻辑电压。

IOUT电流由一个PMOS晶体管和内置放大器控制。

内置电路提供故障输出,避免使用窗口限制比较器,这就要求在故障检测端输出有效之前需要一个实际的误差输出。

反之,当AD420输出级的内置放大值低于l V的驱动值时,信号就会产生。

因此,故障输出端在跳转限制达到要求之前保持不变。

由于比较在输出放大反馈网络内进行,输出精度通过开环增益保持稳定,在故障检测输出变为有效之前没有输出误差。

3个数字接口,包括数据输入、CLOCK、LATCH。

如果用户想要使本质安全应用电路具有最少的流电隔离器数目,可将AD420配置在异步模式下工作,这种模式可将LATCH通过一个限流电阻连接到Vcc来实现。

数据的值通过O,1进行组合来构造信息并触发LATCH信号。

2.1 时序操作
如图1所示,AD420采用∑-△架构进行A/D转换,由于其内部结构固有的单调性以及高分辨率,因此特别适合工业控制环境的相对低带宽需求。

2.2 电流模式输出
如图2所示,AD420在不需要任何外部有源器件的情况下能提供4 mA~20 mA、0 mA~20 mA 及0mA~24mA电流输出。

滤波电容Cl和C2可选择低成本的陶瓷电容。

为了满足满量程3 ms 的快速响应,应选用低电介质吸收电容,其中C1=O.OlμF,C2=0.0lμF。

2.3 电压模式输出
如图3所示,由于AD420是一个单电源器件,必须在VOUT引脚增加一个外部缓冲放大器。

其两级电压输出范围如表2所列。

2.4 可选范围及零点调整
用户若希望获得低于指定值的偏移和增益误差,可用图4给出的简单方法来调整这些参数。

选用低漂移电阻要谨慎,因为它们会影响DAC的温度漂移性能。

调整算法采用迭代法。

在4 mA~20 mA模式下,AD420的参数调整方法如下所示:
1)偏移调整。

设所有输入为0,调节调零电阻(RZERO)使输出电流为4.00000 mA。

2)增益调整。

设所有输入为1,调节调零电阻(RZERO)使输出电流为19.99976 mA。

重复第一和第二步,直到两端的精度都达到要求。

在BOOST引脚以及电源之间连接一个5 kΩ电阻(RSPAN2)可使增益提高+0.8%。

由于RSPAN电阻可变化到最大值500 Ω,在RSPAN电阻和基准输入电阻(30 kΩ)的作用下,基准输入端电压将受到影响。

当调整RSPAN2电阻的大小时,三者共同影响将使基准输入电压误差在-O.8%~+0.8%范围内变化。

3 基于MSP430的接口应用及编程
硬件接口电路如图5所示。

MSP430的串口通信模块可用两种方式实现:一是直接采用硬件通用串行同步/异步模块(USART);二是通过定时器模块实现串口通信功能。

这两种方式有很大的区别:前者USART模块是在一系列寄存器设置后,由硬件自动实现数据的移进和移出来完成串行通信的功能,同时还能实现两种通信协议,即UART异步通信协议和SPI同步通信协议;后者是在定时器的作用下,人工通过用户软件控制,逐位地将数据由端口发送或接收,因此常称为软件串行口。

点击看原图
MSP430的发送或接收主要是移位寄存器在起作用。

两个缓存器都是采用移位寄存器加缓存的结构。

接收时,当移位寄存器将接收来的数据位流组合满一个字节后,保存到接收缓存URXBUF;发送时,是将发送缓存UTXBUF内的数据逐一送至发送端口。

发送和接收两个移位寄存器的移位时钟都是波特率发生器产生的时钟信号BITCLK。

MSP430的接收和发送分别使用两个寄存器,为全双工。

对于没有SPI总线的单片机,可用MSP430的I/0口模拟SPI总线,程序如下:
MSP430x13x系列的硬串口具有SOI模式,编程更为简单,其初始化程序如下:。

相关文档
最新文档