找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13480|回复: 8
打印 上一主题 下一主题
收起左侧

基于51单片机的数字电流表课程设计报告

  [复制链接]
跳转到指定楼层
楼主
ID:268018 发表于 2017-12-27 21:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
学生姓名
*
班级学号
1506020134
专  业
测控
课程设计题目
基于单片机的数字电流表设计


组长签字:

成绩

日期

             2017年  月  日


课程设计任务书
学  院
自动化与电气工程
专 业
测控技术与仪器
学生姓名
晁云瑞
班级学号
1506020134
课程设计题目
基于单片机的数字电流表设计

实践教学要求与任务:
通过本课程设计使学生进一步巩固《KeilC程序设计》的基本概念、理论、分析方法和实现方法;增强学生软件编程实现能力和解决实际问题的能力。
1、熟悉所确定的题目从问题需求,数据结构,程序结构,难点及关键技术等方面进行分析,形成系统的设计方案;
2、根据方案设计硬件电路;
3、软件编程并调试;
4、完成文档整理,按照软件工程的要求完成设计论文;
5、通过答辩的形式对程序的功能进行评价与验收。


工作计划与进度安排:

第18周(12月25日-12月31日):布置设计任务,查资料,完成总体设计框架,完善设计内容,系统调试,验收答辩。



指导教师:

  2017年   月  日
专业负责人:

2017 年   月   日
学院教学副院长:

2017 年   月  日


一、设计题目:
基于单片机的数字电流表设计

二、设计要求:
  • 数字电流表在平常工作环境中能良好工作
  • 能测0——1000mA电流,至少能达1%的精度
  • 要求掌握I/V信号转换,A/D转换器的使用和数据采集系统的设计
  • 电流表能数字显示,且由单片机处理采集数据并驱动LED显示

目  录


一、功能要求…………………………………………………………………5
二、原理及方案论证..………………………………………………………5
三、系统硬件电路的设计………………………………………………………9
四、系统程序的设计…………………………………………………………10
五、调试及设计结果………………………………………………………….19
参考文献  …………………………………………………………………...20

