找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2871|回复: 0
收起左侧

可语音播报的单片机电阻、电容、电感测试仪设计论文

[复制链接]
ID:329828 发表于 2018-5-14 19:19 | 显示全部楼层 |阅读模式
摘要

在使用电子元器件时,首先需要了解参数。采用传统的仪表进行测量时,首先要从电路板上焊开器件,再根据元件的类型,手动选择量程挡位进行测量,这样不仅麻烦而且破坏了电路板的美观。基于单片机控制实现的RLC测量仪可以在线测量、智能识别、量程自动转换等多种功能,大大提高测量仪的测量速度和精度,扩大了测量范围。因此这种RLC测量仪既可改善系统测量的性能,又保持了印刷电路的美观,较传统的测量仪还具有高度的智能仪和功能的集成化,在未来的应用中将具有广阔的前景。
本课题主要研究内容为设计一个基于单片机的RLC智能测量仪器,能够智能地识别出待测元件是电容、电感还是电阻;能精确测量出电阻、电容、电感的参数值,同时还能加入语音播报的功能;可以实现量程电阻的自动转换,无须人工选择档位;对测量仪进行扩充后还实现了二极管、三极管的测量。

目录
引言
1  硬件电路
1.1 设计要求
1.2 电路方框图及说明
1.3 各部分电路设计
1.3.1 电阻测量电路
1.3.2 电容测量电路
1.3.3 电感测量电路
1.3.4 多路选择开关电路
1.3.5 按键及显示电路
1.3.6 单片机模块
1.3.7 量程选择模块
1.3.8 电源模块
2  软件部分
2.1 主程序流程图
2.2 程序清单
3  相关元器件
3.1 元件清单
3.2 AT89S52资料
3.3 ICM7218资料
3.4 74LS390资料
3.5 CD4052资料
3.6 NE555资料
3.7 共阳4位LED数码管资料
3.8 三极管相关资料
3.9 三端稳压管LM7805资料
3.10 继电器资料
4  调试总结
5  结论
谢  辞
参考文献
附  录

                         桂林电子科技大学毕业设计(论文)报告用纸                   第 1 页 共 47 页
引言
测量电子元器件集中参数R、C、L的仪表种类较多,方法也各有不同,但都有其优缺点。一般的测量方法都存在计算复杂、不易实现自动测量而且很难实现智能化。本测试仪是把电子元件的参数R、C、L转换成频率信号f,然后用单片机计数后在运算求出R、C、L,并送显示,转换原理分别是RC振荡和LC三点式振荡,这样就能够把模拟量近似的转换位数字量,而频率f是单片机很容易处理的数字量,这种数字化的处理一方面便于使仪表实现智能化。

1  硬件电路
1.1 设计要求
设计并制作一台数字显示的电阻、电容和电感参数测试仪,具体要求数据如下:
(1)测量范围:电阻100~1M;电容100PF~10000PF;电感100UH~10mH。
(2)测量精度:5%;制作4位数码管显示器,显示测量数值,并用发光二极管分别知识所测元件的类型和单位。
(3)加入语音播报功能:如测量结果为6.8K欧姆则语音播报“六点八K欧姆”;如电阻小于100欧姆则语音播报“电阻小于100欧姆”。
1.2 电路方框图及说明
系统分三大部分,既测量电路、通道选择和控制电路。如图1.2.1。
图1.2.1 RLC测量仪电路方框图
1.3 各部分电路设计
1.3.1 电阻测量电路
    电阻的测量采用“脉冲计数法”,如图1.3.1所示由555电路构成的多谐振荡电路,通过计算振荡输出的频率来计算被测电阻的大小。
555接成多谐振荡器的形式,其振荡周期为:
T=t1+t2=(ln2)(R1+Rx)*C1+(ln2)Rx*C1
得到:Fx=1/[(ln2)(R2+2Rx)C1]即:Rx=[1/(ln2)C1-R1]/2
电路分为2档: RH设置为高电平输出,RL设为低电平输出;
1、 100≤Rx<1000欧姆:
R3=200欧姆;C14=0.22uF;
Rx=(6.56*(1e+6))/(2*fx)-330/2
对应的频率范围为:2.8K≤fx <16K
2、 1000≤Rx<1M欧姆:
R2=20k欧姆;C1=103PF;
Rx =(1.443*(1e+8))/(2*fx)-(1e+4)
对应的频率范围为:141Hz≤fx<6.8K
图1.3.1 电阻测量电路
1.3.2 电容测量电路
    电容的测量同样采用“脉冲计数法”,如图1.3.2所示由555电路构成的多谐振荡电路,通过计算振荡输出的频率来计算被测电容的大小。555接成多谐振荡器的形式,其振荡周期为:
T=t1+t2=(ln2)(R1+R2)*Cx+(ln2)R2*Cx
我们设置R1=R2;
得到:Fx=1/[3(ln2)R1*Cx]即:Cx=1/[3(ln2)R1*Fx]
电路分为2档:
1、 R1=560K欧姆:CL设置为高电平输出;
R4=R6;
   Cx= (0.94*(1e+6))/ fx;
对应的频率范围为:9.4K≤fx <0.94K。
2、 R1=100K欧姆: CH设置为高电平输出;
R5=R6;
Cx =(4.81*(1e+6))/ fx;
对应的频率范围为:480Hz≤fx <4.8K。
图1.3.2 电容测量电路
1.3.3 电感测量电路
    电感的测量是采用电容三点式振荡电路来实现的。三点式电路是指:LC回路中与发射极相连的两个电抗元件必须是同性质的,另外一个电抗元件必须为异性质的,而与发射极相连的两个电抗元件同为电容时的三点式电路,成为电容三点式电路。
    Fx=1/(2π)即:Lx=1/( 4π*π*Fx*Fx)
