硬件设计

(末尾附文件)

系统功能设计

51单片机锂电池电压电流容量检测仪表液晶显示66
本系统由STC89C52单片机、分压、A/D芯片PCF8591、ACS712电流检测、LCD1602液晶显示及电源组成。
1、通过51单片机驱动pcf8591采集分压值进行计算获取实际电压值,通过ACS712获取当前电流转化的电压值,进行运算获取电流值。
2、单片机驱动LCD1602液晶显示锂电池的电压、放电电流和当前容量。
3、为了方便采集到电流,负载可以接一个功率电阻作为负载。

原理图:

STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。

本系统选择PCF8591作为A/D采样芯片。PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行I²C总线接口。PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。
一、芯片特性
(1)单独供电
(2)PCF8591的操作电压范围2.5V-6V
(3)低待机电流
(4)通过I2C总线串行输入/输出
(5)PCF8591通过3个硬件地址引脚寻址
(6)PCF8591的采样率由I2C总线速率决定
(7)个模拟输入可编程为单端型或差分输入
(8)自动增量频道选择
(9)PCF8591的模拟电压范围从VSS到VDD
(10)PCF8591内置跟踪保持电路
(11)8-bit逐次逼近A/D转换器

ACS712电流传感器模块电路设计
该传感器使用芯片为ACS712-05A,能够检测5A范围内的直流电流。ACS712芯片专们用于电流检测芯片, 高度集成的制作工艺和专业的电流检测技术可为各种交直流电流检测提供经济实惠且精确的解决方案。该器件封装便于客户轻松实施。ACS712芯片的经典应用于开关式电源设备和过电流故障保护、载荷检测和管理系统、电动机控制系统等。
ACS712芯片,使用了精准的,低偏置的线性霍尔传感器电路,且其电流路径强敌了电流路径的阻抗,宁切路径靠近晶片的表面更增加了测量的准确度。
通过该通知的电流路径施加上电流,是芯片内部产生磁场,磁场被集成在内部的霍尔器件获取,并转化为一定比例的电压值。通过该电压值经过AD转化被微处理器获取,精处理后可以显示,该期间在出厂时已经进行了精确度的校准。
当芯片内部中的电流路径(从引脚 1 和 2,到 引脚3 和 4)的电流持续上升的时候,器件的输出属于正斜率 (>VIOUT(Q))。这是的 ACS712 电流传感器 IC 可以使用在那些要求电气绝缘但没有使用光电绝缘器以及其它昂贵绝缘技术的应用。
一、传感器模块功能特点
(1)低噪音模拟信号路径。
(2)通过专用的滤波引脚,设置器件的滤波带宽。
(3)5 µs 输出上升时间,对应步进输入电流。
(4)80 千赫带宽。
(5)总输出误差为 1.5%(当 TA = 25°C时)。
(6)采用小体积低厚度 的SOIC8 封装 。
(7)1.2 mΩ 内部传导电阻。
(8)每个管脚之间 有2.1k VRMS及以上的绝缘电压。
(9)5.0 伏特,单电源操作。
(10)输出灵敏度达到66 至 185 mV/A 。
(11)输出电压值与配测量的交直流电流成正比例关系。
(12)出厂时精确度校准。
(13)极稳定的输出偏置电压。
(14)近零的磁滞。
二、使用说明
(1)模块可以测量±5A电流。
(2)电源电压的成比例输出,对应模拟量输出: 185mV/A。
(3)没有检测电流通过时输出电压为VCC/2。
(4)ACS712是基于霍尔检测原理,使用时要注意避开磁场。对此影响。
三、模块接口说明
(1)VCC 接5V
(2)GND 接GND
(3)OUT 模拟信号输出。
(4)J2端子2孔 接输入电流检测线

