湖南科技大学单片机课程设计题目基干单片机的数字电流耒设辻姓名学院专业学号指导教师成绩二0—一年五月二十六日单片机课程设计任务书一、设计题目: 基于单片机的数字电流表设计二、设计要求:1、数字电流表在平常工作环境中能良好工作2、能测0——1000mA 电流,至少能达1%的精度3、要求掌握1/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);ADC0832就是美国国家半导体公司生产的一种 8位分辨 率、双通道 A/D 转换芯片。
由于它体积小,兼容性强,性价比高 而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。
ADC0832具有以下特点:♦ 8位分辨率; ♦双通道A/D 转换;♦ 输入输出电平与 TTL/CMOS 相兼容;1、3通用A/D 转换器为U 0 (1 使R2*R4 R1*R3 R2*R4R1*R3)(U1 U2) (U1 U2(22R 1 ^2♦5V电源供电时输入电压在0~5V之间;♦工作频率为250KHZ,转换时间为32卩S;♦一般功耗仅为15mW;♦8P、14P—DIP(双列直插)、PICC多种封装;♦商用级芯片温宽为0° C to +70° C,工业级芯片温宽为-40 C to +85° C; 芯片接口说明Vcc/REF 电源输入及参考电压输入(复用)。
1、4 AT89C52单片机AT89C52就是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含8k bytes的可反复擦写的只读程序存储器(PEROM)与256 bytes 的随机存取数据存储器(RAM ),器件采用ATMEL 公司的高密度、非易失性存储技术生产,与标准MCS-51 指令系统及8052产品引脚兼容,片内置通用8位 央处理器(CPU) 与Flash 存储单元,功能强大AT89C52单片机适合于许多较为复 杂控制应用场合。
主要性能参数AT89C52提供以下标准功能:8k 字节Flash 闪速存储器,256 字节内部RAM,32个I /O 口线,3个16位定时/计数器,一个 6向量两级 断结构,一个全双工串行通信口,片内振荡器及时钟电 路。
同时,AT89C52可降至0Hz 的静态逻辑操作,并支持两种软件 可选的节电工作模式。
空闲方式停止 CPU 的工作,但允许RAM, 定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存 RAM 中的内容,但振荡器停止工作并禁止其它所有部件工作直到 下一个硬件复位。
2、方案论证本设计采用精密采样电阻(9欧、0、9欧、0、09欧、0、01欧),•与MCS-51产品指令与引脚完全兼容 • 8k 字节可 擦写Flash 闪速存储器 • 1000次擦写周期•全静态操作:0Hz — 24MHz •三级加密程序存储器 • 256 X 8字节内部RAM • 32个可编程I /O 口线 • 3个16位定时/计数器 • 8个断源•可编程串行UART 通道 •低功耗空闲与掉电模式功能特性概述 *n J53 9 LD 11 1 % v-w14 15 16 17 IS 19 20PI.0 ActP1 w”P1.2 P0.1C4DJ) ?13 ?0.2^W2) P1.4 PO,兀P1J P1.6?].'P0 6(-4D6)ItST氏工m門.丁EAV EFj.lffTXD'ALE: PSENP3.4(T0) P2.6(AU) PS.? fir P2?述阿?2.S[A11)XT.iJL :Pl IMP2.0(AS)电阻精度可达0、1%可忽略;八位A/D精度为5/256(V);因而除去放大电路增益误差及线性误差,电流表精度约为(5/256)/11约为1、7mA;对于1000mA的总量程精度可达0、1%,因而方案可达设计要求。
三、系统硬件电路的设计■・U ' I 管I B I ■1系统仿真接线简图本设计中用到AT89C52单片机、八位ADC AD0832发光二极管、六位八段显示数码管LED,通用运放UA741、PNP管及必要的电阻、电容元件等。
系统原理方框图电路仿真简图如上图。
数字电游表设计设计者’阳军军系统方框图四、系统程序设计 程序流程图如下:鱼翟刃採幵关高共嗅押制比放大电路*精密采样电至应踣系统程序流程图 C 语言程序如下:#include<reg52、h>〃包含相应的头文件#include<intrins、h>#include<math、h>#define uchar unsigned char#define uint unsigned int ucharaxs[6],azs[6],ac[10],dc[6]; void ITOAZ(int num,uchar *p); void ITOAX(int num,uchar *p); float U,U1;sbit CS=P3八4;//定义数模转换器硬件对应引脚sbit CLK=P3A5;sbit DO=P3A6;sbit DI=P3A7;读写AD0832 函数**********************************************************************************unsigned char ReadADC(unsigned char channel){unsigned char j;unsigned char Temp=0;DI=1;_nop_();_nop_();CS=O;〃拉低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 端,形成下降沿3DI=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); //返回转换值}/************************************************/****************************************************************** ******************/************************************************///延时函数void delay(uint n){uint a;uchar i;for(a=n;a>0;a--)for(i=0;i<2;i++);}//将浮点数转成函数void ITOC(float f,uchar *c){float zs,xs;int bxs,bzs,i,k=0;xs=modf(f,&zs); // 分离整数部分与小数部分函数if(P3==0XFE)bxs=(int)((xs*100)+0 、5);elsebxs=(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]='-';else c[i]=0xff;c[i+1]='s';} //将整型数转换成对应的void ITOAZ(int num,uchar *p){uchar w,i=0;do{w=num%10; // 将整型数各位分离,并转换成对应的字符存入a 中p[i]=w;num=num/10;i++;}while(num);p[i]='s';}//将小数数部分转换成对应的void ITOAX(int num,uchar *p){uchar w,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];}//显示译码函数void decode(uchar *n,uchar *dn){uchar i;for(i=0; n[i]!='s';i++)¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥』/ ¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥」/ ¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥」S=[!]up^eejqJ00x0=[!]u P4l nejepJ>|eejqJot7XO=[!]up:1-1eseoJ>jeejqJ08x0=[!]u P -9P eseo^eejqJjz x O=[!]u P :8 sseoJ>jeejq70x0=[!]u P :上sseoJ>jeejqjQZ x O=[!]u P :9 sseoJ>jeejqjQ9xo=[!]up :g eseoJ>jeejqJ99xo=[!]up :p eseo^eejqJjt7X0=[!]up £ eseo^eejqJj9xo=[!]up :6 eseoJ>jeejqJggxo=[!]up :乙eseo*aiq:9Oxo=[!]up j eseo^eejqJd£xo=[!]up :o eseo}([!]u )U6!MS} /************************************************void main(void){uchar i,j,P2_;float A;while(1){U=ReadADC(0)/256、0;switch(P1){case 0xfe:A=U*10*1 、025;break; case 0xfd:A=U*100/1 、09;break; case 0xfb: 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、实际硬件制作结果31r>37TF TTT E7TT陀MBP2">.U啊和m«i r n PS^r I i~u>rn Pl F PH 数字电流表设讥n I z 1 A n弗讥叭n<根据电路图自制电路,测试结果:能正常测量10―― 1000mA电流,达大部分设计要求。