Lx=[38*(1e+6)]/
图1.3.3 电感测量电路
1.3.4 多路选择开关电路
利用CD4052实现测量类别的转换,CD4052是双4选一的模拟开关选择器件。当选择了某一通道的频率后,输出频率通过通过P35作为CPU定时器的时钟源并开始计数,当计数到3秒后读出计数器的值,除以3就得到了被测R/C/L所对应产生的频率,通过计算得到要被测值。

P13
P14
测量类别
0
0
Y0-R
0
1
Y1-L
1
0
Y2-C
1
1
*

图1.3.4 多路选择开关电路
1.3.5 按键及显示电路
    按键和二极管分别表示不同类别的测量,如下表所示:
按键
二极管
对应测试项
KEY1
L1
测试R
KEY2
L2
测试C
KEY3
L3
测试L

图1.3.5.1 测量选择与指示电路
图1.3.5.2 显示模块1
计数结果需要显示出来供人们读数, 74LS390能驱动七段数码管以十进制数显示出来记数结果,如图:
图1.3.5.3 显示模块2
1.3.6 单片机模块
单片机系统连接如图1.3.6所示:
图1.3.6 单片机模块
1.3.7 量程选择模块
包括电阻量程选择模块和电容量程选择模块,如图1.3.7.1和1.3.7.2所示:
图1.3.7.1电阻量程选择模块
图1.3.7.2 电容量程选择模块
1.3.8 电源模块
    电源模块如图1.3.8所示:
图1.3.8 电源模块
2  软件部分
2.1 主程序流程图
如图2.1所示:
图2.1 主程序流程图

AT89S52单片机的基本发音
我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。
例如,要产生200HZ的音频信号,实验程序为:
其中子程序DEL为延时子程序,当R3为1时,延时时间约为20us,R3中存放延时常数,对200HZ音频,其周期为1/200秒,即5ms。这样,当P1.4的高电平或低电平的持续时间为2.5ms,即R3的时间常数取2500/20=125(7DH)时,就能发出200HZ的音调。将程序键入学习机,并持续修改R3的常数能感到音调的变化。乐曲中,每一音符对应着确定的频率。读者能根据表1所供给的常数,将其16进制代码送入R3,反复练习体会。根据表1能奏出音符。仅这还不够,要准确奏出一首曲子,必须准确地控制乐曲节奏,即一音符的持续时间。
音符的节拍我们能用定时器T0来控制,送入不一样的初值,就能产生不一样的定时时间。便如某歌曲的节奏为每分钟94拍,即一拍为0.64秒。
但是,由于T0的最大定时时间只能为131毫秒,因此不可能直接用改变T0的时间初值来实现不一样节拍。我们能用T0来产生10毫秒的时间基准,然后设置一个中断计数器,通过判别中断计数器的值来控制节拍时间的长短。表2中也给出了各种节拍所对应的时间常数。例如对1/4拍音符,定时时间为0.16秒,对应的时间常数为16(即10H);对3拍音符,定时时间为1.92秒,对应时间长数为192(即C0H)。
我们将每一音符的时间常数和其对应的节拍常数作为一组,按次序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就能实现演奏效果。此外,结束符和体止符能分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生对应的停顿效果。为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不一样的音符。
3.3 ICM7218资料
ICM72 1 8A是通用数码管驱动器 ,控制方式简单灵活 ,并可与8位微处理器接口 .可广泛应用于电源及仪器仪表的显示中。
图3.3.1
ICM7218A可工作在三种显示模块:非译码显示模式、十六进制译码显示模式和十进制译码显示模式。具体说明如下:
在非译码模式下(写入命令字时ID5=“1”),输入数据直接控制段位输出,输入数据和段位显示对应如表3.3.1所示。在译码模式下(写入命令十ID5=“0”),可在写入命令字时选择其工作在十六进制译码显示模式(ID6=“1”)或十进制译码显示模式(ID6=“0”);输入二进制码与十进制显示码、十六进制显示码关系如表3.3.2所示。
输入数据
ID7
ID6
ID5
ID4
ID3
ID2
ID1
ID0
输出数据
D.P
a
b
C
d
e
f
g

图3.3.1
进制所对应十进制值码
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
十六进制显示码
0
1
2
3
4
5
6
7
8
9
a
b
c
d
e
f
十进制显示码
0
1
2
3
4
5
6
7
8
9
-
E
H
L
P
(空)

图3.3.2
ICM7218A的工作方式
ICM7218A可通过命令字中ID4位来决定其在正常工作方式(NORMALOPERTION)或停止工作方式(SHUTDOWN)。
在正常工作方式下(ID4=“1”),当MODE为高电平时,在WRITE信号有效时,由微处理器数据总线的ID4-ID7位写入控制命令字,此时ID0-ID3位数据无效;MODE为底电平时,在WRITE信号有效时由微处理器依次写如8个8位显示数据,在数据写入过程中,显示器停止工作,知道8个数据写完,显示器显示新输入值。
注1:若想重新修改任一位显示数据,必须重新执行上述过程,否则直接修改任一位显示数据均无效。
  注2:每次必须连续输入8个8位显示数据之后显示器才能正常工作(即使显示位数少于8位也必须输入8个数据),8个数据之后的数据无效。
