基于89C52的可调电压表设计(简洁版)
1. 功能与指标
- ADC0809芯片:通过模数转换芯片将电压模拟量转为数字量;
- STC89C52主控芯片:将模数转换后的数字量收集并计算还原测量电压;
- 分压模块:根据模数转换芯片指标设计分压,输入电压不可超过5V;
- 手动调节量程:使用按键实现手动更换量程功能,将0~35V分压为4个档位;
- LCD显示:使用液晶屏显示被测电压数值,结果保留3位小数,测量值误差控制在1%以内;
2. 设计方案与工作原理
采用STC89C52芯片配合ADC08091。模数转换芯片进行电压采集与数据处理构成一个简易电压表,避免ADC0809过载烧坏,对被测电压分压后再输入AD转换芯片,经计算将0-35V电压分为四个通道测量,分别为:0-5V、5-15V、15-25V、25-35V。
硬件框图:
3. 硬件模块
3.1 ADC模数转换1
分压模块采用电阻分压,分别为IN3:0-5V、IN4:5-15V、IN5:15-25V、IN6:25-35V,共4个量程,以25-35V为例说明分压原理:
U
B
=
U
A
⋅
R
5
R
5
+
R
6
=
U
A
7
U_{B}= U_{A}\cdot \frac {R_{5}}{R_{5}+R_{6}}= \frac {U_{A}}{7}
UB=UA⋅R5+R6R5=7UA
即,输入最大电压35V时,IN6电压输入端口为5V,将电压降至合理范围内。其他两个通道同理。
模数转换内容详见ADC0809的原理与使用方法
3.2 89c52数据处理
ADC0809输出的数字量电压到STC89C52进行计算还原,由于浮点数计算相对复杂,且为数据显示方便考虑,将数字量采集到P0端口后,先扩大1000倍为整型数后,再根据按键选择的不同量程,通过代码判断选择不同计算公式。
主控芯片接线图:见完整版基于89C52的可调电压表设计(全部内容)
3.3 LCD1602显示
主控芯片将计算后数据按照十位、个位、十分位、百分位进行拆分,分别输入到LCD1602进行显示。
4 程序代码2
软件程序源文件:基于89C52的可调电压表设计(程序代码)
程序代码图片 见完整版基于89C52的可调电压表设计(全部内容)
程序流程图:
4.1 按键模块
根据按键按下,将数值从1~4不断循环传出。用来判断选择量程。
4.2 ADC0809模块
使用定时器0产生ADC工作时钟CLK=5KHz;
ADC的输入端口位选,其等效为3-8译码器,根据按键次数选择的档位进行判断输入端口的位选配置。ALE地址锁存端口配置为0时,可以对数据采集输入端口位选配置,当转换开始时,ALE随着START端口置1,位选锁存不可更改。
程序代码图片 见完整版基于89C52的可调电压表设计(全部内容)
软件程序源文件:基于89C52的可调电压表设计(程序代码)
4.3 LCD1602显示
初始化函数
写命令
写数据
代码不过多赘述,可参考程序源文件,也可自行查找。
程序代码图片 见完整版基于89C52的可调电压表设计(全部内容)
软件程序源文件:基于89C52的可调电压表设计(程序代码)
4.4 主函数
根据按键按下次数返回的数值,进行判断是哪个量程档位,将对应的档位显示在LCD上,再通过AD转换模块获取转换后的数字量,通过计算、提取数字位,显示在LCD。
程序代码图片 见完整版基于89C52的可调电压表设计(全部内容)
软件程序源文件:基于89C52的可调电压表设计(程序代码)
5 Proteus仿真3
选择15~25V档位,激励源为直流22V ,测量值为21.96V,误差在允许范围内。
proteus仿真源文件:基于89C52的可调电压表设计(仿真图)
6 原理图与PCB 4
原理图与PCB:基于89C52的可调电压表设计(原理图+PCB)
7 总结
简易电压表的设计让我对单片机基础的模数转换系统设计有了更加深刻的了解,对整个系统多个模块相配合实现功能有了经验,过程中使用到Proteus、Keil、Altium Designer等软件,对其使用熟练度有了进一步提高。设计中遇到问题通过查阅资料和凭··········此处省略几百字
实验报告完整文件可留言拿
8 元件清单
封装均为插件
所有元器件清单 见完整版基于89C52的可调电压表设计(全部内容)