程序设计

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "1602.h"
#include "delay.h"
#include "i2c.h"char dis0[16];               //打印数组初始化unsigned long time_20ms=0xaaaaaaaa;           //定时器计数unsigned char count =0;    //采集次数计数float Volt=0.0;          //检测电压
xdata float sumVolt,midV; //用于滤波 中间变量float Acurrent=0.0;                 //检测电流
xdata float sumAcur,midA;       //用于滤波 中间变量float BatCap=80;              //容量初始化
void Init_Timer0(void);
void uartSendStr(unsigned char *s,unsigned char length);
void UART_Init(void);
void uartSendByte(unsigned char dat);void main (void)
{     Init_Timer0();        //定时器0初始化UART_Init();LCD_Init();           //初始化液晶DelayMs(20);          //延时有助于稳定LCD_Clear(); uartSendStr("reday ok!!",10);while (1)         //主循环{midV=(float)ReadADC(1)*5.13/255*2;        //计算出电压 *2表示分压值DelayMs(2);          //延时有助于稳定Acurrent=(float)ReadADC(0)*5.13/255;      //计算出电流if(Acurrent>2.6)           //如果电流转换后的电压值超过2.6{midA=(Acurrent-2.6)/0.185;}     //电流模块 电压转换计算      else{midA=0;}  if(midA < 0.1) midA = 0; //防止参考电压变化造成影响sumAcur = sumAcur + midA;  //多次测量求平均sumVolt = sumVolt + midV;    //多次测量求平均count++;//采集次数if(count >= 5){      count = 0;Acurrent =    sumAcur/5;  //Q求平均if(Acurrent < 0.1) Acurrent= 0;//滤波微小波动sumAcur = 0;Volt = sumVolt/5;    //求平均if(Volt<1)Volt=0;  //滤除小波动sumVolt =0;if(Volt>4.15) //电压值对比{BatCap = 0.99;}//容量            else if(Volt<3.4){BatCap =0;}else{BatCap = (Volt-3.4)/(4.15-3.4);}//正常情况下计算比例 sprintf(dis0,"The BatCap: %2.0f%%",BatCap*100);//打印电池容量值LCD_Write_String(0,0,dis0);//显示第一行sprintf(dis0,"V:%3.2fv A:%3.2fA",Volt,Acurrent);//打印电压电流值LCD_Write_String(0,1,dis0);//显示第二行                    }   DelayMs(40);          //延时有助于稳定}
}void Init_Timer0(void)
{
//**All notes can be deleted and modified**//TMOD |= 0x10;   //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响          TH0=(65536-20000)/256;          //重新赋值 20msTL0=(65536-20000)%256;EA=1;            //总中断打开ET0=1;           //定时器中断打开TR0=1;           //定时器开关打开
}void Timer0_isr(void) interrupt 1
{TH0=(65536-20000)/256;          //重新赋值 20msTL0=(65536-20000)%256;time_20ms++;
}void UART_Init(void)
{SCON  = 0x50;             // SCON: 模式 1, 8-bit UART, 使能接收  TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHzTL1 = TH1;  TR1   = 1;                  // TR1:  timer 1 打开                         EA    = 1;                  //打开总中断ES    = 1;                  //打开串口中断
}

.

文件仅供参考:
链接:https://pan.baidu.com/s/1OsGF0mKd5jlUe4TV7MRXJg
提取码:a35g

.

