单片机交流
登录
直播中
李继明
7年用户
1077经验值
私信
关注
[问答]
请问怎样去设计一种基于51单片机的数字电流电压表
开启该帖子的消息推送
电压表
51单片机
怎样去设计一种基于51
单片机
的数字电流电压表的硬件部分?
怎样去设计一种基于51单片机的数字电流电压表的软件部分?
回帖
(1)
王雷
2021-9-15 16:38:04
1.简述
本文介绍了基于STC89C52单片机为核心,分别以ACS712-05芯片和串联分压威廉希尔官方网站 为为电流检测和电压检测威廉希尔官方网站 ,并通过AD0809数模转换芯片对电压信号进行采集和转换,传输给单片机进行处理,最后将处理后的电压值和电流值通过LCD1602显示屏显示出来。
2.硬件设计
本设计的硬件主要分为5部分,分别为:单片机最小系统、电流信号采样威廉希尔官方网站 、电压信号采集威廉希尔官方网站 、ADC转换威廉希尔官方网站 、LCD1602显示屏威廉希尔官方网站 。硬件框图如图:
(1)电流信号采集威廉希尔官方网站
电流信号采集威廉希尔官方网站 采用了ACS712-05芯片,该芯完全基于霍尔感应的原理设计,由一个精确的低偏移线性霍尔传感器威廉希尔官方网站 与位于接近IC表面的铜箔组成、,电流流过铜箔时,产生一个磁场, 霍尔元件根据磁场感应出一个线性的电压信号,经过内部的放大、滤波、斩波与修正威廉希尔官方网站 ,输出一个电压信号,该信号从芯片的第七脚输出,直接反应出流经铜箔电流的大小。具体威廉希尔官方网站 如图:
ACS712根据尾缀的不一样,量程分为三个规格:±5A、±20A、±30A,此次使用的量程为 ±5A,由于ADC转换芯片只能识别正压信号,所以电流的量程为0~5A。ACS712-05电流电压对应关系如下图,Ip=0A即没有输入电流的时候,对应输出电压为2.5V.精确度为185mV/A即为图中斜线的斜率。取VCC=5V,计算公式为:
Vout = 2.5 + 0.185*Ip
(2)电压信号采集威廉希尔官方网站
电压信号采集威廉希尔官方网站 相对简单,主要使用了两个电阻作为串联分压威廉希尔官方网站 ,分压比为3。比如当检测表笔检测15V的电压时,由于分压比为3,R3端的电压为5V。如果需要提高测试电压的量测,可以更改分压比。(注意:在选用分压电阻时,尽量选择阻值大一点的电阻,不然电阻过小会导致输入电流过大;此威廉希尔官方网站 也只适用于测试输入阻抗较大的威廉希尔官方网站 上的电压,不然测试出来的误差较大);威廉希尔官方网站 如图:
(3)ADC转换威廉希尔官方网站
本次ADC转换威廉希尔官方网站 采用了PCF8591芯片,该芯片是一个单电源低功耗的8位CMOS数据采集器件,即分辨率为256,具有4路模拟输入,1路模拟输出和一个串行I2C总线接口用来与单片机通信。此威廉希尔官方网站 将电流信号和电压信号进行转换后传送给单片机。威廉希尔官方网站 如图:
(4)总体威廉希尔官方网站
3.软件设计
软件流程相对简单,当单片机上电后,程序对各个模块进行初始化后,进入循环,定时检测电流及电压值,并将最新的数据显示在显示屏上。程序流程如图:
(1)主函数
void main (void)
{
unsigned char midvolt,midcur; //电压电流中间变量值
Init_Timer0(); //定时器0初始化
UART_Init(); //串口初始化
LCD_Init(); //初始化液晶
DelayMs(20); //延时有助于稳定
LCD_Clear();
sprintf(dis0,“My Designer!! ”);//打印
LCD_Write_String(0,0,dis0);//显示第一行
sprintf(dis0,“V:%3.2fv A:%3.2fA”,Volt,Acurrent);//打印电压电流值
LCD_Write_String(0,1,dis0);//显示第二行
uartSendStr(“reday ok!!”,10);
while (1) //主循环
{
midvolt=ReadADC(1); //读取AD检测到的 电压值
DelayMs(50); //延时有助于稳定
midcur=ReadADC(0); //读取电流转化后的电压值
Volt=(float)midvolt*5.13/255*3; //计算出电压 *3表示分压值
Acurrent=(float)midcur*5.13/255; //计算出电流
if(Acurrent》2.62) //如果电流转换后的电压值超过2.62
{
Acurrent=(Acurrent-2.62)/0.185; //电流模块 电压转换计算
}
else
{
Acurrent=0;
}
sprintf(dis0,“V:%3.2fv A:%3.2fA”,Volt,Acurrent);//打印电压电流值
LCD_Write_String(0,1,dis0);//显示第二行//
uartSendStr(dis0,16); //串口上报//
uartSendStr(“n”,1); //换行
DelayMs(500); //延时有助于稳定
}
}
详细完整的程序,可下载源码。
1.简述
本文介绍了基于STC89C52单片机为核心,分别以ACS712-05芯片和串联分压威廉希尔官方网站 为为电流检测和电压检测威廉希尔官方网站 ,并通过AD0809数模转换芯片对电压信号进行采集和转换,传输给单片机进行处理,最后将处理后的电压值和电流值通过LCD1602显示屏显示出来。
2.硬件设计
本设计的硬件主要分为5部分,分别为:单片机最小系统、电流信号采样威廉希尔官方网站 、电压信号采集威廉希尔官方网站 、ADC转换威廉希尔官方网站 、LCD1602显示屏威廉希尔官方网站 。硬件框图如图:
(1)电流信号采集威廉希尔官方网站
电流信号采集威廉希尔官方网站 采用了ACS712-05芯片,该芯完全基于霍尔感应的原理设计,由一个精确的低偏移线性霍尔传感器威廉希尔官方网站 与位于接近IC表面的铜箔组成、,电流流过铜箔时,产生一个磁场, 霍尔元件根据磁场感应出一个线性的电压信号,经过内部的放大、滤波、斩波与修正威廉希尔官方网站 ,输出一个电压信号,该信号从芯片的第七脚输出,直接反应出流经铜箔电流的大小。具体威廉希尔官方网站 如图:
ACS712根据尾缀的不一样,量程分为三个规格:±5A、±20A、±30A,此次使用的量程为 ±5A,由于ADC转换芯片只能识别正压信号,所以电流的量程为0~5A。ACS712-05电流电压对应关系如下图,Ip=0A即没有输入电流的时候,对应输出电压为2.5V.精确度为185mV/A即为图中斜线的斜率。取VCC=5V,计算公式为:
Vout = 2.5 + 0.185*Ip
(2)电压信号采集威廉希尔官方网站
电压信号采集威廉希尔官方网站 相对简单,主要使用了两个电阻作为串联分压威廉希尔官方网站 ,分压比为3。比如当检测表笔检测15V的电压时,由于分压比为3,R3端的电压为5V。如果需要提高测试电压的量测,可以更改分压比。(注意:在选用分压电阻时,尽量选择阻值大一点的电阻,不然电阻过小会导致输入电流过大;此威廉希尔官方网站 也只适用于测试输入阻抗较大的威廉希尔官方网站 上的电压,不然测试出来的误差较大);威廉希尔官方网站 如图:
(3)ADC转换威廉希尔官方网站
本次ADC转换威廉希尔官方网站 采用了PCF8591芯片,该芯片是一个单电源低功耗的8位CMOS数据采集器件,即分辨率为256,具有4路模拟输入,1路模拟输出和一个串行I2C总线接口用来与单片机通信。此威廉希尔官方网站 将电流信号和电压信号进行转换后传送给单片机。威廉希尔官方网站 如图:
(4)总体威廉希尔官方网站
3.软件设计
软件流程相对简单,当单片机上电后,程序对各个模块进行初始化后,进入循环,定时检测电流及电压值,并将最新的数据显示在显示屏上。程序流程如图:
(1)主函数
void main (void)
{
unsigned char midvolt,midcur; //电压电流中间变量值
Init_Timer0(); //定时器0初始化
UART_Init(); //串口初始化
LCD_Init(); //初始化液晶
DelayMs(20); //延时有助于稳定
LCD_Clear();
sprintf(dis0,“My Designer!! ”);//打印
LCD_Write_String(0,0,dis0);//显示第一行
sprintf(dis0,“V:%3.2fv A:%3.2fA”,Volt,Acurrent);//打印电压电流值
LCD_Write_String(0,1,dis0);//显示第二行
uartSendStr(“reday ok!!”,10);
while (1) //主循环
{
midvolt=ReadADC(1); //读取AD检测到的 电压值
DelayMs(50); //延时有助于稳定
midcur=ReadADC(0); //读取电流转化后的电压值
Volt=(float)midvolt*5.13/255*3; //计算出电压 *3表示分压值
Acurrent=(float)midcur*5.13/255; //计算出电流
if(Acurrent》2.62) //如果电流转换后的电压值超过2.62
{
Acurrent=(Acurrent-2.62)/0.185; //电流模块 电压转换计算
}
else
{
Acurrent=0;
}
sprintf(dis0,“V:%3.2fv A:%3.2fA”,Volt,Acurrent);//打印电压电流值
LCD_Write_String(0,1,dis0);//显示第二行//
uartSendStr(dis0,16); //串口上报//
uartSendStr(“n”,1); //换行
DelayMs(500); //延时有助于稳定
}
}
详细完整的程序,可下载源码。
举报
更多回帖
rotate(-90deg);
回复
相关问答
电压表
51单片机
怎样
去
设计
一种
基于
51
单片机
直
流电压电流表
的LCD1602液晶屛呢
2021-10-27
1932
怎样
去
设计
一种
基于PC通信的
数字
电压表
呢
2021-11-09
1455
怎样
去
设计
一种
基于
单片机
的智能电表-交
流电压电流
互感器?
2021-07-22
2221
求
一
个基于
51
单片机
的
数字
电压表
采用dac0832
2016-12-17
4016
数字
电压表
2016-05-22
4500
请问
怎样
去
设计
一种
基于
51
单片机
的
数字
音乐盒
2021-08-02
1496
基于
单片机
的
数字
电压表
2017-04-14
3522
基于
51
单片机
的
数字
电压表
2016-04-17
4297
交
流电压表
与
电流表
为什么会读数不准确
2021-10-09
2675
怎样
去
设计
一种
基于OPA134PA的双积分式直流
数字
电压表
2021-08-09
1485
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分