adc0832模数转换的串行协议.docx
- 文档编号:23502957
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:11
- 大小:20.86KB
adc0832模数转换的串行协议.docx
《adc0832模数转换的串行协议.docx》由会员分享,可在线阅读,更多相关《adc0832模数转换的串行协议.docx(11页珍藏版)》请在冰豆网上搜索。
adc0832模数转换的串行协议
竭诚为您提供优质文档/双击可除
adc0832模数转换的串行协议
篇一:
单片机和adc0832的ad模数转换
单片机和adc0832的ad模数转换
在工业控制和智能化仪表中,通常由微型计算机进行实时控制及实时数据处理。
计算机所加工的信息总是数字量,而被控制或被测量的有关参量往往是连续变化的模拟量,如温度、速度、压力等等,与此对应的电信号是模拟信号。
模拟量的存储和处理比较困难,不适合作为远距离传输且易受干扰。
在一般的工业应用系统中传感器把非电量的模拟信号变成与之对应的模拟信号,然后经模拟(analog)到数字(digital)转换电路将模拟信号转成对应的数字信号送微机处理。
这就是一个完整的信号链,模拟到数字的转换过程就是我们经常接触到的adc(analogtodigitalconvert)电路。
模-数转换(adc)简介
模-数转换原理
adc的转换原理根据adc的电路形式有所不同。
adc电路通常由两部分组成,它们是:
采样、保持电路和量化、编码电路。
其中量化、编码电路是最核心的部件,任何adc转换电路都必须包含这种电路。
adc电路的形式很多,通常可以并为两类:
间接法:
它是将采样-保持的模拟信号先转换成与模拟量成正比的时间或频率,然后再把它转换为数字量。
这种通常是采用时钟脉冲计数器,它又被称为计数器式。
它的工作特点是:
工作速度低,转换精度高,抗干扰能力强。
直接法:
通过基准电压与采样-保持信号进行比较,从而转换为数字量。
它的工作特点是:
工作速度高,转换精度容易保证。
模—数转换的过程有四个阶段,即采样、保持、量化和编码。
采样是将连续时间信号变成离散时间信号的过程。
经过采样,时间连续、数值连续的模拟信号就变成了时间离散、数值连续的信号,称为采样信号。
采样电路相当于一个模拟开关,模拟开关周期性地工作。
理论上,每个周期内,模拟开关的闭合时间趋近于0。
在模拟开关闭合的时刻(采样时刻),我们就“采”到模拟信号的一个“样本”。
量化是将连续数值信号变成离散数值信号的过程。
理论上,经过量化,我们就可以将时间离散、数值连续的采样信号变成时间离散、数值离散的数字信号。
我们知道,在电路中,数字量通常用二进制代码表示。
因此,量化电路的后面有一个编码电路,将数字信号的数值转换成二进制代码。
然而,量化和编码总是需要一定时间才能完成,所以,量化电路的前面还要有一个保持电路。
保持是将时间离散、数值连续的信号变成时间连续、数值离散信号的过程。
在量化和编码期间,保持电路相当于一个恒压源,它将采样时刻的信号电压“保持”在量化器的输入端。
虽然逻辑上保持器是一个独立的单元,但是,工程上保持器总是与采样器做在一起。
两者合称采样保持器。
(adc0832模数转换的串行协议)八位串行a/d转换器adc0832简介
adc0832是美国国家半导体公司生产的一种8位分辨率、双通道a/d转换芯片。
由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。
adc083x是市面上常见的串行模—数转换器件系列。
adc0831、adc0832、adc0834、adc0838是具有多路转换开关的8位串行i/o模—数转换器,转换速度较高(转换时间32us),单电源供电,功耗低(15mw),适用于各种便携式智能仪表。
本章以adc0832为例,介绍其使用方法。
adc0832是8脚双列直插式双通道a/d转换器,能分别对两路模拟信号实现模—数转换,可以用在单端输入方式和差分方式下工作。
adc0832采用串行通信方式,通过di数据输入端进行通道选择、数据采集及数据传送。
8位的分辨率(最高分辨可达256级),可以适应一般的模拟量转换要求。
其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。
具有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。
adc0832具有以下特点:
·8位分辨率;
·双通道a/d转换;
·输入输出电平与ttl/cmos相兼容;
·5V电源供电时输入电压在0~5V之间;
·工作频率为250khz,转换时间为32μs;
·一般功耗仅为15mw;
·8p、14p—dip(双列直插)、picc多种封装;
·商用级芯片温宽为0°cto+70°c,工业级芯片温宽为-40°cto+85°c;
图3adc0832引脚图
芯片接口说明:
·cs_片选使能,低电平芯片使能。
·ch0模拟输入通道0,或作为in+/-使用。
·ch1模拟输入通道1,或作为in+/-使用。
·gnd芯片参考零电位(地)。
·di数据信号输入,选择通道控制。
·do数据信号输出,转换数据输出。
·clk芯片时钟输入。
·Vcc/ReF电源输入及参考电压输入(复用)
adc0832的工作原理:
正常情况下adc0832与单片机的接口应为4条数据线,分别是cs、clk、do、di。
但由于do端与di端在通信时并未同时使用并与单片机的接口是双向的,所以在i/o口资源紧张时可以将do和di并联在一根数据线上使用。
当adc0832未工作时其cs输入端应为高电平,此时芯片禁用,clk和do/di的电平可任意。
当要进行a/d转换时,须先将cs使能端置于低电平并且保持低电平直到转换完全结束。
此时芯片开始转换工作,同时由处理器向芯片时钟(clk)输入端输入时钟脉冲,do/di端则使用di
端输入通道功
能选择的数据信号。
在第一个时钟脉冲的下沉之前di端必须是高电平,表示启始信号。
在第二、三个脉冲下沉之前di端应输入两位数据用于选择通道功能。
通道地址通道工作方式说sgl/dodd/01明iFsign
1
10101+-+-++式差分方式单端输入方
表1:
通道地址设置表
如表1所示,当此两位数据为“1”、“0”时,只对ch0进行单通道转换。
当2位数据为“1”、“1”时,只对ch1进行单通道转换。
当两位数据为“0”、“0”时,将ch0作为正输入端in+,ch1作为负输入端in-进行输入。
当两位数据为“0”、“1”时,将ch0作为负输入端in-,ch1作为正输入端in+进行输入。
到第三个脉冲的下降之后di端的输入电平就失去输入作用,此后do/di端则开始利用数据输出do进行转换数据的读取。
从第4个脉冲下降沿开始由do端输出转换数据最高位data7,随后每一个脉冲的下降沿do端输出下一位数据。
直到第11个脉冲时发出最低位数据data0,一个字节的数据输出完成。
也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下降沿输出data0。
随后输出8位数据,到第19个脉冲时数据输出完成,也标志着一次a/d转换的结束。
最后将cs置高电平禁用芯片,直接将转换后的数据进行处理就可以了。
时序说明请参照图4。
作为单通道模拟信号输入时adc0832的输入电压是0—5V且8位分辨率时的电压精度为19.53mV,即(5/256)V。
如果作为由in+与in-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。
但值得注意的是,在进行in+与in-的输入时,如果in-的电压大于in+的电压则转换后的数据结果始终为00h。
adc0832的工作时序
图4adc0832工作时序
adc0832软硬件设计实例
通过以上的理论学习之后,对模—数转换应该有了一定的了解,接下来就根据上文的指导,对adc0832进行实际应用,以加深印象。
本实例功能是将通道1上采样到的电压显示在led数码管上,通过改变通道1的输入电压变化,观察输出读数。
硬件原理图
篇二:
51单片机数码管显示串行模数转换adc0832
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
//#definedisdatap0//显示数据段码输出口
#definechannel_00x02//单通道0输入选择
#definechannel_10x03//单通道1输入选择
sbitadc_di=p3^4;//数据输入输出复用
sbitadc_do=p3^4;//di和do端都接在p1.0
sbitadc_clk=p3^5;//时钟端
sbitadc_cs=p3^6;//片选端
sbitacc0=acc^0;//通道与输入方式控制字
sbitacc1=acc^1;//通道与输入方式控制字
sbitdisx=p0^7;//led小数点
ucharcodedisply[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//0123456789关闭
//ucharcodedis_scan[3]={0x00,0x01,0x02};//列扫描控制字
uintdatadis[4]={0x00,0x00,0x00,0x00};//定义3个显示数据单元和一个数据存储单元
/********************************************************************/
/**/
/*延时函数*/
/**/
/********************************************************************/
delay(intms)
{
inti;
while(ms--)
{
for(i=0;i {
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/********************************************************************/
/**/
/*启动adc转换*/
/**/
/********************************************************************/
adc_start()
{
adc_cs=1;//一个转换周期开始
_nop_();
adc_clk=0;
_nop_();
adc_cs=0;//cs置0,片选有效
_nop_();
adc_di=1;//di置1,起始位
_nop_();
adc_clk=1;//第一个脉冲
_nop_();
adc_di=0;//在负跳变之前加一个di反转操作
_nop_();
adc_clk=0;
_nop_();
}
/********************************************************************/
/**/
/*ad转换函数*/
/*选择输入通道,输入信号的模式《单端输入,或差分输入》*/
/**/
/********************************************************************/
adc_read(ucharmode)
{
uchari;
adc_start();//启动转换开始
acc=mode;
adc_di=acc1;//输出控制位1,di=1,单通道输入,di=0,差分输入。
adc_clk=1;//第二个脉冲
_nop_();
adc_di=0;
adc_clk=0;
_nop_();
adc_di=acc0;//输出控制位0,di=0,通道0输入,di=1,通道1输入。
adc_clk=1;//第三个脉冲
_nop_();
adc_di=1;
adc_clk=0;//输入模式和通道号已经选择完。
adc_clk=1;//第四个脉冲
acc=0;
for(i=8;i>0;i--)//读取8位数据
{
adc_clk=0;//脉冲下降沿
acc=acc acc0=adc_do;//读取do端数据
_nop_();
_nop_();
adc_clk=1;
}
adc_cs=1;//cs=1,片选无效。
return(acc);
}
/********************************************************************/
/**/
/*数据处理与显示函数*/
/*将采集到的数据进行16进制转换为10进制的处理,然后送显示。
*/
/**/
/********************************************************************/
show_value(ucharad_data)
{
uchark;
dis[2]=ad_data/51;//ad值转换为3为bcd码,最大为5.00V。
dis[3]=ad_data%51;//余数暂存
dis[3]=dis[3]*10;//计算小数第一位
dis[1]=dis[3]/51;
dis[3]=dis[3]%51;
dis[3]=dis[3]*10;//计算小数第二位
dis[0]=dis[3]/51;//
for(k=0;k {
p0=disply[dis[k]];
if(k==2){disx=0;}
//p3=dis_scan[k];
p2=k;
delay
(1);
//p2=0xff;
}
}
/********************************************************************//**//*主函数*//**//********************************************************************/main()
{
uchari,j;
while
(1)
{
i=adc_read(channel_0);
for(j=0;j {
show_value(i);
}
}
}
篇三:
串行ad转换器adc0832的使用
串行ad转换器adc0832的使用
单片机控制系统中通常要用到ad转换,根据输出格式,常用的ad转换方式可分为并行ad和串行ad。
并行方式一般在转换后可直接接收,但芯片的引脚比较多;串行方式所用芯片引脚少,封装小,但需要软件处理才能得到所需要的数据。
可是单片机i/o引脚本来就不多,使用串行器件可以节省i/o资源。
adc0832是8位逐次逼近模数转换器,可支持两个单端输入通道和一个差分输入通道。
相同功能的器件还有adc0834,adc0838,adc0831。
所不同的是它们的输入通道数量不同。
它们的通道选择和配置都是通过软件设置。
ad0832的主要特点如下:
●易于和微处理器接口或独立使用;
●可满量程工作;
●可用地址逻辑多路器选通各输入通道;
●单5V供电,输入范围为0~5V;
●输入和输出与TTL、CMOS电平兼容;
adc0832通过内部多路器来控制选择通道,处理器的控制命令通过di引脚输入。
引脚图如右图所示,通道配置命令和通道选择命令如下:
输入配置可在多路器寻址时序中进行。
多路器地址可通过DI端移入转换器。
多路器地址选择模拟输入通道可决定输入是单端输入还是差分输入。
当输入是差分时,应分配输入通道的极性,并应将差分输入分配到相邻的输入通道对中。
例如通道0和通道1可被选为一对差分输入。
另外,在选择差分输入方式时,极性也可以选择。
一对输入通道的两个输入端的任何一个都可以作为正极或负极。
通常adc0832在输出以最高位(MSB)开头的数据流后,会以最低位(LSB)开头重输出一遍(前面的数据流)。
(因此,编程时要发两轮脉冲,第一次取数据,第二次若不要从低到高的数据,也要发一轮8个脉冲将0832中寄存器的数据移出。
是的,)其工作时序如下所示:
adc0832有8只引脚,ch0和ch1为模拟输入端,cs为片选引脚,只有cs置低才能对adc0832进行配置和启动转换。
clk为adc0832的时钟输入端。
cs在整个转换过程中都必须为低,当cs为低时,在数据输入端di(数据输入端)加一个高电平(这个高电平是否算在送到di的一位之中?
如果算,那么后面就只要再送两位。
是的,这个高电平是作为起始标志),接着在clk上加一个时钟,di
上的逻辑1就会使adc0832的di脱离高阻态,然后通道配置数据拌随着时钟通过di端移入多路器,当最后一位数据移入多路器时(数据是三位吗?
还是可以有更多位?
是否因为是仅仅作状态设置,所以只须三位?
数据是三位,前一位标志输入开始,后两位是用来作通道设置和选择),di变为高阻态,在这以前do(数据输出端)都为高阻态(这个“以前”的概念是什么?
就是cs从高跳到低到现在)。
在经过一个时钟(是指在最后一个数据从di移入后,还要再经过一个时钟?
是的,当最后一位数据移入di,需要再加一个时钟使do脱离高阻态),do脱离高阻态并启动转换。
接着从处理器接收时钟信号,每经过一个时钟,转换后的数据就会从高位到低位逐次从do移出,经过8个时钟后,数据又以从低位到高位的形式从do移出(也是每个时钟移一位)。
当最后一位数据移出时转换完成。
当cs从低变为高时,adc0832内部所有寄存器清零。
如想要进行下一次转换,cs必须做一个从高到低的跳变,后跟着地此配置数据重复上面的过程。
在进行单片机和adc0832的连接时,因为di和do并不是同时使用,所以di和do可以共用单片机的一条i/o线,再加上一条时钟线和一条片选线就可以实现单片机和adc0832的连接,电路连接例子如下图所示:
adc0832在51单片机上的ad转换程序的设计也不复杂,下面给出以上图为例的51单片机程序:
adc_0832_csbitp2.2
adc_0832_clkbitp2.1
adc_0832_dibitp2.0
adc_0832_ch0equ38h;bufofch0
adc_0832_conv:
pusha
pushpsw
push0
clradc_0832_clk;clearclok
clradc_0832_di
setbadc_0832_cs;setcstoenableconverters
clradc_0832_cs;cs作一个从高到低的跳变。
setbadc_0832_di;setstartbittoenabledatainput
setbadc_0832_clk;clk作一个从高到低的跳变,并不是从高到低跳变,而是一个上升脉冲,因为在这步以前clk处于低电平,现在是先高,然后又低,形成一个上升脉冲
clradc_0832_clk;上面指令中di的1进入寄存器。
setbadc_0832_di;msbaddressselectch0
setbadc_0832_clk;clk第二个从高到低的跳变,
clradc_0832_clk;上面指令中di再进一个1到寄存器。
clradc_0832_di;lsbaddress
setbadc_0832_clk
clradc_0832_clk;上面指令中,di进入的数据为110。
setbadc_0832_clk;设高位先行进入。
clradc_0832_clk;上面说的再进一个时钟就是最后的这个吧?
是的,这个时钟使do脱离高阻态
adc_conv:
movr0,#08h;该段从0832取数。
adc_next_bit:
movc,adc_0832_di
rlca
setbadc_0832_clk
clradc_0832_clk
nop
djnzr0,adc_next_bit
movr0,#08h;0832又从低位到高位再送一次数,
adc_skip_byte:
setbadc_0832_clk;只空操作8个时钟,
clradc_0832_clk;高位的8个数据扔出去。
djnzr0,adc_skip_byte
setbadc_0832_clk
clradc_0832_clk
setbadc_0832_cs;
movr0,#adc_0832_ch0
mov@r0,a
pop0
poppsw
popa该段就是所说的但这里不作保存,将0832从低位到完事后将cs置高。
ret
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- adc0832 转换 串行 协议