基于C51单片机的锂电池容量检测仪电压电流检测 原理图PCB程序设计相关推荐

  1. 基于51单片机及NB-IoT的消防管道压力检测原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.系统采用LCD1602实时显示管道压力等信息 2.通过四个功能按键可设置压力等阈值 3.压力传感器采用的型号是松下的D3B 4.采用DC002 ...

  2. 基于51单片机的太阳能锂电池充电器系统电压电流检测方案原理图设计

    系统功能分析 本系统具体框图如下图所示 本设计由STC89C52单片机+LCD1602液晶显示电路+A/D转换芯片PCF8591电路+电压检测电路+电流检测电路ACS712-5A+继电器控制电路+电源 ...

  3. 基于51单片机的温湿度测量电力载波通信(实物+原理图+PCB+全套资料)

    资料编号:085 采用51单片机,测量温湿度,通过电力载波协议将数据通过220V供电线传到电脑显示,具体功能请看下方演示视频,全套资料齐全 85-基于51单片机温湿度测量电力载波通信系统(源码+原理图 ...

  4. 61、基于51单片机无线蓝牙音乐喷泉控制系统设计(程序+原理图+PCB源文件+参考论文+参考PPT+元器件清单等)

    方案选择 单片机的选择 方案一:AT89C52是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度.非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通 ...

  5. 基于51单片机的篮球赛计时计分器(仿真+源程序+原理图+PCB+论文)

    资料编号:207 功能介绍(全套毕设资料齐全) 采用51单片机一种篮球赛计时计分器的设计方法,即单片机带外围扩展来驱动数码管工作的电路.电路采用单片机作为核心元件,利用两个供阴的三位一体数码管来显示两 ...

  6. 基于STM32单片机的篮球计时记分器proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示比赛剩余时间,球队分数 2.默认计时器为4节,每节10分钟,每节比赛结束,蜂鸣器报警 3.按键功能介绍: '1'键--加 ...

  7. 基于51单片机GPS定位系统设LCD12864显示(程序+原理图+PCB+论文)

    资料编号:202 功能介绍: (1).定位功能 GPS通过接收卫星信号,可以准确地定出其所在的位置,位置误差小于10米.利用GPS,在12864上面显示当前位置. (2).查询时间功能 GPS还可以接 ...

  8. 基于51单片机超声波的停车场车位管理系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前车位状态 2.当超声波探头检测到距离小于500mm时,判断为当前车位有车,否则无车 3.超声波传感器型号采用HC ...

  9. 基于51单片机的数字音乐彩灯电子琴proteus仿真原理图PCB

    0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前工作模式或曲目编号 2.支持电子琴模式和歌曲模式(内置8首歌曲) 3.按'切换'键可切换工作模式 4.电子琴模式下,按矩阵键 ...

  10. 基于51单片机的水箱水位监测控制系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.通过传感器监测水位,当水位低于水位下限时,接通加水水泵,直到水位达到水位上限,停止加水 2.水位低于水位下限时,声光报警 3.可按键手动加水, ...

最新文章

  1. 学习C#要养成的好习惯
  2. 腾讯:互联网正进入社区化阶段
  3. 搭建consul 集群
  4. Linux Kernel 5.10 aarch64体系对TTBR寄存器的设置
  5. ES5-13 对象属性遍历、this、callee、caller
  6. java面板换一个斜的圆形_java – 如何从底部设计圆形视图?
  7. 详解Python字符串编码格式
  8. 旋转矩阵、旋转向量(轴角)、四元数、欧拉角之间相互转换的代码实现(利用Eigen实现)...
  9. dijkstra 路径搜索算法的c++简单实现
  10. gtest 单元测试工具的基本使用
  11. Java手机验证码的实现
  12. matlab 板球_如何在板球中计算所有取整等级
  13. 【LaTeX】MikTex+TexStudio安装及配置论文写作环境
  14. MAP(maximum a posteriori)
  15. java中的udp丢包_udp丢包 处理
  16. 鸿蒙强者排行榜,琉璃美人煞十大强者排名,腾蛇垫底,司凤第七,罗喉计都屈居第二...
  17. 外贸人订单,了解清楚再接单
  18. python学习——4
  19. php漏洞 乌云,GitHub - grt1st/wooyun_search: 乌云公开漏洞、知识库搜索 search from wooyun.org...
  20. CSS 使用 a 标签的 mailto 属性在网页中链接 Email 地址(琐碎知识点整理)

热门文章

  1. 云打印SDK来袭,支持飞鹅云,芯烨云,易联云,优声云等云打印机
  2. EQ一卡通踩过的坑,解决加载不到动态库,输出数据到led屏乱码问题
  3. 电脑分屏操作,提高工作和学习效率
  4. H5拖拽方法drag在VUE中的应用实例
  5. 九九乘法表的四种打印模式
  6. 【教程】PE烧录上位机软件安装
  7. 打印机服务器属性纸张自动改,“打印机设置自定义纸张”的解决方案
  8. ESP8266-Arduino编程实例-SHT20温湿度传感器驱动
  9. C函数篇(recv函数)
  10. 国开计算机实操题操作,国开大学计算机实操答案一.