在停止工作方式下(ID4=“0”),写入命令字后,显示器停止显示,集成电路进入省点状态。
3.4 74LS390资料
74LS390是双十进制计数器,包括两个2分频和两个5分频计数器,用它可以实现2分频、5分频直至100分频的任何累加倍数的计数长度;74LS390和门电路相配合,可以实现任意进制单位计数器。
计数结果往往需要显示出来,供人们读数,所以计数、译码和显示电路通常配合使用。能完成这三种功能的芯片很多,要针对使用目的选用合适的芯片。如果计数结果要以十进制数显示出来,译码驱动器可以用能直接驱动七段数码管的译码驱动器。
如图3.4.1,芯片74LS390内有两个十进制计数器,CR是清零端(高电平有效),是CP脉冲,Q0、Q1、Q2、Q3为4个输出。如果用触发,只有Q0有输出;若用触发,则Q1、Q2、Q3三输出端输出(此时计数周期为5),即74LS390可以实现二进制、五进制计数。如果将Q0直接与相连,以作CP脉冲,则可以实现8421十进制计数。
3.4.1 74LS390管脚排列图
3.5 CD4052资料
CD4052是一个双4选一的多路模拟选择开关,其使用真值表如表3.5.1所示:
INHIBIT
B
A

0
0
0
0x,0y
0
0
1
1x,1y
0
1
0
2x,2y
0
1
1
3x,3y
1
/
/
None

表3.5.1
应用时可以通过单片机对A/B的控制来选择输入哪一路,例如:需要从4路输入中选择第二路输入,假设使用的是Y组,那么单片机只需要分别给A和B送1和0即可选中该路,然后进行相应的处理。
注意第6脚为使能脚,只有为0时,才会有通道被选中输出.
图3.5.1 CD4052芯片管脚图:
3.6 NE555资料
555定时器是一种应用极为广泛的中规模集成电路。该电路使用灵活、方便,只需外接少量的阻容元件就可以构成单稳、多谐和施密特触发器。因而广泛用于信号的产生、变换、控制与检测。
目前生产的定时器有双极型和CMOS两种类型,其型号分别有NE555(或5G555)和C7555等多种。它们的结构及工作原理基本相同。通常,双极型定时器具有较大的驱动能力,而CMOS 定时器具有低功耗、输入阻抗高等优点。555定时器工作的电源电压很宽,并可承受较大的负载电流。双极型定时器电源电压范围为5~16V,最大负载电流可达200mA;CMOS 定时器电源电压范围为3~18V,最大负载电流在4mA以下。
一、电路组成
图3.6.1为555集成定时器555定时器的电气原理图和电路符号,其由五个部分组成:
(1)由三个阻值为5kΩ 的电阻组成的分压器;
(2)两个电压比较器C1 和C2:
V+>V-,Vo=1;
V+<V-,Vo=0。
(3)基本RS 触发器;
(4)放电三极管T 及缓冲器G。
图3.6.1 555定时器的电气原理图和电路符号
二、基本功能
当5脚悬空时,比较器C1和C2的比较电压分别为2Vcc/3、Vcc/3。
(1)当V11>2Vcc/3,V23>Vcc/3时,比较器C1输出低电平,C2输出高电平,基本RS触发器被置0,放电三极管T 导通,输出端vO 为低电平。
(2)V11<2Vcc/3,V23<Vcc/3时,比较器C输出高电平,C2输出低电平,基本RS 触发器被置1,放电三极管T 截止,输出端vO 为高电平。
(3)V11<2Vcc/3,V23>Vcc/3时,比较器 C1 输出高电平,C2也输出高电平,即基本RS 触发器R=1,S=1,触发器状态不变,电路亦保持原状态不变。
由于阈值输入端(V11)为高电平(>2Vcc/3)时,定时器输出低电平,因此也将该端称为高触发端(TH)。
因为触发输入端(vI2)为低电平(< 1Vcc/3)时,定时器输出高电平,因此也将该端称为低触发端(TL)。
如果在电压控制端(5脚)施加一个外加电压(其值在0~VCC之间),比较器的参考电压将发生变化,电路相应的阈值、触发电平也将随之变化,并进而影响电路的工作状态。
另外,RD为复位输入端,当RD为低电平时,不管其他输入端的状态如何,输出Vo为低电平,即RD的控制级别最高。正常工作时,一般应将其接高电平。
阈值输入(V11)
触发输入(V12)
复位(RD)
输出(VO)
放电管T
/
/
0
0
导通
<2Vcc/3
<Vcc/3
1
1
截止
>2Vcc/3
>Vcc/3
1
0
导通
<2Vcc/3
>Vcc/3
1
不变
不变

