基于51单片机的数字电流表设计.docx
- 文档编号:11309229
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:17
- 大小:467.99KB
基于51单片机的数字电流表设计.docx
《基于51单片机的数字电流表设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的数字电流表设计.docx(17页珍藏版)》请在冰豆网上搜索。
基于51单片机的数字电流表设计
湖南科技大学
单片机课程设计
题目基于单片机的数字电流表设计
姓名
学院
专业
学号
指导教师
成绩
二〇一一年五月二十六日
单片机课程设计任务书
一、设计题目:
基于单片机的数字电流表设计
二、设计要求:
1、数字电流表在平常工作环境中能良好工作
2、能测0——1000mA电流,至少能达1%的精度
3、要求掌握I/V信号转换,A/D转换器的使用和数据采集系统的设计
4、电流表能数字显示,且由单片机处理采集数据并驱动LED显示
摘要
本设计是通过采样电阻及信号放大电路将待测的电流信号I转换成0—1V电压信号,由A/D转换器采集电压信号,并将电压转换的数字信号传输给单片机,由单片机完成对采样信号的处理、分析,最后输出信号驱动LED显示器,显示被测的电压值。
一、功能要求…………………………………………………………………1
二、原理及方案论证…..………………………………………………………2
三、系统硬件电路的设计………………………………………………………3
四、系统程序的设计……………………………………………………………4
五、调试及设计结果…………………………………………………………….5
参考文献……………………………………………………………………...6
一、功能要求
1、数字电流表在平常工作环境中能良好工作
2、能测0——1000mA电流,至少能达1%的精度
3、要求掌握I/V信号转换,A/D转换器的使用和数据采集系统的设计
4、电流表能数字显示,且由单片机处理采集数据并驱动LED显示
二、原理及方案论证
1、数字电流表工作原理
1.1采样电阻网络
原理如下图所示,输入被测电流通过量程转换开关S1——S4,流经采样电阻R1——R4,由欧姆定律可知:
U=I*R,因而转换输出电压为0V——0.1V的电压,输出电压可再经后续放大电路放大处理。
1.2高共模抑制比放大电路
如下图,由双运放组成的同相输入高共模抑制比放大电路,其闭环输出可表示为:
为使共模输入为0,可令R1/R2=R4/R3,此时电路的差动闭环增益为Kd=1+R1/R2,U0=Kd(U1-U2);下图即Kd=11,U0=11(U1-U2);
1.3通用A/D转换器
ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。
由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。
ADC0832具有以下特点:
◆8位分辨率;
◆双通道A/D转换;
◆输入输出电平与TTL/CMOS相兼容;
◆5V电源供电时输入电压在0~5V之间;
◆工作频率为250KHZ,转换时间为32μS;
◆一般功耗仅为15mW;
◆8P、14P—DIP(双列直插)、PICC多种封装;
◆商用级芯片温宽为0°Cto+70°C,工业级芯片温宽为-40°Cto+85°C;
芯片接口说明
CS_片选使能,低电平芯片使能。
CH0模拟输入通道0,或作为IN+/-使用。
CH1模拟输入通道1,或作为IN+/-使用。
GND芯片参考0电位(地)。
DI数据信号输入,选择通道控制。
DO数据信号输出,转换数据输出。
CLK芯片时钟输入。
Vcc/REF电源输入及参考电压输入(复用)。
1.4AT89C52单片机
AT89C52是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片含8kbytes的可反复擦写的只读程序存储器(PEROM)和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片置通用8位央处理器(CPU)和Flash存储单元,功能强大AT89C52单片机适合于许多较为复杂控制应用场合。
主要性能参数
·与MCS-51产品指令和引脚完全兼容
·8k字节可擦写Flash闪速存储器
·1000次擦写周期
·全静态操作:
0Hz-24MHz
·三级加密程序存储器
·256×8字节部RAM
·32个可编程I/O口线
·3个16位定时/计数器
·8个断源
·可编程串行UART通道
·低功耗空闲和掉电模式
功能特性概述
AT89C52提供以下标准功能:
8k字节Flash闪速存储器,256字节部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级断结构,一个全双工串行通信口,片振荡器及时钟电路。
同时,AT89C52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
2、方案论证
本设计采用精密采样电阻(9欧、0.9欧、0.09欧、0.01欧),电阻精度可达0.1%可忽略;八位A/D精度为5/256(V);因而除去放大电路增益误差及线性误差,电流表精度约为(5/256)/11,约为1.7mA;对于1000mA的总量程精度可达0.1%,因而方案可达设计要求。
三、系统硬件电路的设计
系统仿真接线简图
本设计中用到AT89C52单片机、八位ADCAD0832、发光二极管、六位八段显示数码管LED,通用运放UA741、PNP管及必要的电阻、电容元件等。
系统原理方框图电路仿真简图如上图。
系统方框图
四、系统程序设计
程序流程图如下:
系统程序流程图
C语言程序如下:
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharaxs[6],azs[6],ac[10],dc[6];
voidITOAZ(intnum,uchar*p);
voidITOAX(intnum,uchar*p);
floatU,U1;
sbitCS=P3^4;//定义数模转换器硬件对应引脚
sbitCLK=P3^5;
sbitDO=P3^6;
sbitDI=P3^7;
/******************读写AD0832函数****************/
/************************************************/
unsignedcharReadADC(unsignedcharchannel)
{
unsignedcharj;
unsignedcharTemp=0;
DI=1;
_nop_();
_nop_();
CS=0;//拉低CS端
_nop_();
_nop_();
CLK=1;//拉高CLK端
_nop_();
_nop_();
CLK=0;//拉低CLK端,形成下降沿1
_nop_();
_nop_();
CLK=1;//拉高CLK端
DI=(channel>>1)&0x1;
_nop_();
_nop_();
CLK=0;//拉低CLK端,形成下降沿2
_nop_();
_nop_();
CLK=1;//拉高CLK端
DI=channel&0x1;
_nop_();
_nop_();
CLK=0;//拉低CLK端,形成下降沿3
DI=1;//控制命令结束
_nop_();
_nop_();
for(j=0;j<8;j++)//处理读入8位数据
{
CLK=0;
_nop_();
Temp=(Temp<<1)|DO;
_nop_();
CLK=1;
}
CS=1;
CLK=0;
DI=1;
return(Temp);//返回转换值
}
/************************************************/
/************************************************/
/******************显示转换函数******************/
/************************************************/
//延时函数
voiddelay(uintn)
{
uinta;
uchari;
for(a=n;a>0;a--)
for(i=0;i<2;i++);
}
//将浮点数转成函数
voidITOC(floatf,uchar*c)
{
floatzs,xs;
intbxs,bzs,i,k=0;
xs=modf(f,&zs);//分离整数部分与小数部分函数
if(P3==0XFE)
bxs=(int)((xs*100)+0.5);
else
bxs=(int)((xs*100)+0.5);//小数点后两位有效数字
ITOAX(bxs,axs);//把小数部分转换成字符串存入axs数组
bzs=(int)zs;//把整数部分转成整型
ITOAZ(bzs,azs);//把整数部分转换成字符串存入azs数组
for(i=0;axs[i]!
='s';i++)//把最终结果存入c数组
c[i]=axs[i];
c[i]='.';
for(k=0,i=i+1;azs[k]!
='s';k++,i++)
c[i]=azs[k];
if(U<0)c[i]='-';
elsec[i]=0xff;
c[i+1]='s';
}
//将整型数转换成对应的
voidITOAZ(intnum,uchar*p)
{
ucharw,i=0;
do
{
w=num%10;//将整型数各位分离,并转换成对应的字符存入a中
p[i]=w;
num=num/10;
i++;
}while(num);
p[i]='s';
}
//将小数数部分转换成对应的
voidITOAX(intnum,uchar*p)
{
ucharw,i=0;
do
{
w=num%10;//将整型数各位分离,并转换成对应的字符存入a中
p[i]=w;
num=num/10;
i++;
}while(num);
while(i<2)
{p[i]=0;i++;}
p[i]='s';
w=p[i];
}
//显示译码函数
voiddecode(uchar*n,uchar*dn)
{uchari;
for(i=0;n[i]!
='s';i++)
{switch(n[i])
{case0:
dn[i]=0x3F;break;
case1:
dn[i]=0x06;break;
case2:
dn[i]=0x5B;break;
case9:
dn[i]=0x6F;break;
case3:
dn[i]=0x4F;break;
case4:
dn[i]=0x66;break;
case5:
dn[i]=0x6D;break;
case6:
dn[i]=0x7D;break;
case7:
dn[i]=0x07;break;
case8:
dn[i]=0x7F;break;
case46:
dn[i]=0x80;break;
case'-':
dn[i]=0x40;break;
default:
dn[i]=0x00;break;
}
}
dn[i]='s';
}
/************************************************/
/************************************************/
/********************主换函数********************/
/************************************************/
voidmain(void)
{
uchari,j,P2_;
floatA;
while
(1)
{
U=ReadADC(0)/256.0;
switch(P1)
{case0xfe:
A=U*10*1.025;break;
case0xfd:
A=U*100/1.09;break;
case0xfb:
A=U*1000;break;
default:
A=0.0;break;
}
A=10*A;
ITOC(A,ac);
decode(ac,dc);
P2=0XFf;
P2_=0Xfe;
for(j=0;dc[j]!
='s';j++)
{P2=0XFf;
P0=dc[j];
P2=P2_;
delay(150);
P2_=_crol_(P2_,1);
/*P2_<<=1;*/
}
}
}
/************************************************/
/************************************************/
五、调试及设计结果
1、PROTUSE系统仿真结果
系统仿真能正常运行,达设计所有指标,仿真部分电路如下:
PROTUSE系统仿真效果图
2、实际硬件制作结果
根据电路图自制电路,测试结果:
能正常测量10——1000mA电流,达大部分设计要求。
实物测试结果如下:
实际制作效果图
参考文献:
[1]测控电路.天津:
天津大学,2010.09
[2]单片机原理及接口技术.:
航空航天大学,2005.10
[3]电子技术基础(模拟部分、数字部分).:
高等教育,2006.01
[4]大学生电子设计与应用.:
中国电力,2007.03
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 数字 电流表 设计