深圳设计网站培训,wordpress删除文章数据库,小说阅读网站开发设计,软件项目管理期末考试AD转换
分辨率 ADC的分辨率是指使输出数字量变化一个相邻数码所需输入模拟电压的变化量。常用二进制的位数表示。例如12位ADC的分辨率就是12位#xff0c;或者说分辨率为满刻度的1/(2^12)。 一个10V满刻度的12位ADC能分辨输入电压变化最小值是10V1/(2^12 )2.4mV。
量化误差 …AD转换
分辨率 ADC的分辨率是指使输出数字量变化一个相邻数码所需输入模拟电压的变化量。常用二进制的位数表示。例如12位ADC的分辨率就是12位或者说分辨率为满刻度的1/(2^12)。 一个10V满刻度的12位ADC能分辨输入电压变化最小值是10V×1/(2^12 )2.4mV。
量化误差 ADC把模拟量变为数字量用数字量近似表示模拟量这个过程称为量化。量化误差是ADC的有限位数对模拟量进行量化而引起的误差。实际上要准确表示模拟量ADC的位数需很大甚至无穷大。一个分辨率有限的ADC的阶梯状转换特性曲线与具有无限分辨率的ADC转换特性曲线直线之间的最大偏差即是量化误差。
偏移误差 偏移误差是指输入信号为零时输出信号不为零的值所以有时又称为零值误差。假定ADC没有非线性误差则其转换特性曲线各阶梯中点的连线必定是直线这条直线与横轴相交点所对应的输入电压值就是偏移误差。
满刻度误差 满刻度误差又称为增益误差。ADC的满刻度误差是指满刻度输出数码所对应的实际输入电压与理想输入电压之差。
线性度 线性度有时又称为非线性度它是指转换器实际的转换特性与理想直线的最大偏差。
绝对精度 在一个转换器中任何数码所对应的实际模拟量输入与理论模拟输入之差的最大值称为绝对精度。对于ADC而言可以在每一个阶梯的水平中点进行测量它包括了所有的误差。
转换速率 ADC的转换速率是能够重复进行数据转换的速度即每秒转换的次数。而完成一次A/D转换所需的时间包括稳定时间则是转换速率的倒数。 逐次逼近式ADC的转换原理 逐次逼近式AD转换器与计数式A/D转换类似只是数字量由“逐次逼近寄存器SAR”产生。SAR使用“对分搜索法”产生数字量以8位数字量为例SAR首先产生8位数字量的一半即10000000B,试探模拟量Vi的大小若VnVi清除最高位若VnVi,保留最高位。在最高位确定后SAR又以对分搜索法确定次高位即以低7位的一半y1000000B(y为已确定位) 试探模拟量Vi的大小。在bit6确定后SAR以对分搜索法确定bit5位即以低6位的一半yy100000B(y为已确定位) 试探模拟量的大小。重复这一过程直到最低位bit0被确定转换结束。
如果要检测转换电位器模拟信号控制字命令寄存器值为0X94或者0XB4.如果要检测转换热敏电阻模拟信号控制字命令寄存器值为0XD4.如果要检测转换光敏电阻模拟信号控制字命令寄存器值为0XA4.如果要检测转换AIN3通道上模拟信号控制字命令寄存器值为0XE4. 实验代码
XPT2046.h
#ifndef _XPT2046_H
#define _XPT2046_H#include reg52.h
#include intrins.h#ifndef uchar
#define uchar unsigned char
#endif#ifndef uint
#define uint unsigned int
#endifsbit DOUTP3^7;
sbit CLKP3^6;
sbit DINP3^4;
sbit CSP3^5;uint Read_AD_Data(uchar cmd);
uint SPI_Read(void);
void SPI_Write(uchar dat);#endifXPT2046.c
#include XPT2046.hvoid SPI_Write(uchar dat)
{uchar i;CLK0;for(i0;i8;i){DINdat7;dat1;CLK0;CLK1;}
}uint SPI_Read(void)
{uint i,dat0;CLK0;for(i0;i12;i){dat1;CLK1;CLK0;dat|DOUT;}return dat;
}uint Read_AD_Data(uchar cmd)
{uchar i;uint AD_Value;CLK0;CS0;SPI_Write(cmd);for(i0;i6;i){ }CLK1;_nop_();_nop_();CLK0;_nop_();_nop_();AD_ValueSPI_Read();CS1;return AD_Value;
}main.c
#include reg52.h
#include XPT2046.htypedef unsigned int u16;
typedef unsigned char u8;sbit LSAP2^2;
sbit LSBP2^3;
sbit LSCP2^4;u8 disp[4];
u8 code smgduan[10]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void delay(u16 i)
{while(i--);
}void datapros()
{u16 temp;static u8 i;if(i50){i0;tempRead_AD_Data(0x94);}i;disp[0]smgduan[temp/1000];disp[1]smgduan[temp%1000/100];disp[2]smgduan[temp%100/10];disp[3]smgduan[temp%10];
}void DigDisplay()
{u8 i;for(i0;i4;i){switch(i) //位选选择点亮的数码管{case(0):LSA0;LSB0;LSC0; break;//显示第0位case(1):LSA1;LSB0;LSC0; break;//显示第1位case(2):LSA0;LSB1;LSC0; break;//显示第2位case(3):LSA1;LSB1;LSC0; break;//显示第3位 }P0disp[3-i];//发送数据delay(100); //间隔一段时间扫描 P00x00;//消隐}
}void main()
{while(1){datapros();DigDisplay();}
}