简易数字电压表设计
4.系统软件设计
4.1 程序框图
根据需要可将系统软件分为四个模块,分别是主程序模块、LED显示器、A/D转换器、中断服务程序模块。各模块的功能如图9。编写程序时,可先写各模块的底层驱动程序,然后是系统联机调试,编写上层主程序,主函数通过调用其他的函数,达到整个功能。
系统主程序A/D显示器转换器图9 系统主程序图
中断服务
4.2 主程序设计
主程序主要负责各个模块的初始化工作:设置定时器、启动A/D转换,读取转换结果,出理量程转换响应、控制LED数码管显示等。流程图如图10所示。
- 8 -
简易数字电压表设计
开始选择ADC0808的转换通道设置定时器,提供时钟信号启动A/D转换N 转换是否结束?Y 输出转换结果数值转换显示图10 主程序流程图
4.3 A/D转换程序
A/D转换程序的功能是采集数据,在整个系统设计中占有很高的地位。当系统设置好后,单片机扫描结束管脚P3.0的输入电平状态,当OE=1时,即输入为高电平则转换完成,允许输出。若OE=0,即输入为低电平,则继续扫描。当START=1时,上升沿清除一次AD转换结果。当START=0时,下降沿用以启动内部控制逻辑,使A/D转换器开始工作。程序流程图如图11所示。
- 9 -
简易数字电压表设计
开始 设置模拟入口 启动转换 转换完? Y N 输出数值处理
图11 A/D转换程序流程图
被测信号由ADC0808模拟输入端输入,完成A/D转换后送入单片机,经相应处理后送出显示。集成模数转换芯片ADC0808实现A/D转换电路如图12:
- 10 -
简易数字电压表设计
图12 集成模数转换芯片ADC0808实现的A/D转换电路
4.4 中断服务程序
中断服务程序的功能是为ADC0808提供时钟信号,当中断发生时将AT89C51单片机的P3.1管脚将输出信号取反,为ADC0808提供12KHZ时钟信号。
5.总结与展望
5.1 Proteus仿真测试检验
下面我们采用Keil编译器及其仿真调试,调好程序后将目标导入Proteus进行软硬件调试,基于单片机实现的数字电压表测试值见图13所示。
电压表测得值 LED显示值 绝对误差 0.05 0.05 +0.00 1.45 1.45 +0.00 2.19 2.20 +0.01 2.94 2.96 +0.02 4.09 4.10 +0.01 4.29 4.30 +0.01 4.84 4.85 +0.01 图13 测试值与与误差
从图13中可以看出,电压表测得值误差均在0.02V以内,这与采用8位A/D转换器所能达到的理论误差精度相比较接近,因此在一般应用场合都可以满足要求。
5.2 总结
此次设计是基于单片机的简易数字电压表设计,控制系统采用AT89C51单片机,A/D转换器采用ADC0808为主要硬件,实现数字电压表的硬件电路与软件设计。数字电压表可以测量0~5V的8路输进电压值,并在四位LED数码管上轮流显示或单路选择显示。
仿真测试表明,该数字电压表系统性能良好,测量读书稳定易读,更新速度合理,通过改变滑动变阻器的阻值来改变电压表的读数,所以电压表测量范围没有一定的局限性,精确度为0.02V。但是该系统也存在一定程度的不足,例如: ? 输出量可以通过利用平均值算法来改善,使测量准确度更高。
? 输入电压易发生干扰不稳定,且驱动能力可能存在不足,需要在被测信号的输入端
加上一部分驱动电路,比如将量程转换电路改成带放大能力的自动量程转换电路,将幅度较小的信号经适当放大后再测量,可提高精度。
? ADC0808可实现对8个通道的信号轮流转换,该设计仅仅使用了其中一个通道,造
成了较大的资源浪费。若能对电路稍加改进,实现对多路信号的轮流测量并自动保存相应结果,其应用价值将会更高。
- 11 -