一、功能要求
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°C to +70°C,工业级芯片温宽为- 40°C to +85°C;
芯片接口说明
CS_      片选使能,低电平芯片使能。
CH0      模拟输入通道 0,或作为 IN+/-使用。
CH1      模拟输入通道 1,或作为 IN+/-使用。
GND      芯片参考 0 电位(地)。
DI        数据信号输入,选择通道控制。
DO       数据信号输出,转换数据输出。
CLK      芯片时钟输入。
Vcc/REF   电源输入及参考电压输入(复用)。
1.4 AT89C51单片机
      AT89C51是美国ATMEL 公司生产的低电压,高性能CMOS 8 位单片机,片内含8k bytes 的可反复擦写的只读程序存 储器(PEROM)和256 bytes 的随机存取数据存储器(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 通道
   ·低功耗空闲和掉电模式
   功能特性概述
      AT89C51提供以下标准功能: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单片机、八位ADC AD0832、发光二极管、六位八段显示数码管LED,通用运放 UA741 、PNP管及必要的电阻、电容元件等。系统原理方框图电路仿真简图如上图。

系统方框图
四、系统程序设计


程序流程图如下
系统程序流程图
单片机源程序如下:
  1. #include<reg52.h>//包含相应的头文件
  2. #include<intrins.h>
  3. #include<math.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. uchar axs[6],azs[6],ac[10],dc[6];
  7. void ITOAZ(int num,uchar *p);         
  8. void ITOAX(int num,uchar *p);
  9. float U,U1;
  10. sbit CS=P3^4;//定义数模转换器硬件对应引脚
  11. sbit CLK=P3^5;
  12. sbit DO=P3^6;
  13. sbit DI=P3^7;

  14. /******************读写AD0832函数****************/
  15. /************************************************/
  16. unsigned char ReadADC(unsigned char channel)
  17. {
  18. unsigned char j;
  19. unsigned char Temp=0;              
  20. DI=1;
  21. _nop_();
  22. _nop_();
  23. CS=0;//拉低CS端
  24. _nop_();
  25. _nop_();
  26. CLK=1;//拉高CLK端
  27. _nop_();
  28. _nop_();
  29. CLK=0;//拉低CLK端,形成下降沿1
  30. _nop_();
  31. _nop_();
  32. CLK=1;//拉高CLK端
  33. DI=(channel>>1)&0x1;
  34. _nop_();
  35. _nop_();
  36. CLK=0;//拉低CLK端,形成下降沿2
  37. _nop_();
  38. _nop_();
  39. CLK=1;//拉高CLK端
  40. DI=channel&0x1;
  41. _nop_();
  42. _nop_();
  43. CLK=0;//拉低CLK端,形成下降沿3
  44. DI=1;//控制命令结束
  45. _nop_();
  46. _nop_();
  47. for(j=0;j<8;j++)   //处理读入8位数据
  48.    {
  49.     CLK=0;
  50.               _nop_();
  51.     Temp=(Temp<<1)|DO;
  52.     _nop_();
  53.     CLK=1;
  54.     }
  55.   CS=1;
  56.   CLK=0;
  57.   DI=1;
  58. return(Temp); //返回转换值
  59. }
  60. /************************************************/
  61. /************************************************/

  62. /******************显示转换函数******************/
  63. /************************************************/
  64. //延时函数
  65. void delay(uint n)
  66. {
  67.               uint a;
  68.               uchar i;
  69.               for(a=n;a>0;a--)
  70.                             for(i=0;i<2;i++);
  71. }         
  72. //将浮点数转成函数
  73. void ITOC(float f,uchar *c)
  74. {
  75.               float zs,xs;
  76.               int bxs,bzs,i,k=0;
  77.               xs=modf(f,&zs);         //分离整数部分与小数部分函数
  78.     if(P3==0XFE)
  79.     bxs=(int)((xs*100)+0.5);
  80.     else
  81.     bxs=(int)((xs*100)+0.5); //小数点后两位有效数字
  82.               ITOAX(bxs,axs);      //把小数部分转换成字符串存入axs数组
  83.               bzs=(int)zs;          //把整数部分转成整型
  84.               ITOAZ(bzs,azs);      //把整数部分转换成字符串存入azs数组
  85.     for (i=0;axs[i]!='s';i++)  //把最终结果存入c数组
  86.                             c[i]=axs[i];
  87.     c[i]='.';
  88.               for(k=0,i=i+1;azs[k]!='s';k++,i++)
  89.                    c[i]=azs[k];
  90.     if(U<0) c[i]='-';
  91.     else c[i]=0xff;
  92.               c[i+1]='s';
  93. }
  94. //将整型数转换成对应的
  95. void ITOAZ(int num,uchar *p)         
  96. {
  97.               uchar w,i=0;
  98.     do
  99.               {
  100.                             w=num%10;    //将整型数各位分离,并转换成对应的字符存入a中
  101.                             p[i]=w;           
  102.                             num=num/10;
  103.                             i++;
  104.               }while(num);
  105.     p[i]='s';
  106. }
  107. //将小数数部分转换成对应的
  108. void ITOAX(int num,uchar *p)         
  109. {
  110.               uchar w,i=0;
  111.     do
  112.               {
  113.                             w=num%10;    //将整型数各位分离,并转换成对应的字符存入a中
  114.                             p[i]=w;           
  115.                             num=num/10;
  116.                             i++;
  117.               }while(num);
  118.               while(i<2)
  119.               {p[i]=0;i++;}
  120.               p[i]='s';
  121.      w=p[i];
  122. }
  123. //显示译码函数
  124. void decode(uchar *n,uchar *dn)
  125. {uchar i;
  126. for(i=0; n[i]!='s';i++)
  127.   {switch( n[i])
  128.    {case 0: dn[i]=0x3F;break;
  129.     case 1: dn[i]=0x06;break;
  130.     case 2: dn[i]=0x5B;break;
  131.     case 9: dn[i]=0x6F;break;
  132.     case 3: dn[i]=0x4F;break;
  133.     case 4: dn[i]=0x66;break;
  134.     case 5: dn[i]=0x6D;break;
  135.     case 6: dn[i]=0x7D;break;
  136.     case 7: dn[i]=0x07;break;
  137.     case 8: dn[i]=0x7F;break;
  138.     case 46: dn[i]=0x80;break;
  139.     case'-':dn[i]=0x40;break;
  140.     default:dn[i]=0x00;break;
  141.     }
  142.   }
  143.   dn[i]='s';
  144. }
  145. /************************************************/
  146. /************************************************/

  147. /********************主换函数********************/
  148. /************************************************/
  149. void main(void)
  150. {
  151. uchar i,j,P2_;
  152. float A;
  153. while(1)
  154. {
  155. U=ReadADC(0)/256.0;
  156. switch(P1)
  157. {case 0xfe:A=U*10*1.025;break;
  158. case 0xfd:A=U*100/1.09;break;
  159. ……………………
  160. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


  • 调试及设计结果
    • PROTUSE系统仿真结果
   系统仿真能正常运行,达设计所有指标,仿真部分电路如下:
PROTUSE系统仿真效果图
2实际硬件制作结果
  根据电路图自制电路,测试结果:能正常测量10——1000mA电流,达大部分设计要求。


参考文献:

[1]  单片机原理与应用技术,清华大学出版社。

[2]  电子技术基础(模拟部分、数字部分). 北京:高等教育出版社,2006.01

[3]  大学生电子设计与应用.北京:中国电力出版社,2007.03

完整的Word格式文档51黑下载地址:
基于51单片机的数字电流表设计.doc (188 KB, 下载次数: 147)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:341424 发表于 2018-5-31 16:50 | 只看该作者
你那p0口接的是阻排吗?
回复

使用道具 举报

板凳
ID:348530 发表于 2018-6-10 23:37 来自手机 | 只看该作者
守炉小童 发表于 2018-5-31 16:50
你那p0口接的是阻排吗?

你好,请问一下那个AD转化器件叫什么呀
回复

使用道具 举报

地板
ID:348530 发表于 2018-6-10 23:39 来自手机 | 只看该作者
你好,AD转化器,adc0832和图上的为什么不一样呢?
回复

使用道具 举报

5#
ID:346075 发表于 2018-6-11 16:49 | 只看该作者
有没有压缩包
回复

使用道具 举报

6#
ID:351137 发表于 2018-6-13 15:28 来自手机 | 只看该作者
我想知道放大电路和开关那的电阻值分别是多少?看不清楚,也不会算
回复

使用道具 举报

7#
ID:351137 发表于 2018-6-13 15:29 来自手机 | 只看该作者
笨笨啊 发表于 2018-6-10 23:37
你好,请问一下那个AD转化器件叫什么呀

ADC0832
回复

使用道具 举报

8#
ID:435005 发表于 2018-11-28 15:17 | 只看该作者
跪求贴主或者有附件的人能不能把附件邮箱发我!!谢谢!952648165@qq.com
回复

使用道具 举报

9#
ID:444822 发表于 2018-12-12 14:09 来自手机 | 只看该作者
求完整代码QQ379258257
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表