单片机 > 单片机程序设计 > 详情

PIC单片机AD通道转换函数问题解析

发布时间:2020-06-17 发布时间:
|

  AD转换

  D转换就是模数转换。顾名思义,就是把模拟信号转换成数字信号。主要包括积分型、逐次逼近型、并行比较型/串并行型、Σ-Δ调制型、电容阵列逐次比较型及压频变换型。


  A/D转换器是用来通过一定的电路将模拟量转变为数字量。模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。


  AD转换分类

  1)积分型(如TLC7135)

  积分型AD工作原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值。其优点是用简单电路就能获得高分辨率, 但缺点是由于转换精度依赖于积分时间,因此转换速率极低。初期的单片AD转换器大多采用积分型,现在逐次比较型已逐步成为主流。

  2)逐次比较型(如TLC0831)

  逐次比较型AD由一个比较器和DA转换器通过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置DA转换器输出进行比较,经n次比较而输出 数字值。其电路规模属于中等。其优点是速度较高、功耗低,在低分辩率(《12位)时价格便宜,但高精度(》12位)时价格很高。

  3)并行比较型/串并行比较型(如TLC5510)

  并行比较型AD采用多个比较器,仅作一次比较而实行转换,又称FLash(快速)型。由于转换速率极高,n位的转换需要2n-1个比较器,因此电路规模也极大,价格也高,只适用于视频AD转换器等速度特别高的领域。


  串并行比较型AD结构上介于并行型和逐次比较型之间,最典型的是由2个n/2位的并行型AD转换器配合DA转换器组成,用两次比较实行转换,所以称为 Half flash(半快速)型。还有分成三步或多步实现AD转换的叫做分级(MulTIstep/Subrangling)型AD,而从转换时序角度 又可称为流水线(Pipelined)型AD,现代的分级型AD中还加入了对多次转换结果作数字运算而修正特性等功能。这类AD速度比逐次比较型高,电路 规模比并行型小。


  4)(Sigma/FONT》delta)调制型(如AD7705)

  Δ型AD由积分器、比较器、1位DA转换器和数字滤波器等组成。原理上近似于积分型,将输入电压转换成时间(脉冲宽度)信号,用数字滤波器处理后得到数字值。电路的数字部分基本上容易单片化,因此容易做到高分辨率。主要用于音频和测量。


  5)电容阵列逐次比较型

  电容阵列逐次比较型AD在内置DA转换器中采用电容矩阵方式,也可称为电荷再分配型。一般的电阻阵列DA转换器中多数电阻的值必须一致,在单芯片上生成高 精度的电阻并不容易。如果用电容阵列取代电阻阵列,可以用低廉成本制成高精度单片AD转换器。最近的逐次比较型AD转换器大多为电容阵列式的。


  6)压频变换型(如AD650)

  压频变换型(Voltage-Frequency Converter)是通过间接转换方式实现模数转换的。其原理是首先将输入的模拟信号转换成频率,然后用计数器将频率转换成数字量。从理论上讲这种AD的分辨率几乎可以无限增加,只要采样的时间能够满足输出频率分辨率要求的累积脉冲个数的宽度。其优点是分辩率高、功耗低、价格低,但是需要外部计数电路共同完成AD转换。

  AD转换器功能模块图

  逐次逼近式ADC的转换原理

  (以8位的寄存器为例)A/D转换器片内有D/A转换和电压比较器

  首先向片内D/A转换器输入1000 0000,若电压比较器:VIN 》 VN (VN为片内D/A转换的输出,VIN为A/D转换器的输入电压),N位寄存器的首位置1 (若VIN 《 VN,则寄存器首位写0);再向D/A转换输入1100 0000(首位写0时,输入0111 1111),若VIN 》 VN则寄存器第二位置1(若VIN 《 VN,则写0);再向D/A转换输入1110 0000(或0011 1111),若VIN 》 VN则寄存器第三位置1(若小于,则写0);依次下去直到寄存器第8位赋值结束,控制逻辑监测到比较放大器进行8次后,EOC输入信号,让A/D转换器将结果通过锁存缓存器输出至D0~D9。


  AD0804工作原理


  转换状态:

  首先确保片选信号CS处于低电平(只有CS低电平转换器才会工作),在AD0804转换期间,INTR处于高电平,当WR赋予一个低脉冲信号(该低脉冲时间要≧100ns,对51系列单片机而言,每条命令执行时间即≧100ns)时,转换器开始转换,经过一段时间(该时间长短与转换器有关)的工作后,转换结束。(注意:不工作时,WR引脚是处于高电平的,只有给予其一个低脉冲后,才开始转换)

  数据读取状态:

  同样 确保片选信号CS处于低电平,转换器转换结束后,INTR将由转换器自动清零(若不用中断处理AD转换器,IN脚可以不接),用单片机给TR引RD予低电平(注意:赋RD控制转换器内部的锁存器,若不给脚RD电平,将无法输出转换结果)后,我们可以将转换结果从AD转换器的11-18引脚脚读走。(低WR低赋予脉冲信号时,要等待一段时间才能开始读取,待读取结束后,RD1) 脚要置.


  PIC单片机AD通道转换函数

  由于PIC单片机有八路AD转换通道,如果每路都写一个转换函数,哪样非常麻烦并且不便于写程序,缘此我写了一段如下转换可实现八路通用的函数:

  uchar get_ad(uchar n) //带通道选择的AD采样函数

  {

  uchar advalu;

  ADCON0=n;

  ADCON1=0x80; //1000 0000右对齐

  delay(2); //延时等待

  ADGO=1; //启动AD转换

  while(ADGO); //等待AD转换结束

  advalu=ADRESH; //读AD转换的值

  advalu*=256; //将读回的AD值左移八位

  advalu+=ADRESL; //加上低八位

  return (advalu); //返回AD值

  }

  调用如下,分别从0到7通道

  ad0=get_ad(0xc1);

  ad1=get_ad(0xc9);

  ad2=get_ad(0xd1);

  ad3=get_ad(0xd9);

  ad4=get_ad(0xe1);

  ad5=get_ad(0xe9);

  ad6=get_ad(0xf1);

  ad7=get_ad(0xf9);

关键字:PIC单片机  AD通道  转换函数

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
PIC单片机基础知识之二