基于89C52的可调电压表设计
1. 功能与指标
- ADC0809芯片:通过模数转换芯片将电压模拟量转为数字量;
- STC89C52主控芯片:将模数转换后的数字量收集并计算还原测量电压;
- 分压模块:根据模数转换芯片指标设计分压,输入电压不可超过5V;
- 手动调节量程:使用按键实现手动更换量程功能,将0~35V分压为4个档位;
- LCD显示:使用液晶屏显示被测电压数值,结果保留3位小数,测量值误差控制在1%以内;
测量单片机3.3V电源 实物演示:
2. 设计方案与工作原理
采用STC89C52芯片配合ADC08091。模数转换芯片进行电压采集与数据处理构成一个简易电压表,避免ADC0809过载烧坏,对被测电压分压后再输入AD转换芯片,经计算将0-35V电压分为四个通道测量,分别为:0-5V、5-15V、15-25V、25-35V。
硬件框图:
系统通过ADC0809的输入端口IN3-IN6分别将不同量程的电压信号采集,经过模数转换后,产生的数字量经过其输出端口D0-D7传送给STC89C52芯片的P0口,需注意D0接P7、D1接P6、D2接P5以此类推,高低位反向连接。STC89C52负责把接收到的数字量经过数据处理,通过P1口发送到LCD1602进行显示。同时P2.1连接按键,通过判断按下次数使P2.5-P2.7三个IO口输出不同高低电平配置ADC0809的ADCA、ADCB、ADCC三个位选端口,产生位选信号控制电压输入端口的输入。
另外STC89C52还控制着ADC0809的工作,使用主控芯片的定时器T0定时功能通过P3.5为ADC0809产生5KHz的工作时钟脉冲;P3.4采集ADC0809的转换结束信号(EOC)判断电压模数转换是否完成;P3.3控制ADC0809的输出允许端(OE)将数字量收集到主控芯片;P3.2同时控制ADC0809的地址锁存端(ALE)和转换启动端(START)当未启动转换时,输入位选端口等待位选信号输入,启动转换后,输入位选端口锁定,保持输入档位准确性。
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倍为整型数后,再根据按键选择的不同量程,通过代码判断选择不同计算公式:
U
I
N
=
P
0
⋅
5
256
⋅
1
0
3
⋅
A
U_{IN}=P0\cdot \frac{5}{256}\cdot10^{3}\cdot A
UIN=P0⋅2565⋅103⋅AA为分压倍数,如25~35V。理论误差值在1%以内,符合要求。
主控芯片:
3.3 LCD1602显示
主控芯片将计算后数据按照十位、个位、十分位、百分位进行拆分,分别输入到LCD1602进行显示,例如:UIN=15786
十位= UIN/10000=1 |
个位= UIN%10000/1000=5 |
十分位= UIN%1000/100=7 |
百分位= UIN%100/10=8 |
千分位= UIN%10=6 |
4 程序代码2
程序流程图:
4.1 按键模块
根据按键按下,将数值从1~4不断循环传出。用来判断选择量程。
软件程序源文件:基于89C52的可调电压表设计(程序代码)
4.2 ADC0809模块
使用定时器0产生ADC工作时钟CLK=5KHz;
ADC的输入端口位选,其等效为3-8译码器,根据按键次数选择的档位进行判断输入端口的位选配置。ALE地址锁存端口配置为0时,可以对数据采集输入端口位选配置,当转换开始时,ALE随着START端口置1,位选锁存不可更改。
输入位选:
AD转换:
软件程序源文件:基于89C52的可调电压表设计(程序代码)
4.3 LCD1602显示
初始化函数
写命令
写数据
代码不过多赘述,可参考程序源文件,也可自行查找。
软件程序源文件:基于89C52的可调电压表设计(程序代码)
4.4 主函数
根据按键按下次数返回的数值,进行判断是哪个量程档位,将对应的档位显示在LCD上,再通过AD转换模块获取转换后的数字量,通过计算、提取数字位,显示在LCD。
软件程序源文件:基于89C52的可调电压表设计(程序代码)
5 Proteus仿真3
选择15~25V档位,激励源为直流22V ,测量值为21.96V,误差在允许范围内。
proteus仿真源文件:基于89C52的可调电压表设计(仿真图)
6 原理图与PCB 4
原理图与PCB:基于89C52的可调电压表设计(原理图+PCB)
7 总结
简易电压表的设计让我对单片机基础的模数转换系统设计有了更加深刻的了解,对整个系统多个模块相配合实现功能有了经验,对LCD1602显示原理有了更深的掌握,对ADC0809芯片的工作原理、转换过程有了实践性的了解;实训过程中使用到了Proteus、Keil、Altium Designer等软件,对其使用熟练度有了进一步提高。设计过程中遇到问题通过查阅资料和凭··········此处省略几百字
实验报告完整文件可留言拿
8 元件清单
封装均为插件
元件名称 | 规格型号 | 数量 |
---|---|---|
芯片 | STC89C52 | 1个 |
芯片 | ADC0809 | 1个 |
液晶屏 | LCD1602 | 1个 |
电容 | 0.1uf | 1个 |
电容 | 30uF | 2个 |
电阻 | 1k | 3个 |
电阻 | 2k | 2个 |
电阻 | 3k | 2个 |
电位器 | 100k | 1个 |
晶振 | 12MHz | 1个 |
按键开关 | ------- | 1个 |
排针排母 | ------- | 若干 |