表3.6.1 555定时器功能表
由电路框图和功能表可以得出如下结论:
1 555定时器有两个阈值,分别是2Vcc/3和Vcc/3。
2 输出端3脚和放电端7脚的状态一致,输出低电平对应放电管饱和,在7脚外接有上拉电阻时,7脚为低电平。输出高电平对应放电管截止,在有上拉电阻时,7脚为高电平。
3 输出端状态的改变有滞回现象,回差电压为Vcc/3。
4 输出与触发输入反相。掌握这四条,对分析555定时器组成的电路十分有利。
555应用
施密特触发器
施密特触发器是数字系统中常用的电路之一,它可以把变化缓慢的脉冲波形变换成为数字电路所需要的矩形脉冲。施密特电路的特点在于它也有两个稳定状态,但与一般触发器的区别在于这两个稳定状态的转换需要外加触发信号,而且稳定状态的维持也要依赖于外加触发信号,因此它的触发方式是电平触发。
1.电路组成及功能
只要将555 定时器的2号脚和6号脚接在一起,就可以构成施密特触发器。我们简记为“二六搭一”。
图3.6.2 555定时器构成的施密特触发器电路图
(1) V1=0V 时,Vo1 输出高电平。
(2)当V1上升到2Vcc/3时,Vo1输出低电平。当V`由2Vcc/3继续上升,Vo1 保持不变。
(3)当V1下降到Vcc/3时,电路输出跳变为高电平。而且在V1继续下降到0V时,电路的这种状态不变。
图3.6.2中,R、VCC2 构成另一输出端Vo2,其高电平可以通过改变Vcc2进行调节。
2.电压滞回特性和主要参数
电压滞回特性
图3.6.3 施密特触发器的电路符号和电压传输特性
主要静态参数
(1)上限阈值电压VT+----VI上升过程中,输出电压VO由高电平VOH 跳变到低电平VOL时,所对应的输入电压值。VT+ = 2Vcc/3。
(2)下限阈值电压VT-----VI下降过程中, VO由低电平VOL 跳变到高电平VOH时,所对应的输入电压值。VT— =Vcc/3。
(3)回差电压ΔVT
回差电压又叫滞回电压,定义为 :ΔVT= VT+-VT— = Vcc/3
若在电压控制端VIC(5脚)外加电压VS,则将有VT+=VS、VT—=VS/2、ΔVT=VS/2,而且当改变VS 时,它们的值也随之改变。
3.施密特触发器的应用举例
(1)用作接口电路----将缓慢变化的输入信号,转换成为符合TTL系统要求的脉冲波形。
(2)用作整形电路----把不规则的输入信号整形成为矩形脉冲。
图3.6.4 慢输入波形的TTL系统接口和脉冲整形电路的输入输出波形
单稳态触发器
单稳态触发器具有下列特点:第一,它有一个稳定状态和一个暂稳状态;第二,在外来触发脉冲作用下,能够由稳定状态翻转到暂稳状态;第三,暂稳状态维持一段时间后,将自动返回到稳定状态,而暂稳状态时间的长短,与触发脉冲无关,公决定于电路本身的参数。
1.电路组成及其工作原理
由555构成的单稳态触发器及工作波形如图所示将555的6号脚和7号脚接在一起,并添加一个电容和一个电阻 ,就可以构成单稳态触发器我们简记为“七六搭一,上R下C”。
图3.6.5 用555定时器构成的单稳态触发器及工作波形
(1)无触发信号输入时电路工作在稳定状态
当电路无触发信号时,VI保持高电平,电路工作在稳定状态,即输出端VO保持低电平,555内放电三极管T饱和导通,管脚7“接地”,电容电压VC为0V。
(2)VI 下降沿触发
当VI下降沿到达时,555触发输入端(2脚)由高电平跳变为低电平,电路被触发,VO由低电平跳变为高电平,电路由稳态转入暂稳态。
(3)暂稳态的维持时间
在暂稳态期间,555内放电三极管T 截止,VCC经R向C充电。其充电回路为VCC→R→C→地,时间常数τ1=RC,电容电压VC由0V开始增大,在电容电压VC上升到阈值电压2Vcc/3之前,电路将保持暂稳态不变。
(4)自动返回(暂稳态结束)时间
当VC上升至阈值电压2Vcc/3时,输出电压VO由高电平跳变为低电平,555内放电三极管T由截止转为饱和导通,管脚7“接地”,电容C经放电三极管对地迅速放电,电压VC由2Vcc/3迅速降至0V(放电三极管的饱和压降),电路由暂稳态重新转入稳态。
(5)恢复过程
当暂稳态结束后,电容C通过饱和导通的三极管T放电,时间常数τ2=RCESC,式中RCES是T的饱和导通电阻,其阻值非常小,因此τ2之值亦非常小。经过(3~5)τ2后,电容C放电完毕,恢复过程结束。
2. 主要参数估算
(1) 输出脉冲宽度tw
输出脉冲宽度就是暂稳态维持时间,也就是定时电容的充电时间。由图所示电容电压VC 的工作波形不难看出VC(0+)≈0V,VC(∞)=VCC,VC(tw)=2Vcc/3,代入RC过渡过程计算公式,可得tw=1.1ln3。
上式说明,单稳态触发器输出脉冲宽度tw仅决定于定时元件R、C的取值,与输入触发信号和电源电压无关,调节R、C的取值,即可方便的调节tw。
3.单稳态触发器的应用
(1)延时
在图3.6.6中,的下降沿比WI 的下降沿滞后了时间tW,即延迟了时间tw。单稳态触发器的这种延时作用常被应用于时序控制中。
(2)定时
在图3.6.6中,单稳态触发器的输出电压,用做与门的输入定时控制信号,当为高电平时,与门打开,Wo= WF,当为低电平时,与门关闭,Vo为低电平。显然与门打开的时间是恒定不变的,就是单稳态触发器输出脉冲的宽度tw。
图3.6.6 单稳态触发器用于脉冲的延时与定时选通
(3)整形
单稳态触发器能够把不规则的输入信号VI,整形成为幅度和宽度都相同的标准矩形脉冲Vo。Vo的幅度取决于单稳态电路输出的高、低电平,宽度tw决定于暂稳态时间。图3.6.7是单稳态触发器用于波形的整形的一个简单例子。
图3.6.7 单稳态触发器用于波形的整形
多谐振荡器——产生矩形脉冲波的自激振荡器
在数字电路中,常常需要一种不需外加触发脉冲就能够产生具有一定频率和幅度的矩形波的电路。由于矩形波中除基波外,还含有丰富的高次谐波成分,因此我们称这种电路为多谐振荡器。它常常用作脉冲信号源。多谐振荡器没有稳态,只具有两个暂稳态,在自身因素的作用下,电路就在两个暂稳态之间来回转换。
  • 电路组成及其工作原理:
图3.6.8 用555定时器构成的多谐振荡器
如图3.6.8为555定时器构成的多谐振荡器,接通VCC后,VCC经R1和R2对C充电。当uc上升到2VCC/3 时,uo=0,T导通,C通过R2和T放电,uc下降。当uc下降到VCC/3时,uo又由0变为1,T截止,VCC又经R1和R2对C充电。如此重复上述过程,在输出端uo产生了连续的矩形脉冲。
2.振荡频率的估算和占空比可调电路
电容C充电时间:tw1=0.7(R1+R2)C
电容C放电时间:tw2=0.7R2C
振荡周期:T=0.7(R1+2R2)C
振荡周期:f=1/T=1/[0.7(R1+2R2)]=1.43/[(R1+2R2)C]
占空比:D=tw1/T=0.7(R1+R2)C/[0.7(R1+2R2)]=(R1+R2)/(R1+2R2)
3.7 共阳4位LED数码管资料
单片机I/O的应用最典型的是通过I/O口与7段LED数码管构成显示电路。7段LED数码管,则在一定形状的绝缘材料上,利用单只LED组合排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示出0-9的数字。
LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。共阴和共阳极数码管的发光原理是一样的,只是它们的电源极性不同而已。
将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。当然,LED的电流通常较小,一般均需在回路中接上限流电阻。假如我们将"b"和"c"段接上正电源,其它端接地或悬空,那么"b"和"c"段发光,此时,数码管显示将显示数字“1”。而将"a"、"b"、"d"、"e"和"g"段都接上正电源,其它引脚悬空,此时数码管将显示“2”。其它字符的显示原理类同,可自行分析。
数码管使用条件:
a、段及小数点上加限流电阻;
b、使用电压:段:根据发光颜色决定;小数点:根据发光颜色决定;
c、使用电流:静态时总电流80mA(每段10mA);动态时平均电流4-5mA,峰值电流100mA。
图3.7.1是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的,数码管使用注意事项说明:
(1)数码管表面不要用手触摸,不要用手去弄引角;
(2)焊接温度:260度;焊接时间:5S;
(3)表面有保护膜的产品,可以在使用前撕下来。
图3.7.1 七段数码管引脚图
3.8 三极管相关资料
9014,9013,8050三极管引脚与管脚识别方法
S9014,S9013,S9015,S9012,S9018系列的晶体小功率三极管,把显示文字平面朝自己,从左向右依次为e发射极 b基极 c集电极;对于中小功率塑料三极管按图使其平面朝向自己,三个引脚朝下放置,则从左到右依次为e b c,S8050,S8550,C2078 也是和这个一样的。
当前,国内各种晶体三极管有很多种,管脚的排列也不相同,在使用中不确定管脚排列的三极管,必须进行测量确定各管脚正确的位置(下面有用万用表测量三极管的三个极的方法),明确三极管的特性及相应的技术参数和资料。
非9014,9013系列三极管管脚识别方法:
判定基极。用万用表R×100或R×1k挡测量管子三个电极中每两个极之间的正、反向电阻值。当用第一根表笔接某一电极,而第二表笔先后接触另外两个电极均测得低阻值时,则第一根表笔所接的那个电极即为基极b。这时,要注意万用表表笔的极性,如果红表笔接的是基极b。黑表笔分别接在其他两极时,测得的阻值都较小,则可判定被测管子为PNP型三极管;如果黑表笔接的是基极b,红表笔分别接触其他两极时,测得的阻值较小,则被测三极管为NPN型管如9013,9014,9018。
判定三极管集电极c和发射极e。(以PNP型三极管为例)将万用表置于R×100或R×1K挡,红表笔基极b,用黑表笔分别接触另外两个管脚时,所测得的两个电阻值会是一个大一些,一个小一些。在阻值小的一次测量中,黑表笔所接管脚为集电极;在阻值较大的一次测量中,黑表笔所接管脚为发射极。
不拆卸三极管判断其好坏的方法。
在实际应用中、小功率三极管多直接焊接在印刷电路板上,由于元件的安装密度大,拆卸比较麻烦,所以在检测时常常通过用万用表直流电压挡,去测量被测管子各引脚的电压值,来推断其工作是否正常,进而判断三极管的好坏。
如是象9013 ,9014一样NPN的用万用表检测他们的引脚,黑表笔接一个极,用红笔分别接其它两极,两个极都有5K阻值时,黑表笔所接就是B极。这时用黑红两表笔分别接其它两极,用舌尖同时添(其实也可以先用舌头添湿一下手指然后用手指去摸,反正都不卫生)黑表笔所接那个极和B极,表指示阻值小的那个黑表所接就是C极。(以上所说为用指针表所测,数字表为红笔数字万用表内部的正负级是和指正表相反的。)
3.9 三端稳压管LM7805资料
7805是常用的三端稳压器件,顾名思义05就是输出电压为5v,还可以微调,7805输出波纹很小。
(1) 集成三端稳压器根据稳定电压的正、负极性分为78××,79××系列。图3.8.1给出了正、负稳压的典型电路。
图3.8.1 正、负稳压7805电路
(2) 三端稳压器的型号规格和管脚分布。
表3.8.1 三端稳压器输出电流字母表示法
7805三端稳压器可输出+5 V、0.5 A的稳定电压;7912三端稳压器可输出 12V、1A的稳定电压。
(3) 外形及管脚分布,如附图3.8.2所示。 

图3.8.2 7805,79系列三端稳压器引脚功能输出资料
3.10 继电器资料
电磁式继电器的结构与工作原理
电磁式继电器是应用得最早、最多的一种型式。其结构及工作原理与接触器大体相同。由电磁系统、触点系统和释放弹簧等组成,电磁式继电器原理如图l所示。由于继电器用于控制电路,流过触点的电流比较小(一般5A以下),故不需要灭弧装置。
常用的电磁式继电器有电压继电器、中间继电器和电流继电器。
电磁式继电器的特性
继电器的主要特性是输入-输出特性,又称继电特性。当继电器输入量X由零增至X2以前,继电器输出量Y为零。当输入量X增加到X2时,继电器吸合,输出量为Y1;若X继续增大,Y保持不变。当X减小到X1时,继电器释放,输出量由Y1变为零,若X继续减小,Y值均为零。
Kf=X1/X2称为继电器的返回系数,它是继电器重要数之一。Kf值是可以调节的。
例如一般继电器要求低的返回系数,Kf值应在0.1~0.4之间,样当继电器吸合后,输入量波动较大时不致引起误动作;欠电压继电器则要求高的返回系数,Kf值在0.6以上。设某继电器Kf=0.66,吸合电压为额定电压的90%,则电压低于额定电压的50%时,继电器释放,起到欠电压保护作用。
另一个重要参数是吸合时间和释放时间。吸合时间是指从线圈接受电信号到衔铁完全吸合所需的时间;释放时间是指从线圈失电到衔铁完全释放所需的时间。一般继电器的吸合时间与释放时间为0.05~0.15s,快速继电器为0.005~0.05s,它的大小影响继电器的操作频率。
4  调试总结
作为测量仪器,测量精度是一项很重要的指标。可以用一些方法来降低误差提高精度。RLC参数测量仪在测量中除含有随机误差外,还有内部固定偏移、输入端的各种杂散参数以及测试信号源中斜波分量等因素引起的系统误差,主要分为有固定偏移、开路校准和短路校准、随机误差的处理。固定偏移主要是有源期间零漂引起,其结果是等效在待测交流号上叠加了某一固定的直流电压。固定偏移可通过减法予以扣除。设一次完整的测量中含8次测量。前四次测量在X和Y的正半轴取得,后四次测量结果则安排在X和Y的负半轴取得。然后再把前四次测量结果与后四次测量结果相减。例如,通道的偏移量为M则前四次测量值为:N+M,后四次测量结果为-N+M。相减后得到,然后各分量除以2N。这样就消除了偏移量。RLC参数测量仪的测量端、测量馈线以及测量夹具总是存在残余阻抗和残余导纳。这些残余两对小电容、小电感或高电阻的测量会造成较大误差。校正的基本思想是先通过理论分析建立系统的误差模型,求出无耻修正公式,然后通过简单的“开路”、“短路”等校准技术记录各误差因子,最后程序利用修正公式和误差因子自动计算修正结果。根据统计方法理论,随即误差可以通过多次重复测量的平均来郁郁削弱。通过编程的方式对被测参数连续测量,然后求平均的办法来削弱随即误差。
调试之前,要先用万用表检测了一遍线路是否有开路或者短路。在检查完电路的连通性之后,插上芯片,烧录程序,若电路没有正常工作,则要从各个方面找原因,例如芯片、电容、发光二极管等器件正负极是否插对,是否有虚焊、开路和短路现象。第一次调试时,发光管发光出现异常,不能确定电源是否正常供电到芯片。经过万用表检查后才发现发光管是坏的,即刻换上好的发光管。在实验板上成功调试好程序之后,烧录程序到自己的板上,却发现有三位数码管不能显示,在我纠结于究竟是软件的问题、电路的问题或者是元件的问题许久之后,经过分析排查,发现我把共阴的数码管当作共阳的接上去了。换了共阳的数码管总算是能显示了。确保电路没有任何故障与缺陷的时候,我把时间和精力集中在优化程序的步骤。经过几天反复的尝试摸索,程序已经较最初的程序有较大的改动,尽量化繁琐为精简。用C语言调试最大的困难便是对与大括号的把握。大括号成双出现,缺一不可。但是如果多了一个大括号或者少一个大括号的话,由KEIL C软件所提示的无法创建*.HEX文件又没有提示括号的多缺处,只有依靠自己慢慢寻找,这里提醒我们在编写程序的时候要注意层次分明,以便易于查找程序出错的板块。大括号括的地方不同,有的时候甚至影响到整个程序工作的稳定性,最严重的时候不仅使相应的功能没有还会祸及其他功能的实现。
5  结论
本文设计了一种基于AT89S52单片机的RLC智能测量仪,其主要功能如下:
(1)能精确测量出电容、电感、电阻的参数值。
(2)可以实现量程电阻的自动转换,无须人工选择档位。
(3)当测量正弦信号的幅度过小时,可以自动实现增益放大,从而不影响精度。
(4)AT89S52具有“看门狗”功能,避免出现“死机”现象。
(5)定时器可以采用外部时钟源计数,则为我们计算振荡电路产生频率 提供了便利,而且计算精度较高,控制简单。
由此可见,此测量仪具有高度的智能化和集成化,可精确地对元器件参数进行测量,这正符合当今测量仪器的发展趋势,它将具有广阔的应用前景。


附  录
印板PCB图:
元件PCB图:


单片机源程序如下:
  1. #include <REG52.H>
  2. #include <absacc.h>
  3. #include <stdio.h>
  4. #define  ICM7218  XBYTE[0x00ff]//7218A地址

  5. unsigned char Tab[] ={ 0xFB,0xB0,0xED,0xF5,0xB6,
  6.                        0xD7,0xDF,0xF0,0xFF,0xF7
  7.                                                                         };//7218A数码管段代码表
  8. unsigned char Addr[] ={  0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,
  9.                          0x40,0x48,0x50,0x60,0x68,0x70,0x78
  10.                                                                          };//ISD1420播放地址代码表
  11.             //(0,1,2,3,4,5,6,7,8,9, 乘以10的,次方,欧,皮法,微亨)
  12. unsigned char P_tab[7] ={  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
  13.                         };//语音播放结果列表  
  14. unsigned char SaveData[8] ={  0xCE,0xCE,0xCE,0xCE,0xCE,0xCE,0xCE,0xCE
  15.                            };//最终结果
  16. unsigned char count = 0, counter = 0, bai = 0, shi = 0, ge = 0, cifang = 0;
  17. unsigned long int pinlv = 0, result = 0, flag = 0;

  18. sbit Mode = P1^2;//7218A工作模式
  19. sbit R_select = P3^2;//电阻测量选择按键
  20. sbit C_select = P3^3;//电容测量选择按键
  21. sbit L_select = P3^4;//电感测量选择按键
  22. sbit R_led = P2^2;//电阻指示灯
  23. sbit C_led = P2^1;//电容指示灯
  24. sbit L_led = P2^0;//电感指示灯
  25. sbit R_change = P2^4;//电阻量程转变
  26. sbit C_change = P2^3;//电容量程转变
  27. sbit F_B = P1^4;//模拟开关
  28. sbit F_A = P1^3;
  29. sbit Play = P2^6;//语音播放
  30. sbit Feedback = P2^7;//ISD1420反馈信号]

  31. /****************************
  32.           延时
  33. ******************************/
  34. void delay(unsigned int k)
  35. {
  36.   unsigned int a;
  37.   for(a=0; a<=k; a++);
  38. }
  39. /******************************
  40.           频率测量
  41. *******************************/
  42. void pl(void)
  43. {
  44.   TMOD = 0x51;//定时器0工作方式1,计数器1工作方式1
  45.   TH0 = 0x3c;
  46.   TL0 = 0xb0;//50ms定时
  47.   TH1 = 0;
  48.   TL1 = 0;//计数器清零
  49.   EA = 1;
  50.   ET0 = 1;
  51.   ET1 = 1;
  52.   TR0 = 1;
  53.   TR1 = 1;//启动计时计数器
  54.   while(count <= 60);//3秒测频
  55.   count = 0;
  56.   pinlv= (counter * 65536 + TH1 * 256 + TL1) / 3;//频率换算
  57.   counter = 0;
  58.   TR0 = 0;//停止计时计数器
  59.   TR1 = 0;
  60. }
  61. void t0(void) interrupt 1 using 0//定时器中断子程序
  62. {
  63.   TH0 = 0x3c;
  64.   TL0 = 0xb0;
  65.   count++;
  66. }
  67. void t1(void) interrupt 3 using 0//计数器中断子程序
  68. {
  69.   counter++;
  70. }
  71. /******************************
  72.     阻值公式换算(单位:欧姆)
  73. *******************************/
  74. void R_deal(void)
  75. {
  76.   result = (6557705 / pinlv - 200) / 2;//100~10k欧姆
  77.   if (R_change == 0)
  78.    {
  79.      result = (6557705 / pinlv - 20000) / 2;//10k~1M欧姆
  80.     }
  81.   if (result > 20000 && result < 400000)//修正
  82.    {
  83.      result = result * 939 / 1000;
  84.    }
  85.   else
  86.    {
  87.      result = result * 891 / 1000;
  88.     }
  89. }
  90. /*****************************
  91.      容值公式换算(单位:PF)
  92. ******************************/
  93. void C_deal(void)
  94. {
  95.   result = 13383072 / pinlv;//100~1000PF
  96.   if (C_change == 0)//1000~10000PF
  97.    {
  98.      result = 2540851 / pinlv;
  99.    }
  100.   if (result < 277)//修正
  101.    {
  102.       result = result * 36 / 100;
  103.     }
  104.   if (result >= 277 && result < 288)
  105.    {
  106.      result = result * 430 / 1000;
  107.    }
  108.   if (result >= 288 && result < 318)
  109.    {
  110.      result = result * 507 / 1000;
  111.     }
  112.   if (result >= 318 && result < 450)
  113.    {
  114.      result = result * 614 / 1000;
  115.     }
  116.    if (result >= 450 && result < 470)
  117.    {
  118.      result = result * 65 / 100;
  119.    }
  120.    if (result >= 470 && result < 1455)
  121.    {
  122.      result = result * 72 / 100;
  123.    }
  124.    if (result >= 3295 && result < 9000)
  125.    {
  126.       result = result * 789 / 1000;
  127.    }
  128. }
  129. /******************************
  130.      感值公式换算(单位:uH)
  131. ******************************/
  132. void L_deal(void)
  133. {
  134.   pinlv = pinlv * 100;//频率分频还原
  135.   result = (6069931 / pinlv) * (6069931 / pinlv);
  136.   if (result >= 3600)//修正
  137.    {
  138.      result = result * 2;
  139.    }
  140.   if (result >= 2445 && result < 3600)
  141.    {
  142.      result = result * 100 / 65;
  143.    }
  144.   if (result >= 1245 && result < 2445)
  145.    {
  146.      result = result * 100 / 80;
  147.    }
  148.   if (result >= 552 && result < 1245)
  149.    {
  150.      result = result * 100 / 70;
  151.     }
  152.    if (result >= 465 && result < 552)
  153.    {
  154.       result = result * 100 / 84;
  155.     }
  156.    if (result >= 328 && result < 465)
  157.    {
  158.       result = result * 1000 / 765;
  159.     }
  160.    if (result < 328)
  161.    {
  162.      result = result * 100 / 79;
  163.    }
  164. }
  165. /******************************
  166.         转换成代码表
  167. *****************************/
  168. void daima(void)
  169. {
  170.   unsigned char j, i = 0;
  171.   flag = result;
  172.   while (flag / 10)
  173.    {
  174.      flag = flag / 10;
  175.      i++;
  176.    }
  177.   if (i >= 2)
  178.    {
  179.      cifang = i-2;
  180.    }
  181.   else
  182.     cifang = 0;
  183.   for (j=0; j<cifang; j++)
  184.    {
  185.      result = result / 10;
  186.     }
  187.   bai = result / 100;
  188.   shi = result / 10 % 10;
  189.   ge = result % 10;
  190.   SaveData[0] = Tab[bai];
  191.   SaveData[1] = Tab[shi];
  192.   SaveData[2] = Tab[ge];
  193.   SaveData[3] = Tab[cifang];
  194. }
  195. /******************************
  196.         ICM7218_LED显示
  197. ******************************/
  198. void display(void)
  199. {
  200.   unsigned char i;
  201.   Mode = 1;//写命令字
  202.   ICM7218 = 0xf0;//十六进制非译码正常工作,后跟显示数据
  203.   Mode = 0;//写入数据
  204.   for (i=0; i<8; i++)
  205.    {
  206.      ICM7218 = SaveData[i];
  207.    }
  208. }
  209. /*****************************
  210.          ISD1420语音播放
  211. ******************************/
  212. void play(void)
  213. {
  214.   unsigned char i;
  215.   P_tab[0] = Addr[bai];//给表赋值
  216.   P_tab[1] = Addr[shi];
  217.   P_tab[2] = Addr[ge];
  218.   P_tab[3] = Addr[10];
  219.   P_tab[4] = Addr[cifang];
  220.   P_tab[5] = Addr[11];
  221.   if (R_led == 0)//电阻--欧
  222.     {
  223.       P_tab[6] = Addr[12];
  224.      }
  225.    if (C_led == 0)//电容--皮法
  226.     {
  227.       P_tab[6] = Addr[13];
  228.     }
  229.    if (L_led == 0)//电感--微亨
  230.     {
  231.       P_tab[6] = Addr[14];
  232.     }
  233.    for (i=0; i<7; i++)
  234.     {
  235.       P0 = P_tab[i];//地址
  236.       delay(20000);
  237.       Play = 0;//播放
  238.       delay(20000);
  239.       while (Feedback == 1);//等待EOM结束反馈
  240.       Play = 1;
  241.       delay(20000);
  242.     }
  243. }
  244. /*****************************
  245.           主函数
  246. ******************************/
  247. void main(void)
  248. {
  249.   R_select = 1;//初始化
  250.   C_select = 1;
  251. L_select = 1;
  252.   R_led = 1;
  253.   C_led = 1;
  254.   L_led = 1;
  255.   Play = 1;
  256.   Feedback = 1;
  257.   while (1)
  258.    {
  259. /*****************电阻*********************/
  260.      if (R_select ==0 )//测电阻
  261.        {
  262.          delay(2000);//去抖动            
  263.          if (R_select == 0)
  264.           {
  265.             R_led = 0;
  266.             C_led = 1;
  267.             L_led = 1;
  268.             F_B = 0;//模拟开关电阻频率输出
  269.             F_A = 0;
  270.             delay(20000);
  271.             C_change = 1;
  272.             R_change = 1;//低量程
  273.             delay(50000);
  274.             delay(50000);
  275.             pl();//测频
  276.             if (pinlv < 164)//是否需要转换(高量程)?
  277.              {
  278.                 R_change = 0;
  279.                 delay(50000);
  280.                 delay(50000);
  281.                 pl();
  282.               }
  283.             R_deal();//结果
  284.             daima();//代码转换
  285.             display();//显示
  286.             //play();//语音播放
  287.           }
  288. }
  289. /******************电容***********************/
  290.      if (C_select == 0)//测电容
  291.       {
  292.         delay(2000);//去抖动
  293.      if (C_select == 0)
  294.       {
  295.         C_led = 0;
  296.         R_led = 1;
  297.         L_led = 1;
  298.         F_B = 0;//模拟开关电容频率输出
  299.         F_A = 1;
  300.         delay(20000);
  301.         C_change = 1;//低量程
  302.         R_change = 1;
  303.         delay(50000);
  304.         delay(50000);
  305. ……………………

  306. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
毕业设计论文(1).doc (1.18 MB, 下载次数: 19)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表