电子系统设计课程设计量程自动切换的数字电压表设计.docx
《电子系统设计课程设计量程自动切换的数字电压表设计.docx》由会员分享,可在线阅读,更多相关《电子系统设计课程设计量程自动切换的数字电压表设计.docx(11页珍藏版)》请在冰豆网上搜索。
![电子系统设计课程设计量程自动切换的数字电压表设计.docx](https://file1.bdocx.com/fileroot1/2022-11/20/55ad9de1-20a6-4575-9326-bf7d61a627d9/55ad9de1-20a6-4575-9326-bf7d61a627d91.gif)
电子系统设计课程设计量程自动切换的数字电压表设计
宁波理工学院
电子系统设计大作业
题目数字智能电压表设计
姓名
学号
专业班级
指导教师
学院
完成日期
1.系统原理和方案介绍
1.1系统总体方案介绍
根据数字电压表的功能实现要求,选用51系列单片机作控制系统,测量低电压时,经比例放大器(LM324)电路实现放大,放大倍数为10倍、高电压经大电阻分压从而控制输入ADC0808的信号在0到5V左右实现A/D转换经AT89C52送入LED数码管显示,实现模拟测量,结果数字显示。
设计两个量程进行自动切换,基本实现智能化。
硬件操作其测量准确性较高,显示效果基本满足接受范围,并且电路相对比较简单,成本低,稳定性较高。
1.2系统结构总框架
按照设计要求,初步确定下系统的设计方案,下图为该系统设计方案的总体结构框架图。
硬件及软件仿真电路均由6大部分组成,即51单片机电路、时钟电路、复位电路、数码管显示电路、A/D转换器(ADC0809)和电压输入测量电路。
1.3系统工作原理
对待测模拟电压值按不同的范围,分为500mv、10v两个档位。
对于高于500mv的档位,采用高电阻分压的方式,其1/2等比例转换为0—5V的电压值;对于低于500mv的档位,采用比例放大器,等比例放大10倍左右,再将电压送入AD进行转换,然后将处理好的信号送入51单片机进行运算,最后再数码管上显示。
同时单片机对模拟开关芯片(74HC4066)进行控制,完成自动量程切换,实现智能处理。
实验时,档位自动切换原理。
当所测电压超过500mv时,P3.2输出低电平,关闭500mv档位电路中的模拟开关74HC4066,而P3.3输出高电平,打开10v档位电路中的模拟开关74HC4066,10v档位的电路正常工作,如此实现自动切换量程。
在本系统设计中采用AT89C52单片机的端口P1.0~P1.7作为4位LED数码管的显示控制。
P3.2与P3.3作为档位控制端口。
P0口作为AD转换数据输入端口,P2口作为进行AD转换的控制端口。
同时,4位LED数码管的采用动态显示方式显示。
2部分电路设计
2.1复位电路
显而易见,复位电路的作用是复位。
在单片机接上电源以后,或电源出现过低电压时,将单片机存储器复位,使其各项参数处于初始位置,即处于开机时的标准程序状态,以消除由于某种原因的程序紊乱。
单片机的复位电路有上电复位电路和按键式复位电路。
上电复位电路——利用电容器充电来实现复位。
当加电时,电容上的电压不能突变,RST引脚为高电平,开始复位;电容C不断充电,电阻R上的压降逐步下降,当电容C充满电后,电路相当于开路,复位结束。
可见复位的时间与充电的时间有关,充电时间越长复位时间越长,增大电容或电阻都可以增加复位时间。
按键式复位电路——它的上电复位功能与上电复位电路相同,但还可以通过按键实现复位。
按下按键后,通过两个电阻分压,使RST端产生高电平。
按键按下的时间决定了复位的时间。
单片机的复位是靠外部电路实现的,在本次设计中采用了按键式复位。
2.2AD转换电路(ADC0809)工作原理
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
转换数据的传送A/D转换后得到的数据应及时传送给单片机进行处理。
数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。
本次设计采用的是查询方式:
A/D转换芯片有表明转换完成的状态信号,例如ADC0809的EOC端。
通过查询方式测试EOC的当前状态,即可确认转换是否完成,并接着进行数据传送。
2.3模拟检测电路(74HC4066)
74HC4066包含4个独立的模拟开关。
每个开关包含2个输入/输出引脚(nY或nZ)和1个高有效使能输入引脚(nE)。
当引脚nE为低时,其对应的开关将被关断。
设计中我们只使用了芯片中的两个开关作为模拟输入。
2.4同相比例放大电路(LM324)
经过计算,可以得知放大倍数刚好为10倍。
假设输入为Ui,输出为Uo,得到
同相比例运算电路具有高输入电阻,低输出电阻的优点,但因为集成运放有共模输入,所以为了提高运算精度,应当选用高共模抑制比的集成运放。
从另一个角度看,在对电路进行误差分析时,应特别注意共模信号的影响。
2.5数码管显示电路(SM42036系列——共阴极暖色调)
单片机应用系统中,通常都需要进行人机对话。
这包括人对应用系统的状态干预与数据输入,以及应用系统向人们显示运行状态与运行结果。
显示器、键盘电路就是用来完成人机对话活动的人机通道。
这里我们选择普通的四位数码管,而没有采用lcd液晶显示,一方面减低代码编写难度,一方面也节省成本,根据实际需要来选择器件。
实验时,本来考虑使用单片机的P1口接74HC573芯片来驱动四位数码管,可是后来发现可以直接用AT89C52单片机的端口P1.0~P1.7作为4位LED数码管的显示控制。
两个想法都可行,所以就采取了更加方便、快捷的第二种方案,这样一来,节省元器件,硬件制作也相对简单。
与此同时,用P2口控制四位数码管的显示位,很好地解决了实验代码编写的难度,使之更为清晰明了。
3.软件细节设计
3.1保护功能
日常使用电压表时,我们往往都会忽略一个问题,那就是在测量一个电压点时,往往很粗鲁地随便选择一个档位进行测量,结果一些普通或者简易的电压表遇到大电压很容易烧坏。
而我们在设计时意识到这个问题,在软件设计时就注意到将电压表初测就选择大量程,从而很好地保护电压表。
3.2智能选择
与传统利用手动开关实现通道转换的电压表相比,虽然可以降低成本,并且缩短反应时间,但是不足之处在于操作麻烦,而且测量时需要更多的手协助。
而我们根据数据转换很容易地实现了500mv和10v两个量程切换,虽然在切换值处数据变化浮动加快,但是一定时间后仍然会回到稳定的数据显示。
3.3程序设计
3.3.1主程序设计
主程序的内容一般包括:
主程序的起始地址、中断服务额程序的起始地址、有关内存单元及相关部件的初始化和一些子程序调用等。
根据设计要求,设计出如下图的主程序流程图。
3.3.2AD转换程序设计
A/D转换子程序的设计A/D转换程序的功能是采集数据,再整个系统设计中占有很高的地位。
程序流程图如下图所示。
3.4proteus系统仿真图:
4.硬件设计
考虑到ADC0808的8路模拟量输入本质上也是模拟开关,因此可以利用其8个模拟通道中的IN0与IN1个作为通道转换器,即根据通道对应的电压测量范围确定对应的电压方法倍数设计对应的放大电路。
A/D转换器的功能是将模拟量转换为与其大小成正比的数字量信号。
ADC0808是属于连续渐进式的A/D转换器,这类型的A/D转换器除了转换速度快(几十至几百us)、分辨率高外,还有价钱便宜的优点。
用ADC0808对74HC4066进行控制,能实现量程的自动切换。
在整个电路中,数值显示采用了4位7段数码管,实物中用ADC0809代替仿真软件的ADC0808,原因是proteus仿真时0809没有仿真模型,实现不了,硬件设计时ADC0809有现成,两块芯片功能相似。
主控制电路采用51单片机最小系统,从而进行扩展。
至于500mv小量程的放大电路经过计算,按照模电的知识进行布局,10v大量程也对其进行大电阻分压再进行测量。
实物图如下:
序号
名称
元件编号
参数
数量
1
单片机
AT89C52
1
2
运算放大器
LM324
1
3
模拟开关芯片
74HC4066
2
4
7段数码管
SM42036
4
5
电容
CAP
30pF
2
6
晶振
CRYSTAL
11.0592MHz
1
7
电阻
RES
1k
1
8
电阻
RES
2k
1
9
电阻
RES
20k
3
10
电阻
RES
4.7k
1
11
电阻
RES
180k
1
12
模数转换芯片
ADC0809
1
硬件设计所用元器件名称及参数
5.问题解决
在软件处理上,量程的界点需要经过计算获得,并且要根据实际硬件设计需要,防止在界限数值变化模糊,这都要通过软件来消除,因为本身硬件就是面包板手动布线,杜邦线连接,稳定显示还是有些困难。
在硬件制作上,元器件就难收集,74hc4066在实验室和通用就是找不到,本来想放弃做硬件,但最后还是赌一赌在网上买了芯片,邮费还比芯片贵。
焊接就是最大的问题,首先你要非常熟悉线路排布,其次面包板质量差,很多布线都是浮空焊接的,很多时候焊好了发现焊接错了,一遍一遍地重焊,在测试有没有空焊,再进行调试。
杜邦线连接比较多,布线比较复杂,虽然有些端口进行统一进行统一布线,但是第一次做硬件,芯片的VCC忘记接了,就不会有结果。
线路完善还是比较顺利,但是硬件的制作很花时间。
数据采集,虽然自己做的东西还是比较有把握的,但是在测量器数据是还是比较头疼的,特别是测量mv档位的时候,数据显示不是十分理想。
有硬件设计,线路连接的问题,有算法精确程度和优化的问题,也有供电电压不稳定输入的原因,统统叠加在一起,大问题就会出现。
所以在十分耐心和坚持不懈下,我们才完成了数据测量。
6数据采集与分析
为了更好地验证实验成果,得到比较完美的实物,我们对做出的实物进行了实践性的测试,一方面发现问题及时修改代码和完善硬件,另一方面也是认真对待大作业的态度。
因为我们做的就是数字电压表,所以最简单地验证就是通过比对得知数据的正确与否。
为了实验数据的准确性,我找来三个万用表同时测量获取平均值,在与自己设计的电压表测得数据进行比对,进行误差分析。
数据测量结果如下:
下表是对其10v档进行数据测量。
10v档
1
2
3
4
5
6
7
8
自用表(v)
0.52
0.94
2.15
2.47
2.86
3.76
4.35
4.90
万用表(v)
0.58
1.05
2.10
2.44
2.78
3.51
4.36
4.95
差值(v)
+0.06
+0.11
-0.05
-0.03
-0.08
-0.25
+0.01
+0.05
误差(%)
10.3%
10.4%
2.3%
1.2%
2.8%
7.1%
0.2%
1.0%
简单地从数据上来看,10v档的数据测量电压变的数据还是比较接近万用表测得数据,总体误差均小于11%,小组设计的电压表表现还是不错的。
因为直接采用USB-5v供电,电压相对不是很稳定,加上测量时间的加长,芯片的发热等因素导致数据变动都可能造成一定的误差。
但是从数据误差中,我们也可以发现在测小幅度电压值测量时误差比较大,而在测大幅度电压值时误差相对减少,所以一定程度上也反映出硬件设计和算法上并不是十分完美,需要进一步的完善。
最后,小组认为此组10v档数据是有效的,结果是符合实际情况的,不排除万用表测量时存在的误差。
下表则是对500mv档进行数据测量。
500mv档
1
2
3
4
5
自用表(mv)
9.8
21.5
96.2
171.3
322.2
万用表(mv)
10.1
23.5
95.6
181.4
310.6
差值(mv)
+0.3
+2.0
-0.6
+10.1
-11.6
误差(mv)
9.9%
8.5%
0.6%
5.5%
3.6%
分析了10v档后,最后对设计的500mv档数据进行分析。
其实在数据测量时,就已经碰到了数据不稳定难以测量的问题,初步排除硬件设计的问题之后,我们还是艰难地测出了5组数据。
在自用表和万用表的数据对比中,我们可以发现数据还是差强人意的,但是从很科学地角度上来说,mv档我们做的并不好。
首先相对于数量级别上来讲,误差还是比较大的,其次这些数据只是测得中比较符合的数据。
我们很想调整精度,可是我们也发现这不仅仅是硬件和算法上可以弥补的,因为我们首先对数据采集不利的过程就是选择20k的滑动变阻器进行测量,mv的测量只要滑阻稍稍变化,带来的数据变化就不是可以控制的,特别是在电压还不是十分稳定的情况。
不过还有一点,就是用万用表测量的时候,选择mv档位时,数据显示也不是稳定显示的。
所以最后我们还是艰难地做出决定,尽可能低测出数据,去除离谱的,保留有效的,结果都还是可以在接受范围之内的。
综上所述,实验数据在误差允许范围内,数据有效,自用表表现设计比较让人满意。
7.思考与总结
通过这次大作业的练习,是自己很好地认识到基础知识的重要性,在c语言编译和硬件电路设计上,自己都或多或少地碰到一些简单的问题,可以发现都是基础没打好的情况。
还有一些时候问题放一放,就会有突破。
由于这次大作业是在网上找到相关资料,软件编译和软件仿真相对比较顺利,遇到的困难不是很多,但是考虑到做实物的优势,于是抱着试一试的心态,小组就决定开始动手,但是之后碰到的困难可想而知了。
做出成果的时候,小组两个人还是很有成就感的,并且收获有也很大,特别是在亲身体会之后,才发现设计的真正意义。