3.2.4 精密检波电路 用普通检波二极管作检波器时,由于其正向伏安特性不是线性的,因此在小信号下,检波失真相当严重。另外,二极管的正向压降随温度而变,所以检波器的特性也受温度影响。用运算放大器构成的精密检波器,能克服普通二极管的缺陷,得到与理想二极管接近的检波性能。而且检波器的等效内阻及温度敏感性也比普通检波器好得多。 paper51.com 如图3-7所示:当Usr为负时,经放大器反相,Usc>0,D2截止,D1导通。D1的导通为放大器提供了深度负反馈,因此,放大器的反相输入端2为虚地点,检波器从虚地点经过R2输出信号。所以Usc=0。 当Usr为正时,Usc<0,所以D1截止,只要Usc达到-0.7V,D2就导通,这时,可把D2的正向压降UD看成是放大器的输出失调电压,因此电路相当于反相输入的比例放大器,其传输特性为Usc=-(R2/R1)Usr=-Usr。 内容来自www.paper51.com 综上所述,上图的传输特性为Use=0(Usr<0);Usc=-Usr(Usr>0) 。 copyright paper51.com 由于运放的开环增益Go1很高,因此当输入信号为正时,只要Usr≥UD/Go1,就会使D2导通,而且D2一旦导通,放大器就处于深度的闭环状态,非线性失真非常小,从小信号开始,输入和输出之间就是具有良好的线性关系。它的死区电压非常小,等于二极管的正向压降UD的1/Go1倍。设D2导通时检波器的反馈系数为F,则这种精密检波器的内阻和温度系数为普通检波器的1/(Go1·F)倍,当R2>R1时,检波器还兼有电压放大作用,可将信号放大R2/R1倍。 内容来自www.paper51.com
http://www.paper51.com
图3-7 精密检波电路 http://www.paper51.com
3.2.5 A/D转换电路 paper51.com A/D转换器有并口输出ADC0809和串行口输出ADC0831 copyright paper51.com
A/D0809的工作过程大致为:首先输入地址选择信号,在ALE信号作用下,地址信号被锁存,产生译码信号,选中模拟量输入。然后输入启动转换控制信号START(不应小于100us)启动转换。A/D转换一开始,芯片内部就立即将结束标志EOC变为低电平,当从CP(CLOCK)引入8个时钟脉冲信号后,A/D转换即告完成,此时EOC变为高电平,同时将数码寄存器的转换结果输入到输出三态缓冲器中,在允许输出信号OE的控制下,在将转换结果输出。 内容来自论文无忧网 www.paper51.com 但由于本系统规模较小且要其精度不高,而ADC0809虽然转换速度较快但连线较多,我不予采用,而用连线较少的ADC0831就可以满足要求。 paper51.com A/D转换芯片ADC0831,其工作电压为+5V,采用逐次逼近式转换结构,转换时间与单片机的时钟频率有关。与微处理器接口时只需3根线,DO其中为A/D转换数据串行输出,CLK为时钟信号,CS为片选信号,ADC0831的工作时序如图3-8 ,图 3-8 所示,在第二个CLK的下降沿后,DO输出最高位MSB,8个时钟后转换完成。 http://www.paper51.com 内容来自www.paper51.com 图3-8 ADC0831的工作时序 http://www.paper51.com 3.2.6 单片机与键盘、LCD的连接电路的设计 http://www.paper51.com
利用启点开发板可以很容易的完成LCD显示,具体如下: 内容来自论文无忧网 www.paper51.com 1602采用标准的14脚接口,其中:第1脚:VSS为地电源 内容来自www.paper51.com 第2脚:VDD接5V正电源 copyright paper51.com 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度 内容来自www.paper51.com 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS 内容来自www.paper51.com 和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。 http://www.paper51.com 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。 http://www.paper51.com 另外引脚"A"和"K"为背光引脚,"A"接正,"K"接负便会点亮背光灯. copyright paper51.com 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”1602液晶模块内部的控制器共有11条控制指令。 它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平) 指令1:清显示,指令码01H,光标复位到地址00H位置 指令2:光标复位,光标返回到地址00H 指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁 指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符 指令7:字符发生器RAM地址设置 指令8:DDRAM地址设置 指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据 指令11:读数据 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。 内容来自论文无忧网 www.paper51.com 内容来自www.paper51.com 图3-9单片机与LCD的连接电路 paper51.com voidtest_busy(void) 内容来自论文无忧网 www.paper51.com
{ 内容来自论文无忧网 www.paper51.com uchar i=1; http://www.paper51.com do{ P0=0xff; http://www.paper51.com RS=0; 内容来自www.paper51.com
RW=1; http://www.paper51.com
E=1; paper51.com if((P0&0x80)==0) copyright paper51.com { http://www.paper51.com break; http://www.paper51.com } copyright paper51.com E=0; 内容来自www.paper51.com }while(--i!=0); 内容来自www.paper51.com
} 内容来自论文无忧网 www.paper51.com
/**********************************/ http://www.paper51.com void ENABLE(uchar order) copyright paper51.com
{ P0=order; 内容来自论文无忧网 www.paper51.com _nop_(); paper51.com
RS=0; paper51.com _nop_(); http://www.paper51.com
RW=0; paper51.com
_nop_(); paper51.com E=0;_nop_(); paper51.com test_busy(); 内容来自论文无忧网 www.paper51.com
_nop_(); 内容来自论文无忧网 www.paper51.com
E=1; 内容来自www.paper51.com _nop_(); 内容来自论文无忧网 www.paper51.com } paper51.com voidwritedata(uchar digital) 内容来自www.paper51.com { copyright paper51.com P0=digital; paper51.com _nop_(); paper51.com
RS=1; copyright paper51.com _nop_(); paper51.com RW=0; copyright paper51.com _nop_(); paper51.com E=0; http://www.paper51.com _nop_(); 内容来自论文无忧网 www.paper51.com test_busy(); paper51.com _nop_(); 内容来自www.paper51.com E=1; 内容来自论文无忧网 www.paper51.com _nop_(); copyright paper51.com } paper51.com /************************************/ paper51.com voidresetlcd(void) /*lcd初始化设置*/ copyright paper51.com { 内容来自www.paper51.com DELAY(); /*/清除屏幕*/ 内容来自论文无忧网 www.paper51.com ENABLE(0X01); /*/8位点阵方式*/ copyright paper51.com ENABLE(0X38); /*/开显示*/ http://www.paper51.com ENABLE(0X0c); /*/移动光标*/ paper51.com
ENABLE(0X06); /*/显示位置*/ http://www.paper51.com //ENABLE(0X80); copyright paper51.com
} copyright paper51.com 单片机与键盘的连接电路 内容来自www.paper51.com
一般的具有人机对话的单片机系统少不了会有键盘。键盘接口的原理与应用许多的教材都有介绍,但通常各有各的方法,各有各的优劣。下面就我对单片机键盘接口的了解和应用对单片机直接驱动键盘的接口原理及应用作一个说明,并附加相应键盘的汇编子程序和C 语言子函数。 我以键盘的数目来选择键盘最适合的接法和最佳的编程方法,对各键盘接口的方法的优缺点加以说明。 1*4 按键的单片机键盘接口: 当键盘的数目最多为4个时,我最佳的接口方案当然是独立式接法了,即每一个I/O 口上只接一个按键,按键的另一端接电源或接地(一般接地)。占用的I/O 口数最大为4条。(注意:1~4 按键的键盘的接法许多,如果接成扫描式可以占用更少的I/O口,但从程序复杂性和系统稳定性的综合考虑的话,独立式键盘接法应该是首选) 独立式键盘的实现方法是利用单片机I/O口读取口的电平高低来判断是否有键按下。例如,将常开按键的一端接地,另一端接一个I/O 口,程序开始时将此I/O口置于高电平,平时无键按下时I/O口保护高电平。当有键按下时,此I/O 口与地短路迫使I/O 口为低电平。按键释放后,单片机内部的上拉电阻使I/O口仍然保持高电平。我所要做的就是在程序中查寻此I/O口的电平状态就可以了解是否有按键动作了。 值得注意的事,在用单片机对键盘处理的时候涉及到了一个重要的过程,那就是键盘的去抖动。这里说的抖动是机械的抖动,是当键盘在未按到按下的临界区产生的电平不稳定正常现象,并不是我们在按键时通过注意可以避免的。这种抖动一般在10~200毫秒之间,这种不稳定电平的抖动时间对于人来说太快了,而对于时钟是微秒级的单片机而言则是慢长的。为了提高系统的稳定,必须去除或避开它。目前的技术有硬件去抖动和软件去抖动,硬件去抖动就是用部分电路对抖动部分加之处理,但是实现的难度较大又会提高了成本。软件去抖动不是去掉抖动,而是避开抖动部分的时间,等键盘稳定了再对其处理。这里我们只研究软件去抖动,实现方法是先查寻按键当有低电平出现时立即延时10~200毫秒以避开抖动(经典值为20毫秒),延时结束后再读一次I/O 口的值,这一次的值如果为1 表示低电平的时间不到10~200 毫秒,视为良好。 copyright paper51.com
内容来自论文无忧网 www.paper51.com 图3-10键盘接口电路 内容来自www.paper51.com |