资源描述
A/D、D/A的选择及应用,摘要,本放大器由ADC0832和DAC0832组成,由单片机控制,对数据进行采集显示电压值。其过程是先A/D进行数模转换,经过单片机,再D/A数模转换的滤波输出。 关键词:DAC ADC 单片机,二、硬件设计,2.1概述,AD的选择,首先看其分辨率量化误差、线性度、转换速率等;其输入方式是差分还是单端输入的,输入范围是多少,这些都是选AD需要考虑的。DA的选择,主要是精度、分辨率、线性度及建立时间,与单片机的连接方式有单缓冲工作方式、双缓冲工作方式、直通工作方式(我们选择的是直通工作方式)。DAC0832以电流形式输出,当需要转换为电压输出时,可外接运算放大器。,软件设计,四、系统测试,采用示波器测量输出的电压值,然后记录信号发生器显示的输入,生成表4.1,4.2 指标测试和测试结果,结论,使用单片机实现对数据先进行A/D数模转换,再进行D/A数模转化的滤波输出,最终完成了直流电压的数据采集。,示波器显示,附件,/本程序功能:用ADC0832测量电压并显示,并通过DAC0832输出相同的电压 #include #include #defineSEG_DP P0 #define SEG_WP P2 #define DA_DP P3 sbit ADCS = P10; sbit ADCLK = P11; sbit ADDI = P12; sbit ADDO = P12;,sbit DAILE = P24; sbit DAWR2 = P25; sbit DAXFER = P26; sbit DAWR1 = P27; unsigned char code Tab=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F; void Delay1mS(unsigned int tt) unsigned char i; while(tt-) for(i=113;i0;i-); ,void Display(unsigned int dat) /显示的数值为毫伏 unsigned char ge,shi,bai,qian; qian = dat/1000%10; bai = dat/100%10; shi = dat/10%10; ge = dat%10; SEG_WP = SEG_WP ,Delay1mS(10); SEG_WP = SEG_WP,_nop_(); ADDI = 1;/第1个下降沿为高电平 ADCLK = 1;/拉高CLK端 _nop_(); _nop_(); ADCLK = 0;/拉低CLK端,形成下降沿1 _nop_(); _nop_(); ADDI = mode;/低电平为差分模式,高电平为单通道模式。 ADCLK = 1;/拉高CLK端,_nop_(); _nop_(); ADCLK = 0;/拉低CLK端,形成下降沿2 _nop_(); _nop_(); ADDI = channel;/低电平为CH0,高电平为CH1 ADCLK = 1;/拉高CLK端 _nop_(); _nop_(); ADCLK = 0;/拉低CLK端,形成下降沿3 adc = adc*19.607843; /转换为实际电压便于显示 Display(adc);,ADDI = 1;/控制命令结束(经试验必需) dat = 0; /下面开始读取转换后的数据,从最高位开始依次输出(D7D0) for(i = 0;i = 1; ADCLK = 1;/拉高时钟端,_nop_(); _nop_(); ADCLK = 0;/拉低时钟端形成一次时钟脉冲 _nop_(); _nop_(); if(ADDO = 1) ndat |= 0 x80; ADCS = 1;/拉高CS端,结束转换 ADCLK = 0;/拉低CLK端 ADDI = 1;/拉高数据端,回到初始状态 if(dat = ndat) return(dat);,else return 0; void DAC0832(unsigned char dat) DAILE = 1; DAWR1 = 0; DAXFER = 0; DAWR2 = 0; DA_DP = dat; main() unsigned int adc; while(1) adc = ADC0832(0,0); /差分模式,CH0-CH1 DAC0832(adc);,
展开阅读全文