第10章 模拟比较器和ADC接口

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第10章模拟比较器和ADC接口2单片机内部常见的支持模拟信号输入接口模拟比较器和模数转换ADC3模拟量输入通道构成主要组成:信号处理装置、采样单元、采样保持器、数据放大器、A/D转换器控制电路。任务:完成模拟量的采集并转换成数字量送入计算机。4AD转换及其应用被测参数,如温度、流量、压力、液位、速度等都是连续变化的量-模拟量单片机只能处理数字量把输入的连续变化的模拟电压信号转换成离散的数字量-ADCAVRATmega16内置10bitADC5模拟比较器10.1模拟比较器610.1.1与模拟比较器相关的寄存器和标志位SFIOR、ACSR2.模拟比较器控制和状态寄存器—ACSR1.特殊功能IO寄存器—SFIOR为模拟比较器多路使能控制位7ACSR是模拟比较器主要的控制寄存器,各位的作用位7—ACD:模拟比较器禁止位6—ACBG:模拟比较器的能隙参考源选择位5—ACO:模拟比较器输出位4—ACI:模拟比较器中断标志位位3—ACIE:模拟比较器中断允许位1、0—ACIS1、ACIS0:模拟比较器中断模式选择位2—ACIC:模拟比较器输入捕获允许8表9-1模拟比较器中断模式选择ACIS1ACIS0中断模式00比较器输出的上升沿和下降沿都触发中断01保留10比较器输出的下降沿触发中断11比较器输出的上升沿触发中断模拟比较器的多路输入用户可以选择ADC7..0引脚中的任一路的模拟信号代替AIN1引脚,作为模拟比较器的反向输入端。9模拟比较器的多路输入选择10模拟比较器使用注意点包括:芯片RESET后,模拟比较器为允许工作状态。如果系统中不使用模拟比较器功能,应将寄存器ACSR的ACD位置1,关闭模拟比较器,这样可以减少电源的消耗。使用模拟比较器时,应注意比较器的两个输入端口PB2、PB3的设置。当PB2/PB3作为模拟输入端使用时,PB2/PB3应设置为输入工作方式,且上拉电阻无效,这样就不会使PB2/PB3上输入的模拟电压受到影响。当AIN0设置为使用芯片内部1.22V的固定能隙(Bandgap)参考电源时,PB2口仍然可以作为通用I/O端口使用,这样就能节省一个I/O引脚。在上面的例子里,AIN0就是设置为使用芯片内部1.22V的固定能隙(Bandgap)参考电源,这样就可将PB2口释放出来,作为普通I/O口用来驱动LED了10.1.2模拟比较器的应用设计11系统电源电压的监测12程序#includemega16.hvoidmain(void){PORTB.2=0x01;//PC0设置为输出,控制LEDDDRB.2=0x01;ACSR=0x40;//模拟比较器初始化,允许模拟比较器,AIN0设置为内部Bandgap参考电压1.22Vwhile(1)//循环检测AC0位{if(ACSR.5)PORTB.2=0;//AIN0AIN1,低电压报警elsePORTB.2=1;//AIN0AIN1,}}1310.2模数转换器ADC外部的模拟信号量需要转变成数字量才能进一步的由MCU进行处理。ATmega16内部集成有一个10位逐次比较(successiveapproximation)ADC电路。因此使用AVR可以非常方便的处理输入的模拟信号量。ATmega16的ADC与一个8通道的模拟多路选择器连接,能够对以PORTA作为ADC输入引脚的8路单端模拟输入电压进行采样,单端电压输入以0V(GND)为参考。另外还支持16种差分电压输入组合,其中2种差分输入方式(ADC1,ADC0和ACD3,ADC2)带有可编程增益放大器,能在A/D转换前对差分输入电压进行0dB(1×),20dB(10×)或46dB(200×)的放大。还有七种差分输入方式的模拟输入通道共用一个负极(ADC1),此时其它任意一个ADC引脚都可作为相应的正极。若增益为1×或10×,则可获得8位的精度。如果增益为200×,那么转换精度为7位。14AVR的模数转换器ADC具有下列特点:10位精度;0.5LSB积分非线形误差±2LSB的绝对精度;13µs-260µs的转换时间;在最大精度下可达到每秒15kSPS的采样速率;8路可选的单端输入通道;7路差分输入通道;2路差分输入通道带有可选的10×和200×增益;ADC转换结果的读取可设置为左端对齐(LEFTADJUSTMENT);10.2.110位ADC结构15ADC的电压输入范围0~Vcc;可选择的内部2.56V的ADC参考电压源;自由连续转换模式和单次转换模式;ADC自动转换触发模式选择;ADC转换完成中断;休眠模式下的噪声抑制器(NOISECANCELER)。16ADC功能单元包括采样保持电路,以确保输入电压在ADC转换过程中保持恒定。图10-3ADC功能单元方框图1710.2.2ADC相关的I/O寄存器位76543210$07($0027)REFS1REFS0ADLARMUX4MUX3MUX2MUX1MUX0ADMUX读/写R/WR/WR/WR/WR/WR/WR/WR/W复位值00000000位7,6—REFS[1:0]:ADC参考电源选择位5—ADLAR:ADC结果左对齐选择位4..0—MUX4:0:模拟通道和增益选择1.ADC多路复用器选择寄存器—ADMUX18位7—ADEN:ADC使能位6—ADSC:ADC转换开始位5—ADATE:ADC自动转换触发允许位4—ADIF:ADC中断标志位位3—ADIE:ADC中断允许位2,0—ADPS[2:0]:ADC预分频选择2.ADC控制和状态寄存器A—ADCSRA193.ADC数据寄存器—ADCL和ADCH位15141312111098$05($0025)------ADC9ADC8ADCH$04($0024)ADC7ADC6ADC5ADC4ADC3ADC2ADC1ADC0ADCL位76543210读/写RRRRRRRR读/写RRRRRRRR复位值00000000复位值00000000ADLAR=0,ADC转换结果右对齐时,ADC结果的保存方式20ADLAR=1,ADC转换结果左对齐时,ADC结果的保存方式位15141312111098$05($0025)ADC9ADC8ADC7ADC6ADC5ADC4ADC3ADC2ADCH$04($0024)ADC1ADC0------ADCL位76543210读/写RRRRRRRR读/写RRRRRRRR复位值00000000复位值0000000021当ADC转换完成后,可以读取ADC寄存器的ADC0-ADC9得到ADC的转换的结果。如果是差分输入,转换值为二进制的补码形式。一旦开始读取ADCL后,ADC数据寄存器就不能被ADC更新,直到ADCH寄存器被读取为止。因此,如果结果是左对齐(ADLAR=1),且不需要大于8位的精度的话,仅仅读取ADCH寄存器就足够了。否则,必须先读取ADCL寄存器,再读取ADCH寄存器。ADMUX寄存器中的ADLAR位决定了从ADC数据寄存器中读取结果的格式。如果ADLAR位为“1”,结果将是左对齐;如果ADLAR位为“0”(默认情况),结果将是右对齐。读数注意224.特殊功能I/O寄存器—SFIOR位76543210$30($0050)ADTS2ADTS1ADTS0---ACMEPUDPSR2PSR10SFIOR读/写R/WR/WR/WRR/WR/WR/WR/W复位值0000000023位7..5—ADTS[2:0]:ADC自动转换触发源选择,见表9-6表9-6ADC自动转换触发源的选择ADTS[2:0]触发源000连续自由转换001模拟比较器010外部中断0011T/C0比较匹配100T/C0溢出101T/C1比较匹配B110T/C1溢出111T/C1输入捕捉241.预分频与转换时间在通常情况下,ADC的逐次比较转换电路要达到最大精度时,需要50kHz~200kHz之间的采样时钟。在要求转换精度低于10位的情况下,ADC的采样时钟可以高于200kHz,以获得更高的采样率。图10-4带预分频器的ADC时钟源10.2.3ADC应用设计要点25AVR的ADC完成一次转换的时间见表10-7。从表中可以看出,完成一次ADC转换通常需要13-14个ADC时钟。而启动ADC开始第一次转换到完成的时间需要25个ADC时钟,这是因为要对ADC单元的模拟电路部分进行初始化。表10-7ADC转换和采样保持时间转换形式采样保持时间完成转换总时间启动ADC后的第一次转换13.5个ADC时钟25个ADC时钟正常转换,单端输入1.5个ADC时钟13个ADC时钟自动触发方式2个ADC时钟13.5个ADC时钟正常转换,差分输入1.5/2.5个ADC时钟13/14个ADC时钟26输入通道:ADMUX写入参考电源:AVcc或芯片内部的2.56V参考源2.ADC输入通道和参考电源的选择27在单次转换模式下,总是在开始转换前改变通道设置。在连续转换模式下,总是在启动ADC开始第一次转换前改变通道设置。改变ADC输入通道时,应该遵循的原则283.ADC转换结果A/D转换结束后(ADIF=1),在ADC数据寄存器(ADCL和ADCH)中可以取得转换的结果。对于单端输入的A/D转换,其转换结果为:ADC=(VIN×1024)/VREF其中VIN表示选定的输入引脚上的电压,VREF表示选定的参考电源的电压。对于差分转换,其结果为:ADC=(VPOS-VNEG)×GAIN×512/VREF说明:VPOS为差分正极输入电压,VNEG为差分负极输入电压2910.2.4ADC的应用实例30本例利用ATmega16内部的ADC进行转换,转换后的结果换算成测量的电压值在4位LED数码管上显示。在数码管上显示AD采样值,实现和完成一个简易电压表的设计。通过调节W改变AD采样值实例功能31程序#includemega16.hflashunsignedcharled_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};flashunsignedcharposition[4]={0xfe,0xfd,0xfb,0xf7};unsignedchardis_buff[4]={0,0,0,0},posit;bittime_2ms_ok;32//ADC电压值送显示缓冲区函数voidadc_to_disbuffer(unsignedintadc){unsignedchari;for(i=0;i=3;i++){dis_buff[i]=adc%10;adc/=10;}}33//Timer0比较匹配中断服务interrupt[TIM0_COMP]voidtimer0_comp_isr(void){time_2ms_ok=1;}//ADC转换完成中断服务interrupt[ADC_INT]voidadc_isr(void){unsignedintadc_data,adc_v;adc_data=ADCW;//读取ADC置换结果adc_v=(unsignedlong)adc_data*5000/1024;//换算成电压值adc_to_disbuffer(adc_v);}34voiddisplay(void)//4位LED数码管动态扫描函数{PORTA|=0x0f;PORTC=led_7[dis_buff[posit]];if(posit==3)PORTC|=0x80;PORTA&=position[posit];if(++posit=4)posit=0;}35voidmain(void){DDRA=0x0f;PORTA=0x0f;DDRC=0xff;//LED显示控制I/O端口初始化PORTC=0x00;//T/C0初始化TCCR0=0x0B;//内部时钟,64分频(4M/64=62.5KHz),CTC模式TCNT0=0x00;OCR0=0x7C;//OCR0=0x7C(124),(124+1

1 / 43
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功